mdigest.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
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