michael@0: /* michael@0: * loader.c - load platform dependent DSO containing freebl implementation. michael@0: * michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "loader.h" michael@0: #include "prmem.h" michael@0: #include "prerror.h" michael@0: #include "prinit.h" michael@0: #include "prenv.h" michael@0: michael@0: static const char* default_name = michael@0: SHLIB_PREFIX"freebl"SHLIB_VERSION"."SHLIB_SUFFIX; michael@0: michael@0: /* getLibName() returns the name of the library to load. */ michael@0: michael@0: #if defined(SOLARIS) && defined(__sparc) michael@0: #include michael@0: #include michael@0: #include michael@0: michael@0: michael@0: #if defined(NSS_USE_64) michael@0: michael@0: const static char fpu_hybrid_shared_lib[] = "libfreebl_64fpu_3.so"; michael@0: const static char int_hybrid_shared_lib[] = "libfreebl_64int_3.so"; michael@0: const static char non_hybrid_shared_lib[] = "libfreebl_64fpu_3.so"; michael@0: michael@0: const static char int_hybrid_isa[] = "sparcv9"; michael@0: const static char fpu_hybrid_isa[] = "sparcv9+vis"; michael@0: michael@0: #else michael@0: michael@0: const static char fpu_hybrid_shared_lib[] = "libfreebl_32fpu_3.so"; michael@0: const static char int_hybrid_shared_lib[] = "libfreebl_32int64_3.so"; michael@0: /* This was for SPARC V8, now obsolete. */ michael@0: const static char *const non_hybrid_shared_lib = NULL; michael@0: michael@0: const static char int_hybrid_isa[] = "sparcv8plus"; michael@0: const static char fpu_hybrid_isa[] = "sparcv8plus+vis"; michael@0: michael@0: #endif michael@0: michael@0: static const char * michael@0: getLibName(void) michael@0: { michael@0: char * found_int_hybrid; michael@0: char * found_fpu_hybrid; michael@0: long buflen; michael@0: char buf[256]; michael@0: michael@0: buflen = sysinfo(SI_ISALIST, buf, sizeof buf); michael@0: if (buflen <= 0) michael@0: return NULL; michael@0: /* sysinfo output is always supposed to be NUL terminated, but ... */ michael@0: if (buflen < sizeof buf) michael@0: buf[buflen] = '\0'; michael@0: else michael@0: buf[(sizeof buf) - 1] = '\0'; michael@0: /* The ISA list is a space separated string of names of ISAs and michael@0: * ISA extensions, in order of decreasing performance. michael@0: * There are two different ISAs with which NSS's crypto code can be michael@0: * accelerated. If both are in the list, we take the first one. michael@0: * If one is in the list, we use it, and if neither then we use michael@0: * the base unaccelerated code. michael@0: */ michael@0: found_int_hybrid = strstr(buf, int_hybrid_isa); michael@0: found_fpu_hybrid = strstr(buf, fpu_hybrid_isa); michael@0: if (found_fpu_hybrid && michael@0: (!found_int_hybrid || michael@0: (found_int_hybrid - found_fpu_hybrid) >= 0)) { michael@0: return fpu_hybrid_shared_lib; michael@0: } michael@0: if (found_int_hybrid) { michael@0: return int_hybrid_shared_lib; michael@0: } michael@0: return non_hybrid_shared_lib; michael@0: } michael@0: michael@0: #elif defined(HPUX) && !defined(NSS_USE_64) && !defined(__ia64) michael@0: #include michael@0: michael@0: /* This code tests to see if we're running on a PA2.x CPU. michael@0: ** It returns true (1) if so, and false (0) otherwise. michael@0: */ michael@0: static const char * michael@0: getLibName(void) michael@0: { michael@0: long cpu = sysconf(_SC_CPU_VERSION); michael@0: return (cpu == CPU_PA_RISC2_0) michael@0: ? "libfreebl_32fpu_3.sl" michael@0: : "libfreebl_32int_3.sl" ; michael@0: } michael@0: #else michael@0: /* default case, for platforms/ABIs that have only one freebl shared lib. */ michael@0: static const char * getLibName(void) { return default_name; } michael@0: #endif michael@0: michael@0: #include "prio.h" michael@0: #include "prprf.h" michael@0: #include michael@0: #include "prsystem.h" michael@0: michael@0: static const char *NameOfThisSharedLib = michael@0: SHLIB_PREFIX"softokn"SOFTOKEN_SHLIB_VERSION"."SHLIB_SUFFIX; michael@0: michael@0: static PRLibrary* blLib; michael@0: michael@0: #define LSB(x) ((x)&0xff) michael@0: #define MSB(x) ((x)>>8) michael@0: michael@0: static const FREEBLVector *vector; michael@0: static const char *libraryName = NULL; michael@0: michael@0: #include "genload.c" michael@0: michael@0: /* This function must be run only once. */ michael@0: /* determine if hybrid platform, then actually load the DSO. */ michael@0: static PRStatus michael@0: freebl_LoadDSO( void ) michael@0: { michael@0: PRLibrary * handle; michael@0: const char * name = getLibName(); michael@0: michael@0: if (!name) { michael@0: PR_SetError(PR_LOAD_LIBRARY_ERROR, 0); michael@0: return PR_FAILURE; michael@0: } michael@0: michael@0: handle = loader_LoadLibrary(name); michael@0: if (handle) { michael@0: PRFuncPtr address = PR_FindFunctionSymbol(handle, "FREEBL_GetVector"); michael@0: PRStatus status; michael@0: if (address) { michael@0: FREEBLGetVectorFn * getVector = (FREEBLGetVectorFn *)address; michael@0: const FREEBLVector * dsoVector = getVector(); michael@0: if (dsoVector) { michael@0: unsigned short dsoVersion = dsoVector->version; michael@0: unsigned short myVersion = FREEBL_VERSION; michael@0: if (MSB(dsoVersion) == MSB(myVersion) && michael@0: LSB(dsoVersion) >= LSB(myVersion) && michael@0: dsoVector->length >= sizeof(FREEBLVector)) { michael@0: vector = dsoVector; michael@0: libraryName = name; michael@0: blLib = handle; michael@0: return PR_SUCCESS; michael@0: } michael@0: } michael@0: } michael@0: status = PR_UnloadLibrary(handle); michael@0: PORT_Assert(PR_SUCCESS == status); michael@0: } michael@0: return PR_FAILURE; michael@0: } michael@0: michael@0: static const PRCallOnceType pristineCallOnce; michael@0: static PRCallOnceType loadFreeBLOnce; michael@0: michael@0: static PRStatus michael@0: freebl_RunLoaderOnce( void ) michael@0: { michael@0: PRStatus status; michael@0: michael@0: status = PR_CallOnce(&loadFreeBLOnce, &freebl_LoadDSO); michael@0: return status; michael@0: } michael@0: michael@0: SECStatus michael@0: BL_Init(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_BL_Init)(); michael@0: } michael@0: michael@0: RSAPrivateKey * michael@0: RSA_NewKey(int keySizeInBits, SECItem * publicExponent) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_RSA_NewKey)(keySizeInBits, publicExponent); michael@0: } michael@0: michael@0: SECStatus michael@0: RSA_PublicKeyOp(RSAPublicKey * key, michael@0: unsigned char * output, michael@0: const unsigned char * input) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_PublicKeyOp)(key, output, input); michael@0: } michael@0: michael@0: SECStatus michael@0: RSA_PrivateKeyOp(RSAPrivateKey * key, michael@0: unsigned char * output, michael@0: const unsigned char * input) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_PrivateKeyOp)(key, output, input); michael@0: } michael@0: michael@0: SECStatus michael@0: RSA_PrivateKeyOpDoubleChecked(RSAPrivateKey *key, michael@0: unsigned char *output, michael@0: const unsigned char *input) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_PrivateKeyOpDoubleChecked)(key, output, input); michael@0: } michael@0: michael@0: SECStatus michael@0: RSA_PrivateKeyCheck(const RSAPrivateKey *key) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_PrivateKeyCheck)(key); michael@0: } michael@0: michael@0: SECStatus michael@0: DSA_NewKey(const PQGParams * params, DSAPrivateKey ** privKey) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_DSA_NewKey)(params, privKey); michael@0: } michael@0: michael@0: SECStatus michael@0: DSA_SignDigest(DSAPrivateKey * key, SECItem * signature, const SECItem * digest) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_DSA_SignDigest)( key, signature, digest); michael@0: } michael@0: michael@0: SECStatus michael@0: DSA_VerifyDigest(DSAPublicKey * key, const SECItem * signature, michael@0: const SECItem * digest) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_DSA_VerifyDigest)( key, signature, digest); michael@0: } michael@0: michael@0: SECStatus michael@0: DSA_NewKeyFromSeed(const PQGParams *params, const unsigned char * seed, michael@0: DSAPrivateKey **privKey) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_DSA_NewKeyFromSeed)(params, seed, privKey); michael@0: } michael@0: michael@0: SECStatus michael@0: DSA_SignDigestWithSeed(DSAPrivateKey * key, SECItem * signature, michael@0: const SECItem * digest, const unsigned char * seed) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_DSA_SignDigestWithSeed)( key, signature, digest, seed); michael@0: } michael@0: michael@0: SECStatus michael@0: DSA_NewRandom(PLArenaPool * arena, const SECItem * q, SECItem * seed) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_DSA_NewRandom)(arena, q, seed); michael@0: } michael@0: michael@0: SECStatus michael@0: DH_GenParam(int primeLen, DHParams ** params) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_DH_GenParam)(primeLen, params); michael@0: } michael@0: michael@0: SECStatus michael@0: DH_NewKey(DHParams * params, DHPrivateKey ** privKey) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_DH_NewKey)( params, privKey); michael@0: } michael@0: michael@0: SECStatus michael@0: DH_Derive(SECItem * publicValue, SECItem * prime, SECItem * privateValue, michael@0: SECItem * derivedSecret, unsigned int maxOutBytes) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_DH_Derive)( publicValue, prime, privateValue, michael@0: derivedSecret, maxOutBytes); michael@0: } michael@0: michael@0: SECStatus michael@0: KEA_Derive(SECItem *prime, SECItem *public1, SECItem *public2, michael@0: SECItem *private1, SECItem *private2, SECItem *derivedSecret) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_KEA_Derive)(prime, public1, public2, michael@0: private1, private2, derivedSecret); michael@0: } michael@0: michael@0: PRBool michael@0: KEA_Verify(SECItem *Y, SECItem *prime, SECItem *subPrime) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return PR_FALSE; michael@0: return (vector->p_KEA_Verify)(Y, prime, subPrime); michael@0: } michael@0: michael@0: RC4Context * michael@0: RC4_CreateContext(const unsigned char *key, int len) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_RC4_CreateContext)(key, len); michael@0: } michael@0: michael@0: void michael@0: RC4_DestroyContext(RC4Context *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_RC4_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: SECStatus michael@0: RC4_Encrypt(RC4Context *cx, unsigned char *output, unsigned int *outputLen, michael@0: unsigned int maxOutputLen, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RC4_Encrypt)(cx, output, outputLen, maxOutputLen, input, michael@0: inputLen); michael@0: } michael@0: michael@0: SECStatus michael@0: RC4_Decrypt(RC4Context *cx, unsigned char *output, unsigned int *outputLen, michael@0: unsigned int maxOutputLen, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RC4_Decrypt)(cx, output, outputLen, maxOutputLen, input, michael@0: inputLen); michael@0: } michael@0: michael@0: RC2Context * michael@0: RC2_CreateContext(const unsigned char *key, unsigned int len, michael@0: const unsigned char *iv, int mode, unsigned effectiveKeyLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_RC2_CreateContext)(key, len, iv, mode, effectiveKeyLen); michael@0: } michael@0: michael@0: void michael@0: RC2_DestroyContext(RC2Context *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_RC2_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: SECStatus michael@0: RC2_Encrypt(RC2Context *cx, unsigned char *output, unsigned int *outputLen, michael@0: unsigned int maxOutputLen, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RC2_Encrypt)(cx, output, outputLen, maxOutputLen, input, michael@0: inputLen); michael@0: } michael@0: michael@0: SECStatus michael@0: RC2_Decrypt(RC2Context *cx, unsigned char *output, unsigned int *outputLen, michael@0: unsigned int maxOutputLen, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RC2_Decrypt)(cx, output, outputLen, maxOutputLen, input, michael@0: inputLen); michael@0: } michael@0: michael@0: RC5Context * michael@0: RC5_CreateContext(const SECItem *key, unsigned int rounds, michael@0: unsigned int wordSize, const unsigned char *iv, int mode) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_RC5_CreateContext)(key, rounds, wordSize, iv, mode); michael@0: } michael@0: michael@0: void michael@0: RC5_DestroyContext(RC5Context *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_RC5_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: SECStatus michael@0: RC5_Encrypt(RC5Context *cx, unsigned char *output, unsigned int *outputLen, michael@0: unsigned int maxOutputLen, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RC5_Encrypt)(cx, output, outputLen, maxOutputLen, input, michael@0: inputLen); michael@0: } michael@0: michael@0: SECStatus michael@0: RC5_Decrypt(RC5Context *cx, unsigned char *output, unsigned int *outputLen, michael@0: unsigned int maxOutputLen, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RC5_Decrypt)(cx, output, outputLen, maxOutputLen, input, michael@0: inputLen); michael@0: } michael@0: michael@0: DESContext * michael@0: DES_CreateContext(const unsigned char *key, const unsigned char *iv, michael@0: int mode, PRBool encrypt) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_DES_CreateContext)(key, iv, mode, encrypt); michael@0: } michael@0: michael@0: void michael@0: DES_DestroyContext(DESContext *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_DES_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: SECStatus michael@0: DES_Encrypt(DESContext *cx, unsigned char *output, unsigned int *outputLen, michael@0: unsigned int maxOutputLen, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_DES_Encrypt)(cx, output, outputLen, maxOutputLen, input, michael@0: inputLen); michael@0: } michael@0: michael@0: SECStatus michael@0: DES_Decrypt(DESContext *cx, unsigned char *output, unsigned int *outputLen, michael@0: unsigned int maxOutputLen, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_DES_Decrypt)(cx, output, outputLen, maxOutputLen, input, michael@0: inputLen); michael@0: } michael@0: SEEDContext * michael@0: SEED_CreateContext(const unsigned char *key, const unsigned char *iv, michael@0: int mode, PRBool encrypt) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_SEED_CreateContext)(key, iv, mode, encrypt); michael@0: } michael@0: michael@0: void michael@0: SEED_DestroyContext(SEEDContext *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_SEED_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: SECStatus michael@0: SEED_Encrypt(SEEDContext *cx, unsigned char *output, unsigned int *outputLen, michael@0: unsigned int maxOutputLen, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SEED_Encrypt)(cx, output, outputLen, maxOutputLen, input, michael@0: inputLen); michael@0: } michael@0: michael@0: SECStatus michael@0: SEED_Decrypt(SEEDContext *cx, unsigned char *output, unsigned int *outputLen, michael@0: unsigned int maxOutputLen, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SEED_Decrypt)(cx, output, outputLen, maxOutputLen, input, michael@0: inputLen); michael@0: } michael@0: michael@0: AESContext * michael@0: AES_CreateContext(const unsigned char *key, const unsigned char *iv, michael@0: int mode, int encrypt, michael@0: unsigned int keylen, unsigned int blocklen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_AES_CreateContext)(key, iv, mode, encrypt, keylen, michael@0: blocklen); michael@0: } michael@0: michael@0: void michael@0: AES_DestroyContext(AESContext *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_AES_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: SECStatus michael@0: AES_Encrypt(AESContext *cx, unsigned char *output, michael@0: unsigned int *outputLen, unsigned int maxOutputLen, michael@0: const unsigned char *input, unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_AES_Encrypt)(cx, output, outputLen, maxOutputLen, michael@0: input, inputLen); michael@0: } michael@0: michael@0: SECStatus michael@0: AES_Decrypt(AESContext *cx, unsigned char *output, michael@0: unsigned int *outputLen, unsigned int maxOutputLen, michael@0: const unsigned char *input, unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_AES_Decrypt)(cx, output, outputLen, maxOutputLen, michael@0: input, inputLen); michael@0: } michael@0: michael@0: SECStatus michael@0: MD5_Hash(unsigned char *dest, const char *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_MD5_Hash)(dest, src); michael@0: } michael@0: michael@0: SECStatus michael@0: MD5_HashBuf(unsigned char *dest, const unsigned char *src, PRUint32 src_length) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_MD5_HashBuf)(dest, src, src_length); michael@0: } michael@0: michael@0: MD5Context * michael@0: MD5_NewContext(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_MD5_NewContext)(); michael@0: } michael@0: michael@0: void michael@0: MD5_DestroyContext(MD5Context *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_MD5_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: void michael@0: MD5_Begin(MD5Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_MD5_Begin)(cx); michael@0: } michael@0: michael@0: void michael@0: MD5_Update(MD5Context *cx, const unsigned char *input, unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_MD5_Update)(cx, input, inputLen); michael@0: } michael@0: michael@0: void michael@0: MD5_End(MD5Context *cx, unsigned char *digest, michael@0: unsigned int *digestLen, unsigned int maxDigestLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_MD5_End)(cx, digest, digestLen, maxDigestLen); michael@0: } michael@0: michael@0: unsigned int michael@0: MD5_FlattenSize(MD5Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return 0; michael@0: return (vector->p_MD5_FlattenSize)(cx); michael@0: } michael@0: michael@0: SECStatus michael@0: MD5_Flatten(MD5Context *cx,unsigned char *space) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_MD5_Flatten)(cx, space); michael@0: } michael@0: michael@0: MD5Context * michael@0: MD5_Resurrect(unsigned char *space, void *arg) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_MD5_Resurrect)(space, arg); michael@0: } michael@0: michael@0: void michael@0: MD5_TraceState(MD5Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_MD5_TraceState)(cx); michael@0: } michael@0: michael@0: SECStatus michael@0: MD2_Hash(unsigned char *dest, const char *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_MD2_Hash)(dest, src); michael@0: } michael@0: michael@0: MD2Context * michael@0: MD2_NewContext(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_MD2_NewContext)(); michael@0: } michael@0: michael@0: void michael@0: MD2_DestroyContext(MD2Context *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_MD2_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: void michael@0: MD2_Begin(MD2Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_MD2_Begin)(cx); michael@0: } michael@0: michael@0: void michael@0: MD2_Update(MD2Context *cx, const unsigned char *input, unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_MD2_Update)(cx, input, inputLen); michael@0: } michael@0: michael@0: void michael@0: MD2_End(MD2Context *cx, unsigned char *digest, michael@0: unsigned int *digestLen, unsigned int maxDigestLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_MD2_End)(cx, digest, digestLen, maxDigestLen); michael@0: } michael@0: michael@0: unsigned int michael@0: MD2_FlattenSize(MD2Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return 0; michael@0: return (vector->p_MD2_FlattenSize)(cx); michael@0: } michael@0: michael@0: SECStatus michael@0: MD2_Flatten(MD2Context *cx,unsigned char *space) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_MD2_Flatten)(cx, space); michael@0: } michael@0: michael@0: MD2Context * michael@0: MD2_Resurrect(unsigned char *space, void *arg) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_MD2_Resurrect)(space, arg); michael@0: } michael@0: michael@0: michael@0: SECStatus michael@0: SHA1_Hash(unsigned char *dest, const char *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA1_Hash)(dest, src); michael@0: } michael@0: michael@0: SECStatus michael@0: SHA1_HashBuf(unsigned char *dest, const unsigned char *src, PRUint32 src_length) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA1_HashBuf)(dest, src, src_length); michael@0: } michael@0: michael@0: SHA1Context * michael@0: SHA1_NewContext(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_SHA1_NewContext)(); michael@0: } michael@0: michael@0: void michael@0: SHA1_DestroyContext(SHA1Context *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA1_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: void michael@0: SHA1_Begin(SHA1Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA1_Begin)(cx); michael@0: } michael@0: michael@0: void michael@0: SHA1_Update(SHA1Context *cx, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA1_Update)(cx, input, inputLen); michael@0: } michael@0: michael@0: void michael@0: SHA1_End(SHA1Context *cx, unsigned char *digest, michael@0: unsigned int *digestLen, unsigned int maxDigestLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA1_End)(cx, digest, digestLen, maxDigestLen); michael@0: } michael@0: michael@0: void michael@0: SHA1_TraceState(SHA1Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA1_TraceState)(cx); michael@0: } michael@0: michael@0: unsigned int michael@0: SHA1_FlattenSize(SHA1Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return 0; michael@0: return (vector->p_SHA1_FlattenSize)(cx); michael@0: } michael@0: michael@0: SECStatus michael@0: SHA1_Flatten(SHA1Context *cx,unsigned char *space) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA1_Flatten)(cx, space); michael@0: } michael@0: michael@0: SHA1Context * michael@0: SHA1_Resurrect(unsigned char *space, void *arg) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_SHA1_Resurrect)(space, arg); michael@0: } michael@0: michael@0: SECStatus michael@0: RNG_RNGInit(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RNG_RNGInit)(); michael@0: } michael@0: michael@0: SECStatus michael@0: RNG_RandomUpdate(const void *data, size_t bytes) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RNG_RandomUpdate)(data, bytes); michael@0: } michael@0: michael@0: SECStatus michael@0: RNG_GenerateGlobalRandomBytes(void *dest, size_t len) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RNG_GenerateGlobalRandomBytes)(dest, len); michael@0: } michael@0: michael@0: void michael@0: RNG_RNGShutdown(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_RNG_RNGShutdown)(); michael@0: } michael@0: michael@0: SECStatus michael@0: PQG_ParamGen(unsigned int j, PQGParams **pParams, PQGVerify **pVfy) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_PQG_ParamGen)(j, pParams, pVfy); michael@0: } michael@0: michael@0: SECStatus michael@0: PQG_ParamGenSeedLen( unsigned int j, unsigned int seedBytes, michael@0: PQGParams **pParams, PQGVerify **pVfy) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_PQG_ParamGenSeedLen)(j, seedBytes, pParams, pVfy); michael@0: } michael@0: michael@0: michael@0: SECStatus michael@0: PQG_VerifyParams(const PQGParams *params, const PQGVerify *vfy, michael@0: SECStatus *result) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_PQG_VerifyParams)(params, vfy, result); michael@0: } michael@0: michael@0: void michael@0: PQG_DestroyParams(PQGParams *params) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_PQG_DestroyParams)(params); michael@0: } michael@0: michael@0: void michael@0: PQG_DestroyVerify(PQGVerify *vfy) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_PQG_DestroyVerify)(vfy); michael@0: } michael@0: michael@0: void michael@0: BL_Cleanup(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_BL_Cleanup)(); michael@0: } michael@0: michael@0: void michael@0: BL_Unload(void) michael@0: { michael@0: /* This function is not thread-safe, but doesn't need to be, because it is michael@0: * only called from functions that are also defined as not thread-safe, michael@0: * namely C_Finalize in softoken, and the SSL bypass shutdown callback called michael@0: * from NSS_Shutdown. */ michael@0: char *disableUnload = NULL; michael@0: vector = NULL; michael@0: /* If an SSL socket is configured with SSL_BYPASS_PKCS11, but the application michael@0: * never does a handshake on it, BL_Unload will be called even though freebl michael@0: * was never loaded. So, don't assert blLib. */ michael@0: if (blLib) { michael@0: disableUnload = PR_GetEnv("NSS_DISABLE_UNLOAD"); michael@0: if (!disableUnload) { michael@0: PRStatus status = PR_UnloadLibrary(blLib); michael@0: PORT_Assert(PR_SUCCESS == status); michael@0: } michael@0: blLib = NULL; michael@0: } michael@0: loadFreeBLOnce = pristineCallOnce; michael@0: } michael@0: michael@0: /* ============== New for 3.003 =============================== */ michael@0: michael@0: SECStatus michael@0: SHA256_Hash(unsigned char *dest, const char *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA256_Hash)(dest, src); michael@0: } michael@0: michael@0: SECStatus michael@0: SHA256_HashBuf(unsigned char *dest, const unsigned char *src, PRUint32 src_length) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA256_HashBuf)(dest, src, src_length); michael@0: } michael@0: michael@0: SHA256Context * michael@0: SHA256_NewContext(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_SHA256_NewContext)(); michael@0: } michael@0: michael@0: void michael@0: SHA256_DestroyContext(SHA256Context *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA256_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: void michael@0: SHA256_Begin(SHA256Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA256_Begin)(cx); michael@0: } michael@0: michael@0: void michael@0: SHA256_Update(SHA256Context *cx, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA256_Update)(cx, input, inputLen); michael@0: } michael@0: michael@0: void michael@0: SHA256_End(SHA256Context *cx, unsigned char *digest, michael@0: unsigned int *digestLen, unsigned int maxDigestLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA256_End)(cx, digest, digestLen, maxDigestLen); michael@0: } michael@0: michael@0: void michael@0: SHA256_TraceState(SHA256Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA256_TraceState)(cx); michael@0: } michael@0: michael@0: unsigned int michael@0: SHA256_FlattenSize(SHA256Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return 0; michael@0: return (vector->p_SHA256_FlattenSize)(cx); michael@0: } michael@0: michael@0: SECStatus michael@0: SHA256_Flatten(SHA256Context *cx,unsigned char *space) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA256_Flatten)(cx, space); michael@0: } michael@0: michael@0: SHA256Context * michael@0: SHA256_Resurrect(unsigned char *space, void *arg) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_SHA256_Resurrect)(space, arg); michael@0: } michael@0: michael@0: SECStatus michael@0: SHA512_Hash(unsigned char *dest, const char *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA512_Hash)(dest, src); michael@0: } michael@0: michael@0: SECStatus michael@0: SHA512_HashBuf(unsigned char *dest, const unsigned char *src, PRUint32 src_length) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA512_HashBuf)(dest, src, src_length); michael@0: } michael@0: michael@0: SHA512Context * michael@0: SHA512_NewContext(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_SHA512_NewContext)(); michael@0: } michael@0: michael@0: void michael@0: SHA512_DestroyContext(SHA512Context *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA512_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: void michael@0: SHA512_Begin(SHA512Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA512_Begin)(cx); michael@0: } michael@0: michael@0: void michael@0: SHA512_Update(SHA512Context *cx, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA512_Update)(cx, input, inputLen); michael@0: } michael@0: michael@0: void michael@0: SHA512_End(SHA512Context *cx, unsigned char *digest, michael@0: unsigned int *digestLen, unsigned int maxDigestLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA512_End)(cx, digest, digestLen, maxDigestLen); michael@0: } michael@0: michael@0: void michael@0: SHA512_TraceState(SHA512Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA512_TraceState)(cx); michael@0: } michael@0: michael@0: unsigned int michael@0: SHA512_FlattenSize(SHA512Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return 0; michael@0: return (vector->p_SHA512_FlattenSize)(cx); michael@0: } michael@0: michael@0: SECStatus michael@0: SHA512_Flatten(SHA512Context *cx,unsigned char *space) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA512_Flatten)(cx, space); michael@0: } michael@0: michael@0: SHA512Context * michael@0: SHA512_Resurrect(unsigned char *space, void *arg) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_SHA512_Resurrect)(space, arg); michael@0: } michael@0: michael@0: michael@0: SECStatus michael@0: SHA384_Hash(unsigned char *dest, const char *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA384_Hash)(dest, src); michael@0: } michael@0: michael@0: SECStatus michael@0: SHA384_HashBuf(unsigned char *dest, const unsigned char *src, PRUint32 src_length) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA384_HashBuf)(dest, src, src_length); michael@0: } michael@0: michael@0: SHA384Context * michael@0: SHA384_NewContext(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_SHA384_NewContext)(); michael@0: } michael@0: michael@0: void michael@0: SHA384_DestroyContext(SHA384Context *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA384_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: void michael@0: SHA384_Begin(SHA384Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA384_Begin)(cx); michael@0: } michael@0: michael@0: void michael@0: SHA384_Update(SHA384Context *cx, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA384_Update)(cx, input, inputLen); michael@0: } michael@0: michael@0: void michael@0: SHA384_End(SHA384Context *cx, unsigned char *digest, michael@0: unsigned int *digestLen, unsigned int maxDigestLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA384_End)(cx, digest, digestLen, maxDigestLen); michael@0: } michael@0: michael@0: void michael@0: SHA384_TraceState(SHA384Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_SHA384_TraceState)(cx); michael@0: } michael@0: michael@0: unsigned int michael@0: SHA384_FlattenSize(SHA384Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return 0; michael@0: return (vector->p_SHA384_FlattenSize)(cx); michael@0: } michael@0: michael@0: SECStatus michael@0: SHA384_Flatten(SHA384Context *cx,unsigned char *space) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA384_Flatten)(cx, space); michael@0: } michael@0: michael@0: SHA384Context * michael@0: SHA384_Resurrect(unsigned char *space, void *arg) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_SHA384_Resurrect)(space, arg); michael@0: } michael@0: michael@0: michael@0: AESKeyWrapContext * michael@0: AESKeyWrap_CreateContext(const unsigned char *key, const unsigned char *iv, michael@0: int encrypt, unsigned int keylen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return vector->p_AESKeyWrap_CreateContext(key, iv, encrypt, keylen); michael@0: } michael@0: michael@0: void michael@0: AESKeyWrap_DestroyContext(AESKeyWrapContext *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: vector->p_AESKeyWrap_DestroyContext(cx, freeit); michael@0: } michael@0: michael@0: SECStatus michael@0: AESKeyWrap_Encrypt(AESKeyWrapContext *cx, unsigned char *output, michael@0: unsigned int *outputLen, unsigned int maxOutputLen, michael@0: const unsigned char *input, unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return vector->p_AESKeyWrap_Encrypt(cx, output, outputLen, maxOutputLen, michael@0: input, inputLen); michael@0: } michael@0: SECStatus michael@0: AESKeyWrap_Decrypt(AESKeyWrapContext *cx, unsigned char *output, michael@0: unsigned int *outputLen, unsigned int maxOutputLen, michael@0: const unsigned char *input, unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return vector->p_AESKeyWrap_Decrypt(cx, output, outputLen, maxOutputLen, michael@0: input, inputLen); michael@0: } michael@0: michael@0: PRBool michael@0: BLAPI_SHVerify(const char *name, PRFuncPtr addr) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return PR_FALSE; michael@0: return vector->p_BLAPI_SHVerify(name, addr); michael@0: } michael@0: michael@0: /* michael@0: * The Caller is expected to pass NULL as the name, which will michael@0: * trigger the p_BLAPI_VerifySelf() to return 'TRUE'. Pass the real michael@0: * name of the shared library we loaded (the static libraryName set michael@0: * in freebl_LoadDSO) to p_BLAPI_VerifySelf. michael@0: */ michael@0: PRBool michael@0: BLAPI_VerifySelf(const char *name) michael@0: { michael@0: PORT_Assert(!name); michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return PR_FALSE; michael@0: return vector->p_BLAPI_VerifySelf(libraryName); michael@0: } michael@0: michael@0: /* ============== New for 3.006 =============================== */ michael@0: michael@0: SECStatus michael@0: EC_NewKey(ECParams * params, ECPrivateKey ** privKey) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_EC_NewKey)( params, privKey ); michael@0: } michael@0: michael@0: SECStatus michael@0: EC_NewKeyFromSeed(ECParams * params, ECPrivateKey ** privKey, michael@0: const unsigned char *seed, int seedlen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_EC_NewKeyFromSeed)( params, privKey, seed, seedlen ); michael@0: } michael@0: michael@0: SECStatus michael@0: EC_ValidatePublicKey(ECParams * params, SECItem * publicValue) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_EC_ValidatePublicKey)( params, publicValue ); michael@0: } michael@0: michael@0: SECStatus michael@0: ECDH_Derive(SECItem * publicValue, ECParams * params, SECItem * privateValue, michael@0: PRBool withCofactor, SECItem * derivedSecret) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_ECDH_Derive)( publicValue, params, privateValue, michael@0: withCofactor, derivedSecret ); michael@0: } michael@0: michael@0: SECStatus michael@0: ECDSA_SignDigest(ECPrivateKey * key, SECItem * signature, michael@0: const SECItem * digest) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_ECDSA_SignDigest)( key, signature, digest ); michael@0: } michael@0: michael@0: SECStatus michael@0: ECDSA_VerifyDigest(ECPublicKey * key, const SECItem * signature, michael@0: const SECItem * digest) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_ECDSA_VerifyDigest)( key, signature, digest ); michael@0: } michael@0: michael@0: SECStatus michael@0: ECDSA_SignDigestWithSeed(ECPrivateKey * key, SECItem * signature, michael@0: const SECItem * digest, const unsigned char *seed, const int seedlen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_ECDSA_SignDigestWithSeed)( key, signature, digest, michael@0: seed, seedlen ); michael@0: } michael@0: michael@0: /* ============== New for 3.008 =============================== */ michael@0: michael@0: AESContext * michael@0: AES_AllocateContext(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_AES_AllocateContext)(); michael@0: } michael@0: michael@0: AESKeyWrapContext * michael@0: AESKeyWrap_AllocateContext(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_AESKeyWrap_AllocateContext)(); michael@0: } michael@0: michael@0: DESContext * michael@0: DES_AllocateContext(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_DES_AllocateContext)(); michael@0: } michael@0: michael@0: RC2Context * michael@0: RC2_AllocateContext(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_RC2_AllocateContext)(); michael@0: } michael@0: michael@0: RC4Context * michael@0: RC4_AllocateContext(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_RC4_AllocateContext)(); michael@0: } michael@0: michael@0: SECStatus michael@0: AES_InitContext(AESContext *cx, const unsigned char *key, michael@0: unsigned int keylen, const unsigned char *iv, int mode, michael@0: unsigned int encrypt, unsigned int blocklen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_AES_InitContext)(cx, key, keylen, iv, mode, encrypt, michael@0: blocklen); michael@0: } michael@0: michael@0: SECStatus michael@0: AESKeyWrap_InitContext(AESKeyWrapContext *cx, const unsigned char *key, michael@0: unsigned int keylen, const unsigned char *iv, int mode, michael@0: unsigned int encrypt, unsigned int blocklen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_AESKeyWrap_InitContext)(cx, key, keylen, iv, mode, michael@0: encrypt, blocklen); michael@0: } michael@0: michael@0: SECStatus michael@0: DES_InitContext(DESContext *cx, const unsigned char *key, michael@0: unsigned int keylen, const unsigned char *iv, int mode, michael@0: unsigned int encrypt, unsigned int xtra) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_DES_InitContext)(cx, key, keylen, iv, mode, encrypt, xtra); michael@0: } michael@0: michael@0: SECStatus michael@0: SEED_InitContext(SEEDContext *cx, const unsigned char *key, michael@0: unsigned int keylen, const unsigned char *iv, int mode, michael@0: unsigned int encrypt, unsigned int xtra) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SEED_InitContext)(cx, key, keylen, iv, mode, encrypt, xtra); michael@0: } michael@0: michael@0: SECStatus michael@0: RC2_InitContext(RC2Context *cx, const unsigned char *key, michael@0: unsigned int keylen, const unsigned char *iv, int mode, michael@0: unsigned int effectiveKeyLen, unsigned int xtra) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RC2_InitContext)(cx, key, keylen, iv, mode, michael@0: effectiveKeyLen, xtra); michael@0: } michael@0: michael@0: SECStatus michael@0: RC4_InitContext(RC4Context *cx, const unsigned char *key, michael@0: unsigned int keylen, const unsigned char *x1, int x2, michael@0: unsigned int x3, unsigned int x4) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RC4_InitContext)(cx, key, keylen, x1, x2, x3, x4); michael@0: } michael@0: michael@0: void michael@0: MD2_Clone(MD2Context *dest, MD2Context *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_MD2_Clone)(dest, src); michael@0: } michael@0: michael@0: void michael@0: MD5_Clone(MD5Context *dest, MD5Context *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_MD5_Clone)(dest, src); michael@0: } michael@0: michael@0: void michael@0: SHA1_Clone(SHA1Context *dest, SHA1Context *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_SHA1_Clone)(dest, src); michael@0: } michael@0: michael@0: void michael@0: SHA256_Clone(SHA256Context *dest, SHA256Context *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_SHA256_Clone)(dest, src); michael@0: } michael@0: michael@0: void michael@0: SHA384_Clone(SHA384Context *dest, SHA384Context *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_SHA384_Clone)(dest, src); michael@0: } michael@0: michael@0: void michael@0: SHA512_Clone(SHA512Context *dest, SHA512Context *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_SHA512_Clone)(dest, src); michael@0: } michael@0: michael@0: SECStatus michael@0: TLS_PRF(const SECItem *secret, const char *label, michael@0: SECItem *seed, SECItem *result, PRBool isFIPS) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_TLS_PRF)(secret, label, seed, result, isFIPS); michael@0: } michael@0: michael@0: const SECHashObject * michael@0: HASH_GetRawHashObject(HASH_HashType hashType) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_HASH_GetRawHashObject)(hashType); michael@0: } michael@0: michael@0: michael@0: void michael@0: HMAC_Destroy(HMACContext *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_HMAC_Destroy)(cx, freeit); michael@0: } michael@0: michael@0: HMACContext * michael@0: HMAC_Create(const SECHashObject *hashObj, const unsigned char *secret, michael@0: unsigned int secret_len, PRBool isFIPS) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_HMAC_Create)(hashObj, secret, secret_len, isFIPS); michael@0: } michael@0: michael@0: SECStatus michael@0: HMAC_Init(HMACContext *cx, const SECHashObject *hashObj, michael@0: const unsigned char *secret, unsigned int secret_len, PRBool isFIPS) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_HMAC_Init)(cx, hashObj, secret, secret_len, isFIPS); michael@0: } michael@0: michael@0: void michael@0: HMAC_Begin(HMACContext *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_HMAC_Begin)(cx); michael@0: } michael@0: michael@0: void michael@0: HMAC_Update(HMACContext *cx, const unsigned char *data, unsigned int data_len) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_HMAC_Update)(cx, data, data_len); michael@0: } michael@0: michael@0: SECStatus michael@0: HMAC_Finish(HMACContext *cx, unsigned char *result, unsigned int *result_len, michael@0: unsigned int max_result_len) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_HMAC_Finish)(cx, result, result_len, max_result_len); michael@0: } michael@0: michael@0: HMACContext * michael@0: HMAC_Clone(HMACContext *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_HMAC_Clone)(cx); michael@0: } michael@0: michael@0: void michael@0: RNG_SystemInfoForRNG(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_RNG_SystemInfoForRNG)(); michael@0: michael@0: } michael@0: michael@0: SECStatus michael@0: FIPS186Change_GenerateX(unsigned char *XKEY, const unsigned char *XSEEDj, michael@0: unsigned char *x_j) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_FIPS186Change_GenerateX)(XKEY, XSEEDj, x_j); michael@0: } michael@0: michael@0: SECStatus michael@0: FIPS186Change_ReduceModQForDSA(const unsigned char *w, michael@0: const unsigned char *q, michael@0: unsigned char *xj) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_FIPS186Change_ReduceModQForDSA)(w, q, xj); michael@0: } michael@0: michael@0: /* === new for Camellia === */ michael@0: SECStatus michael@0: Camellia_InitContext(CamelliaContext *cx, const unsigned char *key, michael@0: unsigned int keylen, const unsigned char *iv, int mode, michael@0: unsigned int encrypt, unsigned int unused) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_Camellia_InitContext)(cx, key, keylen, iv, mode, encrypt, michael@0: unused); michael@0: } michael@0: michael@0: CamelliaContext * michael@0: Camellia_AllocateContext(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_Camellia_AllocateContext)(); michael@0: } michael@0: michael@0: michael@0: CamelliaContext * michael@0: Camellia_CreateContext(const unsigned char *key, const unsigned char *iv, michael@0: int mode, int encrypt, michael@0: unsigned int keylen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_Camellia_CreateContext)(key, iv, mode, encrypt, keylen); michael@0: } michael@0: michael@0: void michael@0: Camellia_DestroyContext(CamelliaContext *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return ; michael@0: (vector->p_Camellia_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: SECStatus michael@0: Camellia_Encrypt(CamelliaContext *cx, unsigned char *output, michael@0: unsigned int *outputLen, unsigned int maxOutputLen, michael@0: const unsigned char *input, unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_Camellia_Encrypt)(cx, output, outputLen, maxOutputLen, michael@0: input, inputLen); michael@0: } michael@0: michael@0: SECStatus michael@0: Camellia_Decrypt(CamelliaContext *cx, unsigned char *output, michael@0: unsigned int *outputLen, unsigned int maxOutputLen, michael@0: const unsigned char *input, unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_Camellia_Decrypt)(cx, output, outputLen, maxOutputLen, michael@0: input, inputLen); michael@0: } michael@0: michael@0: void BL_SetForkState(PRBool forked) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_BL_SetForkState)(forked); michael@0: } michael@0: michael@0: SECStatus michael@0: PRNGTEST_Instantiate(const PRUint8 *entropy, unsigned int entropy_len, michael@0: const PRUint8 *nonce, unsigned int nonce_len, michael@0: const PRUint8 *personal_string, unsigned int ps_len) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_PRNGTEST_Instantiate)(entropy, entropy_len, michael@0: nonce, nonce_len, michael@0: personal_string, ps_len); michael@0: } michael@0: michael@0: SECStatus michael@0: PRNGTEST_Reseed(const PRUint8 *entropy, unsigned int entropy_len, michael@0: const PRUint8 *additional, unsigned int additional_len) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_PRNGTEST_Reseed)(entropy, entropy_len, michael@0: additional, additional_len); michael@0: } michael@0: michael@0: SECStatus michael@0: PRNGTEST_Generate(PRUint8 *bytes, unsigned int bytes_len, michael@0: const PRUint8 *additional, unsigned int additional_len) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_PRNGTEST_Generate)(bytes, bytes_len, michael@0: additional, additional_len); michael@0: } michael@0: michael@0: SECStatus michael@0: PRNGTEST_Uninstantiate() michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_PRNGTEST_Uninstantiate)(); michael@0: } michael@0: michael@0: SECStatus michael@0: RSA_PopulatePrivateKey(RSAPrivateKey *key) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_PopulatePrivateKey)(key); michael@0: } michael@0: michael@0: michael@0: SECStatus michael@0: JPAKE_Sign(PLArenaPool * arena, const PQGParams * pqg, HASH_HashType hashType, michael@0: const SECItem * signerID, const SECItem * x, michael@0: const SECItem * testRandom, const SECItem * gxIn, SECItem * gxOut, michael@0: SECItem * gv, SECItem * r) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_JPAKE_Sign)(arena, pqg, hashType, signerID, x, michael@0: testRandom, gxIn, gxOut, gv, r); michael@0: } michael@0: michael@0: SECStatus michael@0: JPAKE_Verify(PLArenaPool * arena, const PQGParams * pqg, michael@0: HASH_HashType hashType, const SECItem * signerID, michael@0: const SECItem * peerID, const SECItem * gx, michael@0: const SECItem * gv, const SECItem * r) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_JPAKE_Verify)(arena, pqg, hashType, signerID, peerID, michael@0: gx, gv, r); michael@0: } michael@0: michael@0: SECStatus michael@0: JPAKE_Round2(PLArenaPool * arena, const SECItem * p, const SECItem *q, michael@0: const SECItem * gx1, const SECItem * gx3, const SECItem * gx4, michael@0: SECItem * base, const SECItem * x2, const SECItem * s, SECItem * x2s) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_JPAKE_Round2)(arena, p, q, gx1, gx3, gx4, base, x2, s, x2s); michael@0: } michael@0: michael@0: SECStatus michael@0: JPAKE_Final(PLArenaPool * arena, const SECItem * p, const SECItem *q, michael@0: const SECItem * x2, const SECItem * gx4, const SECItem * x2s, michael@0: const SECItem * B, SECItem * K) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_JPAKE_Final)(arena, p, q, x2, gx4, x2s, B, K); michael@0: } michael@0: michael@0: SECStatus michael@0: TLS_P_hash(HASH_HashType hashAlg, const SECItem *secret, const char *label, michael@0: SECItem *seed, SECItem *result, PRBool isFIPS) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_TLS_P_hash)(hashAlg, secret, label, seed, result, isFIPS); michael@0: } michael@0: michael@0: SECStatus michael@0: SHA224_Hash(unsigned char *dest, const char *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA224_Hash)(dest, src); michael@0: } michael@0: michael@0: SECStatus michael@0: SHA224_HashBuf(unsigned char *dest, const unsigned char *src, PRUint32 src_length) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA224_HashBuf)(dest, src, src_length); michael@0: } michael@0: michael@0: SHA224Context * michael@0: SHA224_NewContext(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_SHA224_NewContext)(); michael@0: } michael@0: michael@0: void michael@0: SHA224_DestroyContext(SHA224Context *cx, PRBool freeit) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_SHA224_DestroyContext)(cx, freeit); michael@0: } michael@0: michael@0: void michael@0: SHA224_Begin(SHA256Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_SHA224_Begin)(cx); michael@0: } michael@0: michael@0: void michael@0: SHA224_Update(SHA224Context *cx, const unsigned char *input, michael@0: unsigned int inputLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_SHA224_Update)(cx, input, inputLen); michael@0: } michael@0: michael@0: void michael@0: SHA224_End(SHA224Context *cx, unsigned char *digest, michael@0: unsigned int *digestLen, unsigned int maxDigestLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_SHA224_End)(cx, digest, digestLen, maxDigestLen); michael@0: } michael@0: michael@0: void michael@0: SHA224_TraceState(SHA224Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_SHA224_TraceState)(cx); michael@0: } michael@0: michael@0: unsigned int michael@0: SHA224_FlattenSize(SHA224Context *cx) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return 0; michael@0: return (vector->p_SHA224_FlattenSize)(cx); michael@0: } michael@0: michael@0: SECStatus michael@0: SHA224_Flatten(SHA224Context *cx,unsigned char *space) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SHA224_Flatten)(cx, space); michael@0: } michael@0: michael@0: SHA224Context * michael@0: SHA224_Resurrect(unsigned char *space, void *arg) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return NULL; michael@0: return (vector->p_SHA224_Resurrect)(space, arg); michael@0: } michael@0: michael@0: void michael@0: SHA224_Clone(SHA224Context *dest, SHA224Context *src) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return; michael@0: (vector->p_SHA224_Clone)(dest, src); michael@0: } michael@0: michael@0: PRBool michael@0: BLAPI_SHVerifyFile(const char *name) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return PR_FALSE; michael@0: return vector->p_BLAPI_SHVerifyFile(name); michael@0: } michael@0: michael@0: /* === new for DSA-2 === */ michael@0: SECStatus michael@0: PQG_ParamGenV2( unsigned int L, unsigned int N, unsigned int seedBytes, michael@0: PQGParams **pParams, PQGVerify **pVfy) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_PQG_ParamGenV2)(L, N, seedBytes, pParams, pVfy); michael@0: } michael@0: michael@0: SECStatus michael@0: PRNGTEST_RunHealthTests(void) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return vector->p_PRNGTEST_RunHealthTests(); michael@0: } michael@0: michael@0: SECStatus michael@0: SSLv3_MAC_ConstantTime( michael@0: unsigned char *result, michael@0: unsigned int *resultLen, michael@0: unsigned int maxResultLen, michael@0: const SECHashObject *hashObj, michael@0: const unsigned char *secret, michael@0: unsigned int secretLen, michael@0: const unsigned char *header, michael@0: unsigned int headerLen, michael@0: const unsigned char *body, michael@0: unsigned int bodyLen, michael@0: unsigned int bodyTotalLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_SSLv3_MAC_ConstantTime)( michael@0: result, resultLen, maxResultLen, michael@0: hashObj, michael@0: secret, secretLen, michael@0: header, headerLen, michael@0: body, bodyLen, bodyTotalLen); michael@0: } michael@0: michael@0: SECStatus michael@0: HMAC_ConstantTime( michael@0: unsigned char *result, michael@0: unsigned int *resultLen, michael@0: unsigned int maxResultLen, michael@0: const SECHashObject *hashObj, michael@0: const unsigned char *secret, michael@0: unsigned int secretLen, michael@0: const unsigned char *header, michael@0: unsigned int headerLen, michael@0: const unsigned char *body, michael@0: unsigned int bodyLen, michael@0: unsigned int bodyTotalLen) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_HMAC_ConstantTime)( michael@0: result, resultLen, maxResultLen, michael@0: hashObj, michael@0: secret, secretLen, michael@0: header, headerLen, michael@0: body, bodyLen, bodyTotalLen); michael@0: } michael@0: michael@0: SECStatus RSA_SignRaw(RSAPrivateKey *key, michael@0: unsigned char *output, michael@0: unsigned int *outputLen, michael@0: unsigned int maxOutputLen, michael@0: const unsigned char *input, michael@0: unsigned int inputLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_SignRaw)(key, output, outputLen, maxOutputLen, input, michael@0: inputLen); michael@0: } michael@0: michael@0: SECStatus RSA_CheckSignRaw(RSAPublicKey *key, michael@0: const unsigned char *sig, michael@0: unsigned int sigLen, michael@0: const unsigned char *hash, michael@0: unsigned int hashLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_CheckSignRaw)(key, sig, sigLen, hash, hashLen); michael@0: } michael@0: michael@0: SECStatus RSA_CheckSignRecoverRaw(RSAPublicKey *key, michael@0: unsigned char *data, michael@0: unsigned int *dataLen, michael@0: unsigned int maxDataLen, michael@0: const unsigned char *sig, michael@0: unsigned int sigLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_CheckSignRecoverRaw)(key, data, dataLen, maxDataLen, michael@0: sig, sigLen); michael@0: } michael@0: michael@0: SECStatus RSA_EncryptRaw(RSAPublicKey *key, michael@0: unsigned char *output, michael@0: unsigned int *outputLen, michael@0: unsigned int maxOutputLen, michael@0: const unsigned char *input, michael@0: unsigned int inputLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_EncryptRaw)(key, output, outputLen, maxOutputLen, michael@0: input, inputLen); michael@0: } michael@0: michael@0: SECStatus RSA_DecryptRaw(RSAPrivateKey *key, michael@0: unsigned char *output, michael@0: unsigned int *outputLen, michael@0: unsigned int maxOutputLen, michael@0: const unsigned char *input, michael@0: unsigned int inputLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_DecryptRaw)(key, output, outputLen, maxOutputLen, michael@0: input, inputLen); michael@0: michael@0: } michael@0: michael@0: SECStatus RSA_EncryptOAEP(RSAPublicKey *key, michael@0: HASH_HashType hashAlg, michael@0: HASH_HashType maskHashAlg, michael@0: const unsigned char *label, michael@0: unsigned int labelLen, michael@0: const unsigned char *seed, michael@0: unsigned int seedLen, michael@0: unsigned char *output, michael@0: unsigned int *outputLen, michael@0: unsigned int maxOutputLen, michael@0: const unsigned char *input, michael@0: unsigned int inputLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_EncryptOAEP)(key, hashAlg, maskHashAlg, label, michael@0: labelLen, seed, seedLen, output, michael@0: outputLen, maxOutputLen, input, inputLen); michael@0: } michael@0: michael@0: SECStatus RSA_DecryptOAEP(RSAPrivateKey *key, michael@0: HASH_HashType hashAlg, michael@0: HASH_HashType maskHashAlg, michael@0: const unsigned char *label, michael@0: unsigned int labelLen, michael@0: unsigned char *output, michael@0: unsigned int *outputLen, michael@0: unsigned int maxOutputLen, michael@0: const unsigned char *input, michael@0: unsigned int inputLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_DecryptOAEP)(key, hashAlg, maskHashAlg, label, michael@0: labelLen, output, outputLen, michael@0: maxOutputLen, input, inputLen); michael@0: } michael@0: michael@0: SECStatus RSA_EncryptBlock(RSAPublicKey *key, michael@0: unsigned char *output, michael@0: unsigned int *outputLen, michael@0: unsigned int maxOutputLen, michael@0: const unsigned char *input, michael@0: unsigned int inputLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_EncryptBlock)(key, output, outputLen, maxOutputLen, michael@0: input, inputLen); michael@0: } michael@0: michael@0: SECStatus RSA_DecryptBlock(RSAPrivateKey *key, michael@0: unsigned char *output, michael@0: unsigned int *outputLen, michael@0: unsigned int maxOutputLen, michael@0: const unsigned char *input, michael@0: unsigned int inputLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_DecryptBlock)(key, output, outputLen, maxOutputLen, michael@0: input, inputLen); michael@0: } michael@0: michael@0: SECStatus RSA_SignPSS(RSAPrivateKey *key, michael@0: HASH_HashType hashAlg, michael@0: HASH_HashType maskHashAlg, michael@0: const unsigned char *salt, michael@0: unsigned int saltLen, michael@0: unsigned char *output, michael@0: unsigned int *outputLen, michael@0: unsigned int maxOutputLen, michael@0: const unsigned char *input, michael@0: unsigned int inputLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_SignPSS)(key, hashAlg, maskHashAlg, salt, saltLen, michael@0: output, outputLen, maxOutputLen, input, michael@0: inputLen); michael@0: } michael@0: michael@0: SECStatus RSA_CheckSignPSS(RSAPublicKey *key, michael@0: HASH_HashType hashAlg, michael@0: HASH_HashType maskHashAlg, michael@0: unsigned int saltLen, michael@0: const unsigned char *sig, michael@0: unsigned int sigLen, michael@0: const unsigned char *hash, michael@0: unsigned int hashLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_CheckSignPSS)(key, hashAlg, maskHashAlg, saltLen, michael@0: sig, sigLen, hash, hashLen); michael@0: } michael@0: michael@0: SECStatus RSA_Sign(RSAPrivateKey *key, michael@0: unsigned char *output, michael@0: unsigned int *outputLen, michael@0: unsigned int maxOutputLen, michael@0: const unsigned char *input, michael@0: unsigned int inputLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_Sign)(key, output, outputLen, maxOutputLen, input, michael@0: inputLen); michael@0: } michael@0: michael@0: SECStatus RSA_CheckSign(RSAPublicKey *key, michael@0: const unsigned char *sig, michael@0: unsigned int sigLen, michael@0: const unsigned char *data, michael@0: unsigned int dataLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_CheckSign)(key, sig, sigLen, data, dataLen); michael@0: michael@0: } michael@0: michael@0: SECStatus RSA_CheckSignRecover(RSAPublicKey *key, michael@0: unsigned char *output, michael@0: unsigned int *outputLen, michael@0: unsigned int maxOutputLen, michael@0: const unsigned char *sig, michael@0: unsigned int sigLen) { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_RSA_CheckSignRecover)(key, output, outputLen, maxOutputLen, michael@0: sig, sigLen); michael@0: } michael@0: michael@0: SECStatus EC_FillParams(PLArenaPool *arena, michael@0: const SECItem *encodedParams, michael@0: ECParams *params) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_EC_FillParams)(arena, encodedParams, params); michael@0: } michael@0: michael@0: SECStatus EC_DecodeParams(const SECItem *encodedParams, michael@0: ECParams **ecparams) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_EC_DecodeParams)(encodedParams, ecparams); michael@0: } michael@0: michael@0: SECStatus EC_CopyParams(PLArenaPool *arena, ECParams *dstParams, michael@0: const ECParams *srcParams) michael@0: { michael@0: if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) michael@0: return SECFailure; michael@0: return (vector->p_EC_CopyParams)(arena, dstParams, srcParams); michael@0: } michael@0: