| /* |
| * loader.c - load platform dependent DSO containing freebl implementation. |
| * |
| * 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 "loader.h" |
| #include "prmem.h" |
| #include "prerror.h" |
| #include "prinit.h" |
| #include "prenv.h" |
| #include "blname.c" |
| |
| #include "prio.h" |
| #include "prprf.h" |
| #include <stdio.h> |
| #include "prsystem.h" |
| |
| static const char *NameOfThisSharedLib = |
| SHLIB_PREFIX "softokn" SOFTOKEN_SHLIB_VERSION "." SHLIB_SUFFIX; |
| |
| static PRLibrary *blLib = NULL; |
| |
| #define LSB(x) ((x)&0xff) |
| #define MSB(x) ((x) >> 8) |
| |
| static const FREEBLVector *vector; |
| static const char *libraryName = NULL; |
| |
| #include "genload.c" |
| |
| /* This function must be run only once. */ |
| /* determine if hybrid platform, then actually load the DSO. */ |
| static PRStatus |
| freebl_LoadDSO(void) |
| { |
| PRLibrary *handle; |
| const char *name = getLibName(); |
| |
| if (!name) { |
| PR_SetError(PR_LOAD_LIBRARY_ERROR, 0); |
| return PR_FAILURE; |
| } |
| |
| handle = loader_LoadLibrary(name); |
| if (handle) { |
| PRFuncPtr address = PR_FindFunctionSymbol(handle, "FREEBL_GetVector"); |
| if (address) { |
| FREEBLGetVectorFn *getVector = (FREEBLGetVectorFn *)address; |
| const FREEBLVector *dsoVector = getVector(); |
| if (dsoVector) { |
| unsigned short dsoVersion = dsoVector->version; |
| unsigned short myVersion = FREEBL_VERSION; |
| if (MSB(dsoVersion) == MSB(myVersion) && |
| LSB(dsoVersion) >= LSB(myVersion) && |
| dsoVector->length >= sizeof(FREEBLVector)) { |
| vector = dsoVector; |
| libraryName = name; |
| blLib = handle; |
| return PR_SUCCESS; |
| } |
| } |
| } |
| #ifdef DEBUG |
| if (blLib) { |
| PRStatus status = PR_UnloadLibrary(blLib); |
| PORT_Assert(PR_SUCCESS == status); |
| } |
| #else |
| if (blLib) |
| PR_UnloadLibrary(blLib); |
| #endif |
| } |
| return PR_FAILURE; |
| } |
| |
| static const PRCallOnceType pristineCallOnce; |
| static PRCallOnceType loadFreeBLOnce; |
| |
| static PRStatus |
| freebl_RunLoaderOnce(void) |
| { |
| PRStatus status; |
| |
| status = PR_CallOnce(&loadFreeBLOnce, &freebl_LoadDSO); |
| return status; |
| } |
| |
| SECStatus |
| BL_Init(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_BL_Init)(); |
| } |
| |
| RSAPrivateKey * |
| RSA_NewKey(int keySizeInBits, SECItem *publicExponent) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_RSA_NewKey)(keySizeInBits, publicExponent); |
| } |
| |
| SECStatus |
| RSA_PublicKeyOp(RSAPublicKey *key, |
| unsigned char *output, |
| const unsigned char *input) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_PublicKeyOp)(key, output, input); |
| } |
| |
| SECStatus |
| RSA_PrivateKeyOp(RSAPrivateKey *key, |
| unsigned char *output, |
| const unsigned char *input) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_PrivateKeyOp)(key, output, input); |
| } |
| |
| SECStatus |
| RSA_PrivateKeyOpDoubleChecked(RSAPrivateKey *key, |
| unsigned char *output, |
| const unsigned char *input) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_PrivateKeyOpDoubleChecked)(key, output, input); |
| } |
| |
| SECStatus |
| RSA_PrivateKeyCheck(const RSAPrivateKey *key) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_PrivateKeyCheck)(key); |
| } |
| |
| SECStatus |
| DSA_NewKey(const PQGParams *params, DSAPrivateKey **privKey) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_DSA_NewKey)(params, privKey); |
| } |
| |
| SECStatus |
| DSA_SignDigest(DSAPrivateKey *key, SECItem *signature, const SECItem *digest) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_DSA_SignDigest)(key, signature, digest); |
| } |
| |
| SECStatus |
| DSA_VerifyDigest(DSAPublicKey *key, const SECItem *signature, |
| const SECItem *digest) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_DSA_VerifyDigest)(key, signature, digest); |
| } |
| |
| SECStatus |
| DSA_NewKeyFromSeed(const PQGParams *params, const unsigned char *seed, |
| DSAPrivateKey **privKey) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_DSA_NewKeyFromSeed)(params, seed, privKey); |
| } |
| |
| SECStatus |
| DSA_SignDigestWithSeed(DSAPrivateKey *key, SECItem *signature, |
| const SECItem *digest, const unsigned char *seed) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_DSA_SignDigestWithSeed)(key, signature, digest, seed); |
| } |
| |
| SECStatus |
| DSA_NewRandom(PLArenaPool *arena, const SECItem *q, SECItem *seed) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_DSA_NewRandom)(arena, q, seed); |
| } |
| |
| SECStatus |
| DH_GenParam(int primeLen, DHParams **params) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_DH_GenParam)(primeLen, params); |
| } |
| |
| SECStatus |
| DH_NewKey(DHParams *params, DHPrivateKey **privKey) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_DH_NewKey)(params, privKey); |
| } |
| |
| SECStatus |
| DH_Derive(SECItem *publicValue, SECItem *prime, SECItem *privateValue, |
| SECItem *derivedSecret, unsigned int maxOutBytes) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_DH_Derive)(publicValue, prime, privateValue, |
| derivedSecret, maxOutBytes); |
| } |
| |
| SECStatus |
| KEA_Derive(SECItem *prime, SECItem *public1, SECItem *public2, |
| SECItem *private1, SECItem *private2, SECItem *derivedSecret) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_KEA_Derive)(prime, public1, public2, |
| private1, private2, derivedSecret); |
| } |
| |
| PRBool |
| KEA_Verify(SECItem *Y, SECItem *prime, SECItem *subPrime) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return PR_FALSE; |
| return (vector->p_KEA_Verify)(Y, prime, subPrime); |
| } |
| |
| RC4Context * |
| RC4_CreateContext(const unsigned char *key, int len) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_RC4_CreateContext)(key, len); |
| } |
| |
| void |
| RC4_DestroyContext(RC4Context *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_RC4_DestroyContext)(cx, freeit); |
| } |
| |
| SECStatus |
| RC4_Encrypt(RC4Context *cx, unsigned char *output, unsigned int *outputLen, |
| unsigned int maxOutputLen, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RC4_Encrypt)(cx, output, outputLen, maxOutputLen, input, |
| inputLen); |
| } |
| |
| SECStatus |
| RC4_Decrypt(RC4Context *cx, unsigned char *output, unsigned int *outputLen, |
| unsigned int maxOutputLen, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RC4_Decrypt)(cx, output, outputLen, maxOutputLen, input, |
| inputLen); |
| } |
| |
| RC2Context * |
| RC2_CreateContext(const unsigned char *key, unsigned int len, |
| const unsigned char *iv, int mode, unsigned effectiveKeyLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_RC2_CreateContext)(key, len, iv, mode, effectiveKeyLen); |
| } |
| |
| void |
| RC2_DestroyContext(RC2Context *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_RC2_DestroyContext)(cx, freeit); |
| } |
| |
| SECStatus |
| RC2_Encrypt(RC2Context *cx, unsigned char *output, unsigned int *outputLen, |
| unsigned int maxOutputLen, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RC2_Encrypt)(cx, output, outputLen, maxOutputLen, input, |
| inputLen); |
| } |
| |
| SECStatus |
| RC2_Decrypt(RC2Context *cx, unsigned char *output, unsigned int *outputLen, |
| unsigned int maxOutputLen, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RC2_Decrypt)(cx, output, outputLen, maxOutputLen, input, |
| inputLen); |
| } |
| |
| RC5Context * |
| RC5_CreateContext(const SECItem *key, unsigned int rounds, |
| unsigned int wordSize, const unsigned char *iv, int mode) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_RC5_CreateContext)(key, rounds, wordSize, iv, mode); |
| } |
| |
| void |
| RC5_DestroyContext(RC5Context *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_RC5_DestroyContext)(cx, freeit); |
| } |
| |
| SECStatus |
| RC5_Encrypt(RC5Context *cx, unsigned char *output, unsigned int *outputLen, |
| unsigned int maxOutputLen, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RC5_Encrypt)(cx, output, outputLen, maxOutputLen, input, |
| inputLen); |
| } |
| |
| SECStatus |
| RC5_Decrypt(RC5Context *cx, unsigned char *output, unsigned int *outputLen, |
| unsigned int maxOutputLen, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RC5_Decrypt)(cx, output, outputLen, maxOutputLen, input, |
| inputLen); |
| } |
| |
| DESContext * |
| DES_CreateContext(const unsigned char *key, const unsigned char *iv, |
| int mode, PRBool encrypt) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_DES_CreateContext)(key, iv, mode, encrypt); |
| } |
| |
| void |
| DES_DestroyContext(DESContext *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_DES_DestroyContext)(cx, freeit); |
| } |
| |
| SECStatus |
| DES_Encrypt(DESContext *cx, unsigned char *output, unsigned int *outputLen, |
| unsigned int maxOutputLen, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_DES_Encrypt)(cx, output, outputLen, maxOutputLen, input, |
| inputLen); |
| } |
| |
| SECStatus |
| DES_Decrypt(DESContext *cx, unsigned char *output, unsigned int *outputLen, |
| unsigned int maxOutputLen, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_DES_Decrypt)(cx, output, outputLen, maxOutputLen, input, |
| inputLen); |
| } |
| SEEDContext * |
| SEED_CreateContext(const unsigned char *key, const unsigned char *iv, |
| int mode, PRBool encrypt) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_SEED_CreateContext)(key, iv, mode, encrypt); |
| } |
| |
| void |
| SEED_DestroyContext(SEEDContext *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SEED_DestroyContext)(cx, freeit); |
| } |
| |
| SECStatus |
| SEED_Encrypt(SEEDContext *cx, unsigned char *output, unsigned int *outputLen, |
| unsigned int maxOutputLen, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SEED_Encrypt)(cx, output, outputLen, maxOutputLen, input, |
| inputLen); |
| } |
| |
| SECStatus |
| SEED_Decrypt(SEEDContext *cx, unsigned char *output, unsigned int *outputLen, |
| unsigned int maxOutputLen, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SEED_Decrypt)(cx, output, outputLen, maxOutputLen, input, |
| inputLen); |
| } |
| |
| AESContext * |
| AES_CreateContext(const unsigned char *key, const unsigned char *iv, |
| int mode, int encrypt, |
| unsigned int keylen, unsigned int blocklen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_AES_CreateContext)(key, iv, mode, encrypt, keylen, |
| blocklen); |
| } |
| |
| void |
| AES_DestroyContext(AESContext *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_AES_DestroyContext)(cx, freeit); |
| } |
| |
| SECStatus |
| AES_Encrypt(AESContext *cx, unsigned char *output, |
| unsigned int *outputLen, unsigned int maxOutputLen, |
| const unsigned char *input, unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_AES_Encrypt)(cx, output, outputLen, maxOutputLen, |
| input, inputLen); |
| } |
| |
| SECStatus |
| AES_Decrypt(AESContext *cx, unsigned char *output, |
| unsigned int *outputLen, unsigned int maxOutputLen, |
| const unsigned char *input, unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_AES_Decrypt)(cx, output, outputLen, maxOutputLen, |
| input, inputLen); |
| } |
| |
| SECStatus |
| MD5_Hash(unsigned char *dest, const char *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_MD5_Hash)(dest, src); |
| } |
| |
| SECStatus |
| MD5_HashBuf(unsigned char *dest, const unsigned char *src, PRUint32 src_length) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_MD5_HashBuf)(dest, src, src_length); |
| } |
| |
| MD5Context * |
| MD5_NewContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_MD5_NewContext)(); |
| } |
| |
| void |
| MD5_DestroyContext(MD5Context *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_MD5_DestroyContext)(cx, freeit); |
| } |
| |
| void |
| MD5_Begin(MD5Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_MD5_Begin)(cx); |
| } |
| |
| void |
| MD5_Update(MD5Context *cx, const unsigned char *input, unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_MD5_Update)(cx, input, inputLen); |
| } |
| |
| void |
| MD5_End(MD5Context *cx, unsigned char *digest, |
| unsigned int *digestLen, unsigned int maxDigestLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_MD5_End)(cx, digest, digestLen, maxDigestLen); |
| } |
| |
| unsigned int |
| MD5_FlattenSize(MD5Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return 0; |
| return (vector->p_MD5_FlattenSize)(cx); |
| } |
| |
| SECStatus |
| MD5_Flatten(MD5Context *cx, unsigned char *space) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_MD5_Flatten)(cx, space); |
| } |
| |
| MD5Context * |
| MD5_Resurrect(unsigned char *space, void *arg) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_MD5_Resurrect)(space, arg); |
| } |
| |
| void |
| MD5_TraceState(MD5Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_MD5_TraceState)(cx); |
| } |
| |
| SECStatus |
| MD2_Hash(unsigned char *dest, const char *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_MD2_Hash)(dest, src); |
| } |
| |
| MD2Context * |
| MD2_NewContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_MD2_NewContext)(); |
| } |
| |
| void |
| MD2_DestroyContext(MD2Context *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_MD2_DestroyContext)(cx, freeit); |
| } |
| |
| void |
| MD2_Begin(MD2Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_MD2_Begin)(cx); |
| } |
| |
| void |
| MD2_Update(MD2Context *cx, const unsigned char *input, unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_MD2_Update)(cx, input, inputLen); |
| } |
| |
| void |
| MD2_End(MD2Context *cx, unsigned char *digest, |
| unsigned int *digestLen, unsigned int maxDigestLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_MD2_End)(cx, digest, digestLen, maxDigestLen); |
| } |
| |
| unsigned int |
| MD2_FlattenSize(MD2Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return 0; |
| return (vector->p_MD2_FlattenSize)(cx); |
| } |
| |
| SECStatus |
| MD2_Flatten(MD2Context *cx, unsigned char *space) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_MD2_Flatten)(cx, space); |
| } |
| |
| MD2Context * |
| MD2_Resurrect(unsigned char *space, void *arg) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_MD2_Resurrect)(space, arg); |
| } |
| |
| SECStatus |
| SHA1_Hash(unsigned char *dest, const char *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA1_Hash)(dest, src); |
| } |
| |
| SECStatus |
| SHA1_HashBuf(unsigned char *dest, const unsigned char *src, PRUint32 src_length) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA1_HashBuf)(dest, src, src_length); |
| } |
| |
| SHA1Context * |
| SHA1_NewContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_SHA1_NewContext)(); |
| } |
| |
| void |
| SHA1_DestroyContext(SHA1Context *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA1_DestroyContext)(cx, freeit); |
| } |
| |
| void |
| SHA1_Begin(SHA1Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA1_Begin)(cx); |
| } |
| |
| void |
| SHA1_Update(SHA1Context *cx, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA1_Update)(cx, input, inputLen); |
| } |
| |
| void |
| SHA1_End(SHA1Context *cx, unsigned char *digest, |
| unsigned int *digestLen, unsigned int maxDigestLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA1_End)(cx, digest, digestLen, maxDigestLen); |
| } |
| |
| void |
| SHA1_TraceState(SHA1Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA1_TraceState)(cx); |
| } |
| |
| unsigned int |
| SHA1_FlattenSize(SHA1Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return 0; |
| return (vector->p_SHA1_FlattenSize)(cx); |
| } |
| |
| SECStatus |
| SHA1_Flatten(SHA1Context *cx, unsigned char *space) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA1_Flatten)(cx, space); |
| } |
| |
| SHA1Context * |
| SHA1_Resurrect(unsigned char *space, void *arg) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_SHA1_Resurrect)(space, arg); |
| } |
| |
| SECStatus |
| RNG_RNGInit(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RNG_RNGInit)(); |
| } |
| |
| SECStatus |
| RNG_RandomUpdate(const void *data, size_t bytes) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RNG_RandomUpdate)(data, bytes); |
| } |
| |
| SECStatus |
| RNG_GenerateGlobalRandomBytes(void *dest, size_t len) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RNG_GenerateGlobalRandomBytes)(dest, len); |
| } |
| |
| void |
| RNG_RNGShutdown(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_RNG_RNGShutdown)(); |
| } |
| |
| SECStatus |
| PQG_ParamGen(unsigned int j, PQGParams **pParams, PQGVerify **pVfy) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_PQG_ParamGen)(j, pParams, pVfy); |
| } |
| |
| SECStatus |
| PQG_ParamGenSeedLen(unsigned int j, unsigned int seedBytes, |
| PQGParams **pParams, PQGVerify **pVfy) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_PQG_ParamGenSeedLen)(j, seedBytes, pParams, pVfy); |
| } |
| |
| SECStatus |
| PQG_VerifyParams(const PQGParams *params, const PQGVerify *vfy, |
| SECStatus *result) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_PQG_VerifyParams)(params, vfy, result); |
| } |
| |
| void |
| PQG_DestroyParams(PQGParams *params) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_PQG_DestroyParams)(params); |
| } |
| |
| void |
| PQG_DestroyVerify(PQGVerify *vfy) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_PQG_DestroyVerify)(vfy); |
| } |
| |
| void |
| BL_Cleanup(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_BL_Cleanup)(); |
| } |
| |
| void |
| BL_Unload(void) |
| { |
| /* This function is not thread-safe, but doesn't need to be, because it is |
| * only called from functions that are also defined as not thread-safe, |
| * namely C_Finalize in softoken, and the SSL bypass shutdown callback called |
| * from NSS_Shutdown. */ |
| char *disableUnload = NULL; |
| vector = NULL; |
| disableUnload = PR_GetEnvSecure("NSS_DISABLE_UNLOAD"); |
| if (blLib && !disableUnload) { |
| #ifdef DEBUG |
| PRStatus status = PR_UnloadLibrary(blLib); |
| PORT_Assert(PR_SUCCESS == status); |
| #else |
| PR_UnloadLibrary(blLib); |
| #endif |
| } |
| blLib = NULL; |
| loadFreeBLOnce = pristineCallOnce; |
| } |
| |
| /* ============== New for 3.003 =============================== */ |
| |
| SECStatus |
| SHA256_Hash(unsigned char *dest, const char *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA256_Hash)(dest, src); |
| } |
| |
| SECStatus |
| SHA256_HashBuf(unsigned char *dest, const unsigned char *src, PRUint32 src_length) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA256_HashBuf)(dest, src, src_length); |
| } |
| |
| SHA256Context * |
| SHA256_NewContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_SHA256_NewContext)(); |
| } |
| |
| void |
| SHA256_DestroyContext(SHA256Context *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA256_DestroyContext)(cx, freeit); |
| } |
| |
| void |
| SHA256_Begin(SHA256Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA256_Begin)(cx); |
| } |
| |
| void |
| SHA256_Update(SHA256Context *cx, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA256_Update)(cx, input, inputLen); |
| } |
| |
| void |
| SHA256_End(SHA256Context *cx, unsigned char *digest, |
| unsigned int *digestLen, unsigned int maxDigestLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA256_End)(cx, digest, digestLen, maxDigestLen); |
| } |
| |
| void |
| SHA256_TraceState(SHA256Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA256_TraceState)(cx); |
| } |
| |
| unsigned int |
| SHA256_FlattenSize(SHA256Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return 0; |
| return (vector->p_SHA256_FlattenSize)(cx); |
| } |
| |
| SECStatus |
| SHA256_Flatten(SHA256Context *cx, unsigned char *space) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA256_Flatten)(cx, space); |
| } |
| |
| SHA256Context * |
| SHA256_Resurrect(unsigned char *space, void *arg) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_SHA256_Resurrect)(space, arg); |
| } |
| |
| SECStatus |
| SHA512_Hash(unsigned char *dest, const char *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA512_Hash)(dest, src); |
| } |
| |
| SECStatus |
| SHA512_HashBuf(unsigned char *dest, const unsigned char *src, PRUint32 src_length) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA512_HashBuf)(dest, src, src_length); |
| } |
| |
| SHA512Context * |
| SHA512_NewContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_SHA512_NewContext)(); |
| } |
| |
| void |
| SHA512_DestroyContext(SHA512Context *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA512_DestroyContext)(cx, freeit); |
| } |
| |
| void |
| SHA512_Begin(SHA512Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA512_Begin)(cx); |
| } |
| |
| void |
| SHA512_Update(SHA512Context *cx, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA512_Update)(cx, input, inputLen); |
| } |
| |
| void |
| SHA512_End(SHA512Context *cx, unsigned char *digest, |
| unsigned int *digestLen, unsigned int maxDigestLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA512_End)(cx, digest, digestLen, maxDigestLen); |
| } |
| |
| void |
| SHA512_TraceState(SHA512Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA512_TraceState)(cx); |
| } |
| |
| unsigned int |
| SHA512_FlattenSize(SHA512Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return 0; |
| return (vector->p_SHA512_FlattenSize)(cx); |
| } |
| |
| SECStatus |
| SHA512_Flatten(SHA512Context *cx, unsigned char *space) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA512_Flatten)(cx, space); |
| } |
| |
| SHA512Context * |
| SHA512_Resurrect(unsigned char *space, void *arg) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_SHA512_Resurrect)(space, arg); |
| } |
| |
| SECStatus |
| SHA384_Hash(unsigned char *dest, const char *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA384_Hash)(dest, src); |
| } |
| |
| SECStatus |
| SHA384_HashBuf(unsigned char *dest, const unsigned char *src, PRUint32 src_length) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA384_HashBuf)(dest, src, src_length); |
| } |
| |
| SHA384Context * |
| SHA384_NewContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_SHA384_NewContext)(); |
| } |
| |
| void |
| SHA384_DestroyContext(SHA384Context *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA384_DestroyContext)(cx, freeit); |
| } |
| |
| void |
| SHA384_Begin(SHA384Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA384_Begin)(cx); |
| } |
| |
| void |
| SHA384_Update(SHA384Context *cx, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA384_Update)(cx, input, inputLen); |
| } |
| |
| void |
| SHA384_End(SHA384Context *cx, unsigned char *digest, |
| unsigned int *digestLen, unsigned int maxDigestLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA384_End)(cx, digest, digestLen, maxDigestLen); |
| } |
| |
| void |
| SHA384_TraceState(SHA384Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA384_TraceState)(cx); |
| } |
| |
| unsigned int |
| SHA384_FlattenSize(SHA384Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return 0; |
| return (vector->p_SHA384_FlattenSize)(cx); |
| } |
| |
| SECStatus |
| SHA384_Flatten(SHA384Context *cx, unsigned char *space) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA384_Flatten)(cx, space); |
| } |
| |
| SHA384Context * |
| SHA384_Resurrect(unsigned char *space, void *arg) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_SHA384_Resurrect)(space, arg); |
| } |
| |
| AESKeyWrapContext * |
| AESKeyWrap_CreateContext(const unsigned char *key, const unsigned char *iv, |
| int encrypt, unsigned int keylen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return vector->p_AESKeyWrap_CreateContext(key, iv, encrypt, keylen); |
| } |
| |
| void |
| AESKeyWrap_DestroyContext(AESKeyWrapContext *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| vector->p_AESKeyWrap_DestroyContext(cx, freeit); |
| } |
| |
| SECStatus |
| AESKeyWrap_Encrypt(AESKeyWrapContext *cx, unsigned char *output, |
| unsigned int *outputLen, unsigned int maxOutputLen, |
| const unsigned char *input, unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return vector->p_AESKeyWrap_Encrypt(cx, output, outputLen, maxOutputLen, |
| input, inputLen); |
| } |
| SECStatus |
| AESKeyWrap_Decrypt(AESKeyWrapContext *cx, unsigned char *output, |
| unsigned int *outputLen, unsigned int maxOutputLen, |
| const unsigned char *input, unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return vector->p_AESKeyWrap_Decrypt(cx, output, outputLen, maxOutputLen, |
| input, inputLen); |
| } |
| |
| PRBool |
| BLAPI_SHVerify(const char *name, PRFuncPtr addr) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return PR_FALSE; |
| return vector->p_BLAPI_SHVerify(name, addr); |
| } |
| |
| /* |
| * The Caller is expected to pass NULL as the name, which will |
| * trigger the p_BLAPI_VerifySelf() to return 'TRUE'. Pass the real |
| * name of the shared library we loaded (the static libraryName set |
| * in freebl_LoadDSO) to p_BLAPI_VerifySelf. |
| */ |
| PRBool |
| BLAPI_VerifySelf(const char *name) |
| { |
| PORT_Assert(!name); |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return PR_FALSE; |
| return vector->p_BLAPI_VerifySelf(libraryName); |
| } |
| |
| /* ============== New for 3.006 =============================== */ |
| |
| SECStatus |
| EC_NewKey(ECParams *params, ECPrivateKey **privKey) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_EC_NewKey)(params, privKey); |
| } |
| |
| SECStatus |
| EC_NewKeyFromSeed(ECParams *params, ECPrivateKey **privKey, |
| const unsigned char *seed, int seedlen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_EC_NewKeyFromSeed)(params, privKey, seed, seedlen); |
| } |
| |
| SECStatus |
| EC_ValidatePublicKey(ECParams *params, SECItem *publicValue) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_EC_ValidatePublicKey)(params, publicValue); |
| } |
| |
| SECStatus |
| ECDH_Derive(SECItem *publicValue, ECParams *params, SECItem *privateValue, |
| PRBool withCofactor, SECItem *derivedSecret) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_ECDH_Derive)(publicValue, params, privateValue, |
| withCofactor, derivedSecret); |
| } |
| |
| SECStatus |
| ECDSA_SignDigest(ECPrivateKey *key, SECItem *signature, |
| const SECItem *digest) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_ECDSA_SignDigest)(key, signature, digest); |
| } |
| |
| SECStatus |
| ECDSA_VerifyDigest(ECPublicKey *key, const SECItem *signature, |
| const SECItem *digest) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_ECDSA_VerifyDigest)(key, signature, digest); |
| } |
| |
| SECStatus |
| ECDSA_SignDigestWithSeed(ECPrivateKey *key, SECItem *signature, |
| const SECItem *digest, const unsigned char *seed, const int seedlen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_ECDSA_SignDigestWithSeed)(key, signature, digest, |
| seed, seedlen); |
| } |
| |
| /* ============== New for 3.008 =============================== */ |
| |
| AESContext * |
| AES_AllocateContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_AES_AllocateContext)(); |
| } |
| |
| AESKeyWrapContext * |
| AESKeyWrap_AllocateContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_AESKeyWrap_AllocateContext)(); |
| } |
| |
| DESContext * |
| DES_AllocateContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_DES_AllocateContext)(); |
| } |
| |
| RC2Context * |
| RC2_AllocateContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_RC2_AllocateContext)(); |
| } |
| |
| RC4Context * |
| RC4_AllocateContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_RC4_AllocateContext)(); |
| } |
| |
| SECStatus |
| AES_InitContext(AESContext *cx, const unsigned char *key, |
| unsigned int keylen, const unsigned char *iv, int mode, |
| unsigned int encrypt, unsigned int blocklen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_AES_InitContext)(cx, key, keylen, iv, mode, encrypt, |
| blocklen); |
| } |
| |
| SECStatus |
| AESKeyWrap_InitContext(AESKeyWrapContext *cx, const unsigned char *key, |
| unsigned int keylen, const unsigned char *iv, int mode, |
| unsigned int encrypt, unsigned int blocklen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_AESKeyWrap_InitContext)(cx, key, keylen, iv, mode, |
| encrypt, blocklen); |
| } |
| |
| SECStatus |
| DES_InitContext(DESContext *cx, const unsigned char *key, |
| unsigned int keylen, const unsigned char *iv, int mode, |
| unsigned int encrypt, unsigned int xtra) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_DES_InitContext)(cx, key, keylen, iv, mode, encrypt, xtra); |
| } |
| |
| SECStatus |
| SEED_InitContext(SEEDContext *cx, const unsigned char *key, |
| unsigned int keylen, const unsigned char *iv, int mode, |
| unsigned int encrypt, unsigned int xtra) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SEED_InitContext)(cx, key, keylen, iv, mode, encrypt, xtra); |
| } |
| |
| SECStatus |
| RC2_InitContext(RC2Context *cx, const unsigned char *key, |
| unsigned int keylen, const unsigned char *iv, int mode, |
| unsigned int effectiveKeyLen, unsigned int xtra) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RC2_InitContext)(cx, key, keylen, iv, mode, |
| effectiveKeyLen, xtra); |
| } |
| |
| SECStatus |
| RC4_InitContext(RC4Context *cx, const unsigned char *key, |
| unsigned int keylen, const unsigned char *x1, int x2, |
| unsigned int x3, unsigned int x4) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RC4_InitContext)(cx, key, keylen, x1, x2, x3, x4); |
| } |
| |
| void |
| MD2_Clone(MD2Context *dest, MD2Context *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_MD2_Clone)(dest, src); |
| } |
| |
| void |
| MD5_Clone(MD5Context *dest, MD5Context *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_MD5_Clone)(dest, src); |
| } |
| |
| void |
| SHA1_Clone(SHA1Context *dest, SHA1Context *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA1_Clone)(dest, src); |
| } |
| |
| void |
| SHA256_Clone(SHA256Context *dest, SHA256Context *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA256_Clone)(dest, src); |
| } |
| |
| void |
| SHA384_Clone(SHA384Context *dest, SHA384Context *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA384_Clone)(dest, src); |
| } |
| |
| void |
| SHA512_Clone(SHA512Context *dest, SHA512Context *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA512_Clone)(dest, src); |
| } |
| |
| SECStatus |
| TLS_PRF(const SECItem *secret, const char *label, |
| SECItem *seed, SECItem *result, PRBool isFIPS) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_TLS_PRF)(secret, label, seed, result, isFIPS); |
| } |
| |
| const SECHashObject * |
| HASH_GetRawHashObject(HASH_HashType hashType) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_HASH_GetRawHashObject)(hashType); |
| } |
| |
| void |
| HMAC_Destroy(HMACContext *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_HMAC_Destroy)(cx, freeit); |
| } |
| |
| HMACContext * |
| HMAC_Create(const SECHashObject *hashObj, const unsigned char *secret, |
| unsigned int secret_len, PRBool isFIPS) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_HMAC_Create)(hashObj, secret, secret_len, isFIPS); |
| } |
| |
| SECStatus |
| HMAC_Init(HMACContext *cx, const SECHashObject *hashObj, |
| const unsigned char *secret, unsigned int secret_len, PRBool isFIPS) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_HMAC_Init)(cx, hashObj, secret, secret_len, isFIPS); |
| } |
| |
| void |
| HMAC_Begin(HMACContext *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_HMAC_Begin)(cx); |
| } |
| |
| void |
| HMAC_Update(HMACContext *cx, const unsigned char *data, unsigned int data_len) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_HMAC_Update)(cx, data, data_len); |
| } |
| |
| SECStatus |
| HMAC_Finish(HMACContext *cx, unsigned char *result, unsigned int *result_len, |
| unsigned int max_result_len) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_HMAC_Finish)(cx, result, result_len, max_result_len); |
| } |
| |
| HMACContext * |
| HMAC_Clone(HMACContext *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_HMAC_Clone)(cx); |
| } |
| |
| void |
| RNG_SystemInfoForRNG(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_RNG_SystemInfoForRNG)(); |
| } |
| |
| SECStatus |
| FIPS186Change_GenerateX(unsigned char *XKEY, const unsigned char *XSEEDj, |
| unsigned char *x_j) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_FIPS186Change_GenerateX)(XKEY, XSEEDj, x_j); |
| } |
| |
| SECStatus |
| FIPS186Change_ReduceModQForDSA(const unsigned char *w, |
| const unsigned char *q, |
| unsigned char *xj) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_FIPS186Change_ReduceModQForDSA)(w, q, xj); |
| } |
| |
| /* === new for Camellia === */ |
| SECStatus |
| Camellia_InitContext(CamelliaContext *cx, const unsigned char *key, |
| unsigned int keylen, const unsigned char *iv, int mode, |
| unsigned int encrypt, unsigned int unused) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_Camellia_InitContext)(cx, key, keylen, iv, mode, encrypt, |
| unused); |
| } |
| |
| CamelliaContext * |
| Camellia_AllocateContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_Camellia_AllocateContext)(); |
| } |
| |
| CamelliaContext * |
| Camellia_CreateContext(const unsigned char *key, const unsigned char *iv, |
| int mode, int encrypt, |
| unsigned int keylen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_Camellia_CreateContext)(key, iv, mode, encrypt, keylen); |
| } |
| |
| void |
| Camellia_DestroyContext(CamelliaContext *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_Camellia_DestroyContext)(cx, freeit); |
| } |
| |
| SECStatus |
| Camellia_Encrypt(CamelliaContext *cx, unsigned char *output, |
| unsigned int *outputLen, unsigned int maxOutputLen, |
| const unsigned char *input, unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_Camellia_Encrypt)(cx, output, outputLen, maxOutputLen, |
| input, inputLen); |
| } |
| |
| SECStatus |
| Camellia_Decrypt(CamelliaContext *cx, unsigned char *output, |
| unsigned int *outputLen, unsigned int maxOutputLen, |
| const unsigned char *input, unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_Camellia_Decrypt)(cx, output, outputLen, maxOutputLen, |
| input, inputLen); |
| } |
| |
| void |
| BL_SetForkState(PRBool forked) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_BL_SetForkState)(forked); |
| } |
| |
| SECStatus |
| PRNGTEST_Instantiate(const PRUint8 *entropy, unsigned int entropy_len, |
| const PRUint8 *nonce, unsigned int nonce_len, |
| const PRUint8 *personal_string, unsigned int ps_len) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_PRNGTEST_Instantiate)(entropy, entropy_len, |
| nonce, nonce_len, |
| personal_string, ps_len); |
| } |
| |
| SECStatus |
| PRNGTEST_Reseed(const PRUint8 *entropy, unsigned int entropy_len, |
| const PRUint8 *additional, unsigned int additional_len) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_PRNGTEST_Reseed)(entropy, entropy_len, |
| additional, additional_len); |
| } |
| |
| SECStatus |
| PRNGTEST_Generate(PRUint8 *bytes, unsigned int bytes_len, |
| const PRUint8 *additional, unsigned int additional_len) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_PRNGTEST_Generate)(bytes, bytes_len, |
| additional, additional_len); |
| } |
| |
| SECStatus |
| PRNGTEST_Uninstantiate() |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_PRNGTEST_Uninstantiate)(); |
| } |
| |
| SECStatus |
| RSA_PopulatePrivateKey(RSAPrivateKey *key) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_PopulatePrivateKey)(key); |
| } |
| |
| SECStatus |
| JPAKE_Sign(PLArenaPool *arena, const PQGParams *pqg, HASH_HashType hashType, |
| const SECItem *signerID, const SECItem *x, |
| const SECItem *testRandom, const SECItem *gxIn, SECItem *gxOut, |
| SECItem *gv, SECItem *r) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_JPAKE_Sign)(arena, pqg, hashType, signerID, x, |
| testRandom, gxIn, gxOut, gv, r); |
| } |
| |
| SECStatus |
| JPAKE_Verify(PLArenaPool *arena, const PQGParams *pqg, |
| HASH_HashType hashType, const SECItem *signerID, |
| const SECItem *peerID, const SECItem *gx, |
| const SECItem *gv, const SECItem *r) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_JPAKE_Verify)(arena, pqg, hashType, signerID, peerID, |
| gx, gv, r); |
| } |
| |
| SECStatus |
| JPAKE_Round2(PLArenaPool *arena, const SECItem *p, const SECItem *q, |
| const SECItem *gx1, const SECItem *gx3, const SECItem *gx4, |
| SECItem *base, const SECItem *x2, const SECItem *s, SECItem *x2s) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_JPAKE_Round2)(arena, p, q, gx1, gx3, gx4, base, x2, s, x2s); |
| } |
| |
| SECStatus |
| JPAKE_Final(PLArenaPool *arena, const SECItem *p, const SECItem *q, |
| const SECItem *x2, const SECItem *gx4, const SECItem *x2s, |
| const SECItem *B, SECItem *K) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_JPAKE_Final)(arena, p, q, x2, gx4, x2s, B, K); |
| } |
| |
| SECStatus |
| TLS_P_hash(HASH_HashType hashAlg, const SECItem *secret, const char *label, |
| SECItem *seed, SECItem *result, PRBool isFIPS) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_TLS_P_hash)(hashAlg, secret, label, seed, result, isFIPS); |
| } |
| |
| SECStatus |
| SHA224_Hash(unsigned char *dest, const char *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA224_Hash)(dest, src); |
| } |
| |
| SECStatus |
| SHA224_HashBuf(unsigned char *dest, const unsigned char *src, PRUint32 src_length) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA224_HashBuf)(dest, src, src_length); |
| } |
| |
| SHA224Context * |
| SHA224_NewContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_SHA224_NewContext)(); |
| } |
| |
| void |
| SHA224_DestroyContext(SHA224Context *cx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA224_DestroyContext)(cx, freeit); |
| } |
| |
| void |
| SHA224_Begin(SHA256Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA224_Begin)(cx); |
| } |
| |
| void |
| SHA224_Update(SHA224Context *cx, const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA224_Update)(cx, input, inputLen); |
| } |
| |
| void |
| SHA224_End(SHA224Context *cx, unsigned char *digest, |
| unsigned int *digestLen, unsigned int maxDigestLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA224_End)(cx, digest, digestLen, maxDigestLen); |
| } |
| |
| void |
| SHA224_TraceState(SHA224Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA224_TraceState)(cx); |
| } |
| |
| unsigned int |
| SHA224_FlattenSize(SHA224Context *cx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return 0; |
| return (vector->p_SHA224_FlattenSize)(cx); |
| } |
| |
| SECStatus |
| SHA224_Flatten(SHA224Context *cx, unsigned char *space) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SHA224_Flatten)(cx, space); |
| } |
| |
| SHA224Context * |
| SHA224_Resurrect(unsigned char *space, void *arg) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_SHA224_Resurrect)(space, arg); |
| } |
| |
| void |
| SHA224_Clone(SHA224Context *dest, SHA224Context *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_SHA224_Clone)(dest, src); |
| } |
| |
| PRBool |
| BLAPI_SHVerifyFile(const char *name) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return PR_FALSE; |
| return vector->p_BLAPI_SHVerifyFile(name); |
| } |
| |
| /* === new for DSA-2 === */ |
| SECStatus |
| PQG_ParamGenV2(unsigned int L, unsigned int N, unsigned int seedBytes, |
| PQGParams **pParams, PQGVerify **pVfy) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_PQG_ParamGenV2)(L, N, seedBytes, pParams, pVfy); |
| } |
| |
| SECStatus |
| PRNGTEST_RunHealthTests(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return vector->p_PRNGTEST_RunHealthTests(); |
| } |
| |
| SECStatus |
| SSLv3_MAC_ConstantTime( |
| unsigned char *result, |
| unsigned int *resultLen, |
| unsigned int maxResultLen, |
| const SECHashObject *hashObj, |
| const unsigned char *secret, |
| unsigned int secretLen, |
| const unsigned char *header, |
| unsigned int headerLen, |
| const unsigned char *body, |
| unsigned int bodyLen, |
| unsigned int bodyTotalLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_SSLv3_MAC_ConstantTime)( |
| result, resultLen, maxResultLen, |
| hashObj, |
| secret, secretLen, |
| header, headerLen, |
| body, bodyLen, bodyTotalLen); |
| } |
| |
| SECStatus |
| HMAC_ConstantTime( |
| unsigned char *result, |
| unsigned int *resultLen, |
| unsigned int maxResultLen, |
| const SECHashObject *hashObj, |
| const unsigned char *secret, |
| unsigned int secretLen, |
| const unsigned char *header, |
| unsigned int headerLen, |
| const unsigned char *body, |
| unsigned int bodyLen, |
| unsigned int bodyTotalLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_HMAC_ConstantTime)( |
| result, resultLen, maxResultLen, |
| hashObj, |
| secret, secretLen, |
| header, headerLen, |
| body, bodyLen, bodyTotalLen); |
| } |
| |
| SECStatus |
| RSA_SignRaw(RSAPrivateKey *key, |
| unsigned char *output, |
| unsigned int *outputLen, |
| unsigned int maxOutputLen, |
| const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_SignRaw)(key, output, outputLen, maxOutputLen, input, |
| inputLen); |
| } |
| |
| SECStatus |
| RSA_CheckSignRaw(RSAPublicKey *key, |
| const unsigned char *sig, |
| unsigned int sigLen, |
| const unsigned char *hash, |
| unsigned int hashLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_CheckSignRaw)(key, sig, sigLen, hash, hashLen); |
| } |
| |
| SECStatus |
| RSA_CheckSignRecoverRaw(RSAPublicKey *key, |
| unsigned char *data, |
| unsigned int *dataLen, |
| unsigned int maxDataLen, |
| const unsigned char *sig, |
| unsigned int sigLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_CheckSignRecoverRaw)(key, data, dataLen, maxDataLen, |
| sig, sigLen); |
| } |
| |
| SECStatus |
| RSA_EncryptRaw(RSAPublicKey *key, |
| unsigned char *output, |
| unsigned int *outputLen, |
| unsigned int maxOutputLen, |
| const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_EncryptRaw)(key, output, outputLen, maxOutputLen, |
| input, inputLen); |
| } |
| |
| SECStatus |
| RSA_DecryptRaw(RSAPrivateKey *key, |
| unsigned char *output, |
| unsigned int *outputLen, |
| unsigned int maxOutputLen, |
| const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_DecryptRaw)(key, output, outputLen, maxOutputLen, |
| input, inputLen); |
| } |
| |
| SECStatus |
| RSA_EncryptOAEP(RSAPublicKey *key, |
| HASH_HashType hashAlg, |
| HASH_HashType maskHashAlg, |
| const unsigned char *label, |
| unsigned int labelLen, |
| const unsigned char *seed, |
| unsigned int seedLen, |
| unsigned char *output, |
| unsigned int *outputLen, |
| unsigned int maxOutputLen, |
| const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_EncryptOAEP)(key, hashAlg, maskHashAlg, label, |
| labelLen, seed, seedLen, output, |
| outputLen, maxOutputLen, input, inputLen); |
| } |
| |
| SECStatus |
| RSA_DecryptOAEP(RSAPrivateKey *key, |
| HASH_HashType hashAlg, |
| HASH_HashType maskHashAlg, |
| const unsigned char *label, |
| unsigned int labelLen, |
| unsigned char *output, |
| unsigned int *outputLen, |
| unsigned int maxOutputLen, |
| const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_DecryptOAEP)(key, hashAlg, maskHashAlg, label, |
| labelLen, output, outputLen, |
| maxOutputLen, input, inputLen); |
| } |
| |
| SECStatus |
| RSA_EncryptBlock(RSAPublicKey *key, |
| unsigned char *output, |
| unsigned int *outputLen, |
| unsigned int maxOutputLen, |
| const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_EncryptBlock)(key, output, outputLen, maxOutputLen, |
| input, inputLen); |
| } |
| |
| SECStatus |
| RSA_DecryptBlock(RSAPrivateKey *key, |
| unsigned char *output, |
| unsigned int *outputLen, |
| unsigned int maxOutputLen, |
| const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_DecryptBlock)(key, output, outputLen, maxOutputLen, |
| input, inputLen); |
| } |
| |
| SECStatus |
| RSA_SignPSS(RSAPrivateKey *key, |
| HASH_HashType hashAlg, |
| HASH_HashType maskHashAlg, |
| const unsigned char *salt, |
| unsigned int saltLen, |
| unsigned char *output, |
| unsigned int *outputLen, |
| unsigned int maxOutputLen, |
| const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_SignPSS)(key, hashAlg, maskHashAlg, salt, saltLen, |
| output, outputLen, maxOutputLen, input, |
| inputLen); |
| } |
| |
| SECStatus |
| RSA_CheckSignPSS(RSAPublicKey *key, |
| HASH_HashType hashAlg, |
| HASH_HashType maskHashAlg, |
| unsigned int saltLen, |
| const unsigned char *sig, |
| unsigned int sigLen, |
| const unsigned char *hash, |
| unsigned int hashLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_CheckSignPSS)(key, hashAlg, maskHashAlg, saltLen, |
| sig, sigLen, hash, hashLen); |
| } |
| |
| SECStatus |
| RSA_Sign(RSAPrivateKey *key, |
| unsigned char *output, |
| unsigned int *outputLen, |
| unsigned int maxOutputLen, |
| const unsigned char *input, |
| unsigned int inputLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_Sign)(key, output, outputLen, maxOutputLen, input, |
| inputLen); |
| } |
| |
| SECStatus |
| RSA_CheckSign(RSAPublicKey *key, |
| const unsigned char *sig, |
| unsigned int sigLen, |
| const unsigned char *data, |
| unsigned int dataLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_CheckSign)(key, sig, sigLen, data, dataLen); |
| } |
| |
| SECStatus |
| RSA_CheckSignRecover(RSAPublicKey *key, |
| unsigned char *output, |
| unsigned int *outputLen, |
| unsigned int maxOutputLen, |
| const unsigned char *sig, |
| unsigned int sigLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_RSA_CheckSignRecover)(key, output, outputLen, maxOutputLen, |
| sig, sigLen); |
| } |
| |
| SECStatus |
| EC_FillParams(PLArenaPool *arena, |
| const SECItem *encodedParams, |
| ECParams *params) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_EC_FillParams)(arena, encodedParams, params); |
| } |
| |
| SECStatus |
| EC_DecodeParams(const SECItem *encodedParams, |
| ECParams **ecparams) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_EC_DecodeParams)(encodedParams, ecparams); |
| } |
| |
| SECStatus |
| EC_CopyParams(PLArenaPool *arena, ECParams *dstParams, |
| const ECParams *srcParams) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_EC_CopyParams)(arena, dstParams, srcParams); |
| } |
| |
| SECStatus |
| ChaCha20Poly1305_InitContext(ChaCha20Poly1305Context *ctx, |
| const unsigned char *key, unsigned int keyLen, |
| unsigned int tagLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_ChaCha20Poly1305_InitContext)(ctx, key, keyLen, tagLen); |
| } |
| |
| ChaCha20Poly1305Context * |
| ChaCha20Poly1305_CreateContext(const unsigned char *key, unsigned int keyLen, |
| unsigned int tagLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return NULL; |
| return (vector->p_ChaCha20Poly1305_CreateContext)(key, keyLen, tagLen); |
| } |
| |
| void |
| ChaCha20Poly1305_DestroyContext(ChaCha20Poly1305Context *ctx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return; |
| (vector->p_ChaCha20Poly1305_DestroyContext)(ctx, freeit); |
| } |
| |
| SECStatus |
| ChaCha20Poly1305_Seal(const ChaCha20Poly1305Context *ctx, |
| unsigned char *output, unsigned int *outputLen, |
| unsigned int maxOutputLen, |
| const unsigned char *input, unsigned int inputLen, |
| const unsigned char *nonce, unsigned int nonceLen, |
| const unsigned char *ad, unsigned int adLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_ChaCha20Poly1305_Seal)( |
| ctx, output, outputLen, maxOutputLen, input, inputLen, |
| nonce, nonceLen, ad, adLen); |
| } |
| |
| SECStatus |
| ChaCha20Poly1305_Open(const ChaCha20Poly1305Context *ctx, |
| unsigned char *output, unsigned int *outputLen, |
| unsigned int maxOutputLen, |
| const unsigned char *input, unsigned int inputLen, |
| const unsigned char *nonce, unsigned int nonceLen, |
| const unsigned char *ad, unsigned int adLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_ChaCha20Poly1305_Open)( |
| ctx, output, outputLen, maxOutputLen, input, inputLen, |
| nonce, nonceLen, ad, adLen); |
| } |
| |
| int |
| EC_GetPointSize(const ECParams *params) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) |
| return SECFailure; |
| return (vector->p_EC_GetPointSize)(params); |
| } |
| |
| SECStatus |
| BLAKE2B_Hash(unsigned char *dest, const char *src) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) { |
| return SECFailure; |
| } |
| return (vector->p_BLAKE2B_Hash)(dest, src); |
| } |
| |
| SECStatus |
| BLAKE2B_HashBuf(unsigned char *output, const unsigned char *input, PRUint32 inlen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) { |
| return SECFailure; |
| } |
| return (vector->p_BLAKE2B_HashBuf)(output, input, inlen); |
| } |
| |
| SECStatus |
| BLAKE2B_MAC_HashBuf(unsigned char *output, const unsigned char *input, |
| unsigned int inlen, const unsigned char *key, |
| unsigned int keylen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) { |
| return SECFailure; |
| } |
| return (vector->p_BLAKE2B_MAC_HashBuf)(output, input, inlen, key, keylen); |
| } |
| |
| BLAKE2BContext * |
| BLAKE2B_NewContext(void) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) { |
| return NULL; |
| } |
| return (vector->p_BLAKE2B_NewContext)(); |
| } |
| |
| void |
| BLAKE2B_DestroyContext(BLAKE2BContext *ctx, PRBool freeit) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) { |
| return; |
| } |
| (vector->p_BLAKE2B_DestroyContext)(ctx, freeit); |
| } |
| |
| SECStatus |
| BLAKE2B_Begin(BLAKE2BContext *ctx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) { |
| return SECFailure; |
| } |
| return (vector->p_BLAKE2B_Begin)(ctx); |
| } |
| |
| SECStatus |
| BLAKE2B_MAC_Begin(BLAKE2BContext *ctx, const PRUint8 *key, const size_t keylen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) { |
| return SECFailure; |
| } |
| return (vector->p_BLAKE2B_MAC_Begin)(ctx, key, keylen); |
| } |
| |
| SECStatus |
| BLAKE2B_Update(BLAKE2BContext *ctx, const unsigned char *in, unsigned int inlen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) { |
| return SECFailure; |
| } |
| return (vector->p_BLAKE2B_Update)(ctx, in, inlen); |
| } |
| |
| SECStatus |
| BLAKE2B_End(BLAKE2BContext *ctx, unsigned char *out, |
| unsigned int *digestLen, size_t maxDigestLen) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) { |
| return SECFailure; |
| } |
| return (vector->p_BLAKE2B_End)(ctx, out, digestLen, maxDigestLen); |
| } |
| |
| unsigned int |
| BLAKE2B_FlattenSize(BLAKE2BContext *ctx) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) { |
| return 0; |
| } |
| return (vector->p_BLAKE2B_FlattenSize)(ctx); |
| } |
| |
| SECStatus |
| BLAKE2B_Flatten(BLAKE2BContext *ctx, unsigned char *space) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) { |
| return SECFailure; |
| } |
| return (vector->p_BLAKE2B_Flatten)(ctx, space); |
| } |
| |
| BLAKE2BContext * |
| BLAKE2B_Resurrect(unsigned char *space, void *arg) |
| { |
| if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) { |
| return NULL; |
| } |
| return (vector->p_BLAKE2B_Resurrect)(space, arg); |
| } |