- return SSLFreeBuffer(state, ctx);
-}
-
-
-/*** NULL ***/
-static OSStatus HashNullInit(SSLBuffer *digestCtx, SSLContext *sslCtx) {
- return noErr;
-}
-static OSStatus HashNullUpdate(SSLBuffer *digestCtx, const SSLBuffer *data) {
- return noErr;
-}
-static OSStatus HashNullFinal(SSLBuffer *digestCtx, SSLBuffer *digest) {
- return noErr;
-}
-static OSStatus HashNullClose(SSLBuffer *digestCtx, SSLContext *sslCtx) {
- return noErr;
-}
-static OSStatus HashNullClone(const SSLBuffer *src, SSLBuffer *dest) {
- return noErr;
-}
-
-/*** MD5 ***/
-static OSStatus HashMD5Init(SSLBuffer *digestCtx, SSLContext *sslCtx)
-{
- assert(digestCtx->length >= sizeof(CC_MD5_CTX));
- CC_MD5_CTX *ctx = (CC_MD5_CTX *)digestCtx->data;
- CC_MD5_Init(ctx);
- dgprintf(("###HashMD5Init ctx %p\n", ctx));
- return noErr;
-}
-
-static OSStatus HashMD5Update(SSLBuffer *digestCtx, const SSLBuffer *data)
-{
- /* 64 bits cast: safe, SSL records are always smaller than 2^32 bytes */
- assert(digestCtx->length >= sizeof(CC_MD5_CTX));
- CC_MD5_CTX *ctx = (CC_MD5_CTX *)digestCtx->data;
- CC_MD5_Update(ctx, data->data, (CC_LONG)data->length);
- return noErr;
-}
-
-static OSStatus HashMD5Final(SSLBuffer *digestCtx, SSLBuffer *digest)
-{
- assert(digestCtx->length >= sizeof(CC_MD5_CTX));
- CC_MD5_CTX *ctx = (CC_MD5_CTX *)digestCtx->data;
- dgprintf(("###HashMD5Final ctx %p\n", ctx));
- assert(digest->length >= CC_MD5_DIGEST_LENGTH);
- //if (digest->length < CC_MD5_DIGEST_LENGTH)
- // return errSSLCrypto;
- CC_MD5_Final(digest->data, ctx);
- digest->length = CC_MD5_DIGEST_LENGTH;
- return noErr;
-}
-
-static OSStatus HashMD5Close(SSLBuffer *digestCtx, SSLContext *sslCtx)
-{
- assert(digestCtx->length >= sizeof(CC_MD5_CTX));
- return noErr;
-}
-
-static OSStatus HashMD5Clone(const SSLBuffer *src, SSLBuffer *dst)
-{
- CC_MD5_CTX *srcCtx;
- CC_MD5_CTX *dstCtx;
-
- assert(src->length >= sizeof(CC_MD5_CTX));
- assert(dst->length >= sizeof(CC_MD5_CTX));
-
- srcCtx = (CC_MD5_CTX *)src->data;
- dstCtx = (CC_MD5_CTX *)dst->data;
- dgprintf(("###HashMD5Clone srcCtx %p dstCtx %p\n", srcCtx, dstCtx));
-
- memcpy(dstCtx, srcCtx, sizeof(CC_MD5_CTX));
- return noErr;
-}
-
-/*** SHA1 ***/
-static OSStatus HashSHA1Init(SSLBuffer *digestCtx, SSLContext *sslCtx)
-{
- assert(digestCtx->length >= sizeof(CC_SHA1_CTX));
- CC_SHA1_CTX *ctx = (CC_SHA1_CTX *)digestCtx->data;
- CC_SHA1_Init(ctx);
- dgprintf(("###HashSHA1Init ctx %p\n", ctx));
- return noErr;
-}
-
-static OSStatus HashSHA1Update(SSLBuffer *digestCtx, const SSLBuffer *data)
-{
- /* 64 bits cast: safe, SSL records are always smaller than 2^32 bytes */
- assert(digestCtx->length >= sizeof(CC_SHA1_CTX));
- CC_SHA1_CTX *ctx = (CC_SHA1_CTX *)digestCtx->data;
- CC_SHA1_Update(ctx, data->data, (CC_LONG)data->length);
- return noErr;
-}
-
-static OSStatus HashSHA1Final(SSLBuffer *digestCtx, SSLBuffer *digest)
-{
- assert(digestCtx->length >= sizeof(CC_SHA1_CTX));
- CC_SHA1_CTX *ctx = (CC_SHA1_CTX *)digestCtx->data;
- dgprintf(("###HashSHA1Final ctx %p\n", ctx));
- assert(digest->length >= CC_SHA1_DIGEST_LENGTH);
- //if (digest->length < CC_SHA1_DIGEST_LENGTH)
- // return errSSLCrypto;
- CC_SHA1_Final(digest->data, ctx);
- digest->length = CC_SHA1_DIGEST_LENGTH;
- return noErr;
-}
-
-static OSStatus HashSHA1Close(SSLBuffer *digestCtx, SSLContext *sslCtx)
-{
- assert(digestCtx->length >= sizeof(CC_SHA1_CTX));
- return noErr;
-}
-
-static OSStatus HashSHA1Clone(const SSLBuffer *src, SSLBuffer *dst)
-{
- CC_SHA1_CTX *srcCtx;
- CC_SHA1_CTX *dstCtx;
-
- assert(src->length >= sizeof(CC_SHA1_CTX));
- assert(dst->length >= sizeof(CC_SHA1_CTX));
-
- srcCtx = (CC_SHA1_CTX *)src->data;
- dstCtx = (CC_SHA1_CTX *)dst->data;
- dgprintf(("###HashSHA1Clone srcCtx %p dstCtx %p\n", srcCtx, dstCtx));
-
- memcpy(dstCtx, srcCtx, sizeof(CC_SHA1_CTX));
- return noErr;
-}
-
-/*** SHA256 ***/
-static OSStatus HashSHA256Init(SSLBuffer *digestCtx, SSLContext *sslCtx)
-{
- assert(digestCtx->length >= sizeof(CC_SHA256_CTX));
- CC_SHA256_CTX *ctx = (CC_SHA256_CTX *)digestCtx->data;
- CC_SHA256_Init(ctx);
- dgprintf(("###HashSHA256Init ctx %p\n", ctx));
- return noErr;
-}
-
-static OSStatus HashSHA256Update(SSLBuffer *digestCtx, const SSLBuffer *data)
-{
- /* 64 bits cast: safe, SSL records are always smaller than 2^32 bytes */
- assert(digestCtx->length >= sizeof(CC_SHA256_CTX));
- CC_SHA256_CTX *ctx = (CC_SHA256_CTX *)digestCtx->data;
- CC_SHA256_Update(ctx, data->data, (CC_LONG)data->length);
- return noErr;
-}
-
-static OSStatus HashSHA256Final(SSLBuffer *digestCtx, SSLBuffer *digest)
-{
- assert(digestCtx->length >= sizeof(CC_SHA256_CTX));
- CC_SHA256_CTX *ctx = (CC_SHA256_CTX *)digestCtx->data;
- dgprintf(("###HashSHA256Final ctx %p\n", ctx));
- assert(digest->length >= CC_SHA256_DIGEST_LENGTH);
- //if (digest->length < CC_SHA256_DIGEST_LENGTH)
- // return errSSLCrypto;
- CC_SHA256_Final(digest->data, ctx);
- digest->length = CC_SHA256_DIGEST_LENGTH;
- return noErr;
-}
-
-static OSStatus HashSHA256Close(SSLBuffer *digestCtx, SSLContext *sslCtx)
-{
- assert(digestCtx->length >= sizeof(CC_SHA256_CTX));
- return noErr;
-}
-
-static OSStatus HashSHA256Clone(const SSLBuffer *src, SSLBuffer *dst)
-{
- CC_SHA256_CTX *srcCtx;
- CC_SHA256_CTX *dstCtx;
-
- assert(src->length >= sizeof(CC_SHA256_CTX));
- assert(dst->length >= sizeof(CC_SHA256_CTX));
-
- srcCtx = (CC_SHA256_CTX *)src->data;
- dstCtx = (CC_SHA256_CTX *)dst->data;
- dgprintf(("###HashSHA256Clone srcCtx %p dstCtx %p\n", srcCtx, dstCtx));
-
- memcpy(dstCtx, srcCtx, sizeof(CC_SHA256_CTX));
- return noErr;
-}
-
-/*** SHA384 ***/
-static OSStatus HashSHA384Init(SSLBuffer *digestCtx, SSLContext *sslCtx)
-{
- assert(digestCtx->length >= sizeof(CC_SHA512_CTX));
- CC_SHA512_CTX *ctx = (CC_SHA512_CTX *)digestCtx->data;
- CC_SHA384_Init(ctx);
- dgprintf(("###HashSHA384Init ctx %p\n", ctx));
- return noErr;
-}
-
-static OSStatus HashSHA384Update(SSLBuffer *digestCtx, const SSLBuffer *data)
-{
- /* 64 bits cast: safe, SSL records are always smaller than 2^32 bytes */
- assert(digestCtx->length >= sizeof(CC_SHA512_CTX));
- CC_SHA512_CTX *ctx = (CC_SHA512_CTX *)digestCtx->data;
- CC_SHA384_Update(ctx, data->data, (CC_LONG)data->length);
- return noErr;
-}
-
-static OSStatus HashSHA384Final(SSLBuffer *digestCtx, SSLBuffer *digest)
-{
- assert(digestCtx->length >= sizeof(CC_SHA512_CTX));
- CC_SHA512_CTX *ctx = (CC_SHA512_CTX *)digestCtx->data;
- dgprintf(("###HashSHA384Final ctx %p\n", ctx));
- assert(digest->length >= CC_SHA384_DIGEST_LENGTH);
- //if (digest->length < CC_SHA384_DIGEST_LENGTH)
- // return errSSLCrypto;
- CC_SHA384_Final(digest->data, ctx);
- digest->length = CC_SHA384_DIGEST_LENGTH;
- return noErr;
-}
-
-static OSStatus HashSHA384Close(SSLBuffer *digestCtx, SSLContext *sslCtx)
-{
- assert(digestCtx->length >= sizeof(CC_SHA512_CTX));
- return noErr;