Index: net/third_party/nss/ssl/bodge/loader.c |
diff --git a/net/third_party/nss/ssl/bodge/loader.c b/net/third_party/nss/ssl/bodge/loader.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0e63044f933f113e0b5168718ca3d746985dcb25 |
--- /dev/null |
+++ b/net/third_party/nss/ssl/bodge/loader.c |
@@ -0,0 +1,1699 @@ |
+/* |
+ * loader.c - load platform dependent DSO containing freebl implementation. |
+ * |
+ * ***** BEGIN LICENSE BLOCK ***** |
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
+ * |
+ * The contents of this file are subject to the Mozilla Public License Version |
+ * 1.1 (the "License"); you may not use this file except in compliance with |
+ * the License. You may obtain a copy of the License at |
+ * http://www.mozilla.org/MPL/ |
+ * |
+ * Software distributed under the License is distributed on an "AS IS" basis, |
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License |
+ * for the specific language governing rights and limitations under the |
+ * License. |
+ * |
+ * The Original Code is the Netscape security libraries. |
+ * |
+ * The Initial Developer of the Original Code is |
+ * Netscape Communications Corporation. |
+ * Portions created by the Initial Developer are Copyright (C) 2000 |
+ * the Initial Developer. All Rights Reserved. |
+ * |
+ * Contributor(s): |
+ * Dr Vipul Gupta <vipul.gupta@sun.com>, Sun Microsystems Laboratories |
+ * |
+ * Alternatively, the contents of this file may be used under the terms of |
+ * either the GNU General Public License Version 2 or later (the "GPL"), or |
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), |
+ * in which case the provisions of the GPL or the LGPL are applicable instead |
+ * of those above. If you wish to allow use of your version of this file only |
+ * under the terms of either the GPL or the LGPL, and not to allow others to |
+ * use your version of this file under the terms of the MPL, indicate your |
+ * decision by deleting the provisions above and replace them with the notice |
+ * and other provisions required by the GPL or the LGPL. If you do not delete |
+ * the provisions above, a recipient may use your version of this file under |
+ * the terms of any one of the MPL, the GPL or the LGPL. |
+ * |
+ * ***** END LICENSE BLOCK ***** */ |
+/* $Id: loader.c,v 1.44 2009/03/29 03:45:32 wtc%google.com Exp $ */ |
+ |
+#include "loader.h" |
+#include "prmem.h" |
+#include "prerror.h" |
+#include "prinit.h" |
+#include "prenv.h" |
+ |
+static const char* default_name = |
+ SHLIB_PREFIX"freebl"SHLIB_VERSION"."SHLIB_SUFFIX; |
+ |
+/* getLibName() returns the name of the library to load. */ |
+ |
+#if defined(SOLARIS) && defined(__sparc) |
+#include <stddef.h> |
+#include <strings.h> |
+#include <sys/systeminfo.h> |
+ |
+ |
+#if defined(NSS_USE_64) |
+ |
+const static char fpu_hybrid_shared_lib[] = "libfreebl_64fpu_3.so"; |
+const static char int_hybrid_shared_lib[] = "libfreebl_64int_3.so"; |
+const static char non_hybrid_shared_lib[] = "libfreebl_64fpu_3.so"; |
+ |
+const static char int_hybrid_isa[] = "sparcv9"; |
+const static char fpu_hybrid_isa[] = "sparcv9+vis"; |
+ |
+#else |
+ |
+const static char fpu_hybrid_shared_lib[] = "libfreebl_32fpu_3.so"; |
+const static char int_hybrid_shared_lib[] = "libfreebl_32int64_3.so"; |
+const static char non_hybrid_shared_lib[] = "libfreebl_32int_3.so"; |
+ |
+const static char int_hybrid_isa[] = "sparcv8plus"; |
+const static char fpu_hybrid_isa[] = "sparcv8plus+vis"; |
+ |
+#endif |
+ |
+static const char * |
+getLibName(void) |
+{ |
+ char * found_int_hybrid; |
+ char * found_fpu_hybrid; |
+ long buflen; |
+ char buf[256]; |
+ |
+ buflen = sysinfo(SI_ISALIST, buf, sizeof buf); |
+ if (buflen <= 0) |
+ return NULL; |
+ /* sysinfo output is always supposed to be NUL terminated, but ... */ |
+ if (buflen < sizeof buf) |
+ buf[buflen] = '\0'; |
+ else |
+ buf[(sizeof buf) - 1] = '\0'; |
+ /* The ISA list is a space separated string of names of ISAs and |
+ * ISA extensions, in order of decreasing performance. |
+ * There are two different ISAs with which NSS's crypto code can be |
+ * accelerated. If both are in the list, we take the first one. |
+ * If one is in the list, we use it, and if neither then we use |
+ * the base unaccelerated code. |
+ */ |
+ found_int_hybrid = strstr(buf, int_hybrid_isa); |
+ found_fpu_hybrid = strstr(buf, fpu_hybrid_isa); |
+ if (found_fpu_hybrid && |
+ (!found_int_hybrid || |
+ (found_int_hybrid - found_fpu_hybrid) >= 0)) { |
+ return fpu_hybrid_shared_lib; |
+ } |
+ if (found_int_hybrid) { |
+ return int_hybrid_shared_lib; |
+ } |
+ return non_hybrid_shared_lib; |
+} |
+ |
+#elif defined(HPUX) && !defined(NSS_USE_64) && !defined(__ia64) |
+/* This code tests to see if we're running on a PA2.x CPU. |
+** It returns true (1) if so, and false (0) otherwise. |
+*/ |
+static const char * |
+getLibName(void) |
+{ |
+ long cpu = sysconf(_SC_CPU_VERSION); |
+ return (cpu == CPU_PA_RISC2_0) |
+ ? "libfreebl_32fpu_3.sl" |
+ : "libfreebl_32int32_3.sl" ; |
+} |
+#else |
+/* default case, for platforms/ABIs that have only one freebl shared lib. */ |
+static const char * getLibName(void) { return default_name; } |
+#endif |
+ |
+#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; |
+ |
+#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"); |
+ PRStatus status; |
+ 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; |
+ } |
+ } |
+ } |
+ status = PR_UnloadLibrary(handle); |
+ PORT_Assert(PR_SUCCESS == status); |
+ } |
+ 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(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 |
+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, uint32 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, uint32 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; |
+ /* If an SSL socket is configured with SSL_BYPASS_PKCS11, but the application |
+ * never does a handshake on it, BL_Unload will be called even though freebl |
+ * was never loaded. So, don't assert blLib. */ |
+ if (blLib) { |
+ disableUnload = PR_GetEnv("NSS_DISABLE_UNLOAD"); |
+ if (!disableUnload) { |
+ PRStatus status = PR_UnloadLibrary(blLib); |
+ PORT_Assert(PR_SUCCESS == status); |
+ } |
+ 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, uint32 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, uint32 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, uint32 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'. If we really loaded |
+ * from a shared library, BLAPI_VerifySelf will get pick up the real name |
+ * from the static set in freebl_LoadDSO( void ) |
+ */ |
+PRBool |
+BLAPI_VerifySelf(const char *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)(); |
+} |
+ |
+ |