| /* 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]; |
| } |