mdigest.c

Go to the documentation of this file.
00001 /***************************************************************************
00002  $RCSfile$
00003                              -------------------
00004     cvs         : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $
00005     begin       : Wed Mar 16 2005
00006     copyright   : (C) 2005 by Martin Preuss
00007     email       : martin@libchipcard.de
00008 
00009  ***************************************************************************
00010  *          Please see toplevel file COPYING for license details           *
00011  ***************************************************************************/
00012 
00013 #ifdef HAVE_CONFIG_H
00014 # include <config.h>
00015 #endif
00016 
00017 
00018 #include "mdigest_p.h"
00019 #include <gwenhywfar/misc.h>
00020 #include <gwenhywfar/debug.h>
00021 
00022 
00023 
00024 
00025 GWEN_INHERIT_FUNCTIONS(GWEN_MDIGEST)
00026 GWEN_LIST_FUNCTIONS(GWEN_MDIGEST, GWEN_MDigest)
00027 GWEN_LIST2_FUNCTIONS(GWEN_MDIGEST, GWEN_MDigest)
00028 
00029 
00030 
00031 
00032 
00033 GWEN_MDIGEST *GWEN_MDigest_new(GWEN_CRYPT_HASHALGOID a) {
00034   GWEN_MDIGEST *md;
00035 
00036   GWEN_NEW_OBJECT(GWEN_MDIGEST, md)
00037   md->refCount=1;
00038   GWEN_INHERIT_INIT(GWEN_MDIGEST, md)
00039   GWEN_LIST_INIT(GWEN_MDIGEST, md)
00040 
00041   md->hashAlgoId=a;
00042   return md;
00043 }
00044 
00045 
00046 
00047 void GWEN_MDigest_free(GWEN_MDIGEST *md) {
00048   if (md) {
00049     assert(md->refCount);
00050     if (md->refCount==1) {
00051       free(md->pDigest);
00052       md->refCount=0;
00053       GWEN_FREE_OBJECT(md);
00054     }
00055     else
00056       md->refCount--;
00057   }
00058 }
00059 
00060 
00061 
00062 GWEN_CRYPT_HASHALGOID GWEN_MDigest_GetHashAlgoId(const GWEN_MDIGEST *md) {
00063   assert(md);
00064   assert(md->refCount);
00065   return md->hashAlgoId;
00066 }
00067 
00068 
00069 
00070 uint8_t *GWEN_MDigest_GetDigestPtr(GWEN_MDIGEST *md) {
00071   assert(md);
00072   assert(md->refCount);
00073   return md->pDigest;
00074 }
00075 
00076 
00077 
00078 unsigned int GWEN_MDigest_GetDigestSize(GWEN_MDIGEST *md) {
00079   assert(md);
00080   assert(md->refCount);
00081   return md->lDigest;
00082 }
00083 
00084 
00085 
00086 void GWEN_MDigest_SetDigestBuffer(GWEN_MDIGEST *md, uint8_t *buf, unsigned int l) {
00087   assert(md);
00088   assert(md->refCount);
00089 
00090   if (l) {
00091     assert(buf);
00092   }
00093 
00094   if (md->pDigest && md->lDigest)
00095     free(md->pDigest);
00096   md->pDigest=buf;
00097   md->lDigest=l;
00098 }
00099 
00100 
00101 
00102 void GWEN_MDigest_SetDigestLen(GWEN_MDIGEST *md, unsigned int l) {
00103   assert(md);
00104   assert(md->refCount);
00105 
00106   if (md->pDigest && md->lDigest)
00107     free(md->pDigest);
00108   md->pDigest=NULL;
00109   md->lDigest=l;
00110 }
00111 
00112 
00113 
00114 int GWEN_MDigest_Begin(GWEN_MDIGEST *md) {
00115   assert(md);
00116   assert(md->refCount);
00117   if (md->beginFn)
00118     return md->beginFn(md);
00119   else
00120     return GWEN_ERROR_NOT_IMPLEMENTED;
00121 }
00122 
00123 
00124 
00125 int GWEN_MDigest_End(GWEN_MDIGEST *md) {
00126   assert(md);
00127   assert(md->refCount);
00128   if (md->endFn)
00129     return md->endFn(md);
00130   else
00131     return GWEN_ERROR_NOT_IMPLEMENTED;
00132 }
00133 
00134 
00135 
00136 int GWEN_MDigest_Update(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l) {
00137   assert(md);
00138   assert(md->refCount);
00139   if (md->updateFn)
00140     return md->updateFn(md, buf, l);
00141   else
00142     return GWEN_ERROR_NOT_IMPLEMENTED;
00143 }
00144 
00145 
00146 
00147 GWEN_MDIGEST_BEGIN_FN GWEN_MDigest_SetBeginFn(GWEN_MDIGEST *md, GWEN_MDIGEST_BEGIN_FN f) {
00148   GWEN_MDIGEST_BEGIN_FN of;
00149 
00150   assert(md);
00151   assert(md->refCount);
00152   of=md->beginFn;
00153   md->beginFn=f;
00154 
00155   return of;
00156 }
00157 
00158 
00159 
00160 GWEN_MDIGEST_END_FN GWEN_MDigest_SetEndFn(GWEN_MDIGEST *md, GWEN_MDIGEST_END_FN f) {
00161   GWEN_MDIGEST_END_FN of;
00162 
00163   assert(md);
00164   assert(md->refCount);
00165   of=md->endFn;
00166   md->endFn=f;
00167 
00168   return of;
00169 }
00170 
00171 
00172 
00173 GWEN_MDIGEST_UPDATE_FN GWEN_MDigest_SetUpdateFn(GWEN_MDIGEST *md, GWEN_MDIGEST_UPDATE_FN f) {
00174   GWEN_MDIGEST_UPDATE_FN of;
00175 
00176   assert(md);
00177   assert(md->refCount);
00178   of=md->updateFn;
00179   md->updateFn=f;
00180 
00181   return of;
00182 }
00183 
00184 
00185 
Generated on Mon Jul 5 22:52:48 2010 for gwenhywfar by  doxygen 1.6.3