21.03.2013 Views

Problem - Kevin Tafuro

Problem - Kevin Tafuro

Problem - Kevin Tafuro

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Here’s a pair of functions that do all-in-one wrapping of the OpenSSLEVP message<br />

digest interface:<br />

#include <br />

#include <br />

#include <br />

unsigned char *spc_create_nonced_digest(EVP_MD *type, unsigned char *in,<br />

unsigned long n, unsigned int *outlen) {<br />

int bsz, dlen;<br />

EVP_MD_CTX ctx;<br />

unsigned char *pad, *ret;<br />

EVP_DigestInit(&ctx, type);<br />

dlen = EVP_MD_CTX_size(&ctx);<br />

if (!(ret = (unsigned char *)malloc(dlen * 2))) return 0;<br />

RAND_bytes(ret, dlen);<br />

EVP_DigestUpdate(&ctx, ret, dlen);<br />

bsz = EVP_MD_CTX_block_size(&ctx);<br />

if (!(pad = (unsigned char *)malloc(bsz - dlen))) {<br />

free(ret);<br />

return 0;<br />

}<br />

memset(pad, 0, bsz - dlen);<br />

EVP_DigestUpdate(&ctx, pad, bsz - dlen);<br />

EVP_DigestUpdate(&ctx, in, n);<br />

EVP_DigestUpdate(&ctx, ret, dlen);<br />

EVP_DigestUpdate(&ctx, pad, bsz - dlen);<br />

free(pad);<br />

EVP_DigestFinal(&ctx, ret + dlen, outlen);<br />

*outlen *= 2;<br />

return ret;<br />

}<br />

int spc_verify_nonced_digest(EVP_MD *type, unsigned char *in, unsigned long n,<br />

unsigned char *toverify) {<br />

int dlen, outlen, bsz, i;<br />

EVP_MD_CTX ctx;<br />

unsigned char *pad, *vfy;<br />

EVP_DigestInit(&ctx, type);<br />

bsz = EVP_MD_CTX_block_size(&ctx);<br />

dlen = EVP_MD_CTX_size(&ctx);<br />

EVP_DigestUpdate(&ctx, toverify, dlen);<br />

if (!(pad = (unsigned char *)malloc(bsz - dlen))) return 0;<br />

memset(pad, 0, bsz - dlen);<br />

EVP_DigestUpdate(&ctx, pad, bsz - dlen);<br />

EVP_DigestUpdate(&ctx, in, n);<br />

EVP_DigestUpdate(&ctx, toverify, dlen);<br />

EVP_DigestUpdate(&ctx, pad, bsz - dlen);<br />

free(pad);<br />

272 | Chapter 6: Hashes and Message Authentication<br />

This is the Title of the Book, eMatter Edition<br />

Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!