/* * (C)opyright 2005 Michael Richardson * (C)opyright 2007 Paul Wouters * (C)opyright 2009 Avesh Agarwal * (C)opyright 2012-2014 Paul Wouters */ #include "md5.h" #include #include "lswlog.h" /* MD5 initialization. Begins an MD5 operation, writing a new context. */ void osMD5Init(context) MD5_CTX * context; /* context */ { SECStatus status; context->ctx_nss = PK11_CreateDigestContext(SEC_OID_MD5); passert(context->ctx_nss != NULL); status = PK11_DigestBegin(context->ctx_nss); passert(status == SECSuccess); } /* MD5 block update operation. Continues an MD5 message-digest operation, processing another message block, and updating the context. */ void osMD5Update(context, input, inputLen) MD5_CTX * context; /* context */ const unsigned char *input; /* input block */ u_int32_t inputLen; /* length of input block */ { SECStatus status = PK11_DigestOp(context->ctx_nss, input, inputLen); passert(status == SECSuccess); } /* MD5 finalization. Ends an MD5 message-digest operation, writing the the message digest and zeroizing the context. */ void osMD5Final(digest, context) unsigned char digest[16]; /* message digest */ MD5_CTX *context; /* context */ { unsigned int length; SECStatus status = PK11_DigestFinal(context->ctx_nss, digest, &length, MD5_DIGEST_SIZE); passert(status == SECSuccess); passert(length == MD5_DIGEST_SIZE); PK11_DestroyContext(context->ctx_nss, PR_TRUE); }