| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 /* | 
|  | 2  * loader.c - load platform dependent DSO containing freebl implementation. | 
|  | 3  * | 
|  | 4  * ***** BEGIN LICENSE BLOCK ***** | 
|  | 5  * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | 
|  | 6  * | 
|  | 7  * The contents of this file are subject to the Mozilla Public License Version | 
|  | 8  * 1.1 (the "License"); you may not use this file except in compliance with | 
|  | 9  * the License. You may obtain a copy of the License at | 
|  | 10  * http://www.mozilla.org/MPL/ | 
|  | 11  * | 
|  | 12  * Software distributed under the License is distributed on an "AS IS" basis, | 
|  | 13  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | 
|  | 14  * for the specific language governing rights and limitations under the | 
|  | 15  * License. | 
|  | 16  * | 
|  | 17  * The Original Code is the Netscape security libraries. | 
|  | 18  * | 
|  | 19  * The Initial Developer of the Original Code is | 
|  | 20  * Netscape Communications Corporation. | 
|  | 21  * Portions created by the Initial Developer are Copyright (C) 2000 | 
|  | 22  * the Initial Developer. All Rights Reserved. | 
|  | 23  * | 
|  | 24  * Contributor(s): | 
|  | 25  *   Dr Vipul Gupta <vipul.gupta@sun.com>, Sun Microsystems Laboratories | 
|  | 26  * | 
|  | 27  * Alternatively, the contents of this file may be used under the terms of | 
|  | 28  * either the GNU General Public License Version 2 or later (the "GPL"), or | 
|  | 29  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), | 
|  | 30  * in which case the provisions of the GPL or the LGPL are applicable instead | 
|  | 31  * of those above. If you wish to allow use of your version of this file only | 
|  | 32  * under the terms of either the GPL or the LGPL, and not to allow others to | 
|  | 33  * use your version of this file under the terms of the MPL, indicate your | 
|  | 34  * decision by deleting the provisions above and replace them with the notice | 
|  | 35  * and other provisions required by the GPL or the LGPL. If you do not delete | 
|  | 36  * the provisions above, a recipient may use your version of this file under | 
|  | 37  * the terms of any one of the MPL, the GPL or the LGPL. | 
|  | 38  * | 
|  | 39  * ***** END LICENSE BLOCK ***** */ | 
|  | 40 /* $Id: loader.c,v 1.44 2009/03/29 03:45:32 wtc%google.com Exp $ */ | 
|  | 41 | 
|  | 42 #include "loader.h" | 
|  | 43 #include "prmem.h" | 
|  | 44 #include "prerror.h" | 
|  | 45 #include "prinit.h" | 
|  | 46 #include "prenv.h" | 
|  | 47 | 
|  | 48 static const char* default_name = | 
|  | 49     SHLIB_PREFIX"freebl"SHLIB_VERSION"."SHLIB_SUFFIX; | 
|  | 50 | 
|  | 51 /* getLibName() returns the name of the library to load. */ | 
|  | 52 | 
|  | 53 #if defined(SOLARIS) && defined(__sparc) | 
|  | 54 #include <stddef.h> | 
|  | 55 #include <strings.h> | 
|  | 56 #include <sys/systeminfo.h> | 
|  | 57 | 
|  | 58 | 
|  | 59 #if defined(NSS_USE_64) | 
|  | 60 | 
|  | 61 const static char fpu_hybrid_shared_lib[] = "libfreebl_64fpu_3.so"; | 
|  | 62 const static char int_hybrid_shared_lib[] = "libfreebl_64int_3.so"; | 
|  | 63 const static char non_hybrid_shared_lib[] = "libfreebl_64fpu_3.so"; | 
|  | 64 | 
|  | 65 const static char int_hybrid_isa[] = "sparcv9"; | 
|  | 66 const static char fpu_hybrid_isa[] = "sparcv9+vis"; | 
|  | 67 | 
|  | 68 #else | 
|  | 69 | 
|  | 70 const static char fpu_hybrid_shared_lib[] = "libfreebl_32fpu_3.so"; | 
|  | 71 const static char int_hybrid_shared_lib[] = "libfreebl_32int64_3.so"; | 
|  | 72 const static char non_hybrid_shared_lib[] = "libfreebl_32int_3.so"; | 
|  | 73 | 
|  | 74 const static char int_hybrid_isa[] = "sparcv8plus"; | 
|  | 75 const static char fpu_hybrid_isa[] = "sparcv8plus+vis"; | 
|  | 76 | 
|  | 77 #endif | 
|  | 78 | 
|  | 79 static const char * | 
|  | 80 getLibName(void) | 
|  | 81 { | 
|  | 82     char * found_int_hybrid; | 
|  | 83     char * found_fpu_hybrid; | 
|  | 84     long buflen; | 
|  | 85     char buf[256]; | 
|  | 86 | 
|  | 87     buflen = sysinfo(SI_ISALIST, buf, sizeof buf); | 
|  | 88     if (buflen <= 0) | 
|  | 89         return NULL; | 
|  | 90     /* sysinfo output is always supposed to be NUL terminated, but ... */ | 
|  | 91     if (buflen < sizeof buf) | 
|  | 92         buf[buflen] = '\0'; | 
|  | 93     else | 
|  | 94         buf[(sizeof buf) - 1] = '\0'; | 
|  | 95     /* The ISA list is a space separated string of names of ISAs and | 
|  | 96      * ISA extensions, in order of decreasing performance. | 
|  | 97      * There are two different ISAs with which NSS's crypto code can be | 
|  | 98      * accelerated. If both are in the list, we take the first one. | 
|  | 99      * If one is in the list, we use it, and if neither then we use | 
|  | 100      * the base unaccelerated code. | 
|  | 101      */ | 
|  | 102     found_int_hybrid = strstr(buf, int_hybrid_isa); | 
|  | 103     found_fpu_hybrid = strstr(buf, fpu_hybrid_isa); | 
|  | 104     if (found_fpu_hybrid && | 
|  | 105         (!found_int_hybrid || | 
|  | 106          (found_int_hybrid - found_fpu_hybrid) >= 0)) { | 
|  | 107         return fpu_hybrid_shared_lib; | 
|  | 108     } | 
|  | 109     if (found_int_hybrid) { | 
|  | 110         return int_hybrid_shared_lib; | 
|  | 111     } | 
|  | 112     return non_hybrid_shared_lib; | 
|  | 113 } | 
|  | 114 | 
|  | 115 #elif defined(HPUX) && !defined(NSS_USE_64) && !defined(__ia64) | 
|  | 116 /* This code tests to see if we're running on a PA2.x CPU. | 
|  | 117 ** It returns true (1) if so, and false (0) otherwise. | 
|  | 118 */ | 
|  | 119 static const char * | 
|  | 120 getLibName(void) | 
|  | 121 { | 
|  | 122     long cpu = sysconf(_SC_CPU_VERSION); | 
|  | 123     return (cpu == CPU_PA_RISC2_0) | 
|  | 124                 ? "libfreebl_32fpu_3.sl" | 
|  | 125                 : "libfreebl_32int32_3.sl" ; | 
|  | 126 } | 
|  | 127 #else | 
|  | 128 /* default case, for platforms/ABIs that have only one freebl shared lib. */ | 
|  | 129 static const char * getLibName(void) { return default_name; } | 
|  | 130 #endif | 
|  | 131 | 
|  | 132 #include "prio.h" | 
|  | 133 #include "prprf.h" | 
|  | 134 #include <stdio.h> | 
|  | 135 #include "prsystem.h" | 
|  | 136 | 
|  | 137 static const char *NameOfThisSharedLib = | 
|  | 138   SHLIB_PREFIX"softokn"SOFTOKEN_SHLIB_VERSION"."SHLIB_SUFFIX; | 
|  | 139 | 
|  | 140 static PRLibrary* blLib; | 
|  | 141 | 
|  | 142 #define LSB(x) ((x)&0xff) | 
|  | 143 #define MSB(x) ((x)>>8) | 
|  | 144 | 
|  | 145 static const FREEBLVector *vector; | 
|  | 146 static const char *libraryName = NULL; | 
|  | 147 | 
|  | 148 #include "genload.c" | 
|  | 149 | 
|  | 150 /* This function must be run only once. */ | 
|  | 151 /*  determine if hybrid platform, then actually load the DSO. */ | 
|  | 152 static PRStatus | 
|  | 153 freebl_LoadDSO( void ) | 
|  | 154 { | 
|  | 155   PRLibrary *  handle; | 
|  | 156   const char * name = getLibName(); | 
|  | 157 | 
|  | 158   if (!name) { | 
|  | 159     PR_SetError(PR_LOAD_LIBRARY_ERROR, 0); | 
|  | 160     return PR_FAILURE; | 
|  | 161   } | 
|  | 162 | 
|  | 163   handle = loader_LoadLibrary(name); | 
|  | 164   if (handle) { | 
|  | 165     PRFuncPtr address = PR_FindFunctionSymbol(handle, "FREEBL_GetVector"); | 
|  | 166     PRStatus status; | 
|  | 167     if (address) { | 
|  | 168       FREEBLGetVectorFn  * getVector = (FREEBLGetVectorFn *)address; | 
|  | 169       const FREEBLVector * dsoVector = getVector(); | 
|  | 170       if (dsoVector) { | 
|  | 171         unsigned short dsoVersion = dsoVector->version; | 
|  | 172         unsigned short  myVersion = FREEBL_VERSION; | 
|  | 173         if (MSB(dsoVersion) == MSB(myVersion) && | 
|  | 174             LSB(dsoVersion) >= LSB(myVersion) && | 
|  | 175             dsoVector->length >= sizeof(FREEBLVector)) { | 
|  | 176           vector = dsoVector; | 
|  | 177           libraryName = name; | 
|  | 178           blLib = handle; | 
|  | 179           return PR_SUCCESS; | 
|  | 180         } | 
|  | 181       } | 
|  | 182     } | 
|  | 183     status = PR_UnloadLibrary(handle); | 
|  | 184     PORT_Assert(PR_SUCCESS == status); | 
|  | 185   } | 
|  | 186   return PR_FAILURE; | 
|  | 187 } | 
|  | 188 | 
|  | 189 static const PRCallOnceType pristineCallOnce; | 
|  | 190 static PRCallOnceType loadFreeBLOnce; | 
|  | 191 | 
|  | 192 static PRStatus | 
|  | 193 freebl_RunLoaderOnce( void ) | 
|  | 194 { | 
|  | 195   PRStatus status; | 
|  | 196 | 
|  | 197   status = PR_CallOnce(&loadFreeBLOnce, &freebl_LoadDSO); | 
|  | 198   return status; | 
|  | 199 } | 
|  | 200 | 
|  | 201 SECStatus | 
|  | 202 BL_Init(void) | 
|  | 203 { | 
|  | 204   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 205       return SECFailure; | 
|  | 206   return (vector->p_BL_Init)(); | 
|  | 207 } | 
|  | 208 | 
|  | 209 RSAPrivateKey * | 
|  | 210 RSA_NewKey(int keySizeInBits, SECItem * publicExponent) | 
|  | 211 { | 
|  | 212   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 213       return NULL; | 
|  | 214   return (vector->p_RSA_NewKey)(keySizeInBits, publicExponent); | 
|  | 215 } | 
|  | 216 | 
|  | 217 SECStatus | 
|  | 218 RSA_PublicKeyOp(RSAPublicKey *   key, | 
|  | 219                                  unsigned char *  output, | 
|  | 220                                  const unsigned char *  input) | 
|  | 221 { | 
|  | 222   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 223       return SECFailure; | 
|  | 224   return (vector->p_RSA_PublicKeyOp)(key, output, input); | 
|  | 225 } | 
|  | 226 | 
|  | 227 SECStatus | 
|  | 228 RSA_PrivateKeyOp(RSAPrivateKey *  key, | 
|  | 229                                   unsigned char *  output, | 
|  | 230                                   const unsigned char *  input) | 
|  | 231 { | 
|  | 232   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 233       return SECFailure; | 
|  | 234   return (vector->p_RSA_PrivateKeyOp)(key, output, input); | 
|  | 235 } | 
|  | 236 | 
|  | 237 SECStatus | 
|  | 238 RSA_PrivateKeyOpDoubleChecked(RSAPrivateKey *key, | 
|  | 239                               unsigned char *output, | 
|  | 240                               const unsigned char *input) | 
|  | 241 { | 
|  | 242   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 243       return SECFailure; | 
|  | 244   return (vector->p_RSA_PrivateKeyOpDoubleChecked)(key, output, input); | 
|  | 245 } | 
|  | 246 | 
|  | 247 SECStatus | 
|  | 248 RSA_PrivateKeyCheck(RSAPrivateKey *key) | 
|  | 249 { | 
|  | 250   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 251       return SECFailure; | 
|  | 252   return (vector->p_RSA_PrivateKeyCheck)(key); | 
|  | 253 } | 
|  | 254 | 
|  | 255 SECStatus | 
|  | 256 DSA_NewKey(const PQGParams * params, DSAPrivateKey ** privKey) | 
|  | 257 { | 
|  | 258   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 259       return SECFailure; | 
|  | 260   return (vector->p_DSA_NewKey)(params, privKey); | 
|  | 261 } | 
|  | 262 | 
|  | 263 SECStatus | 
|  | 264 DSA_SignDigest(DSAPrivateKey * key, SECItem * signature, const SECItem * digest) | 
|  | 265 { | 
|  | 266   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 267       return SECFailure; | 
|  | 268   return (vector->p_DSA_SignDigest)( key,  signature,  digest); | 
|  | 269 } | 
|  | 270 | 
|  | 271 SECStatus | 
|  | 272 DSA_VerifyDigest(DSAPublicKey * key, const SECItem * signature, | 
|  | 273                  const SECItem * digest) | 
|  | 274 { | 
|  | 275   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 276       return SECFailure; | 
|  | 277   return (vector->p_DSA_VerifyDigest)( key,  signature,  digest); | 
|  | 278 } | 
|  | 279 | 
|  | 280 SECStatus | 
|  | 281 DSA_NewKeyFromSeed(const PQGParams *params, const unsigned char * seed, | 
|  | 282                    DSAPrivateKey **privKey) | 
|  | 283 { | 
|  | 284   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 285       return SECFailure; | 
|  | 286   return (vector->p_DSA_NewKeyFromSeed)(params,  seed, privKey); | 
|  | 287 } | 
|  | 288 | 
|  | 289 SECStatus | 
|  | 290 DSA_SignDigestWithSeed(DSAPrivateKey * key, SECItem * signature, | 
|  | 291                        const SECItem * digest, const unsigned char * seed) | 
|  | 292 { | 
|  | 293   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 294       return SECFailure; | 
|  | 295   return (vector->p_DSA_SignDigestWithSeed)( key, signature, digest, seed); | 
|  | 296 } | 
|  | 297 | 
|  | 298 SECStatus | 
|  | 299 DH_GenParam(int primeLen, DHParams ** params) | 
|  | 300 { | 
|  | 301   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 302       return SECFailure; | 
|  | 303   return (vector->p_DH_GenParam)(primeLen, params); | 
|  | 304 } | 
|  | 305 | 
|  | 306 SECStatus | 
|  | 307 DH_NewKey(DHParams * params, DHPrivateKey ** privKey) | 
|  | 308 { | 
|  | 309   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 310       return SECFailure; | 
|  | 311   return (vector->p_DH_NewKey)( params, privKey); | 
|  | 312 } | 
|  | 313 | 
|  | 314 SECStatus | 
|  | 315 DH_Derive(SECItem * publicValue, SECItem * prime, SECItem * privateValue, | 
|  | 316                          SECItem * derivedSecret, unsigned int maxOutBytes) | 
|  | 317 { | 
|  | 318   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 319       return SECFailure; | 
|  | 320   return (vector->p_DH_Derive)( publicValue, prime, privateValue, | 
|  | 321                                 derivedSecret, maxOutBytes); | 
|  | 322 } | 
|  | 323 | 
|  | 324 SECStatus | 
|  | 325 KEA_Derive(SECItem *prime, SECItem *public1, SECItem *public2, | 
|  | 326            SECItem *private1, SECItem *private2, SECItem *derivedSecret) | 
|  | 327 { | 
|  | 328   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 329       return SECFailure; | 
|  | 330   return (vector->p_KEA_Derive)(prime, public1, public2, | 
|  | 331                                 private1, private2, derivedSecret); | 
|  | 332 } | 
|  | 333 | 
|  | 334 PRBool | 
|  | 335 KEA_Verify(SECItem *Y, SECItem *prime, SECItem *subPrime) | 
|  | 336 { | 
|  | 337   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 338       return PR_FALSE; | 
|  | 339   return (vector->p_KEA_Verify)(Y, prime, subPrime); | 
|  | 340 } | 
|  | 341 | 
|  | 342 RC4Context * | 
|  | 343 RC4_CreateContext(const unsigned char *key, int len) | 
|  | 344 { | 
|  | 345   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 346       return NULL; | 
|  | 347   return (vector->p_RC4_CreateContext)(key, len); | 
|  | 348 } | 
|  | 349 | 
|  | 350 void | 
|  | 351 RC4_DestroyContext(RC4Context *cx, PRBool freeit) | 
|  | 352 { | 
|  | 353   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 354       return; | 
|  | 355   (vector->p_RC4_DestroyContext)(cx, freeit); | 
|  | 356 } | 
|  | 357 | 
|  | 358 SECStatus | 
|  | 359 RC4_Encrypt(RC4Context *cx, unsigned char *output, unsigned int *outputLen, | 
|  | 360             unsigned int maxOutputLen, const unsigned char *input, | 
|  | 361             unsigned int inputLen) | 
|  | 362 { | 
|  | 363   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 364       return SECFailure; | 
|  | 365   return (vector->p_RC4_Encrypt)(cx, output, outputLen, maxOutputLen, input, | 
|  | 366                                  inputLen); | 
|  | 367 } | 
|  | 368 | 
|  | 369 SECStatus | 
|  | 370 RC4_Decrypt(RC4Context *cx, unsigned char *output, unsigned int *outputLen, | 
|  | 371             unsigned int maxOutputLen, const unsigned char *input, | 
|  | 372             unsigned int inputLen) | 
|  | 373 { | 
|  | 374   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 375       return SECFailure; | 
|  | 376   return (vector->p_RC4_Decrypt)(cx, output, outputLen, maxOutputLen, input, | 
|  | 377                                  inputLen); | 
|  | 378 } | 
|  | 379 | 
|  | 380 RC2Context * | 
|  | 381 RC2_CreateContext(const unsigned char *key, unsigned int len, | 
|  | 382                   const unsigned char *iv, int mode, unsigned effectiveKeyLen) | 
|  | 383 { | 
|  | 384   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 385       return NULL; | 
|  | 386   return (vector->p_RC2_CreateContext)(key, len, iv, mode, effectiveKeyLen); | 
|  | 387 } | 
|  | 388 | 
|  | 389 void | 
|  | 390 RC2_DestroyContext(RC2Context *cx, PRBool freeit) | 
|  | 391 { | 
|  | 392   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 393       return; | 
|  | 394   (vector->p_RC2_DestroyContext)(cx, freeit); | 
|  | 395 } | 
|  | 396 | 
|  | 397 SECStatus | 
|  | 398 RC2_Encrypt(RC2Context *cx, unsigned char *output, unsigned int *outputLen, | 
|  | 399             unsigned int maxOutputLen, const unsigned char *input, | 
|  | 400             unsigned int inputLen) | 
|  | 401 { | 
|  | 402   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 403       return SECFailure; | 
|  | 404   return (vector->p_RC2_Encrypt)(cx, output, outputLen, maxOutputLen, input, | 
|  | 405                                  inputLen); | 
|  | 406 } | 
|  | 407 | 
|  | 408 SECStatus | 
|  | 409 RC2_Decrypt(RC2Context *cx, unsigned char *output, unsigned int *outputLen, | 
|  | 410             unsigned int maxOutputLen, const unsigned char *input, | 
|  | 411             unsigned int inputLen) | 
|  | 412 { | 
|  | 413   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 414       return SECFailure; | 
|  | 415   return (vector->p_RC2_Decrypt)(cx, output, outputLen, maxOutputLen, input, | 
|  | 416                                  inputLen); | 
|  | 417 } | 
|  | 418 | 
|  | 419 RC5Context * | 
|  | 420 RC5_CreateContext(const SECItem *key, unsigned int rounds, | 
|  | 421                   unsigned int wordSize, const unsigned char *iv, int mode) | 
|  | 422 { | 
|  | 423   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 424       return NULL; | 
|  | 425   return (vector->p_RC5_CreateContext)(key, rounds, wordSize, iv, mode); | 
|  | 426 } | 
|  | 427 | 
|  | 428 void | 
|  | 429 RC5_DestroyContext(RC5Context *cx, PRBool freeit) | 
|  | 430 { | 
|  | 431   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 432       return; | 
|  | 433   (vector->p_RC5_DestroyContext)(cx, freeit); | 
|  | 434 } | 
|  | 435 | 
|  | 436 SECStatus | 
|  | 437 RC5_Encrypt(RC5Context *cx, unsigned char *output, unsigned int *outputLen, | 
|  | 438             unsigned int maxOutputLen, const unsigned char *input, | 
|  | 439             unsigned int inputLen) | 
|  | 440 { | 
|  | 441   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 442       return SECFailure; | 
|  | 443   return (vector->p_RC5_Encrypt)(cx, output, outputLen, maxOutputLen, input, | 
|  | 444                                  inputLen); | 
|  | 445 } | 
|  | 446 | 
|  | 447 SECStatus | 
|  | 448 RC5_Decrypt(RC5Context *cx, unsigned char *output, unsigned int *outputLen, | 
|  | 449             unsigned int maxOutputLen, const unsigned char *input, | 
|  | 450             unsigned int inputLen) | 
|  | 451 { | 
|  | 452   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 453       return SECFailure; | 
|  | 454   return (vector->p_RC5_Decrypt)(cx, output, outputLen, maxOutputLen, input, | 
|  | 455                                  inputLen); | 
|  | 456 } | 
|  | 457 | 
|  | 458 DESContext * | 
|  | 459 DES_CreateContext(const unsigned char *key, const unsigned char *iv, | 
|  | 460                   int mode, PRBool encrypt) | 
|  | 461 { | 
|  | 462   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 463       return NULL; | 
|  | 464   return (vector->p_DES_CreateContext)(key, iv, mode, encrypt); | 
|  | 465 } | 
|  | 466 | 
|  | 467 void | 
|  | 468 DES_DestroyContext(DESContext *cx, PRBool freeit) | 
|  | 469 { | 
|  | 470   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 471       return; | 
|  | 472   (vector->p_DES_DestroyContext)(cx, freeit); | 
|  | 473 } | 
|  | 474 | 
|  | 475 SECStatus | 
|  | 476 DES_Encrypt(DESContext *cx, unsigned char *output, unsigned int *outputLen, | 
|  | 477             unsigned int maxOutputLen, const unsigned char *input, | 
|  | 478             unsigned int inputLen) | 
|  | 479 { | 
|  | 480   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 481       return SECFailure; | 
|  | 482   return (vector->p_DES_Encrypt)(cx, output, outputLen, maxOutputLen, input, | 
|  | 483                                  inputLen); | 
|  | 484 } | 
|  | 485 | 
|  | 486 SECStatus | 
|  | 487 DES_Decrypt(DESContext *cx, unsigned char *output, unsigned int *outputLen, | 
|  | 488             unsigned int maxOutputLen, const unsigned char *input, | 
|  | 489             unsigned int inputLen) | 
|  | 490 { | 
|  | 491   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 492       return SECFailure; | 
|  | 493   return (vector->p_DES_Decrypt)(cx, output, outputLen, maxOutputLen, input, | 
|  | 494                                  inputLen); | 
|  | 495 } | 
|  | 496 SEEDContext * | 
|  | 497 SEED_CreateContext(const unsigned char *key, const unsigned char *iv, | 
|  | 498                   int mode, PRBool encrypt) | 
|  | 499 { | 
|  | 500   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 501       return NULL; | 
|  | 502   return (vector->p_SEED_CreateContext)(key, iv, mode, encrypt); | 
|  | 503 } | 
|  | 504 | 
|  | 505 void | 
|  | 506 SEED_DestroyContext(SEEDContext *cx, PRBool freeit) | 
|  | 507 { | 
|  | 508   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 509       return; | 
|  | 510   (vector->p_SEED_DestroyContext)(cx, freeit); | 
|  | 511 } | 
|  | 512 | 
|  | 513 SECStatus | 
|  | 514 SEED_Encrypt(SEEDContext *cx, unsigned char *output, unsigned int *outputLen, | 
|  | 515             unsigned int maxOutputLen, const unsigned char *input, | 
|  | 516             unsigned int inputLen) | 
|  | 517 { | 
|  | 518   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 519       return SECFailure; | 
|  | 520   return (vector->p_SEED_Encrypt)(cx, output, outputLen, maxOutputLen, input, | 
|  | 521                                  inputLen); | 
|  | 522 } | 
|  | 523 | 
|  | 524 SECStatus | 
|  | 525 SEED_Decrypt(SEEDContext *cx, unsigned char *output, unsigned int *outputLen, | 
|  | 526             unsigned int maxOutputLen, const unsigned char *input, | 
|  | 527             unsigned int inputLen) | 
|  | 528 { | 
|  | 529   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 530       return SECFailure; | 
|  | 531   return (vector->p_SEED_Decrypt)(cx, output, outputLen, maxOutputLen, input, | 
|  | 532                                  inputLen); | 
|  | 533 } | 
|  | 534 | 
|  | 535 AESContext * | 
|  | 536 AES_CreateContext(const unsigned char *key, const unsigned char *iv, | 
|  | 537                   int mode, int encrypt, | 
|  | 538                   unsigned int keylen, unsigned int blocklen) | 
|  | 539 { | 
|  | 540   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 541       return NULL; | 
|  | 542   return (vector->p_AES_CreateContext)(key, iv, mode, encrypt, keylen, | 
|  | 543                                        blocklen); | 
|  | 544 } | 
|  | 545 | 
|  | 546 void | 
|  | 547 AES_DestroyContext(AESContext *cx, PRBool freeit) | 
|  | 548 { | 
|  | 549   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 550       return ; | 
|  | 551   (vector->p_AES_DestroyContext)(cx, freeit); | 
|  | 552 } | 
|  | 553 | 
|  | 554 SECStatus | 
|  | 555 AES_Encrypt(AESContext *cx, unsigned char *output, | 
|  | 556             unsigned int *outputLen, unsigned int maxOutputLen, | 
|  | 557             const unsigned char *input, unsigned int inputLen) | 
|  | 558 { | 
|  | 559   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 560       return SECFailure; | 
|  | 561   return (vector->p_AES_Encrypt)(cx, output, outputLen, maxOutputLen, | 
|  | 562                                  input, inputLen); | 
|  | 563 } | 
|  | 564 | 
|  | 565 SECStatus | 
|  | 566 AES_Decrypt(AESContext *cx, unsigned char *output, | 
|  | 567             unsigned int *outputLen, unsigned int maxOutputLen, | 
|  | 568             const unsigned char *input, unsigned int inputLen) | 
|  | 569 { | 
|  | 570   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 571       return SECFailure; | 
|  | 572   return (vector->p_AES_Decrypt)(cx, output, outputLen, maxOutputLen, | 
|  | 573                                  input, inputLen); | 
|  | 574 } | 
|  | 575 | 
|  | 576 SECStatus | 
|  | 577 MD5_Hash(unsigned char *dest, const char *src) | 
|  | 578 { | 
|  | 579   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 580       return SECFailure; | 
|  | 581   return (vector->p_MD5_Hash)(dest, src); | 
|  | 582 } | 
|  | 583 | 
|  | 584 SECStatus | 
|  | 585 MD5_HashBuf(unsigned char *dest, const unsigned char *src, uint32 src_length) | 
|  | 586 { | 
|  | 587   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 588       return SECFailure; | 
|  | 589   return (vector->p_MD5_HashBuf)(dest, src, src_length); | 
|  | 590 } | 
|  | 591 | 
|  | 592 MD5Context * | 
|  | 593 MD5_NewContext(void) | 
|  | 594 { | 
|  | 595   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 596       return NULL; | 
|  | 597   return (vector->p_MD5_NewContext)(); | 
|  | 598 } | 
|  | 599 | 
|  | 600 void | 
|  | 601 MD5_DestroyContext(MD5Context *cx, PRBool freeit) | 
|  | 602 { | 
|  | 603   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 604       return; | 
|  | 605   (vector->p_MD5_DestroyContext)(cx, freeit); | 
|  | 606 } | 
|  | 607 | 
|  | 608 void | 
|  | 609 MD5_Begin(MD5Context *cx) | 
|  | 610 { | 
|  | 611   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 612       return; | 
|  | 613   (vector->p_MD5_Begin)(cx); | 
|  | 614 } | 
|  | 615 | 
|  | 616 void | 
|  | 617 MD5_Update(MD5Context *cx, const unsigned char *input, unsigned int inputLen) | 
|  | 618 { | 
|  | 619   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 620       return; | 
|  | 621   (vector->p_MD5_Update)(cx, input, inputLen); | 
|  | 622 } | 
|  | 623 | 
|  | 624 void | 
|  | 625 MD5_End(MD5Context *cx, unsigned char *digest, | 
|  | 626                     unsigned int *digestLen, unsigned int maxDigestLen) | 
|  | 627 { | 
|  | 628   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 629       return; | 
|  | 630   (vector->p_MD5_End)(cx, digest, digestLen, maxDigestLen); | 
|  | 631 } | 
|  | 632 | 
|  | 633 unsigned int | 
|  | 634 MD5_FlattenSize(MD5Context *cx) | 
|  | 635 { | 
|  | 636   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 637       return 0; | 
|  | 638   return (vector->p_MD5_FlattenSize)(cx); | 
|  | 639 } | 
|  | 640 | 
|  | 641 SECStatus | 
|  | 642 MD5_Flatten(MD5Context *cx,unsigned char *space) | 
|  | 643 { | 
|  | 644   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 645       return SECFailure; | 
|  | 646   return (vector->p_MD5_Flatten)(cx, space); | 
|  | 647 } | 
|  | 648 | 
|  | 649 MD5Context * | 
|  | 650 MD5_Resurrect(unsigned char *space, void *arg) | 
|  | 651 { | 
|  | 652   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 653       return NULL; | 
|  | 654   return (vector->p_MD5_Resurrect)(space, arg); | 
|  | 655 } | 
|  | 656 | 
|  | 657 void | 
|  | 658 MD5_TraceState(MD5Context *cx) | 
|  | 659 { | 
|  | 660   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 661       return ; | 
|  | 662   (vector->p_MD5_TraceState)(cx); | 
|  | 663 } | 
|  | 664 | 
|  | 665 SECStatus | 
|  | 666 MD2_Hash(unsigned char *dest, const char *src) | 
|  | 667 { | 
|  | 668   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 669       return SECFailure; | 
|  | 670   return (vector->p_MD2_Hash)(dest, src); | 
|  | 671 } | 
|  | 672 | 
|  | 673 MD2Context * | 
|  | 674 MD2_NewContext(void) | 
|  | 675 { | 
|  | 676   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 677       return NULL; | 
|  | 678   return (vector->p_MD2_NewContext)(); | 
|  | 679 } | 
|  | 680 | 
|  | 681 void | 
|  | 682 MD2_DestroyContext(MD2Context *cx, PRBool freeit) | 
|  | 683 { | 
|  | 684   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 685       return ; | 
|  | 686   (vector->p_MD2_DestroyContext)(cx, freeit); | 
|  | 687 } | 
|  | 688 | 
|  | 689 void | 
|  | 690 MD2_Begin(MD2Context *cx) | 
|  | 691 { | 
|  | 692   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 693       return ; | 
|  | 694   (vector->p_MD2_Begin)(cx); | 
|  | 695 } | 
|  | 696 | 
|  | 697 void | 
|  | 698 MD2_Update(MD2Context *cx, const unsigned char *input, unsigned int inputLen) | 
|  | 699 { | 
|  | 700   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 701       return ; | 
|  | 702   (vector->p_MD2_Update)(cx, input, inputLen); | 
|  | 703 } | 
|  | 704 | 
|  | 705 void | 
|  | 706 MD2_End(MD2Context *cx, unsigned char *digest, | 
|  | 707                     unsigned int *digestLen, unsigned int maxDigestLen) | 
|  | 708 { | 
|  | 709   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 710       return ; | 
|  | 711   (vector->p_MD2_End)(cx, digest, digestLen, maxDigestLen); | 
|  | 712 } | 
|  | 713 | 
|  | 714 unsigned int | 
|  | 715 MD2_FlattenSize(MD2Context *cx) | 
|  | 716 { | 
|  | 717   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 718       return 0; | 
|  | 719   return (vector->p_MD2_FlattenSize)(cx); | 
|  | 720 } | 
|  | 721 | 
|  | 722 SECStatus | 
|  | 723 MD2_Flatten(MD2Context *cx,unsigned char *space) | 
|  | 724 { | 
|  | 725   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 726       return SECFailure; | 
|  | 727   return (vector->p_MD2_Flatten)(cx, space); | 
|  | 728 } | 
|  | 729 | 
|  | 730 MD2Context * | 
|  | 731 MD2_Resurrect(unsigned char *space, void *arg) | 
|  | 732 { | 
|  | 733   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 734       return NULL; | 
|  | 735   return (vector->p_MD2_Resurrect)(space, arg); | 
|  | 736 } | 
|  | 737 | 
|  | 738 | 
|  | 739 SECStatus | 
|  | 740 SHA1_Hash(unsigned char *dest, const char *src) | 
|  | 741 { | 
|  | 742   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 743       return SECFailure; | 
|  | 744   return (vector->p_SHA1_Hash)(dest, src); | 
|  | 745 } | 
|  | 746 | 
|  | 747 SECStatus | 
|  | 748 SHA1_HashBuf(unsigned char *dest, const unsigned char *src, uint32 src_length) | 
|  | 749 { | 
|  | 750   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 751       return SECFailure; | 
|  | 752   return (vector->p_SHA1_HashBuf)(dest, src, src_length); | 
|  | 753 } | 
|  | 754 | 
|  | 755 SHA1Context * | 
|  | 756 SHA1_NewContext(void) | 
|  | 757 { | 
|  | 758   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 759       return NULL; | 
|  | 760   return (vector->p_SHA1_NewContext)(); | 
|  | 761 } | 
|  | 762 | 
|  | 763 void | 
|  | 764 SHA1_DestroyContext(SHA1Context *cx, PRBool freeit) | 
|  | 765 { | 
|  | 766   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 767       return ; | 
|  | 768   (vector->p_SHA1_DestroyContext)(cx, freeit); | 
|  | 769 } | 
|  | 770 | 
|  | 771 void | 
|  | 772 SHA1_Begin(SHA1Context *cx) | 
|  | 773 { | 
|  | 774   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 775       return ; | 
|  | 776   (vector->p_SHA1_Begin)(cx); | 
|  | 777 } | 
|  | 778 | 
|  | 779 void | 
|  | 780 SHA1_Update(SHA1Context *cx, const unsigned char *input, | 
|  | 781                         unsigned int inputLen) | 
|  | 782 { | 
|  | 783   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 784       return ; | 
|  | 785   (vector->p_SHA1_Update)(cx, input, inputLen); | 
|  | 786 } | 
|  | 787 | 
|  | 788 void | 
|  | 789 SHA1_End(SHA1Context *cx, unsigned char *digest, | 
|  | 790                      unsigned int *digestLen, unsigned int maxDigestLen) | 
|  | 791 { | 
|  | 792   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 793       return ; | 
|  | 794   (vector->p_SHA1_End)(cx, digest, digestLen, maxDigestLen); | 
|  | 795 } | 
|  | 796 | 
|  | 797 void | 
|  | 798 SHA1_TraceState(SHA1Context *cx) | 
|  | 799 { | 
|  | 800   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 801       return ; | 
|  | 802   (vector->p_SHA1_TraceState)(cx); | 
|  | 803 } | 
|  | 804 | 
|  | 805 unsigned int | 
|  | 806 SHA1_FlattenSize(SHA1Context *cx) | 
|  | 807 { | 
|  | 808   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 809       return 0; | 
|  | 810   return (vector->p_SHA1_FlattenSize)(cx); | 
|  | 811 } | 
|  | 812 | 
|  | 813 SECStatus | 
|  | 814 SHA1_Flatten(SHA1Context *cx,unsigned char *space) | 
|  | 815 { | 
|  | 816   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 817       return SECFailure; | 
|  | 818   return (vector->p_SHA1_Flatten)(cx, space); | 
|  | 819 } | 
|  | 820 | 
|  | 821 SHA1Context * | 
|  | 822 SHA1_Resurrect(unsigned char *space, void *arg) | 
|  | 823 { | 
|  | 824   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 825       return NULL; | 
|  | 826   return (vector->p_SHA1_Resurrect)(space, arg); | 
|  | 827 } | 
|  | 828 | 
|  | 829 SECStatus | 
|  | 830 RNG_RNGInit(void) | 
|  | 831 { | 
|  | 832   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 833       return SECFailure; | 
|  | 834   return (vector->p_RNG_RNGInit)(); | 
|  | 835 } | 
|  | 836 | 
|  | 837 SECStatus | 
|  | 838 RNG_RandomUpdate(const void *data, size_t bytes) | 
|  | 839 { | 
|  | 840   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 841       return SECFailure; | 
|  | 842   return (vector->p_RNG_RandomUpdate)(data, bytes); | 
|  | 843 } | 
|  | 844 | 
|  | 845 SECStatus | 
|  | 846 RNG_GenerateGlobalRandomBytes(void *dest, size_t len) | 
|  | 847 { | 
|  | 848   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 849       return SECFailure; | 
|  | 850   return (vector->p_RNG_GenerateGlobalRandomBytes)(dest, len); | 
|  | 851 } | 
|  | 852 | 
|  | 853 void | 
|  | 854 RNG_RNGShutdown(void) | 
|  | 855 { | 
|  | 856   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 857       return ; | 
|  | 858   (vector->p_RNG_RNGShutdown)(); | 
|  | 859 } | 
|  | 860 | 
|  | 861 SECStatus | 
|  | 862 PQG_ParamGen(unsigned int j, PQGParams **pParams, PQGVerify **pVfy) | 
|  | 863 { | 
|  | 864   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 865       return SECFailure; | 
|  | 866   return (vector->p_PQG_ParamGen)(j, pParams, pVfy); | 
|  | 867 } | 
|  | 868 | 
|  | 869 SECStatus | 
|  | 870 PQG_ParamGenSeedLen( unsigned int j, unsigned int seedBytes, | 
|  | 871                      PQGParams **pParams, PQGVerify **pVfy) | 
|  | 872 { | 
|  | 873   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 874       return SECFailure; | 
|  | 875   return (vector->p_PQG_ParamGenSeedLen)(j, seedBytes, pParams, pVfy); | 
|  | 876 } | 
|  | 877 | 
|  | 878 SECStatus | 
|  | 879 PQG_VerifyParams(const PQGParams *params, const PQGVerify *vfy, | 
|  | 880                  SECStatus *result) | 
|  | 881 { | 
|  | 882   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 883       return SECFailure; | 
|  | 884   return (vector->p_PQG_VerifyParams)(params, vfy, result); | 
|  | 885 } | 
|  | 886 | 
|  | 887 void | 
|  | 888 PQG_DestroyParams(PQGParams *params) | 
|  | 889 { | 
|  | 890   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 891       return; | 
|  | 892   (vector->p_PQG_DestroyParams)(params); | 
|  | 893 } | 
|  | 894 | 
|  | 895 void | 
|  | 896 PQG_DestroyVerify(PQGVerify *vfy) | 
|  | 897 { | 
|  | 898   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 899       return; | 
|  | 900   (vector->p_PQG_DestroyVerify)(vfy); | 
|  | 901 } | 
|  | 902 | 
|  | 903 void | 
|  | 904 BL_Cleanup(void) | 
|  | 905 { | 
|  | 906   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 907       return; | 
|  | 908   (vector->p_BL_Cleanup)(); | 
|  | 909 } | 
|  | 910 | 
|  | 911 void | 
|  | 912 BL_Unload(void) | 
|  | 913 { | 
|  | 914   /* This function is not thread-safe, but doesn't need to be, because it is | 
|  | 915    * only called from functions that are also defined as not thread-safe, | 
|  | 916    * namely C_Finalize in softoken, and the SSL bypass shutdown callback called | 
|  | 917    * from NSS_Shutdown. */ | 
|  | 918   char *disableUnload = NULL; | 
|  | 919   vector = NULL; | 
|  | 920   /* If an SSL socket is configured with SSL_BYPASS_PKCS11, but the application | 
|  | 921    * never does a handshake on it, BL_Unload will be called even though freebl | 
|  | 922    * was never loaded. So, don't assert blLib. */ | 
|  | 923   if (blLib) { | 
|  | 924       disableUnload = PR_GetEnv("NSS_DISABLE_UNLOAD"); | 
|  | 925       if (!disableUnload) { | 
|  | 926           PRStatus status = PR_UnloadLibrary(blLib); | 
|  | 927           PORT_Assert(PR_SUCCESS == status); | 
|  | 928       } | 
|  | 929       blLib = NULL; | 
|  | 930   } | 
|  | 931   loadFreeBLOnce = pristineCallOnce; | 
|  | 932 } | 
|  | 933 | 
|  | 934 /* ============== New for 3.003 =============================== */ | 
|  | 935 | 
|  | 936 SECStatus | 
|  | 937 SHA256_Hash(unsigned char *dest, const char *src) | 
|  | 938 { | 
|  | 939   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 940       return SECFailure; | 
|  | 941   return (vector->p_SHA256_Hash)(dest, src); | 
|  | 942 } | 
|  | 943 | 
|  | 944 SECStatus | 
|  | 945 SHA256_HashBuf(unsigned char *dest, const unsigned char *src, uint32 src_length) | 
|  | 946 { | 
|  | 947   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 948       return SECFailure; | 
|  | 949   return (vector->p_SHA256_HashBuf)(dest, src, src_length); | 
|  | 950 } | 
|  | 951 | 
|  | 952 SHA256Context * | 
|  | 953 SHA256_NewContext(void) | 
|  | 954 { | 
|  | 955   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 956       return NULL; | 
|  | 957   return (vector->p_SHA256_NewContext)(); | 
|  | 958 } | 
|  | 959 | 
|  | 960 void | 
|  | 961 SHA256_DestroyContext(SHA256Context *cx, PRBool freeit) | 
|  | 962 { | 
|  | 963   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 964       return ; | 
|  | 965   (vector->p_SHA256_DestroyContext)(cx, freeit); | 
|  | 966 } | 
|  | 967 | 
|  | 968 void | 
|  | 969 SHA256_Begin(SHA256Context *cx) | 
|  | 970 { | 
|  | 971   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 972       return ; | 
|  | 973   (vector->p_SHA256_Begin)(cx); | 
|  | 974 } | 
|  | 975 | 
|  | 976 void | 
|  | 977 SHA256_Update(SHA256Context *cx, const unsigned char *input, | 
|  | 978                         unsigned int inputLen) | 
|  | 979 { | 
|  | 980   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 981       return ; | 
|  | 982   (vector->p_SHA256_Update)(cx, input, inputLen); | 
|  | 983 } | 
|  | 984 | 
|  | 985 void | 
|  | 986 SHA256_End(SHA256Context *cx, unsigned char *digest, | 
|  | 987                      unsigned int *digestLen, unsigned int maxDigestLen) | 
|  | 988 { | 
|  | 989   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 990       return ; | 
|  | 991   (vector->p_SHA256_End)(cx, digest, digestLen, maxDigestLen); | 
|  | 992 } | 
|  | 993 | 
|  | 994 void | 
|  | 995 SHA256_TraceState(SHA256Context *cx) | 
|  | 996 { | 
|  | 997   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 998       return ; | 
|  | 999   (vector->p_SHA256_TraceState)(cx); | 
|  | 1000 } | 
|  | 1001 | 
|  | 1002 unsigned int | 
|  | 1003 SHA256_FlattenSize(SHA256Context *cx) | 
|  | 1004 { | 
|  | 1005   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1006       return 0; | 
|  | 1007   return (vector->p_SHA256_FlattenSize)(cx); | 
|  | 1008 } | 
|  | 1009 | 
|  | 1010 SECStatus | 
|  | 1011 SHA256_Flatten(SHA256Context *cx,unsigned char *space) | 
|  | 1012 { | 
|  | 1013   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1014       return SECFailure; | 
|  | 1015   return (vector->p_SHA256_Flatten)(cx, space); | 
|  | 1016 } | 
|  | 1017 | 
|  | 1018 SHA256Context * | 
|  | 1019 SHA256_Resurrect(unsigned char *space, void *arg) | 
|  | 1020 { | 
|  | 1021   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1022       return NULL; | 
|  | 1023   return (vector->p_SHA256_Resurrect)(space, arg); | 
|  | 1024 } | 
|  | 1025 | 
|  | 1026 SECStatus | 
|  | 1027 SHA512_Hash(unsigned char *dest, const char *src) | 
|  | 1028 { | 
|  | 1029   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1030       return SECFailure; | 
|  | 1031   return (vector->p_SHA512_Hash)(dest, src); | 
|  | 1032 } | 
|  | 1033 | 
|  | 1034 SECStatus | 
|  | 1035 SHA512_HashBuf(unsigned char *dest, const unsigned char *src, uint32 src_length) | 
|  | 1036 { | 
|  | 1037   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1038       return SECFailure; | 
|  | 1039   return (vector->p_SHA512_HashBuf)(dest, src, src_length); | 
|  | 1040 } | 
|  | 1041 | 
|  | 1042 SHA512Context * | 
|  | 1043 SHA512_NewContext(void) | 
|  | 1044 { | 
|  | 1045   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1046       return NULL; | 
|  | 1047   return (vector->p_SHA512_NewContext)(); | 
|  | 1048 } | 
|  | 1049 | 
|  | 1050 void | 
|  | 1051 SHA512_DestroyContext(SHA512Context *cx, PRBool freeit) | 
|  | 1052 { | 
|  | 1053   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1054       return ; | 
|  | 1055   (vector->p_SHA512_DestroyContext)(cx, freeit); | 
|  | 1056 } | 
|  | 1057 | 
|  | 1058 void | 
|  | 1059 SHA512_Begin(SHA512Context *cx) | 
|  | 1060 { | 
|  | 1061   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1062       return ; | 
|  | 1063   (vector->p_SHA512_Begin)(cx); | 
|  | 1064 } | 
|  | 1065 | 
|  | 1066 void | 
|  | 1067 SHA512_Update(SHA512Context *cx, const unsigned char *input, | 
|  | 1068                         unsigned int inputLen) | 
|  | 1069 { | 
|  | 1070   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1071       return ; | 
|  | 1072   (vector->p_SHA512_Update)(cx, input, inputLen); | 
|  | 1073 } | 
|  | 1074 | 
|  | 1075 void | 
|  | 1076 SHA512_End(SHA512Context *cx, unsigned char *digest, | 
|  | 1077                      unsigned int *digestLen, unsigned int maxDigestLen) | 
|  | 1078 { | 
|  | 1079   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1080       return ; | 
|  | 1081   (vector->p_SHA512_End)(cx, digest, digestLen, maxDigestLen); | 
|  | 1082 } | 
|  | 1083 | 
|  | 1084 void | 
|  | 1085 SHA512_TraceState(SHA512Context *cx) | 
|  | 1086 { | 
|  | 1087   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1088       return ; | 
|  | 1089   (vector->p_SHA512_TraceState)(cx); | 
|  | 1090 } | 
|  | 1091 | 
|  | 1092 unsigned int | 
|  | 1093 SHA512_FlattenSize(SHA512Context *cx) | 
|  | 1094 { | 
|  | 1095   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1096       return 0; | 
|  | 1097   return (vector->p_SHA512_FlattenSize)(cx); | 
|  | 1098 } | 
|  | 1099 | 
|  | 1100 SECStatus | 
|  | 1101 SHA512_Flatten(SHA512Context *cx,unsigned char *space) | 
|  | 1102 { | 
|  | 1103   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1104       return SECFailure; | 
|  | 1105   return (vector->p_SHA512_Flatten)(cx, space); | 
|  | 1106 } | 
|  | 1107 | 
|  | 1108 SHA512Context * | 
|  | 1109 SHA512_Resurrect(unsigned char *space, void *arg) | 
|  | 1110 { | 
|  | 1111   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1112       return NULL; | 
|  | 1113   return (vector->p_SHA512_Resurrect)(space, arg); | 
|  | 1114 } | 
|  | 1115 | 
|  | 1116 | 
|  | 1117 SECStatus | 
|  | 1118 SHA384_Hash(unsigned char *dest, const char *src) | 
|  | 1119 { | 
|  | 1120   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1121       return SECFailure; | 
|  | 1122   return (vector->p_SHA384_Hash)(dest, src); | 
|  | 1123 } | 
|  | 1124 | 
|  | 1125 SECStatus | 
|  | 1126 SHA384_HashBuf(unsigned char *dest, const unsigned char *src, uint32 src_length) | 
|  | 1127 { | 
|  | 1128   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1129       return SECFailure; | 
|  | 1130   return (vector->p_SHA384_HashBuf)(dest, src, src_length); | 
|  | 1131 } | 
|  | 1132 | 
|  | 1133 SHA384Context * | 
|  | 1134 SHA384_NewContext(void) | 
|  | 1135 { | 
|  | 1136   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1137       return NULL; | 
|  | 1138   return (vector->p_SHA384_NewContext)(); | 
|  | 1139 } | 
|  | 1140 | 
|  | 1141 void | 
|  | 1142 SHA384_DestroyContext(SHA384Context *cx, PRBool freeit) | 
|  | 1143 { | 
|  | 1144   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1145       return ; | 
|  | 1146   (vector->p_SHA384_DestroyContext)(cx, freeit); | 
|  | 1147 } | 
|  | 1148 | 
|  | 1149 void | 
|  | 1150 SHA384_Begin(SHA384Context *cx) | 
|  | 1151 { | 
|  | 1152   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1153       return ; | 
|  | 1154   (vector->p_SHA384_Begin)(cx); | 
|  | 1155 } | 
|  | 1156 | 
|  | 1157 void | 
|  | 1158 SHA384_Update(SHA384Context *cx, const unsigned char *input, | 
|  | 1159                         unsigned int inputLen) | 
|  | 1160 { | 
|  | 1161   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1162       return ; | 
|  | 1163   (vector->p_SHA384_Update)(cx, input, inputLen); | 
|  | 1164 } | 
|  | 1165 | 
|  | 1166 void | 
|  | 1167 SHA384_End(SHA384Context *cx, unsigned char *digest, | 
|  | 1168                      unsigned int *digestLen, unsigned int maxDigestLen) | 
|  | 1169 { | 
|  | 1170   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1171       return ; | 
|  | 1172   (vector->p_SHA384_End)(cx, digest, digestLen, maxDigestLen); | 
|  | 1173 } | 
|  | 1174 | 
|  | 1175 void | 
|  | 1176 SHA384_TraceState(SHA384Context *cx) | 
|  | 1177 { | 
|  | 1178   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1179       return ; | 
|  | 1180   (vector->p_SHA384_TraceState)(cx); | 
|  | 1181 } | 
|  | 1182 | 
|  | 1183 unsigned int | 
|  | 1184 SHA384_FlattenSize(SHA384Context *cx) | 
|  | 1185 { | 
|  | 1186   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1187       return 0; | 
|  | 1188   return (vector->p_SHA384_FlattenSize)(cx); | 
|  | 1189 } | 
|  | 1190 | 
|  | 1191 SECStatus | 
|  | 1192 SHA384_Flatten(SHA384Context *cx,unsigned char *space) | 
|  | 1193 { | 
|  | 1194   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1195       return SECFailure; | 
|  | 1196   return (vector->p_SHA384_Flatten)(cx, space); | 
|  | 1197 } | 
|  | 1198 | 
|  | 1199 SHA384Context * | 
|  | 1200 SHA384_Resurrect(unsigned char *space, void *arg) | 
|  | 1201 { | 
|  | 1202   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1203       return NULL; | 
|  | 1204   return (vector->p_SHA384_Resurrect)(space, arg); | 
|  | 1205 } | 
|  | 1206 | 
|  | 1207 | 
|  | 1208 AESKeyWrapContext * | 
|  | 1209 AESKeyWrap_CreateContext(const unsigned char *key, const unsigned char *iv, | 
|  | 1210                          int encrypt, unsigned int keylen) | 
|  | 1211 { | 
|  | 1212   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1213       return NULL; | 
|  | 1214   return vector->p_AESKeyWrap_CreateContext(key, iv, encrypt, keylen); | 
|  | 1215 } | 
|  | 1216 | 
|  | 1217 void | 
|  | 1218 AESKeyWrap_DestroyContext(AESKeyWrapContext *cx, PRBool freeit) | 
|  | 1219 { | 
|  | 1220   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1221       return; | 
|  | 1222   vector->p_AESKeyWrap_DestroyContext(cx, freeit); | 
|  | 1223 } | 
|  | 1224 | 
|  | 1225 SECStatus | 
|  | 1226 AESKeyWrap_Encrypt(AESKeyWrapContext *cx, unsigned char *output, | 
|  | 1227                    unsigned int *outputLen, unsigned int maxOutputLen, | 
|  | 1228                    const unsigned char *input, unsigned int inputLen) | 
|  | 1229 { | 
|  | 1230   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1231       return SECFailure; | 
|  | 1232   return vector->p_AESKeyWrap_Encrypt(cx, output, outputLen, maxOutputLen, | 
|  | 1233                                       input, inputLen); | 
|  | 1234 } | 
|  | 1235 SECStatus | 
|  | 1236 AESKeyWrap_Decrypt(AESKeyWrapContext *cx, unsigned char *output, | 
|  | 1237                    unsigned int *outputLen, unsigned int maxOutputLen, | 
|  | 1238                    const unsigned char *input, unsigned int inputLen) | 
|  | 1239 { | 
|  | 1240   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1241       return SECFailure; | 
|  | 1242   return vector->p_AESKeyWrap_Decrypt(cx, output, outputLen, maxOutputLen, | 
|  | 1243                                       input, inputLen); | 
|  | 1244 } | 
|  | 1245 | 
|  | 1246 PRBool | 
|  | 1247 BLAPI_SHVerify(const char *name, PRFuncPtr addr) | 
|  | 1248 { | 
|  | 1249   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1250       return PR_FALSE; | 
|  | 1251   return vector->p_BLAPI_SHVerify(name, addr); | 
|  | 1252 } | 
|  | 1253 | 
|  | 1254 /* | 
|  | 1255  * The Caller is expected to pass NULL as the name, which will | 
|  | 1256  * trigger the p_BLAPI_VerifySelf() to return 'TRUE'. If we really loaded | 
|  | 1257  * from a shared library, BLAPI_VerifySelf will get pick up the real name | 
|  | 1258  * from the static set in freebl_LoadDSO( void ) | 
|  | 1259  */ | 
|  | 1260 PRBool | 
|  | 1261 BLAPI_VerifySelf(const char *name) | 
|  | 1262 { | 
|  | 1263   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1264       return PR_FALSE; | 
|  | 1265   return vector->p_BLAPI_VerifySelf(libraryName); | 
|  | 1266 } | 
|  | 1267 | 
|  | 1268 /* ============== New for 3.006 =============================== */ | 
|  | 1269 | 
|  | 1270 SECStatus | 
|  | 1271 EC_NewKey(ECParams * params, ECPrivateKey ** privKey) | 
|  | 1272 { | 
|  | 1273   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1274       return SECFailure; | 
|  | 1275   return (vector->p_EC_NewKey)( params, privKey ); | 
|  | 1276 } | 
|  | 1277 | 
|  | 1278 SECStatus | 
|  | 1279 EC_NewKeyFromSeed(ECParams * params, ECPrivateKey ** privKey, | 
|  | 1280     const unsigned char *seed, int seedlen) | 
|  | 1281 { | 
|  | 1282   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1283       return SECFailure; | 
|  | 1284   return (vector->p_EC_NewKeyFromSeed)( params, privKey, seed, seedlen ); | 
|  | 1285 } | 
|  | 1286 | 
|  | 1287 SECStatus | 
|  | 1288 EC_ValidatePublicKey(ECParams * params, SECItem * publicValue) | 
|  | 1289 { | 
|  | 1290   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1291       return SECFailure; | 
|  | 1292   return (vector->p_EC_ValidatePublicKey)( params, publicValue ); | 
|  | 1293 } | 
|  | 1294 | 
|  | 1295 SECStatus | 
|  | 1296 ECDH_Derive(SECItem * publicValue, ECParams * params, SECItem * privateValue, | 
|  | 1297             PRBool withCofactor, SECItem * derivedSecret) | 
|  | 1298 { | 
|  | 1299   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1300       return SECFailure; | 
|  | 1301   return (vector->p_ECDH_Derive)( publicValue, params, privateValue, | 
|  | 1302                                   withCofactor, derivedSecret ); | 
|  | 1303 } | 
|  | 1304 | 
|  | 1305 SECStatus | 
|  | 1306 ECDSA_SignDigest(ECPrivateKey * key, SECItem * signature, | 
|  | 1307     const SECItem * digest) | 
|  | 1308 { | 
|  | 1309   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1310       return SECFailure; | 
|  | 1311   return (vector->p_ECDSA_SignDigest)( key, signature, digest ); | 
|  | 1312 } | 
|  | 1313 | 
|  | 1314 SECStatus | 
|  | 1315 ECDSA_VerifyDigest(ECPublicKey * key, const SECItem * signature, | 
|  | 1316     const SECItem * digest) | 
|  | 1317 { | 
|  | 1318   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1319       return SECFailure; | 
|  | 1320   return (vector->p_ECDSA_VerifyDigest)( key, signature, digest ); | 
|  | 1321 } | 
|  | 1322 | 
|  | 1323 SECStatus | 
|  | 1324 ECDSA_SignDigestWithSeed(ECPrivateKey * key, SECItem * signature, | 
|  | 1325     const SECItem * digest, const unsigned char *seed, const int seedlen) | 
|  | 1326 { | 
|  | 1327   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1328       return SECFailure; | 
|  | 1329   return (vector->p_ECDSA_SignDigestWithSeed)( key, signature, digest, | 
|  | 1330       seed, seedlen ); | 
|  | 1331 } | 
|  | 1332 | 
|  | 1333 /* ============== New for 3.008 =============================== */ | 
|  | 1334 | 
|  | 1335 AESContext * | 
|  | 1336 AES_AllocateContext(void) | 
|  | 1337 { | 
|  | 1338   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1339       return NULL; | 
|  | 1340   return (vector->p_AES_AllocateContext)(); | 
|  | 1341 } | 
|  | 1342 | 
|  | 1343 AESKeyWrapContext * | 
|  | 1344 AESKeyWrap_AllocateContext(void) | 
|  | 1345 { | 
|  | 1346   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1347       return NULL; | 
|  | 1348   return (vector->p_AESKeyWrap_AllocateContext)(); | 
|  | 1349 } | 
|  | 1350 | 
|  | 1351 DESContext * | 
|  | 1352 DES_AllocateContext(void) | 
|  | 1353 { | 
|  | 1354   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1355       return NULL; | 
|  | 1356   return (vector->p_DES_AllocateContext)(); | 
|  | 1357 } | 
|  | 1358 | 
|  | 1359 RC2Context * | 
|  | 1360 RC2_AllocateContext(void) | 
|  | 1361 { | 
|  | 1362   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1363       return NULL; | 
|  | 1364   return (vector->p_RC2_AllocateContext)(); | 
|  | 1365 } | 
|  | 1366 | 
|  | 1367 RC4Context * | 
|  | 1368 RC4_AllocateContext(void) | 
|  | 1369 { | 
|  | 1370   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1371       return NULL; | 
|  | 1372   return (vector->p_RC4_AllocateContext)(); | 
|  | 1373 } | 
|  | 1374 | 
|  | 1375 SECStatus | 
|  | 1376 AES_InitContext(AESContext *cx, const unsigned char *key, | 
|  | 1377                 unsigned int keylen, const unsigned char *iv, int mode, | 
|  | 1378                 unsigned int encrypt, unsigned int blocklen) | 
|  | 1379 { | 
|  | 1380   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1381       return SECFailure; | 
|  | 1382   return (vector->p_AES_InitContext)(cx, key, keylen, iv, mode, encrypt, | 
|  | 1383                                      blocklen); | 
|  | 1384 } | 
|  | 1385 | 
|  | 1386 SECStatus | 
|  | 1387 AESKeyWrap_InitContext(AESKeyWrapContext *cx, const unsigned char *key, | 
|  | 1388                 unsigned int keylen, const unsigned char *iv, int mode, | 
|  | 1389                 unsigned int encrypt, unsigned int blocklen) | 
|  | 1390 { | 
|  | 1391   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1392       return SECFailure; | 
|  | 1393   return (vector->p_AESKeyWrap_InitContext)(cx, key, keylen, iv, mode, | 
|  | 1394                                             encrypt, blocklen); | 
|  | 1395 } | 
|  | 1396 | 
|  | 1397 SECStatus | 
|  | 1398 DES_InitContext(DESContext *cx, const unsigned char *key, | 
|  | 1399                 unsigned int keylen, const unsigned char *iv, int mode, | 
|  | 1400                 unsigned int encrypt, unsigned int xtra) | 
|  | 1401 { | 
|  | 1402   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1403       return SECFailure; | 
|  | 1404   return (vector->p_DES_InitContext)(cx, key, keylen, iv, mode, encrypt, xtra); | 
|  | 1405 } | 
|  | 1406 | 
|  | 1407 SECStatus | 
|  | 1408 SEED_InitContext(SEEDContext *cx, const unsigned char *key, | 
|  | 1409                 unsigned int keylen, const unsigned char *iv, int mode, | 
|  | 1410                 unsigned int encrypt, unsigned int xtra) | 
|  | 1411 { | 
|  | 1412   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1413       return SECFailure; | 
|  | 1414   return (vector->p_SEED_InitContext)(cx, key, keylen, iv, mode, encrypt, xtra); | 
|  | 1415 } | 
|  | 1416 | 
|  | 1417 SECStatus | 
|  | 1418 RC2_InitContext(RC2Context *cx, const unsigned char *key, | 
|  | 1419                 unsigned int keylen, const unsigned char *iv, int mode, | 
|  | 1420                 unsigned int effectiveKeyLen, unsigned int xtra) | 
|  | 1421 { | 
|  | 1422   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1423       return SECFailure; | 
|  | 1424   return (vector->p_RC2_InitContext)(cx, key, keylen, iv, mode, | 
|  | 1425                                      effectiveKeyLen, xtra); | 
|  | 1426 } | 
|  | 1427 | 
|  | 1428 SECStatus | 
|  | 1429 RC4_InitContext(RC4Context *cx, const unsigned char *key, | 
|  | 1430                 unsigned int keylen, const unsigned char *x1, int x2, | 
|  | 1431                 unsigned int x3, unsigned int x4) | 
|  | 1432 { | 
|  | 1433   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1434       return SECFailure; | 
|  | 1435   return (vector->p_RC4_InitContext)(cx, key, keylen, x1, x2, x3, x4); | 
|  | 1436 } | 
|  | 1437 | 
|  | 1438 void | 
|  | 1439 MD2_Clone(MD2Context *dest, MD2Context *src) | 
|  | 1440 { | 
|  | 1441   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1442       return; | 
|  | 1443   (vector->p_MD2_Clone)(dest, src); | 
|  | 1444 } | 
|  | 1445 | 
|  | 1446 void | 
|  | 1447 MD5_Clone(MD5Context *dest, MD5Context *src) | 
|  | 1448 { | 
|  | 1449   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1450       return; | 
|  | 1451   (vector->p_MD5_Clone)(dest, src); | 
|  | 1452 } | 
|  | 1453 | 
|  | 1454 void | 
|  | 1455 SHA1_Clone(SHA1Context *dest, SHA1Context *src) | 
|  | 1456 { | 
|  | 1457   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1458       return; | 
|  | 1459   (vector->p_SHA1_Clone)(dest, src); | 
|  | 1460 } | 
|  | 1461 | 
|  | 1462 void | 
|  | 1463 SHA256_Clone(SHA256Context *dest, SHA256Context *src) | 
|  | 1464 { | 
|  | 1465   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1466       return; | 
|  | 1467   (vector->p_SHA256_Clone)(dest, src); | 
|  | 1468 } | 
|  | 1469 | 
|  | 1470 void | 
|  | 1471 SHA384_Clone(SHA384Context *dest, SHA384Context *src) | 
|  | 1472 { | 
|  | 1473   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1474       return; | 
|  | 1475   (vector->p_SHA384_Clone)(dest, src); | 
|  | 1476 } | 
|  | 1477 | 
|  | 1478 void | 
|  | 1479 SHA512_Clone(SHA512Context *dest, SHA512Context *src) | 
|  | 1480 { | 
|  | 1481   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1482       return; | 
|  | 1483   (vector->p_SHA512_Clone)(dest, src); | 
|  | 1484 } | 
|  | 1485 | 
|  | 1486 SECStatus | 
|  | 1487 TLS_PRF(const SECItem *secret, const char *label, | 
|  | 1488                      SECItem *seed, SECItem *result, PRBool isFIPS) | 
|  | 1489 { | 
|  | 1490   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1491       return SECFailure; | 
|  | 1492   return (vector->p_TLS_PRF)(secret, label, seed, result, isFIPS); | 
|  | 1493 } | 
|  | 1494 | 
|  | 1495 const SECHashObject * | 
|  | 1496 HASH_GetRawHashObject(HASH_HashType hashType) | 
|  | 1497 { | 
|  | 1498   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1499       return NULL; | 
|  | 1500   return (vector->p_HASH_GetRawHashObject)(hashType); | 
|  | 1501 } | 
|  | 1502 | 
|  | 1503 | 
|  | 1504 void | 
|  | 1505 HMAC_Destroy(HMACContext *cx, PRBool freeit) | 
|  | 1506 { | 
|  | 1507   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1508       return; | 
|  | 1509   (vector->p_HMAC_Destroy)(cx, freeit); | 
|  | 1510 } | 
|  | 1511 | 
|  | 1512 HMACContext * | 
|  | 1513 HMAC_Create(const SECHashObject *hashObj, const unsigned char *secret, | 
|  | 1514             unsigned int secret_len, PRBool isFIPS) | 
|  | 1515 { | 
|  | 1516   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1517       return NULL; | 
|  | 1518   return (vector->p_HMAC_Create)(hashObj, secret, secret_len, isFIPS); | 
|  | 1519 } | 
|  | 1520 | 
|  | 1521 SECStatus | 
|  | 1522 HMAC_Init(HMACContext *cx, const SECHashObject *hashObj, | 
|  | 1523           const unsigned char *secret, unsigned int secret_len, PRBool isFIPS) | 
|  | 1524 { | 
|  | 1525   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1526       return SECFailure; | 
|  | 1527   return (vector->p_HMAC_Init)(cx, hashObj, secret, secret_len, isFIPS); | 
|  | 1528 } | 
|  | 1529 | 
|  | 1530 void | 
|  | 1531 HMAC_Begin(HMACContext *cx) | 
|  | 1532 { | 
|  | 1533   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1534       return; | 
|  | 1535   (vector->p_HMAC_Begin)(cx); | 
|  | 1536 } | 
|  | 1537 | 
|  | 1538 void | 
|  | 1539 HMAC_Update(HMACContext *cx, const unsigned char *data, unsigned int data_len) | 
|  | 1540 { | 
|  | 1541   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1542       return; | 
|  | 1543   (vector->p_HMAC_Update)(cx, data, data_len); | 
|  | 1544 } | 
|  | 1545 | 
|  | 1546 SECStatus | 
|  | 1547 HMAC_Finish(HMACContext *cx, unsigned char *result, unsigned int *result_len, | 
|  | 1548             unsigned int max_result_len) | 
|  | 1549 { | 
|  | 1550   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1551       return SECFailure; | 
|  | 1552   return (vector->p_HMAC_Finish)(cx, result, result_len, max_result_len); | 
|  | 1553 } | 
|  | 1554 | 
|  | 1555 HMACContext * | 
|  | 1556 HMAC_Clone(HMACContext *cx) | 
|  | 1557 { | 
|  | 1558   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1559       return NULL; | 
|  | 1560   return (vector->p_HMAC_Clone)(cx); | 
|  | 1561 } | 
|  | 1562 | 
|  | 1563 void | 
|  | 1564 RNG_SystemInfoForRNG(void) | 
|  | 1565 { | 
|  | 1566   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1567       return ; | 
|  | 1568   (vector->p_RNG_SystemInfoForRNG)(); | 
|  | 1569 | 
|  | 1570 } | 
|  | 1571 | 
|  | 1572 SECStatus | 
|  | 1573 FIPS186Change_GenerateX(unsigned char *XKEY, const unsigned char *XSEEDj, | 
|  | 1574                         unsigned char *x_j) | 
|  | 1575 { | 
|  | 1576   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1577       return SECFailure; | 
|  | 1578   return (vector->p_FIPS186Change_GenerateX)(XKEY, XSEEDj, x_j); | 
|  | 1579 } | 
|  | 1580 | 
|  | 1581 SECStatus | 
|  | 1582 FIPS186Change_ReduceModQForDSA(const unsigned char *w, | 
|  | 1583                                const unsigned char *q, | 
|  | 1584                                unsigned char *xj) | 
|  | 1585 { | 
|  | 1586   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1587       return SECFailure; | 
|  | 1588   return (vector->p_FIPS186Change_ReduceModQForDSA)(w, q, xj); | 
|  | 1589 } | 
|  | 1590 | 
|  | 1591 /* === new for Camellia === */ | 
|  | 1592 SECStatus | 
|  | 1593 Camellia_InitContext(CamelliaContext *cx, const unsigned char *key, | 
|  | 1594                 unsigned int keylen, const unsigned char *iv, int mode, | 
|  | 1595                 unsigned int encrypt, unsigned int unused) | 
|  | 1596 { | 
|  | 1597   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1598       return SECFailure; | 
|  | 1599   return (vector->p_Camellia_InitContext)(cx, key, keylen, iv, mode, encrypt, | 
|  | 1600                                           unused); | 
|  | 1601 } | 
|  | 1602 | 
|  | 1603 CamelliaContext * | 
|  | 1604 Camellia_AllocateContext(void) | 
|  | 1605 { | 
|  | 1606   if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1607       return NULL; | 
|  | 1608   return (vector->p_Camellia_AllocateContext)(); | 
|  | 1609 } | 
|  | 1610 | 
|  | 1611 | 
|  | 1612 CamelliaContext * | 
|  | 1613 Camellia_CreateContext(const unsigned char *key, const unsigned char *iv, | 
|  | 1614                        int mode, int encrypt, | 
|  | 1615                        unsigned int keylen) | 
|  | 1616 { | 
|  | 1617     if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1618         return NULL; | 
|  | 1619     return (vector->p_Camellia_CreateContext)(key, iv, mode, encrypt, keylen); | 
|  | 1620 } | 
|  | 1621 | 
|  | 1622 void | 
|  | 1623 Camellia_DestroyContext(CamelliaContext *cx, PRBool freeit) | 
|  | 1624 { | 
|  | 1625     if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1626         return ; | 
|  | 1627     (vector->p_Camellia_DestroyContext)(cx, freeit); | 
|  | 1628 } | 
|  | 1629 | 
|  | 1630 SECStatus | 
|  | 1631 Camellia_Encrypt(CamelliaContext *cx, unsigned char *output, | 
|  | 1632                  unsigned int *outputLen, unsigned int maxOutputLen, | 
|  | 1633                  const unsigned char *input, unsigned int inputLen) | 
|  | 1634 { | 
|  | 1635     if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1636         return SECFailure; | 
|  | 1637     return (vector->p_Camellia_Encrypt)(cx, output, outputLen, maxOutputLen, | 
|  | 1638                                         input, inputLen); | 
|  | 1639 } | 
|  | 1640 | 
|  | 1641 SECStatus | 
|  | 1642 Camellia_Decrypt(CamelliaContext *cx, unsigned char *output, | 
|  | 1643                  unsigned int *outputLen, unsigned int maxOutputLen, | 
|  | 1644                  const unsigned char *input, unsigned int inputLen) | 
|  | 1645 { | 
|  | 1646     if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1647         return SECFailure; | 
|  | 1648     return (vector->p_Camellia_Decrypt)(cx, output, outputLen, maxOutputLen, | 
|  | 1649                                         input, inputLen); | 
|  | 1650 } | 
|  | 1651 | 
|  | 1652 void BL_SetForkState(PRBool forked) | 
|  | 1653 { | 
|  | 1654     if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1655         return; | 
|  | 1656     (vector->p_BL_SetForkState)(forked); | 
|  | 1657 } | 
|  | 1658 | 
|  | 1659 SECStatus | 
|  | 1660 PRNGTEST_Instantiate(const PRUint8 *entropy, unsigned int entropy_len, | 
|  | 1661                 const PRUint8 *nonce, unsigned int nonce_len, | 
|  | 1662                 const PRUint8 *personal_string, unsigned int ps_len) | 
|  | 1663 { | 
|  | 1664     if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1665         return SECFailure; | 
|  | 1666     return (vector->p_PRNGTEST_Instantiate)(entropy, entropy_len, | 
|  | 1667                                            nonce,  nonce_len, | 
|  | 1668                                            personal_string,  ps_len); | 
|  | 1669 } | 
|  | 1670 | 
|  | 1671 SECStatus | 
|  | 1672 PRNGTEST_Reseed(const PRUint8 *entropy, unsigned int entropy_len, | 
|  | 1673                   const PRUint8 *additional, unsigned int additional_len) | 
|  | 1674 { | 
|  | 1675     if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1676         return SECFailure; | 
|  | 1677     return (vector->p_PRNGTEST_Reseed)(entropy, entropy_len, | 
|  | 1678                                        additional, additional_len); | 
|  | 1679 } | 
|  | 1680 | 
|  | 1681 SECStatus | 
|  | 1682 PRNGTEST_Generate(PRUint8 *bytes, unsigned int bytes_len, | 
|  | 1683                   const PRUint8 *additional, unsigned int additional_len) | 
|  | 1684 { | 
|  | 1685     if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1686         return SECFailure; | 
|  | 1687     return (vector->p_PRNGTEST_Generate)(bytes, bytes_len, | 
|  | 1688                                          additional, additional_len); | 
|  | 1689 } | 
|  | 1690 | 
|  | 1691 SECStatus | 
|  | 1692 PRNGTEST_Uninstantiate() | 
|  | 1693 { | 
|  | 1694     if (!vector && PR_SUCCESS != freebl_RunLoaderOnce()) | 
|  | 1695         return SECFailure; | 
|  | 1696     return (vector->p_PRNGTEST_Uninstantiate)(); | 
|  | 1697 } | 
|  | 1698 | 
|  | 1699 | 
| OLD | NEW | 
|---|