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 int GWEN_MDigest_Begin(GWEN_MDIGEST *md) {
00103 assert(md);
00104 assert(md->refCount);
00105 if (md->beginFn)
00106 return md->beginFn(md);
00107 else
00108 return GWEN_ERROR_NOT_IMPLEMENTED;
00109 }
00110
00111
00112
00113 int GWEN_MDigest_End(GWEN_MDIGEST *md) {
00114 assert(md);
00115 assert(md->refCount);
00116 if (md->endFn)
00117 return md->endFn(md);
00118 else
00119 return GWEN_ERROR_NOT_IMPLEMENTED;
00120 }
00121
00122
00123
00124 int GWEN_MDigest_Update(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l) {
00125 assert(md);
00126 assert(md->refCount);
00127 if (md->updateFn)
00128 return md->updateFn(md, buf, l);
00129 else
00130 return GWEN_ERROR_NOT_IMPLEMENTED;
00131 }
00132
00133
00134
00135 GWEN_MDIGEST_BEGIN_FN GWEN_MDigest_SetBeginFn(GWEN_MDIGEST *md, GWEN_MDIGEST_BEGIN_FN f) {
00136 GWEN_MDIGEST_BEGIN_FN of;
00137
00138 assert(md);
00139 assert(md->refCount);
00140 of=md->beginFn;
00141 md->beginFn=f;
00142
00143 return of;
00144 }
00145
00146
00147
00148 GWEN_MDIGEST_END_FN GWEN_MDigest_SetEndFn(GWEN_MDIGEST *md, GWEN_MDIGEST_END_FN f) {
00149 GWEN_MDIGEST_END_FN of;
00150
00151 assert(md);
00152 assert(md->refCount);
00153 of=md->endFn;
00154 md->endFn=f;
00155
00156 return of;
00157 }
00158
00159
00160
00161 GWEN_MDIGEST_UPDATE_FN GWEN_MDigest_SetUpdateFn(GWEN_MDIGEST *md, GWEN_MDIGEST_UPDATE_FN f) {
00162 GWEN_MDIGEST_UPDATE_FN of;
00163
00164 assert(md);
00165 assert(md->refCount);
00166 of=md->updateFn;
00167 md->updateFn=f;
00168
00169 return of;
00170 }
00171
00172
00173