| Index: mozilla/security/nss/lib/cryptohi/sechash.c | 
| =================================================================== | 
| --- mozilla/security/nss/lib/cryptohi/sechash.c	(revision 191424) | 
| +++ mozilla/security/nss/lib/cryptohi/sechash.c	(working copy) | 
| @@ -1,409 +0,0 @@ | 
| -/* This Source Code Form is subject to the terms of the Mozilla Public | 
| - * License, v. 2.0. If a copy of the MPL was not distributed with this | 
| - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 
| -#include "sechash.h" | 
| -#include "secoidt.h" | 
| -#include "secerr.h" | 
| -#include "blapi.h" | 
| -#include "pk11func.h"	/* for the PK11_ calls below. */ | 
| - | 
| -static void * | 
| -null_hash_new_context(void) | 
| -{ | 
| -    return NULL; | 
| -} | 
| - | 
| -static void * | 
| -null_hash_clone_context(void *v) | 
| -{ | 
| -    PORT_Assert(v == NULL); | 
| -    return NULL; | 
| -} | 
| - | 
| -static void | 
| -null_hash_begin(void *v) | 
| -{ | 
| -} | 
| - | 
| -static void | 
| -null_hash_update(void *v, const unsigned char *input, unsigned int length) | 
| -{ | 
| -} | 
| - | 
| -static void | 
| -null_hash_end(void *v, unsigned char *output, unsigned int *outLen, | 
| -	      unsigned int maxOut) | 
| -{ | 
| -    *outLen = 0; | 
| -} | 
| - | 
| -static void | 
| -null_hash_destroy_context(void *v, PRBool b) | 
| -{ | 
| -    PORT_Assert(v == NULL); | 
| -} | 
| - | 
| - | 
| -static void * | 
| -md2_NewContext(void) { | 
| -	return (void *) PK11_CreateDigestContext(SEC_OID_MD2); | 
| -} | 
| - | 
| -static void * | 
| -md5_NewContext(void) { | 
| -	return (void *) PK11_CreateDigestContext(SEC_OID_MD5); | 
| -} | 
| - | 
| -static void * | 
| -sha1_NewContext(void) { | 
| -	return (void *) PK11_CreateDigestContext(SEC_OID_SHA1); | 
| -} | 
| - | 
| -static void * | 
| -sha224_NewContext(void) { | 
| -	return (void *) PK11_CreateDigestContext(SEC_OID_SHA224); | 
| -} | 
| - | 
| -static void * | 
| -sha256_NewContext(void) { | 
| -	return (void *) PK11_CreateDigestContext(SEC_OID_SHA256); | 
| -} | 
| - | 
| -static void * | 
| -sha384_NewContext(void) { | 
| -	return (void *) PK11_CreateDigestContext(SEC_OID_SHA384); | 
| -} | 
| - | 
| -static void * | 
| -sha512_NewContext(void) { | 
| -	return (void *) PK11_CreateDigestContext(SEC_OID_SHA512); | 
| -} | 
| - | 
| -const SECHashObject SECHashObjects[] = { | 
| -  { 0, | 
| -    (void * (*)(void)) null_hash_new_context, | 
| -    (void * (*)(void *)) null_hash_clone_context, | 
| -    (void (*)(void *, PRBool)) null_hash_destroy_context, | 
| -    (void (*)(void *)) null_hash_begin, | 
| -    (void (*)(void *, const unsigned char *, unsigned int)) null_hash_update, | 
| -    (void (*)(void *, unsigned char *, unsigned int *, | 
| -	      unsigned int)) null_hash_end, | 
| -    0, | 
| -    HASH_AlgNULL | 
| -  }, | 
| -  { MD2_LENGTH, | 
| -    (void * (*)(void)) md2_NewContext, | 
| -    (void * (*)(void *)) PK11_CloneContext, | 
| -    (void (*)(void *, PRBool)) PK11_DestroyContext, | 
| -    (void (*)(void *)) PK11_DigestBegin, | 
| -    (void (*)(void *, const unsigned char *, unsigned int)) PK11_DigestOp, | 
| -    (void (*)(void *, unsigned char *, unsigned int *, unsigned int)) | 
| -							PK11_DigestFinal, | 
| -    MD2_BLOCK_LENGTH, | 
| -    HASH_AlgMD2 | 
| -  }, | 
| -  { MD5_LENGTH, | 
| -    (void * (*)(void)) md5_NewContext, | 
| -    (void * (*)(void *)) PK11_CloneContext, | 
| -    (void (*)(void *, PRBool)) PK11_DestroyContext, | 
| -    (void (*)(void *)) PK11_DigestBegin, | 
| -    (void (*)(void *, const unsigned char *, unsigned int)) PK11_DigestOp, | 
| -    (void (*)(void *, unsigned char *, unsigned int *, unsigned int)) | 
| -							PK11_DigestFinal, | 
| -    MD5_BLOCK_LENGTH, | 
| -    HASH_AlgMD5 | 
| -  }, | 
| -  { SHA1_LENGTH, | 
| -    (void * (*)(void)) sha1_NewContext, | 
| -    (void * (*)(void *)) PK11_CloneContext, | 
| -    (void (*)(void *, PRBool)) PK11_DestroyContext, | 
| -    (void (*)(void *)) PK11_DigestBegin, | 
| -    (void (*)(void *, const unsigned char *, unsigned int)) PK11_DigestOp, | 
| -    (void (*)(void *, unsigned char *, unsigned int *, unsigned int)) | 
| -							PK11_DigestFinal, | 
| -    SHA1_BLOCK_LENGTH, | 
| -    HASH_AlgSHA1 | 
| -  }, | 
| -  { SHA256_LENGTH, | 
| -    (void * (*)(void)) sha256_NewContext, | 
| -    (void * (*)(void *)) PK11_CloneContext, | 
| -    (void (*)(void *, PRBool)) PK11_DestroyContext, | 
| -    (void (*)(void *)) PK11_DigestBegin, | 
| -    (void (*)(void *, const unsigned char *, unsigned int)) PK11_DigestOp, | 
| -    (void (*)(void *, unsigned char *, unsigned int *, unsigned int)) | 
| -							PK11_DigestFinal, | 
| -    SHA256_BLOCK_LENGTH, | 
| -    HASH_AlgSHA256 | 
| -  }, | 
| -  { SHA384_LENGTH, | 
| -    (void * (*)(void)) sha384_NewContext, | 
| -    (void * (*)(void *)) PK11_CloneContext, | 
| -    (void (*)(void *, PRBool)) PK11_DestroyContext, | 
| -    (void (*)(void *)) PK11_DigestBegin, | 
| -    (void (*)(void *, const unsigned char *, unsigned int)) PK11_DigestOp, | 
| -    (void (*)(void *, unsigned char *, unsigned int *, unsigned int)) | 
| -							PK11_DigestFinal, | 
| -    SHA384_BLOCK_LENGTH, | 
| -    HASH_AlgSHA384 | 
| -  }, | 
| -  { SHA512_LENGTH, | 
| -    (void * (*)(void)) sha512_NewContext, | 
| -    (void * (*)(void *)) PK11_CloneContext, | 
| -    (void (*)(void *, PRBool)) PK11_DestroyContext, | 
| -    (void (*)(void *)) PK11_DigestBegin, | 
| -    (void (*)(void *, const unsigned char *, unsigned int)) PK11_DigestOp, | 
| -    (void (*)(void *, unsigned char *, unsigned int *, unsigned int)) | 
| -							PK11_DigestFinal, | 
| -    SHA512_BLOCK_LENGTH, | 
| -    HASH_AlgSHA512 | 
| -  }, | 
| -  { SHA224_LENGTH, | 
| -    (void * (*)(void)) sha224_NewContext, | 
| -    (void * (*)(void *)) PK11_CloneContext, | 
| -    (void (*)(void *, PRBool)) PK11_DestroyContext, | 
| -    (void (*)(void *)) PK11_DigestBegin, | 
| -    (void (*)(void *, const unsigned char *, unsigned int)) PK11_DigestOp, | 
| -    (void (*)(void *, unsigned char *, unsigned int *, unsigned int)) | 
| -							PK11_DigestFinal, | 
| -    SHA224_BLOCK_LENGTH, | 
| -    HASH_AlgSHA224 | 
| -  }, | 
| -}; | 
| - | 
| -const SECHashObject * | 
| -HASH_GetHashObject(HASH_HashType type) | 
| -{ | 
| -    return &SECHashObjects[type]; | 
| -} | 
| - | 
| -HASH_HashType | 
| -HASH_GetHashTypeByOidTag(SECOidTag hashOid) | 
| -{ | 
| -    HASH_HashType ht	= HASH_AlgNULL; | 
| - | 
| -    switch(hashOid) { | 
| -    case SEC_OID_MD2:	 ht = HASH_AlgMD2;    break; | 
| -    case SEC_OID_MD5:	 ht = HASH_AlgMD5;    break; | 
| -    case SEC_OID_SHA1:	 ht = HASH_AlgSHA1;   break; | 
| -    case SEC_OID_SHA224: ht = HASH_AlgSHA224; break; | 
| -    case SEC_OID_SHA256: ht = HASH_AlgSHA256; break; | 
| -    case SEC_OID_SHA384: ht = HASH_AlgSHA384; break; | 
| -    case SEC_OID_SHA512: ht = HASH_AlgSHA512; break; | 
| -    default:             ht = HASH_AlgNULL; | 
| -	PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); | 
| -	break; | 
| -    } | 
| -    return ht; | 
| -} | 
| - | 
| -SECOidTag | 
| -HASH_GetHashOidTagByHMACOidTag(SECOidTag hmacOid) | 
| -{ | 
| -    SECOidTag hashOid = SEC_OID_UNKNOWN; | 
| - | 
| -    switch(hmacOid) { | 
| -    /* no oid exists for HMAC_MD2 */ | 
| -    /* NSS does not define a oid for HMAC_MD4 */ | 
| -    case SEC_OID_HMAC_SHA1:   hashOid = SEC_OID_SHA1;   break; | 
| -    case SEC_OID_HMAC_SHA224: hashOid = SEC_OID_SHA224; break; | 
| -    case SEC_OID_HMAC_SHA256: hashOid = SEC_OID_SHA256; break; | 
| -    case SEC_OID_HMAC_SHA384: hashOid = SEC_OID_SHA384; break; | 
| -    case SEC_OID_HMAC_SHA512: hashOid = SEC_OID_SHA512; break; | 
| -    default:                  hashOid = SEC_OID_UNKNOWN; | 
| -	PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); | 
| -	break; | 
| -    } | 
| -    return hashOid; | 
| -} | 
| - | 
| -SECOidTag | 
| -HASH_GetHMACOidTagByHashOidTag(SECOidTag hashOid) | 
| -{ | 
| -    SECOidTag hmacOid = SEC_OID_UNKNOWN; | 
| - | 
| -    switch(hashOid) { | 
| -    /* no oid exists for HMAC_MD2 */ | 
| -    /* NSS does not define a oid for HMAC_MD4 */ | 
| -    case SEC_OID_SHA1:   hmacOid = SEC_OID_HMAC_SHA1;   break; | 
| -    case SEC_OID_SHA224: hmacOid = SEC_OID_HMAC_SHA224; break; | 
| -    case SEC_OID_SHA256: hmacOid = SEC_OID_HMAC_SHA256; break; | 
| -    case SEC_OID_SHA384: hmacOid = SEC_OID_HMAC_SHA384; break; | 
| -    case SEC_OID_SHA512: hmacOid = SEC_OID_HMAC_SHA512; break; | 
| -    default:             hmacOid = SEC_OID_UNKNOWN; | 
| -	PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); | 
| -	break; | 
| -    } | 
| -    return hmacOid; | 
| -} | 
| - | 
| -const SECHashObject * | 
| -HASH_GetHashObjectByOidTag(SECOidTag hashOid) | 
| -{ | 
| -    HASH_HashType ht	= HASH_GetHashTypeByOidTag(hashOid); | 
| - | 
| -    return (ht == HASH_AlgNULL) ? NULL : &SECHashObjects[ht]; | 
| -} | 
| - | 
| -/* returns zero for unknown hash OID */ | 
| -unsigned int | 
| -HASH_ResultLenByOidTag(SECOidTag hashOid) | 
| -{ | 
| -    const SECHashObject * hashObject = HASH_GetHashObjectByOidTag(hashOid); | 
| -    unsigned int          resultLen = 0; | 
| - | 
| -    if (hashObject) | 
| -    	resultLen = hashObject->length; | 
| -    return resultLen; | 
| -} | 
| - | 
| -/* returns zero if hash type invalid. */ | 
| -unsigned int | 
| -HASH_ResultLen(HASH_HashType type) | 
| -{ | 
| -    if ( ( type < HASH_AlgNULL ) || ( type >= HASH_AlgTOTAL ) ) { | 
| -	PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); | 
| -	return(0); | 
| -    } | 
| - | 
| -    return(SECHashObjects[type].length); | 
| -} | 
| - | 
| -unsigned int | 
| -HASH_ResultLenContext(HASHContext *context) | 
| -{ | 
| -    return(context->hashobj->length); | 
| -} | 
| - | 
| - | 
| - | 
| -SECStatus | 
| -HASH_HashBuf(HASH_HashType type, | 
| -	     unsigned char *dest, | 
| -	     const unsigned char *src, | 
| -	     PRUint32 src_len) | 
| -{ | 
| -    HASHContext *cx; | 
| -    unsigned int part; | 
| - | 
| -    if ( ( type < HASH_AlgNULL ) || ( type >= HASH_AlgTOTAL ) ) { | 
| -	return(SECFailure); | 
| -    } | 
| - | 
| -    cx = HASH_Create(type); | 
| -    if ( cx == NULL ) { | 
| -	return(SECFailure); | 
| -    } | 
| -    HASH_Begin(cx); | 
| -    HASH_Update(cx, src, src_len); | 
| -    HASH_End(cx, dest, &part, HASH_ResultLenContext(cx)); | 
| -    HASH_Destroy(cx); | 
| - | 
| -    return(SECSuccess); | 
| -} | 
| - | 
| -HASHContext * | 
| -HASH_Create(HASH_HashType type) | 
| -{ | 
| -    void *hash_context = NULL; | 
| -    HASHContext *ret = NULL; | 
| - | 
| -    if ( ( type < HASH_AlgNULL ) || ( type >= HASH_AlgTOTAL ) ) { | 
| -	return(NULL); | 
| -    } | 
| - | 
| -    hash_context = (* SECHashObjects[type].create)(); | 
| -    if ( hash_context == NULL ) { | 
| -	goto loser; | 
| -    } | 
| - | 
| -    ret = (HASHContext *)PORT_Alloc(sizeof(HASHContext)); | 
| -    if ( ret == NULL ) { | 
| -	goto loser; | 
| -    } | 
| - | 
| -    ret->hash_context = hash_context; | 
| -    ret->hashobj = &SECHashObjects[type]; | 
| - | 
| -    return(ret); | 
| - | 
| -loser: | 
| -    if ( hash_context != NULL ) { | 
| -	(* SECHashObjects[type].destroy)(hash_context, PR_TRUE); | 
| -    } | 
| - | 
| -    return(NULL); | 
| -} | 
| - | 
| - | 
| -HASHContext * | 
| -HASH_Clone(HASHContext *context) | 
| -{ | 
| -    void *hash_context = NULL; | 
| -    HASHContext *ret = NULL; | 
| - | 
| -    hash_context = (* context->hashobj->clone)(context->hash_context); | 
| -    if ( hash_context == NULL ) { | 
| -	goto loser; | 
| -    } | 
| - | 
| -    ret = (HASHContext *)PORT_Alloc(sizeof(HASHContext)); | 
| -    if ( ret == NULL ) { | 
| -	goto loser; | 
| -    } | 
| - | 
| -    ret->hash_context = hash_context; | 
| -    ret->hashobj = context->hashobj; | 
| - | 
| -    return(ret); | 
| - | 
| -loser: | 
| -    if ( hash_context != NULL ) { | 
| -	(* context->hashobj->destroy)(hash_context, PR_TRUE); | 
| -    } | 
| - | 
| -    return(NULL); | 
| - | 
| -} | 
| - | 
| -void | 
| -HASH_Destroy(HASHContext *context) | 
| -{ | 
| -    (* context->hashobj->destroy)(context->hash_context, PR_TRUE); | 
| -    PORT_Free(context); | 
| -    return; | 
| -} | 
| - | 
| - | 
| -void | 
| -HASH_Begin(HASHContext *context) | 
| -{ | 
| -    (* context->hashobj->begin)(context->hash_context); | 
| -    return; | 
| -} | 
| - | 
| - | 
| -void | 
| -HASH_Update(HASHContext *context, | 
| -	    const unsigned char *src, | 
| -	    unsigned int len) | 
| -{ | 
| -    (* context->hashobj->update)(context->hash_context, src, len); | 
| -    return; | 
| -} | 
| - | 
| -void | 
| -HASH_End(HASHContext *context, | 
| -	 unsigned char *result, | 
| -	 unsigned int *result_len, | 
| -	 unsigned int max_result_len) | 
| -{ | 
| -    (* context->hashobj->end)(context->hash_context, result, result_len, | 
| -			      max_result_len); | 
| -    return; | 
| -} | 
| - | 
| -HASH_HashType | 
| -HASH_GetType(HASHContext *context) | 
| -{ | 
| -    return(context->hashobj->type); | 
| -} | 
|  |