| /* 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/. */ |
| |
| #ifdef FREEBL_NO_DEPEND |
| #include "stubs.h" |
| #endif |
| |
| #include "nspr.h" |
| #include "hasht.h" |
| #include "blapi.h" /* below the line */ |
| #include "secerr.h" |
| |
| 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); |
| } |
| |
| |
| const SECHashObject SECRawHashObjects[] = { |
| { 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, |
| (void (*)(void *, unsigned char *, unsigned int *, |
| unsigned int)) null_hash_end |
| }, |
| { MD2_LENGTH, |
| (void * (*)(void)) MD2_NewContext, |
| (void * (*)(void *)) null_hash_clone_context, |
| (void (*)(void *, PRBool)) MD2_DestroyContext, |
| (void (*)(void *)) MD2_Begin, |
| (void (*)(void *, const unsigned char *, unsigned int)) MD2_Update, |
| (void (*)(void *, unsigned char *, unsigned int *, unsigned int)) MD2_End, |
| MD2_BLOCK_LENGTH, |
| HASH_AlgMD2, |
| NULL /* end_raw */ |
| }, |
| { MD5_LENGTH, |
| (void * (*)(void)) MD5_NewContext, |
| (void * (*)(void *)) null_hash_clone_context, |
| (void (*)(void *, PRBool)) MD5_DestroyContext, |
| (void (*)(void *)) MD5_Begin, |
| (void (*)(void *, const unsigned char *, unsigned int)) MD5_Update, |
| (void (*)(void *, unsigned char *, unsigned int *, unsigned int)) MD5_End, |
| MD5_BLOCK_LENGTH, |
| HASH_AlgMD5, |
| (void (*)(void *, unsigned char *, unsigned int *, unsigned int)) MD5_EndRaw |
| }, |
| { SHA1_LENGTH, |
| (void * (*)(void)) SHA1_NewContext, |
| (void * (*)(void *)) null_hash_clone_context, |
| (void (*)(void *, PRBool)) SHA1_DestroyContext, |
| (void (*)(void *)) SHA1_Begin, |
| (void (*)(void *, const unsigned char *, unsigned int)) SHA1_Update, |
| (void (*)(void *, unsigned char *, unsigned int *, unsigned int)) SHA1_End, |
| SHA1_BLOCK_LENGTH, |
| HASH_AlgSHA1, |
| (void (*)(void *, unsigned char *, unsigned int *, unsigned int)) |
| SHA1_EndRaw |
| }, |
| { SHA256_LENGTH, |
| (void * (*)(void)) SHA256_NewContext, |
| (void * (*)(void *)) null_hash_clone_context, |
| (void (*)(void *, PRBool)) SHA256_DestroyContext, |
| (void (*)(void *)) SHA256_Begin, |
| (void (*)(void *, const unsigned char *, unsigned int)) SHA256_Update, |
| (void (*)(void *, unsigned char *, unsigned int *, |
| unsigned int)) SHA256_End, |
| SHA256_BLOCK_LENGTH, |
| HASH_AlgSHA256, |
| (void (*)(void *, unsigned char *, unsigned int *, |
| unsigned int)) SHA256_EndRaw |
| }, |
| { SHA384_LENGTH, |
| (void * (*)(void)) SHA384_NewContext, |
| (void * (*)(void *)) null_hash_clone_context, |
| (void (*)(void *, PRBool)) SHA384_DestroyContext, |
| (void (*)(void *)) SHA384_Begin, |
| (void (*)(void *, const unsigned char *, unsigned int)) SHA384_Update, |
| (void (*)(void *, unsigned char *, unsigned int *, |
| unsigned int)) SHA384_End, |
| SHA384_BLOCK_LENGTH, |
| HASH_AlgSHA384, |
| (void (*)(void *, unsigned char *, unsigned int *, |
| unsigned int)) SHA384_EndRaw |
| }, |
| { SHA512_LENGTH, |
| (void * (*)(void)) SHA512_NewContext, |
| (void * (*)(void *)) null_hash_clone_context, |
| (void (*)(void *, PRBool)) SHA512_DestroyContext, |
| (void (*)(void *)) SHA512_Begin, |
| (void (*)(void *, const unsigned char *, unsigned int)) SHA512_Update, |
| (void (*)(void *, unsigned char *, unsigned int *, |
| unsigned int)) SHA512_End, |
| SHA512_BLOCK_LENGTH, |
| HASH_AlgSHA512, |
| (void (*)(void *, unsigned char *, unsigned int *, |
| unsigned int)) SHA512_EndRaw |
| }, |
| { SHA224_LENGTH, |
| (void * (*)(void)) SHA224_NewContext, |
| (void * (*)(void *)) null_hash_clone_context, |
| (void (*)(void *, PRBool)) SHA224_DestroyContext, |
| (void (*)(void *)) SHA224_Begin, |
| (void (*)(void *, const unsigned char *, unsigned int)) SHA224_Update, |
| (void (*)(void *, unsigned char *, unsigned int *, |
| unsigned int)) SHA224_End, |
| SHA224_BLOCK_LENGTH, |
| HASH_AlgSHA224, |
| (void (*)(void *, unsigned char *, unsigned int *, |
| unsigned int)) SHA224_EndRaw |
| }, |
| }; |
| |
| const SECHashObject * |
| HASH_GetRawHashObject(HASH_HashType hashType) |
| { |
| if (hashType < HASH_AlgNULL || hashType >= HASH_AlgTOTAL) { |
| PORT_SetError(SEC_ERROR_INVALID_ARGS); |
| return NULL; |
| } |
| return &SECRawHashObjects[hashType]; |
| } |