-static SSLErr HashSHA1Update(SSLBuffer digestCtx, SSLBuffer data)
-{ SSL_SHA_INFO *ctx = (SSL_SHA_INFO*)digestCtx.data;
- uint32 dataRemaining, processed;
- uint8 *dataPos;
-
- CASSERT(digestCtx.length >= sizeof(SSL_SHA_INFO));
- dataRemaining = data.length;
- dataPos = data.data;
- while (dataRemaining > 0)
- { processed = SHA_BLOCKSIZE - ctx->bufferPos;
- if (dataRemaining < processed)
- processed = dataRemaining;
- memcpy(ctx->dataBuffer+ctx->bufferPos, dataPos, processed);
- ctx->bufferPos += processed;
- if (ctx->bufferPos == SHA_BLOCKSIZE)
- { sha_update(&ctx->sha, ctx->dataBuffer, ctx->bufferPos);
- ctx->bufferPos = 0;
- }
- dataRemaining -= processed;
- dataPos += processed;
- }
- //DUMP_BUFFER_PTR("SHA1 data", digestCtx.data, data);
- return SSLNoErr;
+static SSLErr cdsaHashFinal(SSLBuffer digestCtx, SSLBuffer digest)
+{
+ cdsaHashContext *cdsaCtx;
+ CSSM_RETURN crtn;
+ CSSM_DATA cdata;
+ SSLErr srtn = SSLNoErr;
+
+ CASSERT(digestCtx.length >= sizeof(cdsaHashContext));
+ cdsaCtx = (cdsaHashContext *)digestCtx.data;
+ dgprintf(("###cdsaHashFinal cdsaCtx %p\n", cdsaCtx));
+ SSLBUF_TO_CSSM(&digest, &cdata);
+ crtn = CSSM_DigestDataFinal(cdsaCtx->hashHand, &cdata);
+ if(crtn) {
+ errorLog0("CSSM_DigestDataFinal failure\n");
+ srtn = SSLCryptoError;
+ }
+ else {
+ digest.length = cdata.Length;
+ }
+ CSSM_DeleteContext(cdsaCtx->hashHand);
+ cdsaCtx->hashHand = 0;
+ return srtn;