#include #include #include #include #include unsigned char data[16]; unsigned char output[16]; void HexDump(char *buffer, int bytes) { int col = 0; int i; char buff[18]; while (bytes--) { printf("%02x ", (unsigned char)*buffer); // print byte value if (isgraph(*buffer)) sprintf(buff+col, "%c", (unsigned char)*buffer); else sprintf(buff+col, "."); if (col == 15 || bytes == 0) { if (bytes == 0) { // end of buffer, figure out how many we are short. for (i = 0; i < 15-col; i++) printf(" "); } printf(" %s\n", buff); col = 0; } else col++; buffer++; } } void ossl_md2(void) { MD2_CTX ctx; memcpy(data, "", 16); MD2_Init(&ctx); MD2_Update(&ctx, data, 16); MD2_Update(&ctx, data, 16); MD2_Final(output, &ctx ); } void nss_md2(void) { PK11Context *context = 0; int len; memcpy(data, "", 16); context = PK11_CreateDigestContext(SEC_OID_MD2); PK11_DigestBegin(context); PK11_DigestOp(context, data, 16); PK11_DigestOp(context, data, 16); PK11_DigestFinal(context, output, &len, 16); PK11_DestroyContext(context, PR_TRUE); } int main(void) { NSS_NoDB_Init("."); ossl_md2(); HexDump((char *)output, 16); nss_md2(); HexDump((char *)output, 16); return 0; }