diff options
Diffstat (limited to 'mozilla/security/nss/cmd/bltest')
206 files changed, 4466 insertions, 0 deletions
diff --git a/mozilla/security/nss/cmd/bltest/Makefile b/mozilla/security/nss/cmd/bltest/Makefile new file mode 100644 index 0000000..115886c --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/Makefile @@ -0,0 +1,86 @@ +#! gmake +# +# ***** 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) 1994-2000 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# +# 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 ***** + +####################################################################### +# (1) Include initial platform-independent assignments (MANDATORY). # +####################################################################### + +include manifest.mn +#MKPROG = purify -cache-dir=/u/mcgreer/pcache -best-effort \ +# -always-use-cache-dir $(CC) + +####################################################################### +# (2) Include "global" configuration information. (OPTIONAL) # +####################################################################### + +include $(CORE_DEPTH)/coreconf/config.mk + +####################################################################### +# (3) Include "component" configuration information. (OPTIONAL) # +####################################################################### + + + +####################################################################### +# (4) Include "local" platform-dependent assignments (OPTIONAL). # +####################################################################### + +include ../platlibs.mk + +#EXTRA_SHARED_LIBS += \ +# -L/usr/lib \ +# -lposix4 \ +# $(NULL) + +####################################################################### +# (5) Execute "global" rules. (OPTIONAL) # +####################################################################### + +include $(CORE_DEPTH)/coreconf/rules.mk + +####################################################################### +# (6) Execute "component" rules. (OPTIONAL) # +####################################################################### + + + +####################################################################### +# (7) Execute "local" rules. (OPTIONAL). # +####################################################################### + +include ../platrules.mk diff --git a/mozilla/security/nss/cmd/bltest/blapitest.c b/mozilla/security/nss/cmd/bltest/blapitest.c new file mode 100644 index 0000000..a7a4886 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/blapitest.c @@ -0,0 +1,3971 @@ +/* ***** 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) 1994-2000 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Douglas Stebila <douglas@stebila.ca>, 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 ***** */ + +#include <stdio.h> +#include <stdlib.h> + +#include "blapi.h" +#include "secrng.h" +#include "prmem.h" +#include "prprf.h" +#include "prtime.h" +#include "prsystem.h" +#include "plstr.h" +#include "nssb64.h" +#include "secutil.h" +#include "plgetopt.h" +#include "softoken.h" +#include "nspr.h" +#include "nss.h" +#include "secoid.h" + +#ifdef NSS_ENABLE_ECC +#include "ecl-curve.h" +SECStatus EC_DecodeParams(const SECItem *encodedParams, + ECParams **ecparams); +SECStatus EC_CopyParams(PRArenaPool *arena, ECParams *dstParams, + const ECParams *srcParams); +#endif + +/* Temporary - add debugging output on windows for RSA to track QA failure */ +#ifdef _WIN32 +#define TRACK_BLTEST_BUG + char __bltDBG[] = "BLTEST DEBUG"; +#endif + +char *progName; +char *testdir = NULL; + +#define BLTEST_DEFAULT_CHUNKSIZE 4096 + +#define WORDSIZE sizeof(unsigned long) + +#define CHECKERROR(rv, ln) \ + if (rv) { \ + PRErrorCode prerror = PR_GetError(); \ + PR_fprintf(PR_STDERR, "%s: ERR %d (%s) at line %d.\n", progName, \ + prerror, SECU_Strerror(prerror), ln); \ + exit(-1); \ + } + +/* Macros for performance timing. */ +#define TIMESTART() \ + time1 = PR_IntervalNow(); + +#define TIMEFINISH(time, reps) \ + time2 = (PRIntervalTime)(PR_IntervalNow() - time1); \ + time1 = PR_IntervalToMilliseconds(time2); \ + time = ((double)(time1))/reps; + +#define TIMEMARK(seconds) \ + time1 = PR_SecondsToInterval(seconds); \ + { \ + PRInt64 tmp, L100; \ + LL_I2L(L100, 100); \ + if (time2 == 0) { \ + time2 = 1; \ + } \ + LL_DIV(tmp, time1, time2); \ + if (tmp < 10) { \ + if (tmp == 0) { \ + opsBetweenChecks = 1; \ + } else { \ + LL_L2I(opsBetweenChecks, tmp); \ + } \ + } else { \ + opsBetweenChecks = 10; \ + } \ + } \ + time2 = time1; \ + time1 = PR_IntervalNow(); + +#define TIMETOFINISH() \ + PR_IntervalNow() - time1 >= time2 + +static void Usage() +{ +#define PRINTUSAGE(subject, option, predicate) \ + fprintf(stderr, "%10s %s\t%s\n", subject, option, predicate); + fprintf(stderr, "\n"); + PRINTUSAGE(progName, "[-DEHSVR]", "List available cipher modes"); /* XXX */ + fprintf(stderr, "\n"); + PRINTUSAGE(progName, "-E -m mode ", "Encrypt a buffer"); + PRINTUSAGE("", "", "[-i plaintext] [-o ciphertext] [-k key] [-v iv]"); + PRINTUSAGE("", "", "[-b bufsize] [-g keysize] [-e exp] [-r rounds]"); + PRINTUSAGE("", "", "[-w wordsize] [-p repetitions | -5 time_interval]"); + PRINTUSAGE("", "", "[-4 th_num]"); + PRINTUSAGE("", "-m", "cipher mode to use"); + PRINTUSAGE("", "-i", "file which contains input buffer"); + PRINTUSAGE("", "-o", "file for output buffer"); + PRINTUSAGE("", "-k", "file which contains key"); + PRINTUSAGE("", "-v", "file which contains initialization vector"); + PRINTUSAGE("", "-b", "size of input buffer"); + PRINTUSAGE("", "-g", "key size (in bytes)"); + PRINTUSAGE("", "-p", "do performance test"); + PRINTUSAGE("", "-4", "run test in multithread mode. th_num number of parallel threads"); + PRINTUSAGE("", "-5", "run test for specified time interval(in seconds)"); + PRINTUSAGE("(rsa)", "-e", "rsa public exponent"); + PRINTUSAGE("(rc5)", "-r", "number of rounds"); + PRINTUSAGE("(rc5)", "-w", "wordsize (32 or 64)"); + fprintf(stderr, "\n"); + PRINTUSAGE(progName, "-D -m mode", "Decrypt a buffer"); + PRINTUSAGE("", "", "[-i plaintext] [-o ciphertext] [-k key] [-v iv]"); + PRINTUSAGE("", "", "[-p repetitions | -5 time_interval] [-4 th_num]"); + PRINTUSAGE("", "-m", "cipher mode to use"); + PRINTUSAGE("", "-i", "file which contains input buffer"); + PRINTUSAGE("", "-o", "file for output buffer"); + PRINTUSAGE("", "-k", "file which contains key"); + PRINTUSAGE("", "-v", "file which contains initialization vector"); + PRINTUSAGE("", "-p", "do performance test"); + PRINTUSAGE("", "-4", "run test in multithread mode. th_num number of parallel threads"); + PRINTUSAGE("", "-5", "run test for specified time interval(in seconds)"); + fprintf(stderr, "\n"); + PRINTUSAGE(progName, "-H -m mode", "Hash a buffer"); + PRINTUSAGE("", "", "[-i plaintext] [-o hash]"); + PRINTUSAGE("", "", "[-b bufsize]"); + PRINTUSAGE("", "", "[-p repetitions | -5 time_interval] [-4 th_num]"); + PRINTUSAGE("", "-m", "cipher mode to use"); + PRINTUSAGE("", "-i", "file which contains input buffer"); + PRINTUSAGE("", "-o", "file for hash"); + PRINTUSAGE("", "-b", "size of input buffer"); + PRINTUSAGE("", "-p", "do performance test"); + PRINTUSAGE("", "-4", "run test in multithread mode. th_num number of parallel threads"); + PRINTUSAGE("", "-5", "run test for specified time interval(in seconds)"); + fprintf(stderr, "\n"); + PRINTUSAGE(progName, "-S -m mode", "Sign a buffer"); + PRINTUSAGE("", "", "[-i plaintext] [-o signature] [-k key]"); + PRINTUSAGE("", "", "[-b bufsize]"); +#ifdef NSS_ENABLE_ECC + PRINTUSAGE("", "", "[-n curvename]"); +#endif + PRINTUSAGE("", "", "[-p repetitions | -5 time_interval] [-4 th_num]"); + PRINTUSAGE("", "-m", "cipher mode to use"); + PRINTUSAGE("", "-i", "file which contains input buffer"); + PRINTUSAGE("", "-o", "file for signature"); + PRINTUSAGE("", "-k", "file which contains key"); +#ifdef NSS_ENABLE_ECC + PRINTUSAGE("", "-n", "name of curve for EC key generation; one of:"); + PRINTUSAGE("", "", " sect163k1, nistk163, sect163r1, sect163r2,"); + PRINTUSAGE("", "", " nistb163, sect193r1, sect193r2, sect233k1, nistk233,"); + PRINTUSAGE("", "", " sect233r1, nistb233, sect239k1, sect283k1, nistk283,"); + PRINTUSAGE("", "", " sect283r1, nistb283, sect409k1, nistk409, sect409r1,"); + PRINTUSAGE("", "", " nistb409, sect571k1, nistk571, sect571r1, nistb571,"); + PRINTUSAGE("", "", " secp160k1, secp160r1, secp160r2, secp192k1, secp192r1,"); + PRINTUSAGE("", "", " nistp192, secp224k1, secp224r1, nistp224, secp256k1,"); + PRINTUSAGE("", "", " secp256r1, nistp256, secp384r1, nistp384, secp521r1,"); + PRINTUSAGE("", "", " nistp521, prime192v1, prime192v2, prime192v3,"); + PRINTUSAGE("", "", " prime239v1, prime239v2, prime239v3, c2pnb163v1,"); + PRINTUSAGE("", "", " c2pnb163v2, c2pnb163v3, c2pnb176v1, c2tnb191v1,"); + PRINTUSAGE("", "", " c2tnb191v2, c2tnb191v3, c2onb191v4, c2onb191v5,"); + PRINTUSAGE("", "", " c2pnb208w1, c2tnb239v1, c2tnb239v2, c2tnb239v3,"); + PRINTUSAGE("", "", " c2onb239v4, c2onb239v5, c2pnb272w1, c2pnb304w1,"); + PRINTUSAGE("", "", " c2tnb359w1, c2pnb368w1, c2tnb431r1, secp112r1,"); + PRINTUSAGE("", "", " secp112r2, secp128r1, secp128r2, sect113r1, sect113r2,"); + PRINTUSAGE("", "", " sect131r1, sect131r2"); +#endif + PRINTUSAGE("", "-p", "do performance test"); + PRINTUSAGE("", "-4", "run test in multithread mode. th_num number of parallel threads"); + PRINTUSAGE("", "-5", "run test for specified time interval(in seconds)"); + fprintf(stderr, "\n"); + PRINTUSAGE(progName, "-V -m mode", "Verify a signed buffer"); + PRINTUSAGE("", "", "[-i plaintext] [-s signature] [-k key]"); + PRINTUSAGE("", "", "[-p repetitions | -5 time_interval] [-4 th_num]"); + PRINTUSAGE("", "-m", "cipher mode to use"); + PRINTUSAGE("", "-i", "file which contains input buffer"); + PRINTUSAGE("", "-s", "file which contains signature of input buffer"); + PRINTUSAGE("", "-k", "file which contains key"); + PRINTUSAGE("", "-p", "do performance test"); + PRINTUSAGE("", "-4", "run test in multithread mode. th_num number of parallel threads"); + PRINTUSAGE("", "-5", "run test for specified time interval(in seconds)"); + fprintf(stderr, "\n"); + PRINTUSAGE(progName, "-N -m mode -b bufsize", + "Create a nonce plaintext and key"); + PRINTUSAGE("", "", "[-g keysize] [-u cxreps]"); + PRINTUSAGE("", "-g", "key size (in bytes)"); + PRINTUSAGE("", "-u", "number of repetitions of context creation"); + fprintf(stderr, "\n"); + PRINTUSAGE(progName, "-R [-g keysize] [-e exp]", + "Test the RSA populate key function"); + PRINTUSAGE("", "", "[-r repetitions]"); + PRINTUSAGE("", "-g", "key size (in bytes)"); + PRINTUSAGE("", "-e", "rsa public exponent"); + PRINTUSAGE("", "-r", "repetitions of the test"); + fprintf(stderr, "\n"); + PRINTUSAGE(progName, "-F", "Run the FIPS self-test"); + fprintf(stderr, "\n"); + PRINTUSAGE(progName, "-T [-m mode1,mode2...]", "Run the BLAPI self-test"); + fprintf(stderr, "\n"); + exit(1); +} + +/* Helper functions for ascii<-->binary conversion/reading/writing */ + +/* XXX argh */ +struct item_with_arena { + SECItem *item; + PRArenaPool *arena; +}; + +static PRInt32 +get_binary(void *arg, const unsigned char *ibuf, PRInt32 size) +{ + struct item_with_arena *it = arg; + SECItem *binary = it->item; + SECItem *tmp; + int index; + if (binary->data == NULL) { + tmp = SECITEM_AllocItem(it->arena, NULL, size); + binary->data = tmp->data; + binary->len = tmp->len; + index = 0; + } else { + SECITEM_ReallocItem(NULL, binary, binary->len, binary->len + size); + index = binary->len; + } + PORT_Memcpy(&binary->data[index], ibuf, size); + return binary->len; +} + +static SECStatus +atob(SECItem *ascii, SECItem *binary, PRArenaPool *arena) +{ + SECStatus status; + NSSBase64Decoder *cx; + struct item_with_arena it; + int len; + binary->data = NULL; + binary->len = 0; + it.item = binary; + it.arena = arena; + len = (strncmp(&ascii->data[ascii->len-2],"\r\n",2)) ? + ascii->len : ascii->len-2; + cx = NSSBase64Decoder_Create(get_binary, &it); + status = NSSBase64Decoder_Update(cx, (const char *)ascii->data, len); + status = NSSBase64Decoder_Destroy(cx, PR_FALSE); + return status; +} + +static PRInt32 +output_ascii(void *arg, const char *obuf, PRInt32 size) +{ + PRFileDesc *outfile = arg; + PRInt32 nb = PR_Write(outfile, obuf, size); + if (nb != size) { + PORT_SetError(SEC_ERROR_IO); + return -1; + } + return nb; +} + +static SECStatus +btoa_file(SECItem *binary, PRFileDesc *outfile) +{ + SECStatus status; + NSSBase64Encoder *cx; + SECItem ascii; + ascii.data = NULL; + ascii.len = 0; + if (binary->len == 0) + return SECSuccess; + cx = NSSBase64Encoder_Create(output_ascii, outfile); + status = NSSBase64Encoder_Update(cx, binary->data, binary->len); + status = NSSBase64Encoder_Destroy(cx, PR_FALSE); + status = PR_Write(outfile, "\r\n", 2); + return status; +} + +SECStatus +hex_from_2char(unsigned char *c2, unsigned char *byteval) +{ + int i; + unsigned char offset; + *byteval = 0; + for (i=0; i<2; i++) { + if (c2[i] >= '0' && c2[i] <= '9') { + offset = c2[i] - '0'; + *byteval |= offset << 4*(1-i); + } else if (c2[i] >= 'a' && c2[i] <= 'f') { + offset = c2[i] - 'a'; + *byteval |= (offset + 10) << 4*(1-i); + } else if (c2[i] >= 'A' && c2[i] <= 'F') { + offset = c2[i] - 'A'; + *byteval |= (offset + 10) << 4*(1-i); + } else { + return SECFailure; + } + } + return SECSuccess; +} + +SECStatus +char2_from_hex(unsigned char byteval, unsigned char *c2) +{ + int i; + unsigned char offset; + for (i=0; i<2; i++) { + offset = (byteval >> 4*(1-i)) & 0x0f; + if (offset < 10) { + c2[i] = '0' + offset; + } else { + c2[i] = 'A' + offset - 10; + } + } + return SECSuccess; +} + +void +serialize_key(SECItem *it, int ni, PRFileDesc *file) +{ + unsigned char len[4]; + int i; + SECStatus status; + NSSBase64Encoder *cx; + SECItem ascii; + ascii.data = NULL; + ascii.len = 0; + cx = NSSBase64Encoder_Create(output_ascii, file); + for (i=0; i<ni; i++, it++) { + len[0] = (it->len >> 24) & 0xff; + len[1] = (it->len >> 16) & 0xff; + len[2] = (it->len >> 8) & 0xff; + len[3] = (it->len & 0xff); + status = NSSBase64Encoder_Update(cx, len, 4); + status = NSSBase64Encoder_Update(cx, it->data, it->len); + } + status = NSSBase64Encoder_Destroy(cx, PR_FALSE); + status = PR_Write(file, "\r\n", 2); +} + +void +key_from_filedata(PRArenaPool *arena, SECItem *it, int ns, int ni, SECItem *filedata) +{ + int fpos = 0; + int i, len; + unsigned char *buf = filedata->data; + for (i=0; i<ni; i++) { + len = (buf[fpos++] & 0xff) << 24; + len |= (buf[fpos++] & 0xff) << 16; + len |= (buf[fpos++] & 0xff) << 8; + len |= (buf[fpos++] & 0xff); + if (ns <= i) { + if (len > 0) { + it->len = len; + it->data = PORT_ArenaAlloc(arena, it->len); + PORT_Memcpy(it->data, &buf[fpos], it->len); + } else { + it->len = 0; + it->data = NULL; + } + it++; + } + fpos += len; + } +} + +static RSAPrivateKey * +rsakey_from_filedata(SECItem *filedata) +{ + RSAPrivateKey *key; + PRArenaPool *arena; + arena = PORT_NewArena(BLTEST_DEFAULT_CHUNKSIZE); + key = (RSAPrivateKey *)PORT_ArenaZAlloc(arena, sizeof(RSAPrivateKey)); + key->arena = arena; + key_from_filedata(arena, &key->version, 0, 9, filedata); + return key; +} + +static PQGParams * +pqg_from_filedata(SECItem *filedata) +{ + PQGParams *pqg; + PRArenaPool *arena; + arena = PORT_NewArena(BLTEST_DEFAULT_CHUNKSIZE); + pqg = (PQGParams *)PORT_ArenaZAlloc(arena, sizeof(PQGParams)); + pqg->arena = arena; + key_from_filedata(arena, &pqg->prime, 0, 3, filedata); + return pqg; +} + +static DSAPrivateKey * +dsakey_from_filedata(SECItem *filedata) +{ + DSAPrivateKey *key; + PRArenaPool *arena; + arena = PORT_NewArena(BLTEST_DEFAULT_CHUNKSIZE); + key = (DSAPrivateKey *)PORT_ArenaZAlloc(arena, sizeof(DSAPrivateKey)); + key->params.arena = arena; + key_from_filedata(arena, &key->params.prime, 0, 5, filedata); + return key; +} + +#ifdef NSS_ENABLE_ECC +static ECPrivateKey * +eckey_from_filedata(SECItem *filedata) +{ + ECPrivateKey *key; + PRArenaPool *arena; + SECStatus rv; + ECParams *tmpECParams = NULL; + arena = PORT_NewArena(BLTEST_DEFAULT_CHUNKSIZE); + key = (ECPrivateKey *)PORT_ArenaZAlloc(arena, sizeof(ECPrivateKey)); + /* read and convert params */ + key->ecParams.arena = arena; + key_from_filedata(arena, &key->ecParams.DEREncoding, 0, 1, filedata); + rv = SECOID_Init(); + CHECKERROR(rv, __LINE__); + rv = EC_DecodeParams(&key->ecParams.DEREncoding, &tmpECParams); + CHECKERROR(rv, __LINE__); + rv = EC_CopyParams(key->ecParams.arena, &key->ecParams, tmpECParams); + CHECKERROR(rv, __LINE__); + rv = SECOID_Shutdown(); + CHECKERROR(rv, __LINE__); + PORT_FreeArena(tmpECParams->arena, PR_TRUE); + /* read key */ + key_from_filedata(arena, &key->publicValue, 1, 3, filedata); + return key; +} + +typedef struct curveNameTagPairStr { + char *curveName; + SECOidTag curveOidTag; +} CurveNameTagPair; + +#define DEFAULT_CURVE_OID_TAG SEC_OID_SECG_EC_SECP192R1 +/* #define DEFAULT_CURVE_OID_TAG SEC_OID_SECG_EC_SECP160R1 */ + +static CurveNameTagPair nameTagPair[] = +{ + { "sect163k1", SEC_OID_SECG_EC_SECT163K1}, + { "nistk163", SEC_OID_SECG_EC_SECT163K1}, + { "sect163r1", SEC_OID_SECG_EC_SECT163R1}, + { "sect163r2", SEC_OID_SECG_EC_SECT163R2}, + { "nistb163", SEC_OID_SECG_EC_SECT163R2}, + { "sect193r1", SEC_OID_SECG_EC_SECT193R1}, + { "sect193r2", SEC_OID_SECG_EC_SECT193R2}, + { "sect233k1", SEC_OID_SECG_EC_SECT233K1}, + { "nistk233", SEC_OID_SECG_EC_SECT233K1}, + { "sect233r1", SEC_OID_SECG_EC_SECT233R1}, + { "nistb233", SEC_OID_SECG_EC_SECT233R1}, + { "sect239k1", SEC_OID_SECG_EC_SECT239K1}, + { "sect283k1", SEC_OID_SECG_EC_SECT283K1}, + { "nistk283", SEC_OID_SECG_EC_SECT283K1}, + { "sect283r1", SEC_OID_SECG_EC_SECT283R1}, + { "nistb283", SEC_OID_SECG_EC_SECT283R1}, + { "sect409k1", SEC_OID_SECG_EC_SECT409K1}, + { "nistk409", SEC_OID_SECG_EC_SECT409K1}, + { "sect409r1", SEC_OID_SECG_EC_SECT409R1}, + { "nistb409", SEC_OID_SECG_EC_SECT409R1}, + { "sect571k1", SEC_OID_SECG_EC_SECT571K1}, + { "nistk571", SEC_OID_SECG_EC_SECT571K1}, + { "sect571r1", SEC_OID_SECG_EC_SECT571R1}, + { "nistb571", SEC_OID_SECG_EC_SECT571R1}, + { "secp160k1", SEC_OID_SECG_EC_SECP160K1}, + { "secp160r1", SEC_OID_SECG_EC_SECP160R1}, + { "secp160r2", SEC_OID_SECG_EC_SECP160R2}, + { "secp192k1", SEC_OID_SECG_EC_SECP192K1}, + { "secp192r1", SEC_OID_SECG_EC_SECP192R1}, + { "nistp192", SEC_OID_SECG_EC_SECP192R1}, + { "secp224k1", SEC_OID_SECG_EC_SECP224K1}, + { "secp224r1", SEC_OID_SECG_EC_SECP224R1}, + { "nistp224", SEC_OID_SECG_EC_SECP224R1}, + { "secp256k1", SEC_OID_SECG_EC_SECP256K1}, + { "secp256r1", SEC_OID_SECG_EC_SECP256R1}, + { "nistp256", SEC_OID_SECG_EC_SECP256R1}, + { "secp384r1", SEC_OID_SECG_EC_SECP384R1}, + { "nistp384", SEC_OID_SECG_EC_SECP384R1}, + { "secp521r1", SEC_OID_SECG_EC_SECP521R1}, + { "nistp521", SEC_OID_SECG_EC_SECP521R1}, + + { "prime192v1", SEC_OID_ANSIX962_EC_PRIME192V1 }, + { "prime192v2", SEC_OID_ANSIX962_EC_PRIME192V2 }, + { "prime192v3", SEC_OID_ANSIX962_EC_PRIME192V3 }, + { "prime239v1", SEC_OID_ANSIX962_EC_PRIME239V1 }, + { "prime239v2", SEC_OID_ANSIX962_EC_PRIME239V2 }, + { "prime239v3", SEC_OID_ANSIX962_EC_PRIME239V3 }, + + { "c2pnb163v1", SEC_OID_ANSIX962_EC_C2PNB163V1 }, + { "c2pnb163v2", SEC_OID_ANSIX962_EC_C2PNB163V2 }, + { "c2pnb163v3", SEC_OID_ANSIX962_EC_C2PNB163V3 }, + { "c2pnb176v1", SEC_OID_ANSIX962_EC_C2PNB176V1 }, + { "c2tnb191v1", SEC_OID_ANSIX962_EC_C2TNB191V1 }, + { "c2tnb191v2", SEC_OID_ANSIX962_EC_C2TNB191V2 }, + { "c2tnb191v3", SEC_OID_ANSIX962_EC_C2TNB191V3 }, + { "c2onb191v4", SEC_OID_ANSIX962_EC_C2ONB191V4 }, + { "c2onb191v5", SEC_OID_ANSIX962_EC_C2ONB191V5 }, + { "c2pnb208w1", SEC_OID_ANSIX962_EC_C2PNB208W1 }, + { "c2tnb239v1", SEC_OID_ANSIX962_EC_C2TNB239V1 }, + { "c2tnb239v2", SEC_OID_ANSIX962_EC_C2TNB239V2 }, + { "c2tnb239v3", SEC_OID_ANSIX962_EC_C2TNB239V3 }, + { "c2onb239v4", SEC_OID_ANSIX962_EC_C2ONB239V4 }, + { "c2onb239v5", SEC_OID_ANSIX962_EC_C2ONB239V5 }, + { "c2pnb272w1", SEC_OID_ANSIX962_EC_C2PNB272W1 }, + { "c2pnb304w1", SEC_OID_ANSIX962_EC_C2PNB304W1 }, + { "c2tnb359v1", SEC_OID_ANSIX962_EC_C2TNB359V1 }, + { "c2pnb368w1", SEC_OID_ANSIX962_EC_C2PNB368W1 }, + { "c2tnb431r1", SEC_OID_ANSIX962_EC_C2TNB431R1 }, + + { "secp112r1", SEC_OID_SECG_EC_SECP112R1}, + { "secp112r2", SEC_OID_SECG_EC_SECP112R2}, + { "secp128r1", SEC_OID_SECG_EC_SECP128R1}, + { "secp128r2", SEC_OID_SECG_EC_SECP128R2}, + + { "sect113r1", SEC_OID_SECG_EC_SECT113R1}, + { "sect113r2", SEC_OID_SECG_EC_SECT113R2}, + { "sect131r1", SEC_OID_SECG_EC_SECT131R1}, + { "sect131r2", SEC_OID_SECG_EC_SECT131R2}, +}; + +static SECKEYECParams * +getECParams(const char *curve) +{ + SECKEYECParams *ecparams; + SECOidData *oidData = NULL; + SECOidTag curveOidTag = SEC_OID_UNKNOWN; /* default */ + int i, numCurves; + + if (curve != NULL) { + numCurves = sizeof(nameTagPair)/sizeof(CurveNameTagPair); + for (i = 0; ((i < numCurves) && (curveOidTag == SEC_OID_UNKNOWN)); + i++) { + if (PL_strcmp(curve, nameTagPair[i].curveName) == 0) + curveOidTag = nameTagPair[i].curveOidTag; + } + } + + /* Return NULL if curve name is not recognized */ + if ((curveOidTag == SEC_OID_UNKNOWN) || + (oidData = SECOID_FindOIDByTag(curveOidTag)) == NULL) { + fprintf(stderr, "Unrecognized elliptic curve %s\n", curve); + return NULL; + } + + ecparams = SECITEM_AllocItem(NULL, NULL, (2 + oidData->oid.len)); + + /* + * ecparams->data needs to contain the ASN encoding of an object ID (OID) + * representing the named curve. The actual OID is in + * oidData->oid.data so we simply prepend 0x06 and OID length + */ + ecparams->data[0] = SEC_ASN1_OBJECT_ID; + ecparams->data[1] = oidData->oid.len; + memcpy(ecparams->data + 2, oidData->oid.data, oidData->oid.len); + + return ecparams; +} +#endif /* NSS_ENABLE_ECC */ + +static void +dump_pqg(PQGParams *pqg) +{ + SECU_PrintInteger(stdout, &pqg->prime, "PRIME:", 0); + SECU_PrintInteger(stdout, &pqg->subPrime, "SUBPRIME:", 0); + SECU_PrintInteger(stdout, &pqg->base, "BASE:", 0); +} + +static void +dump_dsakey(DSAPrivateKey *key) +{ + dump_pqg(&key->params); + SECU_PrintInteger(stdout, &key->publicValue, "PUBLIC VALUE:", 0); + SECU_PrintInteger(stdout, &key->privateValue, "PRIVATE VALUE:", 0); +} + +#ifdef NSS_ENABLE_ECC +static void +dump_ecp(ECParams *ecp) +{ + /* TODO other fields */ + SECU_PrintInteger(stdout, &ecp->base, "BASE POINT:", 0); +} + +static void +dump_eckey(ECPrivateKey *key) +{ + dump_ecp(&key->ecParams); + SECU_PrintInteger(stdout, &key->publicValue, "PUBLIC VALUE:", 0); + SECU_PrintInteger(stdout, &key->privateValue, "PRIVATE VALUE:", 0); +} +#endif + +static void +dump_rsakey(RSAPrivateKey *key) +{ + SECU_PrintInteger(stdout, &key->version, "VERSION:", 0); + SECU_PrintInteger(stdout, &key->modulus, "MODULUS:", 0); + SECU_PrintInteger(stdout, &key->publicExponent, "PUBLIC EXP:", 0); + SECU_PrintInteger(stdout, &key->privateExponent, "PRIVATE EXP:", 0); + SECU_PrintInteger(stdout, &key->prime1, "CRT PRIME 1:", 0); + SECU_PrintInteger(stdout, &key->prime2, "CRT PRIME 2:", 0); + SECU_PrintInteger(stdout, &key->exponent1, "CRT EXP 1:", 0); + SECU_PrintInteger(stdout, &key->exponent2, "CRT EXP 2:", 0); + SECU_PrintInteger(stdout, &key->coefficient, "CRT COEFFICIENT:", 0); +} + +typedef enum { + bltestBase64Encoded, /* Base64 encoded ASCII */ + bltestBinary, /* straight binary */ + bltestHexSpaceDelim, /* 0x12 0x34 0xab 0xCD ... */ + bltestHexStream /* 1234abCD ... */ +} bltestIOMode; + +typedef struct +{ + SECItem buf; + SECItem pBuf; + bltestIOMode mode; + PRFileDesc* file; +} bltestIO; + +typedef SECStatus (* bltestSymmCipherFn)(void *cx, + unsigned char *output, + unsigned int *outputLen, + unsigned int maxOutputLen, + const unsigned char *input, + unsigned int inputLen); + +typedef SECStatus (* bltestPubKeyCipherFn)(void *key, + SECItem *output, + const SECItem *input); + +typedef SECStatus (* bltestHashCipherFn)(unsigned char *dest, + const unsigned char *src, + uint32 src_length); + +typedef enum { + bltestINVALID = -1, + bltestDES_ECB, /* Symmetric Key Ciphers */ + bltestDES_CBC, /* . */ + bltestDES_EDE_ECB, /* . */ + bltestDES_EDE_CBC, /* . */ + bltestRC2_ECB, /* . */ + bltestRC2_CBC, /* . */ + bltestRC4, /* . */ +#ifdef NSS_SOFTOKEN_DOES_RC5 + bltestRC5_ECB, /* . */ + bltestRC5_CBC, /* . */ +#endif + bltestAES_ECB, /* . */ + bltestAES_CBC, /* . */ + bltestCAMELLIA_ECB, /* . */ + bltestCAMELLIA_CBC, /* . */ + bltestSEED_ECB, /* SEED algorithm */ + bltestSEED_CBC, /* SEED algorithm */ + bltestRSA, /* Public Key Ciphers */ +#ifdef NSS_ENABLE_ECC + bltestECDSA, /* . (Public Key Sig.) */ +#endif + bltestDSA, /* . */ + bltestMD2, /* Hash algorithms */ + bltestMD5, /* . */ + bltestSHA1, /* . */ + bltestSHA256, /* . */ + bltestSHA384, /* . */ + bltestSHA512, /* . */ + NUMMODES +} bltestCipherMode; + +static char *mode_strings[] = +{ + "des_ecb", + "des_cbc", + "des3_ecb", + "des3_cbc", + "rc2_ecb", + "rc2_cbc", + "rc4", +#ifdef NSS_SOFTOKEN_DOES_RC5 + "rc5_ecb", + "rc5_cbc", +#endif + "aes_ecb", + "aes_cbc", + "camellia_ecb", + "camellia_cbc", + "seed_ecb", + "seed_cbc", + "rsa", +#ifdef NSS_ENABLE_ECC + "ecdsa", +#endif + /*"pqg",*/ + "dsa", + "md2", + "md5", + "sha1", + "sha256", + "sha384", + "sha512", +}; + +typedef struct +{ + bltestIO key; + bltestIO iv; +} bltestSymmKeyParams; + +typedef struct +{ + bltestIO key; + bltestIO iv; + int rounds; + int wordsize; +} bltestRC5Params; + +typedef struct +{ + bltestIO key; + int keysizeInBits; + RSAPrivateKey *rsakey; +} bltestRSAParams; + +typedef struct +{ + bltestIO key; + bltestIO pqgdata; + unsigned int j; + bltestIO keyseed; + bltestIO sigseed; + bltestIO sig; /* if doing verify, have additional input */ + PQGParams *pqg; + DSAPrivateKey *dsakey; +} bltestDSAParams; + +#ifdef NSS_ENABLE_ECC +typedef struct +{ + bltestIO key; + char *curveName; + bltestIO sigseed; + bltestIO sig; /* if doing verify, have additional input */ + ECPrivateKey *eckey; +} bltestECDSAParams; +#endif + +typedef struct +{ + bltestIO key; /* unused */ + PRBool restart; +} bltestHashParams; + +typedef union +{ + bltestIO key; + bltestSymmKeyParams sk; + bltestRC5Params rc5; + bltestRSAParams rsa; + bltestDSAParams dsa; +#ifdef NSS_ENABLE_ECC + bltestECDSAParams ecdsa; +#endif + bltestHashParams hash; +} bltestParams; + +typedef struct bltestCipherInfoStr bltestCipherInfo; + +struct bltestCipherInfoStr { + PRArenaPool *arena; + /* link to next in multithreaded test */ + bltestCipherInfo *next; + PRThread *cipherThread; + + /* MonteCarlo test flag*/ + PRBool mCarlo; + /* cipher context */ + void *cx; + /* I/O streams */ + bltestIO input; + bltestIO output; + /* Cipher-specific parameters */ + bltestParams params; + /* Cipher mode */ + bltestCipherMode mode; + /* Cipher function (encrypt/decrypt/sign/verify/hash) */ + union { + bltestSymmCipherFn symmkeyCipher; + bltestPubKeyCipherFn pubkeyCipher; + bltestHashCipherFn hashCipher; + } cipher; + /* performance testing */ + int repetitionsToPerfom; + int seconds; + int repetitions; + int cxreps; + double cxtime; + double optime; +}; + +PRBool +is_symmkeyCipher(bltestCipherMode mode) +{ + /* change as needed! */ + if (mode >= bltestDES_ECB && mode <= bltestSEED_CBC) + return PR_TRUE; + return PR_FALSE; +} + +PRBool +is_pubkeyCipher(bltestCipherMode mode) +{ + /* change as needed! */ + if (mode >= bltestRSA && mode <= bltestDSA) + return PR_TRUE; + return PR_FALSE; +} + +PRBool +is_hashCipher(bltestCipherMode mode) +{ + /* change as needed! */ + if (mode >= bltestMD2 && mode <= bltestSHA512) + return PR_TRUE; + return PR_FALSE; +} + +PRBool +is_sigCipher(bltestCipherMode mode) +{ + /* change as needed! */ +#ifdef NSS_ENABLE_ECC + if (mode >= bltestECDSA && mode <= bltestDSA) +#else + if (mode >= bltestDSA && mode <= bltestDSA) +#endif + return PR_TRUE; + return PR_FALSE; +} + +PRBool +cipher_requires_IV(bltestCipherMode mode) +{ + /* change as needed! */ + if (mode == bltestDES_CBC || mode == bltestDES_EDE_CBC || + mode == bltestRC2_CBC || +#ifdef NSS_SOFTOKEN_DOES_RC5 + mode == bltestRC5_CBC || +#endif + mode == bltestAES_CBC || mode == bltestCAMELLIA_CBC|| + mode == bltestSEED_CBC) + return PR_TRUE; + return PR_FALSE; +} + +SECStatus finishIO(bltestIO *output, PRFileDesc *file); + +SECStatus +setupIO(PRArenaPool *arena, bltestIO *input, PRFileDesc *file, + char *str, int numBytes) +{ + SECStatus rv = SECSuccess; + SECItem fileData; + SECItem *in; + unsigned char *tok; + unsigned int i, j; + + if (file && (numBytes == 0 || file == PR_STDIN)) { + /* grabbing data from a file */ + rv = SECU_FileToItem(&fileData, file); + if (rv != SECSuccess) { + PR_Close(file); + return SECFailure; + } + in = &fileData; + } else if (str) { + /* grabbing data from command line */ + fileData.data = str; + fileData.len = PL_strlen(str); + in = &fileData; + } else if (file) { + /* create nonce */ + SECITEM_AllocItem(arena, &input->buf, numBytes); + RNG_GenerateGlobalRandomBytes(input->buf.data, numBytes); + return finishIO(input, file); + } else { + return SECFailure; + } + + switch (input->mode) { + case bltestBase64Encoded: + rv = atob(in, &input->buf, arena); + break; + case bltestBinary: + if (in->data[in->len-1] == '\n') --in->len; + if (in->data[in->len-1] == '\r') --in->len; + SECITEM_CopyItem(arena, &input->buf, in); + break; + case bltestHexSpaceDelim: + SECITEM_AllocItem(arena, &input->buf, in->len/5); + for (i=0, j=0; i<in->len; i+=5, j++) { + tok = &in->data[i]; + if (tok[0] != '0' || tok[1] != 'x' || tok[4] != ' ') + /* bad hex token */ + break; + + rv = hex_from_2char(&tok[2], input->buf.data + j); + if (rv) + break; + } + break; + case bltestHexStream: + SECITEM_AllocItem(arena, &input->buf, in->len/2); + for (i=0, j=0; i<in->len; i+=2, j++) { + tok = &in->data[i]; + rv = hex_from_2char(tok, input->buf.data + j); + if (rv) + break; + } + break; + } + + if (file) + SECITEM_FreeItem(&fileData, PR_FALSE); + return rv; +} + +SECStatus +finishIO(bltestIO *output, PRFileDesc *file) +{ + SECStatus rv = SECSuccess; + PRInt32 nb; + unsigned char byteval; + SECItem *it; + char hexstr[5]; + unsigned int i; + if (output->pBuf.len > 0) { + it = &output->pBuf; + } else { + it = &output->buf; + } + switch (output->mode) { + case bltestBase64Encoded: + rv = btoa_file(it, file); + break; + case bltestBinary: + nb = PR_Write(file, it->data, it->len); + rv = (nb == (PRInt32)it->len) ? SECSuccess : SECFailure; + break; + case bltestHexSpaceDelim: + hexstr[0] = '0'; + hexstr[1] = 'x'; + hexstr[4] = ' '; + for (i=0; i<it->len; i++) { + byteval = it->data[i]; + rv = char2_from_hex(byteval, hexstr + 2); + nb = PR_Write(file, hexstr, 5); + if (rv) + break; + } + PR_Write(file, "\n", 1); + break; + case bltestHexStream: + for (i=0; i<it->len; i++) { + byteval = it->data[i]; + rv = char2_from_hex(byteval, hexstr); + if (rv) + break; + nb = PR_Write(file, hexstr, 2); + } + PR_Write(file, "\n", 1); + break; + } + return rv; +} + +void +bltestCopyIO(PRArenaPool *arena, bltestIO *dest, bltestIO *src) +{ + SECITEM_CopyItem(arena, &dest->buf, &src->buf); + if (src->pBuf.len > 0) { + dest->pBuf.len = src->pBuf.len; + dest->pBuf.data = dest->buf.data + (src->pBuf.data - src->buf.data); + } + dest->mode = src->mode; + dest->file = src->file; +} + +void +misalignBuffer(PRArenaPool *arena, bltestIO *io, int off) +{ + ptrdiff_t offset = (ptrdiff_t)io->buf.data % WORDSIZE; + int length = io->buf.len; + if (offset != off) { + SECITEM_ReallocItem(arena, &io->buf, length, length + 2*WORDSIZE); + io->buf.len = length + 2*WORDSIZE; /* why doesn't realloc do this? */ + /* offset may have changed? */ + offset = (ptrdiff_t)io->buf.data % WORDSIZE; + if (offset != off) { + memmove(io->buf.data + off, io->buf.data, length); + io->pBuf.data = io->buf.data + off; + io->pBuf.len = length; + } else { + io->pBuf.data = io->buf.data; + io->pBuf.len = length; + } + } else { + io->pBuf.data = io->buf.data; + io->pBuf.len = length; + } +} + +SECStatus +des_Encrypt(void *cx, unsigned char *output, unsigned int *outputLen, + unsigned int maxOutputLen, const unsigned char *input, + unsigned int inputLen) +{ + return DES_Encrypt((DESContext *)cx, output, outputLen, maxOutputLen, + input, inputLen); +} + +SECStatus +des_Decrypt(void *cx, unsigned char *output, unsigned int *outputLen, + unsigned int maxOutputLen, const unsigned char *input, + unsigned int inputLen) +{ + return DES_Decrypt((DESContext *)cx, output, outputLen, maxOutputLen, + input, inputLen); +} + +SECStatus +rc2_Encrypt(void *cx, unsigned char *output, unsigned int *outputLen, + unsigned int maxOutputLen, const unsigned char *input, + unsigned int inputLen) +{ + return RC2_Encrypt((RC2Context *)cx, output, outputLen, maxOutputLen, + input, inputLen); +} + +SECStatus +rc2_Decrypt(void *cx, unsigned char *output, unsigned int *outputLen, + unsigned int maxOutputLen, const unsigned char *input, + unsigned int inputLen) +{ + return RC2_Decrypt((RC2Context *)cx, output, outputLen, maxOutputLen, + input, inputLen); +} + +SECStatus +rc4_Encrypt(void *cx, unsigned char *output, unsigned int *outputLen, + unsigned int maxOutputLen, const unsigned char *input, + unsigned int inputLen) +{ + return RC4_Encrypt((RC4Context *)cx, output, outputLen, maxOutputLen, + input, inputLen); +} + +SECStatus +rc4_Decrypt(void *cx, unsigned char *output, unsigned int *outputLen, + unsigned int maxOutputLen, const unsigned char *input, + unsigned int inputLen) +{ + return RC4_Decrypt((RC4Context *)cx, output, outputLen, maxOutputLen, + input, inputLen); +} + +SECStatus +aes_Encrypt(void *cx, unsigned char *output, unsigned int *outputLen, + unsigned int maxOutputLen, const unsigned char *input, + unsigned int inputLen) +{ + return AES_Encrypt((AESContext *)cx, output, outputLen, maxOutputLen, + input, inputLen); +} + +SECStatus +aes_Decrypt(void *cx, unsigned char *output, unsigned int *outputLen, + unsigned int maxOutputLen, const unsigned char *input, + unsigned int inputLen) +{ + return AES_Decrypt((AESContext *)cx, output, outputLen, maxOutputLen, + input, inputLen); +} + +SECStatus +camellia_Encrypt(void *cx, unsigned char *output, unsigned int *outputLen, + unsigned int maxOutputLen, const unsigned char *input, + unsigned int inputLen) +{ + return Camellia_Encrypt((CamelliaContext *)cx, output, outputLen, + maxOutputLen, + input, inputLen); +} + +SECStatus +camellia_Decrypt(void *cx, unsigned char *output, unsigned int *outputLen, + unsigned int maxOutputLen, const unsigned char *input, + unsigned int inputLen) +{ + return Camellia_Decrypt((CamelliaContext *)cx, output, outputLen, + maxOutputLen, + input, inputLen); +} + +SECStatus +seed_Encrypt(void *cx, unsigned char *output, unsigned int *outputLen, + unsigned int maxOutputLen, const unsigned char *input, + unsigned int inputLen) +{ + return SEED_Encrypt((SEEDContext *)cx, output, outputLen, maxOutputLen, + input, inputLen); +} + +SECStatus +seed_Decrypt(void *cx, unsigned char *output, unsigned int *outputLen, + unsigned int maxOutputLen, const unsigned char *input, + unsigned int inputLen) +{ + return SEED_Decrypt((SEEDContext *)cx, output, outputLen, maxOutputLen, + input, inputLen); +} + +SECStatus +rsa_PublicKeyOp(void *key, SECItem *output, const SECItem *input) +{ + return RSA_PublicKeyOp((RSAPublicKey *)key, output->data, input->data); +} + +SECStatus +rsa_PrivateKeyOp(void *key, SECItem *output, const SECItem *input) +{ + return RSA_PrivateKeyOp((RSAPrivateKey *)key, output->data, input->data); +} + +SECStatus +dsa_signDigest(void *key, SECItem *output, const SECItem *input) +{ + return DSA_SignDigest((DSAPrivateKey *)key, output, input); +} + +SECStatus +dsa_verifyDigest(void *key, SECItem *output, const SECItem *input) +{ + return DSA_VerifyDigest((DSAPublicKey *)key, output, input); +} + +#ifdef NSS_ENABLE_ECC +SECStatus +ecdsa_signDigest(void *key, SECItem *output, const SECItem *input) +{ + return ECDSA_SignDigest((ECPrivateKey *)key, output, input); +} + +SECStatus +ecdsa_verifyDigest(void *key, SECItem *output, const SECItem *input) +{ + return ECDSA_VerifyDigest((ECPublicKey *)key, output, input); +} +#endif + +SECStatus +bltest_des_init(bltestCipherInfo *cipherInfo, PRBool encrypt) +{ + PRIntervalTime time1, time2; + bltestSymmKeyParams *desp = &cipherInfo->params.sk; + int minorMode; + int i; + switch (cipherInfo->mode) { + case bltestDES_ECB: minorMode = NSS_DES; break; + case bltestDES_CBC: minorMode = NSS_DES_CBC; break; + case bltestDES_EDE_ECB: minorMode = NSS_DES_EDE3; break; + case bltestDES_EDE_CBC: minorMode = NSS_DES_EDE3_CBC; break; + default: + return SECFailure; + } + cipherInfo->cx = (void*)DES_CreateContext(desp->key.buf.data, + desp->iv.buf.data, + minorMode, encrypt); + if (cipherInfo->cxreps > 0) { + DESContext **dummycx; + dummycx = PORT_Alloc(cipherInfo->cxreps * sizeof(DESContext *)); + TIMESTART(); + for (i=0; i<cipherInfo->cxreps; i++) { + dummycx[i] = (void*)DES_CreateContext(desp->key.buf.data, + desp->iv.buf.data, + minorMode, encrypt); + } + TIMEFINISH(cipherInfo->cxtime, 1.0); + for (i=0; i<cipherInfo->cxreps; i++) { + DES_DestroyContext(dummycx[i], PR_TRUE); + } + PORT_Free(dummycx); + } + if (encrypt) + cipherInfo->cipher.symmkeyCipher = des_Encrypt; + else + cipherInfo->cipher.symmkeyCipher = des_Decrypt; + return SECSuccess; +} + +SECStatus +bltest_rc2_init(bltestCipherInfo *cipherInfo, PRBool encrypt) +{ + PRIntervalTime time1, time2; + bltestSymmKeyParams *rc2p = &cipherInfo->params.sk; + int minorMode; + int i; + switch (cipherInfo->mode) { + case bltestRC2_ECB: minorMode = NSS_RC2; break; + case bltestRC2_CBC: minorMode = NSS_RC2_CBC; break; + default: + return SECFailure; + } + cipherInfo->cx = (void*)RC2_CreateContext(rc2p->key.buf.data, + rc2p->key.buf.len, + rc2p->iv.buf.data, + minorMode, + rc2p->key.buf.len); + if (cipherInfo->cxreps > 0) { + RC2Context **dummycx; + dummycx = PORT_Alloc(cipherInfo->cxreps * sizeof(RC2Context *)); + TIMESTART(); + for (i=0; i<cipherInfo->cxreps; i++) { + dummycx[i] = (void*)RC2_CreateContext(rc2p->key.buf.data, + rc2p->key.buf.len, + rc2p->iv.buf.data, + minorMode, + rc2p->key.buf.len); + } + TIMEFINISH(cipherInfo->cxtime, 1.0); + for (i=0; i<cipherInfo->cxreps; i++) { + RC2_DestroyContext(dummycx[i], PR_TRUE); + } + PORT_Free(dummycx); + } + if (encrypt) + cipherInfo->cipher.symmkeyCipher = rc2_Encrypt; + else + cipherInfo->cipher.symmkeyCipher = rc2_Decrypt; + return SECSuccess; +} + +SECStatus +bltest_rc4_init(bltestCipherInfo *cipherInfo, PRBool encrypt) +{ + PRIntervalTime time1, time2; + int i; + bltestSymmKeyParams *rc4p = &cipherInfo->params.sk; + cipherInfo->cx = (void*)RC4_CreateContext(rc4p->key.buf.data, + rc4p->key.buf.len); + if (cipherInfo->cxreps > 0) { + RC4Context **dummycx; + dummycx = PORT_Alloc(cipherInfo->cxreps * sizeof(RC4Context *)); + TIMESTART(); + for (i=0; i<cipherInfo->cxreps; i++) { + dummycx[i] = (void*)RC4_CreateContext(rc4p->key.buf.data, + rc4p->key.buf.len); + } + TIMEFINISH(cipherInfo->cxtime, 1.0); + for (i=0; i<cipherInfo->cxreps; i++) { + RC4_DestroyContext(dummycx[i], PR_TRUE); + } + PORT_Free(dummycx); + } + if (encrypt) + cipherInfo->cipher.symmkeyCipher = rc4_Encrypt; + else + cipherInfo->cipher.symmkeyCipher = rc4_Decrypt; + return SECSuccess; +} + +SECStatus +bltest_rc5_init(bltestCipherInfo *cipherInfo, PRBool encrypt) +{ +#ifdef NSS_SOFTOKEN_DOES_RC5 + PRIntervalTime time1, time2; + bltestRC5Params *rc5p = &cipherInfo->params.rc5; + int minorMode; + switch (cipherInfo->mode) { + case bltestRC5_ECB: minorMode = NSS_RC5; break; + case bltestRC5_CBC: minorMode = NSS_RC5_CBC; break; + default: + return SECFailure; + } + TIMESTART(); + cipherInfo->cx = (void*)RC5_CreateContext(&rc5p->key.buf, + rc5p->rounds, rc5p->wordsize, + rc5p->iv.buf.data, minorMode); + TIMEFINISH(cipherInfo->cxtime, 1.0); + if (encrypt) + cipherInfo->cipher.symmkeyCipher = RC5_Encrypt; + else + cipherInfo->cipher.symmkeyCipher = RC5_Decrypt; + return SECSuccess; +#else + return SECFailure; +#endif +} + +SECStatus +bltest_aes_init(bltestCipherInfo *cipherInfo, PRBool encrypt) +{ + bltestSymmKeyParams *aesp = &cipherInfo->params.sk; + int minorMode; + int i; + int keylen = aesp->key.buf.len; + int blocklen = AES_BLOCK_SIZE; + PRIntervalTime time1, time2; + + switch (cipherInfo->mode) { + case bltestAES_ECB: minorMode = NSS_AES; break; + case bltestAES_CBC: minorMode = NSS_AES_CBC; break; + default: + return SECFailure; + } + cipherInfo->cx = (void*)AES_CreateContext(aesp->key.buf.data, + aesp->iv.buf.data, + minorMode, encrypt, + keylen, blocklen); + if (cipherInfo->cxreps > 0) { + AESContext **dummycx; + dummycx = PORT_Alloc(cipherInfo->cxreps * sizeof(AESContext *)); + TIMESTART(); + for (i=0; i<cipherInfo->cxreps; i++) { + dummycx[i] = (void*)AES_CreateContext(aesp->key.buf.data, + aesp->iv.buf.data, + minorMode, encrypt, + keylen, blocklen); + } + TIMEFINISH(cipherInfo->cxtime, 1.0); + for (i=0; i<cipherInfo->cxreps; i++) { + AES_DestroyContext(dummycx[i], PR_TRUE); + } + PORT_Free(dummycx); + } + if (encrypt) + cipherInfo->cipher.symmkeyCipher = aes_Encrypt; + else + cipherInfo->cipher.symmkeyCipher = aes_Decrypt; + return SECSuccess; +} + +SECStatus +bltest_camellia_init(bltestCipherInfo *cipherInfo, PRBool encrypt) +{ + bltestSymmKeyParams *camelliap = &cipherInfo->params.sk; + int minorMode; + int i; + int keylen = camelliap->key.buf.len; + int blocklen = CAMELLIA_BLOCK_SIZE; + PRIntervalTime time1, time2; + + switch (cipherInfo->mode) { + case bltestCAMELLIA_ECB: minorMode = NSS_CAMELLIA; break; + case bltestCAMELLIA_CBC: minorMode = NSS_CAMELLIA_CBC; break; + default: + return SECFailure; + } + cipherInfo->cx = (void*)Camellia_CreateContext(camelliap->key.buf.data, + camelliap->iv.buf.data, + minorMode, encrypt, + keylen); + if (cipherInfo->cxreps > 0) { + CamelliaContext **dummycx; + dummycx = PORT_Alloc(cipherInfo->cxreps * sizeof(CamelliaContext *)); + TIMESTART(); + for (i=0; i<cipherInfo->cxreps; i++) { + dummycx[i] = (void*)Camellia_CreateContext(camelliap->key.buf.data, + camelliap->iv.buf.data, + minorMode, encrypt, + keylen); + } + TIMEFINISH(cipherInfo->cxtime, 1.0); + for (i=0; i<cipherInfo->cxreps; i++) { + Camellia_DestroyContext(dummycx[i], PR_TRUE); + } + PORT_Free(dummycx); + } + if (encrypt) + cipherInfo->cipher.symmkeyCipher = camellia_Encrypt; + else + cipherInfo->cipher.symmkeyCipher = camellia_Decrypt; + return SECSuccess; +} + +SECStatus +bltest_seed_init(bltestCipherInfo *cipherInfo, PRBool encrypt) +{ + PRIntervalTime time1, time2; + bltestSymmKeyParams *seedp = &cipherInfo->params.sk; + int minorMode; + int i; + + switch (cipherInfo->mode) { + case bltestSEED_ECB: minorMode = NSS_SEED; break; + case bltestSEED_CBC: minorMode = NSS_SEED_CBC; break; + default: + return SECFailure; + } + cipherInfo->cx = (void*)SEED_CreateContext(seedp->key.buf.data, + seedp->iv.buf.data, + minorMode, encrypt); + if (cipherInfo->cxreps > 0) { + SEEDContext **dummycx; + dummycx = PORT_Alloc(cipherInfo->cxreps * sizeof(SEEDContext *)); + TIMESTART(); + for (i=0; i<cipherInfo->cxreps; i++) { + dummycx[i] = (void*)SEED_CreateContext(seedp->key.buf.data, + seedp->iv.buf.data, + minorMode, encrypt); + } + TIMEFINISH(cipherInfo->cxtime, 1.0); + for (i=0; i<cipherInfo->cxreps; i++) { + SEED_DestroyContext(dummycx[i], PR_TRUE); + } + PORT_Free(dummycx); + } + if (encrypt) + cipherInfo->cipher.symmkeyCipher = seed_Encrypt; + else + cipherInfo->cipher.symmkeyCipher = seed_Decrypt; + + return SECSuccess; +} + +SECStatus +bltest_rsa_init(bltestCipherInfo *cipherInfo, PRBool encrypt) +{ + int i; + RSAPrivateKey **dummyKey; + PRIntervalTime time1, time2; + bltestRSAParams *rsap = &cipherInfo->params.rsa; + /* RSA key gen was done during parameter setup */ + cipherInfo->cx = cipherInfo->params.rsa.rsakey; + /* For performance testing */ + if (cipherInfo->cxreps > 0) { + /* Create space for n private key objects */ + dummyKey = (RSAPrivateKey **)PORT_Alloc(cipherInfo->cxreps * + sizeof(RSAPrivateKey *)); + /* Time n keygens, storing in the array */ + TIMESTART(); + for (i=0; i<cipherInfo->cxreps; i++) + dummyKey[i] = RSA_NewKey(rsap->keysizeInBits, + &rsap->rsakey->publicExponent); + TIMEFINISH(cipherInfo->cxtime, cipherInfo->cxreps); + /* Free the n key objects */ + for (i=0; i<cipherInfo->cxreps; i++) + PORT_FreeArena(dummyKey[i]->arena, PR_TRUE); + PORT_Free(dummyKey); + } + if (encrypt) { + /* Have to convert private key to public key. Memory + * is freed with private key's arena */ + RSAPublicKey *pubkey; + RSAPrivateKey *key = (RSAPrivateKey *)cipherInfo->cx; + pubkey = (RSAPublicKey *)PORT_ArenaAlloc(key->arena, + sizeof(RSAPublicKey)); + pubkey->modulus.len = key->modulus.len; + pubkey->modulus.data = key->modulus.data; + pubkey->publicExponent.len = key->publicExponent.len; + pubkey->publicExponent.data = key->publicExponent.data; + cipherInfo->cx = (void *)pubkey; + cipherInfo->cipher.pubkeyCipher = rsa_PublicKeyOp; + } else { + cipherInfo->cipher.pubkeyCipher = rsa_PrivateKeyOp; + } + return SECSuccess; +} + +SECStatus +bltest_pqg_init(bltestDSAParams *dsap) +{ + SECStatus rv, res; + PQGVerify *vfy = NULL; + rv = PQG_ParamGen(dsap->j, &dsap->pqg, &vfy); + CHECKERROR(rv, __LINE__); + rv = PQG_VerifyParams(dsap->pqg, vfy, &res); + CHECKERROR(res, __LINE__); + CHECKERROR(rv, __LINE__); + return rv; +} + +SECStatus +bltest_dsa_init(bltestCipherInfo *cipherInfo, PRBool encrypt) +{ + int i; + DSAPrivateKey **dummyKey; + PQGParams *dummypqg; + PRIntervalTime time1, time2; + bltestDSAParams *dsap = &cipherInfo->params.dsa; + PQGVerify *ignore = NULL; + /* DSA key gen was done during parameter setup */ + cipherInfo->cx = cipherInfo->params.dsa.dsakey; + /* For performance testing */ + if (cipherInfo->cxreps > 0) { + /* Create space for n private key objects */ + dummyKey = (DSAPrivateKey **)PORT_ZAlloc(cipherInfo->cxreps * + sizeof(DSAPrivateKey *)); + /* Time n keygens, storing in the array */ + TIMESTART(); + for (i=0; i<cipherInfo->cxreps; i++) { + dummypqg = NULL; + PQG_ParamGen(dsap->j, &dummypqg, &ignore); + DSA_NewKey(dummypqg, &dummyKey[i]); + } + TIMEFINISH(cipherInfo->cxtime, cipherInfo->cxreps); + /* Free the n key objects */ + for (i=0; i<cipherInfo->cxreps; i++) + PORT_FreeArena(dummyKey[i]->params.arena, PR_TRUE); + PORT_Free(dummyKey); + } + if (!dsap->pqg && dsap->pqgdata.buf.len > 0) { + dsap->pqg = pqg_from_filedata(&dsap->pqgdata.buf); + } + if (!cipherInfo->cx && dsap->key.buf.len > 0) { + cipherInfo->cx = dsakey_from_filedata(&dsap->key.buf); + } + if (encrypt) { + cipherInfo->cipher.pubkeyCipher = dsa_signDigest; + } else { + /* Have to convert private key to public key. Memory + * is freed with private key's arena */ + DSAPublicKey *pubkey; + DSAPrivateKey *key = (DSAPrivateKey *)cipherInfo->cx; + pubkey = (DSAPublicKey *)PORT_ArenaZAlloc(key->params.arena, + sizeof(DSAPublicKey)); + pubkey->params.prime.len = key->params.prime.len; + pubkey->params.prime.data = key->params.prime.data; + pubkey->params.subPrime.len = key->params.subPrime.len; + pubkey->params.subPrime.data = key->params.subPrime.data; + pubkey->params.base.len = key->params.base.len; + pubkey->params.base.data = key->params.base.data; + pubkey->publicValue.len = key->publicValue.len; + pubkey->publicValue.data = key->publicValue.data; + cipherInfo->cipher.pubkeyCipher = dsa_verifyDigest; + } + return SECSuccess; +} + +#ifdef NSS_ENABLE_ECC +SECStatus +bltest_ecdsa_init(bltestCipherInfo *cipherInfo, PRBool encrypt) +{ + int i; + ECPrivateKey **dummyKey; + PRIntervalTime time1, time2; + bltestECDSAParams *ecdsap = &cipherInfo->params.ecdsa; + /* ECDSA key gen was done during parameter setup */ + cipherInfo->cx = cipherInfo->params.ecdsa.eckey; + /* For performance testing */ + if (cipherInfo->cxreps > 0) { + /* Create space for n private key objects */ + dummyKey = (ECPrivateKey **)PORT_ZAlloc(cipherInfo->cxreps * + sizeof(ECPrivateKey *)); + /* Time n keygens, storing in the array */ + TIMESTART(); + for (i=0; i<cipherInfo->cxreps; i++) { + EC_NewKey(&ecdsap->eckey->ecParams, &dummyKey[i]); + } + TIMEFINISH(cipherInfo->cxtime, cipherInfo->cxreps); + /* Free the n key objects */ + for (i=0; i<cipherInfo->cxreps; i++) + PORT_FreeArena(dummyKey[i]->ecParams.arena, PR_TRUE); + PORT_Free(dummyKey); + } + if (!cipherInfo->cx && ecdsap->key.buf.len > 0) { + cipherInfo->cx = eckey_from_filedata(&ecdsap->key.buf); + } + if (encrypt) { + cipherInfo->cipher.pubkeyCipher = ecdsa_signDigest; + } else { + /* Have to convert private key to public key. Memory + * is freed with private key's arena */ + ECPublicKey *pubkey; + ECPrivateKey *key = (ECPrivateKey *)cipherInfo->cx; + pubkey = (ECPublicKey *)PORT_ArenaZAlloc(key->ecParams.arena, + sizeof(ECPublicKey)); + pubkey->ecParams.type = key->ecParams.type; + pubkey->ecParams.fieldID.size = key->ecParams.fieldID.size; + pubkey->ecParams.fieldID.type = key->ecParams.fieldID.type; + pubkey->ecParams.fieldID.u.prime.len = key->ecParams.fieldID.u.prime.len; + pubkey->ecParams.fieldID.u.prime.data = key->ecParams.fieldID.u.prime.data; + pubkey->ecParams.fieldID.k1 = key->ecParams.fieldID.k1; + pubkey->ecParams.fieldID.k2 = key->ecParams.fieldID.k2; + pubkey->ecParams.fieldID.k3 = key->ecParams.fieldID.k3; + pubkey->ecParams.curve.a.len = key->ecParams.curve.a.len; + pubkey->ecParams.curve.a.data = key->ecParams.curve.a.data; + pubkey->ecParams.curve.b.len = key->ecParams.curve.b.len; + pubkey->ecParams.curve.b.data = key->ecParams.curve.b.data; + pubkey->ecParams.curve.seed.len = key->ecParams.curve.seed.len; + pubkey->ecParams.curve.seed.data = key->ecParams.curve.seed.data; + pubkey->ecParams.base.len = key->ecParams.base.len; + pubkey->ecParams.base.data = key->ecParams.base.data; + pubkey->ecParams.order.len = key->ecParams.order.len; + pubkey->ecParams.order.data = key->ecParams.order.data; + pubkey->ecParams.cofactor = key->ecParams.cofactor; + pubkey->ecParams.DEREncoding.len = key->ecParams.DEREncoding.len; + pubkey->ecParams.DEREncoding.data = key->ecParams.DEREncoding.data; + pubkey->ecParams.name= key->ecParams.name; + pubkey->publicValue.len = key->publicValue.len; + pubkey->publicValue.data = key->publicValue.data; + cipherInfo->cipher.pubkeyCipher = ecdsa_verifyDigest; + } + return SECSuccess; +} +#endif + +/* XXX unfortunately, this is not defined in blapi.h */ +SECStatus +md2_HashBuf(unsigned char *dest, const unsigned char *src, uint32 src_length) +{ + unsigned int len; + MD2Context *cx = MD2_NewContext(); + if (cx == NULL) return SECFailure; + MD2_Begin(cx); + MD2_Update(cx, src, src_length); + MD2_End(cx, dest, &len, MD2_LENGTH); + MD2_DestroyContext(cx, PR_TRUE); + return SECSuccess; +} + +SECStatus +md2_restart(unsigned char *dest, const unsigned char *src, uint32 src_length) +{ + MD2Context *cx, *cx_cpy; + unsigned char *cxbytes; + unsigned int len; + unsigned int i, quarter; + SECStatus rv = SECSuccess; + cx = MD2_NewContext(); + MD2_Begin(cx); + /* divide message by 4, restarting 3 times */ + quarter = (src_length + 3)/ 4; + for (i=0; i < 4 && src_length > 0; i++) { + MD2_Update(cx, src + i*quarter, PR_MIN(quarter, src_length)); + len = MD2_FlattenSize(cx); + cxbytes = PORT_Alloc(len); + MD2_Flatten(cx, cxbytes); + cx_cpy = MD2_Resurrect(cxbytes, NULL); + if (!cx_cpy) { + PR_fprintf(PR_STDERR, "%s: MD2_Resurrect failed!\n", progName); + goto finish; + } + rv = PORT_Memcmp(cx, cx_cpy, len); + if (rv) { + MD2_DestroyContext(cx_cpy, PR_TRUE); + PR_fprintf(PR_STDERR, "%s: MD2_restart failed!\n", progName); + goto finish; + } + MD2_DestroyContext(cx_cpy, PR_TRUE); + PORT_Free(cxbytes); + src_length -= quarter; + } + MD2_End(cx, dest, &len, MD2_LENGTH); +finish: + MD2_DestroyContext(cx, PR_TRUE); + return rv; +} + +SECStatus +md5_restart(unsigned char *dest, const unsigned char *src, uint32 src_length) +{ + SECStatus rv = SECSuccess; + MD5Context *cx, *cx_cpy; + unsigned char *cxbytes; + unsigned int len; + unsigned int i, quarter; + cx = MD5_NewContext(); + MD5_Begin(cx); + /* divide message by 4, restarting 3 times */ + quarter = (src_length + 3)/ 4; + for (i=0; i < 4 && src_length > 0; i++) { + MD5_Update(cx, src + i*quarter, PR_MIN(quarter, src_length)); + len = MD5_FlattenSize(cx); + cxbytes = PORT_Alloc(len); + MD5_Flatten(cx, cxbytes); + cx_cpy = MD5_Resurrect(cxbytes, NULL); + if (!cx_cpy) { + PR_fprintf(PR_STDERR, "%s: MD5_Resurrect failed!\n", progName); + rv = SECFailure; + goto finish; + } + rv = PORT_Memcmp(cx, cx_cpy, len); + if (rv) { + MD5_DestroyContext(cx_cpy, PR_TRUE); + PR_fprintf(PR_STDERR, "%s: MD5_restart failed!\n", progName); + goto finish; + } + MD5_DestroyContext(cx_cpy, PR_TRUE); + PORT_Free(cxbytes); + src_length -= quarter; + } + MD5_End(cx, dest, &len, MD5_LENGTH); +finish: + MD5_DestroyContext(cx, PR_TRUE); + return rv; +} + +SECStatus +sha1_restart(unsigned char *dest, const unsigned char *src, uint32 src_length) +{ + SECStatus rv = SECSuccess; + SHA1Context *cx, *cx_cpy; + unsigned char *cxbytes; + unsigned int len; + unsigned int i, quarter; + cx = SHA1_NewContext(); + SHA1_Begin(cx); + /* divide message by 4, restarting 3 times */ + quarter = (src_length + 3)/ 4; + for (i=0; i < 4 && src_length > 0; i++) { + SHA1_Update(cx, src + i*quarter, PR_MIN(quarter, src_length)); + len = SHA1_FlattenSize(cx); + cxbytes = PORT_Alloc(len); + SHA1_Flatten(cx, cxbytes); + cx_cpy = SHA1_Resurrect(cxbytes, NULL); + if (!cx_cpy) { + PR_fprintf(PR_STDERR, "%s: SHA1_Resurrect failed!\n", progName); + rv = SECFailure; + goto finish; + } + rv = PORT_Memcmp(cx, cx_cpy, len); + if (rv) { + SHA1_DestroyContext(cx_cpy, PR_TRUE); + PR_fprintf(PR_STDERR, "%s: SHA1_restart failed!\n", progName); + goto finish; + } + SHA1_DestroyContext(cx_cpy, PR_TRUE); + PORT_Free(cxbytes); + src_length -= quarter; + } + SHA1_End(cx, dest, &len, MD5_LENGTH); +finish: + SHA1_DestroyContext(cx, PR_TRUE); + return rv; +} + +SECStatus +SHA256_restart(unsigned char *dest, const unsigned char *src, uint32 src_length) +{ + SECStatus rv = SECSuccess; + SHA256Context *cx, *cx_cpy; + unsigned char *cxbytes; + unsigned int len; + unsigned int i, quarter; + cx = SHA256_NewContext(); + SHA256_Begin(cx); + /* divide message by 4, restarting 3 times */ + quarter = (src_length + 3)/ 4; + for (i=0; i < 4 && src_length > 0; i++) { + SHA256_Update(cx, src + i*quarter, PR_MIN(quarter, src_length)); + len = SHA256_FlattenSize(cx); + cxbytes = PORT_Alloc(len); + SHA256_Flatten(cx, cxbytes); + cx_cpy = SHA256_Resurrect(cxbytes, NULL); + if (!cx_cpy) { + PR_fprintf(PR_STDERR, "%s: SHA256_Resurrect failed!\n", progName); + rv = SECFailure; + goto finish; + } + rv = PORT_Memcmp(cx, cx_cpy, len); + if (rv) { + SHA256_DestroyContext(cx_cpy, PR_TRUE); + PR_fprintf(PR_STDERR, "%s: SHA256_restart failed!\n", progName); + goto finish; + } + SHA256_DestroyContext(cx_cpy, PR_TRUE); + PORT_Free(cxbytes); + src_length -= quarter; + } + SHA256_End(cx, dest, &len, MD5_LENGTH); +finish: + SHA256_DestroyContext(cx, PR_TRUE); + return rv; +} + +SECStatus +SHA384_restart(unsigned char *dest, const unsigned char *src, uint32 src_length) +{ + SECStatus rv = SECSuccess; + SHA384Context *cx, *cx_cpy; + unsigned char *cxbytes; + unsigned int len; + unsigned int i, quarter; + cx = SHA384_NewContext(); + SHA384_Begin(cx); + /* divide message by 4, restarting 3 times */ + quarter = (src_length + 3)/ 4; + for (i=0; i < 4 && src_length > 0; i++) { + SHA384_Update(cx, src + i*quarter, PR_MIN(quarter, src_length)); + len = SHA384_FlattenSize(cx); + cxbytes = PORT_Alloc(len); + SHA384_Flatten(cx, cxbytes); + cx_cpy = SHA384_Resurrect(cxbytes, NULL); + if (!cx_cpy) { + PR_fprintf(PR_STDERR, "%s: SHA384_Resurrect failed!\n", progName); + rv = SECFailure; + goto finish; + } + rv = PORT_Memcmp(cx, cx_cpy, len); + if (rv) { + SHA384_DestroyContext(cx_cpy, PR_TRUE); + PR_fprintf(PR_STDERR, "%s: SHA384_restart failed!\n", progName); + goto finish; + } + SHA384_DestroyContext(cx_cpy, PR_TRUE); + PORT_Free(cxbytes); + src_length -= quarter; + } + SHA384_End(cx, dest, &len, MD5_LENGTH); +finish: + SHA384_DestroyContext(cx, PR_TRUE); + return rv; +} + +SECStatus +SHA512_restart(unsigned char *dest, const unsigned char *src, uint32 src_length) +{ + SECStatus rv = SECSuccess; + SHA512Context *cx, *cx_cpy; + unsigned char *cxbytes; + unsigned int len; + unsigned int i, quarter; + cx = SHA512_NewContext(); + SHA512_Begin(cx); + /* divide message by 4, restarting 3 times */ + quarter = (src_length + 3)/ 4; + for (i=0; i < 4 && src_length > 0; i++) { + SHA512_Update(cx, src + i*quarter, PR_MIN(quarter, src_length)); + len = SHA512_FlattenSize(cx); + cxbytes = PORT_Alloc(len); + SHA512_Flatten(cx, cxbytes); + cx_cpy = SHA512_Resurrect(cxbytes, NULL); + if (!cx_cpy) { + PR_fprintf(PR_STDERR, "%s: SHA512_Resurrect failed!\n", progName); + rv = SECFailure; + goto finish; + } + rv = PORT_Memcmp(cx, cx_cpy, len); + if (rv) { + SHA512_DestroyContext(cx_cpy, PR_TRUE); + PR_fprintf(PR_STDERR, "%s: SHA512_restart failed!\n", progName); + goto finish; + } + SHA512_DestroyContext(cx_cpy, PR_TRUE); + PORT_Free(cxbytes); + src_length -= quarter; + } + SHA512_End(cx, dest, &len, MD5_LENGTH); +finish: + SHA512_DestroyContext(cx, PR_TRUE); + return rv; +} + +SECStatus +pubkeyInitKey(bltestCipherInfo *cipherInfo, PRFileDesc *file, +#ifdef NSS_ENABLE_ECC + int keysize, int exponent, char *curveName) +#else + int keysize, int exponent) +#endif +{ + int i; + SECStatus rv = SECSuccess; + bltestRSAParams *rsap; + bltestDSAParams *dsap; +#ifdef NSS_ENABLE_ECC + bltestECDSAParams *ecdsap; + SECItem *tmpECParamsDER; + ECParams *tmpECParams = NULL; + SECItem ecSerialize[3]; +#endif + switch (cipherInfo->mode) { + case bltestRSA: + rsap = &cipherInfo->params.rsa; + if (keysize > 0) { + SECItem expitem = { 0, 0, 0 }; + SECITEM_AllocItem(cipherInfo->arena, &expitem, sizeof(int)); + for (i = 1; i <= sizeof(int); i++) + expitem.data[i-1] = exponent >> (8*(sizeof(int) - i)); + rsap->rsakey = RSA_NewKey(keysize * 8, &expitem); + serialize_key(&rsap->rsakey->version, 9, file); + rsap->keysizeInBits = keysize * 8; + } else { + setupIO(cipherInfo->arena, &cipherInfo->params.key, file, NULL, 0); + rsap->rsakey = rsakey_from_filedata(&cipherInfo->params.key.buf); + rsap->keysizeInBits = rsap->rsakey->modulus.len * 8; + } + break; + case bltestDSA: + dsap = &cipherInfo->params.dsa; + if (keysize > 0) { + dsap->j = PQG_PBITS_TO_INDEX(8*keysize); + if (!dsap->pqg) + bltest_pqg_init(dsap); + rv = DSA_NewKey(dsap->pqg, &dsap->dsakey); + CHECKERROR(rv, __LINE__); + serialize_key(&dsap->dsakey->params.prime, 5, file); + } else { + setupIO(cipherInfo->arena, &cipherInfo->params.key, file, NULL, 0); + dsap->dsakey = dsakey_from_filedata(&cipherInfo->params.key.buf); + dsap->j = PQG_PBITS_TO_INDEX(8*dsap->dsakey->params.prime.len); + } + break; +#ifdef NSS_ENABLE_ECC + case bltestECDSA: + ecdsap = &cipherInfo->params.ecdsa; + if (curveName != NULL) { + tmpECParamsDER = getECParams(curveName); + rv = SECOID_Init(); + CHECKERROR(rv, __LINE__); + rv = EC_DecodeParams(tmpECParamsDER, &tmpECParams) == SECFailure; + CHECKERROR(rv, __LINE__); + rv = EC_NewKey(tmpECParams, &ecdsap->eckey); + CHECKERROR(rv, __LINE__); + ecSerialize[0].type = tmpECParamsDER->type; + ecSerialize[0].data = tmpECParamsDER->data; + ecSerialize[0].len = tmpECParamsDER->len; + ecSerialize[1].type = ecdsap->eckey->publicValue.type; + ecSerialize[1].data = ecdsap->eckey->publicValue.data; + ecSerialize[1].len = ecdsap->eckey->publicValue.len; + ecSerialize[2].type = ecdsap->eckey->privateValue.type; + ecSerialize[2].data = ecdsap->eckey->privateValue.data; + ecSerialize[2].len = ecdsap->eckey->privateValue.len; + serialize_key(&(ecSerialize[0]), 3, file); + SECITEM_FreeItem(tmpECParamsDER, PR_TRUE); + PORT_FreeArena(tmpECParams->arena, PR_TRUE); + rv = SECOID_Shutdown(); + CHECKERROR(rv, __LINE__); + } else { + setupIO(cipherInfo->arena, &cipherInfo->params.key, file, NULL, 0); + ecdsap->eckey = eckey_from_filedata(&cipherInfo->params.key.buf); + } + break; +#endif + default: + return SECFailure; + } + return SECSuccess; +} + +SECStatus +cipherInit(bltestCipherInfo *cipherInfo, PRBool encrypt) +{ + PRBool restart; + switch (cipherInfo->mode) { + case bltestDES_ECB: + case bltestDES_CBC: + case bltestDES_EDE_ECB: + case bltestDES_EDE_CBC: + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + cipherInfo->input.pBuf.len); + return bltest_des_init(cipherInfo, encrypt); + break; + case bltestRC2_ECB: + case bltestRC2_CBC: + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + cipherInfo->input.pBuf.len); + return bltest_rc2_init(cipherInfo, encrypt); + break; + case bltestRC4: + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + cipherInfo->input.pBuf.len); + return bltest_rc4_init(cipherInfo, encrypt); + break; +#ifdef NSS_SOFTOKEN_DOES_RC5 + case bltestRC5_ECB: + case bltestRC5_CBC: + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + cipherInfo->input.pBuf.len); +#endif + return bltest_rc5_init(cipherInfo, encrypt); + break; + case bltestAES_ECB: + case bltestAES_CBC: + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + cipherInfo->input.pBuf.len); + return bltest_aes_init(cipherInfo, encrypt); + break; + case bltestCAMELLIA_ECB: + case bltestCAMELLIA_CBC: + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + cipherInfo->input.pBuf.len); + return bltest_camellia_init(cipherInfo, encrypt); + break; + case bltestSEED_ECB: + case bltestSEED_CBC: + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + cipherInfo->input.pBuf.len); + return bltest_seed_init(cipherInfo, encrypt); + break; + case bltestRSA: + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + cipherInfo->input.pBuf.len); + return bltest_rsa_init(cipherInfo, encrypt); + break; + case bltestDSA: + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + DSA_SIGNATURE_LEN); + return bltest_dsa_init(cipherInfo, encrypt); + break; +#ifdef NSS_ENABLE_ECC + case bltestECDSA: + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + 2 * MAX_ECKEY_LEN); + return bltest_ecdsa_init(cipherInfo, encrypt); + break; +#endif + case bltestMD2: + restart = cipherInfo->params.hash.restart; + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + MD2_LENGTH); + cipherInfo->cipher.hashCipher = (restart) ? md2_restart : md2_HashBuf; + return SECSuccess; + break; + case bltestMD5: + restart = cipherInfo->params.hash.restart; + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + MD5_LENGTH); + cipherInfo->cipher.hashCipher = (restart) ? md5_restart : MD5_HashBuf; + return SECSuccess; + break; + case bltestSHA1: + restart = cipherInfo->params.hash.restart; + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + SHA1_LENGTH); + cipherInfo->cipher.hashCipher = (restart) ? sha1_restart : SHA1_HashBuf; + return SECSuccess; + break; + case bltestSHA256: + restart = cipherInfo->params.hash.restart; + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + SHA256_LENGTH); + cipherInfo->cipher.hashCipher = (restart) ? SHA256_restart + : SHA256_HashBuf; + return SECSuccess; + break; + case bltestSHA384: + restart = cipherInfo->params.hash.restart; + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + SHA384_LENGTH); + cipherInfo->cipher.hashCipher = (restart) ? SHA384_restart + : SHA384_HashBuf; + return SECSuccess; + break; + case bltestSHA512: + restart = cipherInfo->params.hash.restart; + SECITEM_AllocItem(cipherInfo->arena, &cipherInfo->output.buf, + SHA512_LENGTH); + cipherInfo->cipher.hashCipher = (restart) ? SHA512_restart + : SHA512_HashBuf; + return SECSuccess; + break; + default: + return SECFailure; + } + return SECSuccess; +} + +SECStatus +dsaOp(bltestCipherInfo *cipherInfo) +{ + PRIntervalTime time1, time2; + SECStatus rv = SECSuccess; + int i; + int maxLen = cipherInfo->output.pBuf.len; + SECItem dummyOut = { 0, 0, 0 }; + SECITEM_AllocItem(NULL, &dummyOut, maxLen); + if (cipherInfo->cipher.pubkeyCipher == dsa_signDigest) { + if (cipherInfo->params.dsa.sigseed.buf.len > 0) { + bltestDSAParams *dsa = &cipherInfo->params.dsa; + DSAPrivateKey *key = (DSAPrivateKey *)cipherInfo->cx; + + TIMESTART(); + rv = DSA_SignDigestWithSeed(key, + &cipherInfo->output.pBuf, + &cipherInfo->input.pBuf, + dsa->sigseed.buf.data); + TIMEFINISH(cipherInfo->optime, 1.0); + CHECKERROR(rv, __LINE__); + cipherInfo->repetitions = 0; + if (cipherInfo->repetitionsToPerfom != 0) { + TIMESTART(); + for (i=0; i<cipherInfo->repetitionsToPerfom; + i++, cipherInfo->repetitions++) { + rv = DSA_SignDigestWithSeed(key, &dummyOut, + &cipherInfo->input.pBuf, + dsa->sigseed.buf.data); + CHECKERROR(rv, __LINE__); + } + } else { + int opsBetweenChecks = 0; + TIMEMARK(cipherInfo->seconds); + while (! (TIMETOFINISH())) { + int j = 0; + for (;j < opsBetweenChecks;j++) { + rv = DSA_SignDigestWithSeed(key, &dummyOut, + &cipherInfo->input.pBuf, + dsa->sigseed.buf.data); + CHECKERROR(rv, __LINE__); + } + cipherInfo->repetitions += j; + } + } + TIMEFINISH(cipherInfo->optime, 1.0); + } else { + TIMESTART(); + rv = DSA_SignDigest((DSAPrivateKey *)cipherInfo->cx, + &cipherInfo->output.pBuf, + &cipherInfo->input.pBuf); + TIMEFINISH(cipherInfo->optime, 1.0); + CHECKERROR(rv, __LINE__); + cipherInfo->repetitions = 0; + if (cipherInfo->repetitionsToPerfom != 0) { + TIMESTART(); + for (i=0; i<cipherInfo->repetitionsToPerfom; + i++, cipherInfo->repetitions++) { + rv = DSA_SignDigest((DSAPrivateKey *)cipherInfo->cx, + &dummyOut, + &cipherInfo->input.pBuf); + CHECKERROR(rv, __LINE__); + } + } else { + int opsBetweenChecks = 0; + TIMEMARK(cipherInfo->seconds); + while (! (TIMETOFINISH())) { + int j = 0; + for (;j < opsBetweenChecks;j++) { + rv = DSA_SignDigest((DSAPrivateKey *)cipherInfo->cx, + &dummyOut, + &cipherInfo->input.pBuf); + CHECKERROR(rv, __LINE__); + } + cipherInfo->repetitions += j; + } + } + TIMEFINISH(cipherInfo->optime, 1.0); + } + bltestCopyIO(cipherInfo->arena, &cipherInfo->params.dsa.sig, + &cipherInfo->output); + } else { + TIMESTART(); + rv = DSA_VerifyDigest((DSAPublicKey *)cipherInfo->cx, + &cipherInfo->params.dsa.sig.buf, + &cipherInfo->input.pBuf); + TIMEFINISH(cipherInfo->optime, 1.0); + CHECKERROR(rv, __LINE__); + cipherInfo->repetitions = 0; + if (cipherInfo->repetitionsToPerfom != 0) { + TIMESTART(); + for (i=0; i<cipherInfo->repetitionsToPerfom; + i++, cipherInfo->repetitions++) { + rv = DSA_VerifyDigest((DSAPublicKey *)cipherInfo->cx, + &cipherInfo->params.dsa.sig.buf, + &cipherInfo->input.pBuf); + CHECKERROR(rv, __LINE__); + } + } else { + int opsBetweenChecks = 0; + TIMEMARK(cipherInfo->seconds); + while (! (TIMETOFINISH())) { + int j = 0; + for (;j < opsBetweenChecks;j++) { + rv = DSA_VerifyDigest((DSAPublicKey *)cipherInfo->cx, + &cipherInfo->params.dsa.sig.buf, + &cipherInfo->input.pBuf); + CHECKERROR(rv, __LINE__); + } + cipherInfo->repetitions += j; + } + } + TIMEFINISH(cipherInfo->optime, 1.0); + } + SECITEM_FreeItem(&dummyOut, PR_FALSE); + return rv; +} + +#ifdef NSS_ENABLE_ECC +SECStatus +ecdsaOp(bltestCipherInfo *cipherInfo) +{ + PRIntervalTime time1, time2; + SECStatus rv = SECSuccess; + int i; + int maxLen = cipherInfo->output.pBuf.len; + SECItem dummyOut = { 0, 0, 0 }; + SECITEM_AllocItem(NULL, &dummyOut, maxLen); + if (cipherInfo->cipher.pubkeyCipher == ecdsa_signDigest) { + if (cipherInfo->params.ecdsa.sigseed.buf.len > 0) { + ECPrivateKey *key = (ECPrivateKey *)cipherInfo->cx; + bltestECDSAParams *ecdsa = &cipherInfo->params.ecdsa; + + TIMESTART(); + rv = ECDSA_SignDigestWithSeed(key, + &cipherInfo->output.pBuf, + &cipherInfo->input.pBuf, + ecdsa->sigseed.buf.data, + ecdsa->sigseed.buf.len); + TIMEFINISH(cipherInfo->optime, 1.0); + CHECKERROR(rv, __LINE__); + cipherInfo->repetitions = 0; + if (cipherInfo->repetitionsToPerfom != 0) { + TIMESTART(); + for (i=0; i<cipherInfo->repetitionsToPerfom; + i++, cipherInfo->repetitions++) { + rv = ECDSA_SignDigestWithSeed(key, &dummyOut, + &cipherInfo->input.pBuf, + ecdsa->sigseed.buf.data, + ecdsa->sigseed.buf.len); + CHECKERROR(rv, __LINE__); + } + } else { + int opsBetweenChecks = 0; + TIMEMARK(cipherInfo->seconds); + while (! (TIMETOFINISH())) { + int j = 0; + for (;j < opsBetweenChecks;j++) { + rv = ECDSA_SignDigestWithSeed(key, &dummyOut, + &cipherInfo->input.pBuf, + ecdsa->sigseed.buf.data, + ecdsa->sigseed.buf.len); + CHECKERROR(rv, __LINE__); + } + cipherInfo->repetitions += j; + } + } + TIMEFINISH(cipherInfo->optime, 1.0); + } else { + TIMESTART(); + rv = ECDSA_SignDigest((ECPrivateKey *)cipherInfo->cx, + &cipherInfo->output.pBuf, + &cipherInfo->input.pBuf); + TIMEFINISH(cipherInfo->optime, 1.0); + CHECKERROR(rv, __LINE__); + cipherInfo->repetitions = 0; + if (cipherInfo->repetitionsToPerfom != 0) { + TIMESTART(); + for (i=0; i<cipherInfo->repetitionsToPerfom; + i++, cipherInfo->repetitions++) { + rv = ECDSA_SignDigest((ECPrivateKey *)cipherInfo->cx, + &dummyOut, + &cipherInfo->input.pBuf); + CHECKERROR(rv, __LINE__); + } + } else { + int opsBetweenChecks = 0; + TIMEMARK(cipherInfo->seconds); + while (! (TIMETOFINISH())) { + int j = 0; + for (;j < opsBetweenChecks;j++) { + rv = ECDSA_SignDigest((ECPrivateKey *)cipherInfo->cx, + &dummyOut, + &cipherInfo->input.pBuf); + CHECKERROR(rv, __LINE__); + } + cipherInfo->repetitions += j; + } + } + TIMEFINISH(cipherInfo->optime, 1.0); + } + bltestCopyIO(cipherInfo->arena, &cipherInfo->params.ecdsa.sig, + &cipherInfo->output); + } else { + TIMESTART(); + rv = ECDSA_VerifyDigest((ECPublicKey *)cipherInfo->cx, + &cipherInfo->params.ecdsa.sig.buf, + &cipherInfo->input.pBuf); + TIMEFINISH(cipherInfo->optime, 1.0); + CHECKERROR(rv, __LINE__); + cipherInfo->repetitions = 0; + if (cipherInfo->repetitionsToPerfom != 0) { + TIMESTART(); + for (i=0; i<cipherInfo->repetitionsToPerfom; + i++, cipherInfo->repetitions++) { + rv = ECDSA_VerifyDigest((ECPublicKey *)cipherInfo->cx, + &cipherInfo->params.ecdsa.sig.buf, + &cipherInfo->input.pBuf); + CHECKERROR(rv, __LINE__); + } + } else { + int opsBetweenChecks = 0; + TIMEMARK(cipherInfo->seconds); + while (! (TIMETOFINISH())) { + int j = 0; + for (;j < opsBetweenChecks;j++) { + rv = ECDSA_VerifyDigest((ECPublicKey *)cipherInfo->cx, + &cipherInfo->params.ecdsa.sig.buf, + &cipherInfo->input.pBuf); + CHECKERROR(rv, __LINE__); + } + cipherInfo->repetitions += j; + } + } + TIMEFINISH(cipherInfo->optime, 1.0); + } + SECITEM_FreeItem(&dummyOut, PR_FALSE); + return rv; +} +#endif + +SECStatus +cipherDoOp(bltestCipherInfo *cipherInfo) +{ + PRIntervalTime time1, time2; + SECStatus rv = SECSuccess; + int i, len; + int maxLen = cipherInfo->output.pBuf.len; + unsigned char *dummyOut; + if (cipherInfo->mode == bltestDSA) + return dsaOp(cipherInfo); +#ifdef NSS_ENABLE_ECC + else if (cipherInfo->mode == bltestECDSA) + return ecdsaOp(cipherInfo); +#endif + dummyOut = PORT_Alloc(maxLen); + if (is_symmkeyCipher(cipherInfo->mode)) { + TIMESTART(); + rv = (*cipherInfo->cipher.symmkeyCipher)(cipherInfo->cx, + cipherInfo->output.pBuf.data, + &len, maxLen, + cipherInfo->input.pBuf.data, + cipherInfo->input.pBuf.len); + TIMEFINISH(cipherInfo->optime, 1.0); + CHECKERROR(rv, __LINE__); + cipherInfo->repetitions = 0; + if (cipherInfo->repetitionsToPerfom != 0) { + TIMESTART(); + for (i=0; i<cipherInfo->repetitionsToPerfom; i++, + cipherInfo->repetitions++) { + (*cipherInfo->cipher.symmkeyCipher)(cipherInfo->cx, dummyOut, + &len, maxLen, + cipherInfo->input.pBuf.data, + cipherInfo->input.pBuf.len); + + CHECKERROR(rv, __LINE__); + } + } else { + int opsBetweenChecks = 0; + bltestIO *input = &cipherInfo->input; + TIMEMARK(cipherInfo->seconds); + while (! (TIMETOFINISH())) { + int j = 0; + for (;j < opsBetweenChecks;j++) { + (*cipherInfo->cipher.symmkeyCipher)(cipherInfo->cx, + dummyOut, + &len, maxLen, + input->pBuf.data, + input->pBuf.len); + } + cipherInfo->repetitions += j; + } + } + TIMEFINISH(cipherInfo->optime, 1.0); + } else if (is_pubkeyCipher(cipherInfo->mode)) { + TIMESTART(); + rv = (*cipherInfo->cipher.pubkeyCipher)(cipherInfo->cx, + &cipherInfo->output.pBuf, + &cipherInfo->input.pBuf); + TIMEFINISH(cipherInfo->optime, 1.0); + CHECKERROR(rv, __LINE__); + cipherInfo->repetitions = 0; + if (cipherInfo->repetitionsToPerfom != 0) { + TIMESTART(); + for (i=0; i<cipherInfo->repetitionsToPerfom; + i++, cipherInfo->repetitions++) { + SECItem dummy; + dummy.data = dummyOut; + dummy.len = maxLen; + (*cipherInfo->cipher.pubkeyCipher)(cipherInfo->cx, &dummy, + &cipherInfo->input.pBuf); + CHECKERROR(rv, __LINE__); + } + } else { + int opsBetweenChecks = 0; + TIMEMARK(cipherInfo->seconds); + while (! (TIMETOFINISH())) { + int j = 0; + for (;j < opsBetweenChecks;j++) { + SECItem dummy; + dummy.data = dummyOut; + dummy.len = maxLen; + (*cipherInfo->cipher.pubkeyCipher)(cipherInfo->cx, &dummy, + &cipherInfo->input.pBuf); + CHECKERROR(rv, __LINE__); + } + cipherInfo->repetitions += j; + } + } + TIMEFINISH(cipherInfo->optime, 1.0); + } else if (is_hashCipher(cipherInfo->mode)) { + TIMESTART(); + rv = (*cipherInfo->cipher.hashCipher)(cipherInfo->output.pBuf.data, + cipherInfo->input.pBuf.data, + cipherInfo->input.pBuf.len); + TIMEFINISH(cipherInfo->optime, 1.0); + CHECKERROR(rv, __LINE__); + cipherInfo->repetitions = 0; + if (cipherInfo->repetitionsToPerfom != 0) { + TIMESTART(); + for (i=0; i<cipherInfo->repetitionsToPerfom; + i++, cipherInfo->repetitions++) { + (*cipherInfo->cipher.hashCipher)(dummyOut, + cipherInfo->input.pBuf.data, + cipherInfo->input.pBuf.len); + CHECKERROR(rv, __LINE__); + } + } else { + int opsBetweenChecks = 0; + TIMEMARK(cipherInfo->seconds); + while (! (TIMETOFINISH())) { + int j = 0; + for (;j < opsBetweenChecks;j++) { + bltestIO *input = &cipherInfo->input; + (*cipherInfo->cipher.hashCipher)(dummyOut, + input->pBuf.data, + input->pBuf.len); + CHECKERROR(rv, __LINE__); + } + cipherInfo->repetitions += j; + } + } + TIMEFINISH(cipherInfo->optime, 1.0); + } + PORT_Free(dummyOut); + return rv; +} + +SECStatus +cipherFinish(bltestCipherInfo *cipherInfo) +{ + switch (cipherInfo->mode) { + case bltestDES_ECB: + case bltestDES_CBC: + case bltestDES_EDE_ECB: + case bltestDES_EDE_CBC: + DES_DestroyContext((DESContext *)cipherInfo->cx, PR_TRUE); + break; + case bltestAES_ECB: + case bltestAES_CBC: + AES_DestroyContext((AESContext *)cipherInfo->cx, PR_TRUE); + break; + case bltestCAMELLIA_ECB: + case bltestCAMELLIA_CBC: + Camellia_DestroyContext((CamelliaContext *)cipherInfo->cx, PR_TRUE); + break; + case bltestSEED_ECB: + case bltestSEED_CBC: + SEED_DestroyContext((SEEDContext *)cipherInfo->cx, PR_TRUE); + break; + case bltestRC2_ECB: + case bltestRC2_CBC: + RC2_DestroyContext((RC2Context *)cipherInfo->cx, PR_TRUE); + break; + case bltestRC4: + RC4_DestroyContext((RC4Context *)cipherInfo->cx, PR_TRUE); + break; +#ifdef NSS_SOFTOKEN_DOES_RC5 + case bltestRC5_ECB: + case bltestRC5_CBC: + RC5_DestroyContext((RC5Context *)cipherInfo->cx, PR_TRUE); + break; +#endif + case bltestRSA: /* keys are alloc'ed within cipherInfo's arena, */ + case bltestDSA: /* will be freed with it. */ +#ifdef NSS_ENABLE_ECC + case bltestECDSA: +#endif + case bltestMD2: /* hash contexts are ephemeral */ + case bltestMD5: + case bltestSHA1: + case bltestSHA256: + case bltestSHA384: + case bltestSHA512: + return SECSuccess; + break; + default: + return SECFailure; + } + return SECSuccess; +} + +void +print_exponent(SECItem *exp) +{ + int i; + int e = 0; + if (exp->len <= 4) { + for (i=exp->len; i >=0; --i) e |= exp->data[exp->len-i] << 8*(i-1); + fprintf(stdout, "%12d", e); + } else { + e = 8*exp->len; + fprintf(stdout, "~2**%-8d", e); + } +} + +static void +splitToReportUnit(PRInt64 res, int *resArr, int *del, int size) +{ + PRInt64 remaining = res, tmp = 0; + PRInt64 Ldel; + int i = -1; + + while (remaining > 0 && ++i < size) { + LL_I2L(Ldel, del[i]); + LL_MOD(tmp, remaining, Ldel); + LL_L2I(resArr[i], tmp); + LL_DIV(remaining, remaining, Ldel); + } +} + +static char* +getHighUnitBytes(PRInt64 res) +{ + int spl[] = {0, 0, 0, 0}; + int del[] = {1024, 1024, 1024, 1024}; + char *marks[] = {"b", "Kb", "Mb", "Gb"}; + int i = 3; + + splitToReportUnit(res, spl, del, 4); + + for (;i>0;i--) { + if (spl[i] != 0) { + break; + } + } + + return PR_smprintf("%d%s", spl[i], marks[i]); +} + + +static void +printPR_smpString(const char *sformat, char *reportStr, + const char *nformat, PRInt64 rNum) +{ + if (reportStr) { + fprintf(stdout, sformat, reportStr); + PR_smprintf_free(reportStr); + } else { + int prnRes; + LL_L2I(prnRes, rNum); + fprintf(stdout, nformat, rNum); + } +} + +static char* +getHighUnitOps(PRInt64 res) +{ + int spl[] = {0, 0, 0, 0}; + int del[] = {1000, 1000, 1000, 1000}; + char *marks[] = {"", "T", "M", "B"}; + int i = 3; + + splitToReportUnit(res, spl, del, 4); + + for (;i>0;i--) { + if (spl[i] != 0) { + break; + } + } + + return PR_smprintf("%d%s", spl[i], marks[i]); +} + +void +dump_performance_info(bltestCipherInfo *infoList, double totalTimeInt, + PRBool encrypt, PRBool cxonly) +{ + bltestCipherInfo *info = infoList; + + PRInt64 totalIn = 0; + PRBool td = PR_TRUE; + + int repetitions = 0; + int cxreps = 0; + double cxtime = 0; + double optime = 0; + while (info != NULL) { + repetitions += info->repetitions; + cxreps += info->cxreps; + cxtime += info->cxtime; + optime += info->optime; + totalIn += (PRInt64) info->input.buf.len * (PRInt64) info->repetitions; + + info = info->next; + } + info = infoList; + + fprintf(stdout, "#%9s", "mode"); + fprintf(stdout, "%12s", "in"); +print_td: + switch (info->mode) { + case bltestDES_ECB: + case bltestDES_CBC: + case bltestDES_EDE_ECB: + case bltestDES_EDE_CBC: + case bltestAES_ECB: + case bltestAES_CBC: + case bltestCAMELLIA_ECB: + case bltestCAMELLIA_CBC: + case bltestSEED_ECB: + case bltestSEED_CBC: + case bltestRC2_ECB: + case bltestRC2_CBC: + case bltestRC4: + if (td) + fprintf(stdout, "%8s", "symmkey"); + else + fprintf(stdout, "%8d", 8*info->params.sk.key.buf.len); + break; +#ifdef NSS_SOFTOKEN_DOES_RC5 + case bltestRC5_ECB: + case bltestRC5_CBC: + if (info->params.sk.key.buf.len > 0) + printf("symmetric key(bytes)=%d,", info->params.sk.key.buf.len); + if (info->rounds > 0) + printf("rounds=%d,", info->params.rc5.rounds); + if (info->wordsize > 0) + printf("wordsize(bytes)=%d,", info->params.rc5.wordsize); + break; +#endif + case bltestRSA: + if (td) { + fprintf(stdout, "%8s", "rsa_mod"); + fprintf(stdout, "%12s", "rsa_pe"); + } else { + fprintf(stdout, "%8d", info->params.rsa.keysizeInBits); + print_exponent(&info->params.rsa.rsakey->publicExponent); + } + break; + case bltestDSA: + if (td) + fprintf(stdout, "%8s", "pqg_mod"); + else + fprintf(stdout, "%8d", PQG_INDEX_TO_PBITS(info->params.dsa.j)); + break; +#ifdef NSS_ENABLE_ECC + case bltestECDSA: + if (td) + fprintf(stdout, "%12s", "ec_curve"); + else { + ECCurveName curveName = info->params.ecdsa.eckey->ecParams.name; + fprintf(stdout, "%12s", + ecCurve_map[curveName]? ecCurve_map[curveName]->text: + "Unsupported curve"); + } + break; +#endif + case bltestMD2: + case bltestMD5: + case bltestSHA1: + case bltestSHA256: + case bltestSHA384: + case bltestSHA512: + default: + break; + } + if (!td) { + PRInt64 totalThroughPut; + + printPR_smpString("%8s", getHighUnitOps(repetitions), + "%8d", repetitions); + + printPR_smpString("%8s", getHighUnitOps(cxreps), "%8d", cxreps); + + fprintf(stdout, "%12.3f", cxtime); + fprintf(stdout, "%12.3f", optime); + fprintf(stdout, "%12.03f", totalTimeInt / 1000); + + totalThroughPut = (PRInt64)(totalIn / totalTimeInt * 1000); + printPR_smpString("%12s", getHighUnitBytes(totalThroughPut), + "%12d", totalThroughPut); + + fprintf(stdout, "\n"); + return; + } + + fprintf(stdout, "%8s", "opreps"); + fprintf(stdout, "%8s", "cxreps"); + fprintf(stdout, "%12s", "context"); + fprintf(stdout, "%12s", "op"); + fprintf(stdout, "%12s", "time(sec)"); + fprintf(stdout, "%12s", "thrgput"); + fprintf(stdout, "\n"); + fprintf(stdout, "%8s", mode_strings[info->mode]); + fprintf(stdout, "_%c", (cxonly) ? 'c' : (encrypt) ? 'e' : 'd'); + printPR_smpString("%12s", getHighUnitBytes(totalIn), "%12d", totalIn); + + td = !td; + goto print_td; +} + +void +printmodes() +{ + bltestCipherMode mode; + int nummodes = sizeof(mode_strings) / sizeof(char *); + fprintf(stderr, "%s: Available modes (specify with -m):\n", progName); + for (mode=0; mode<nummodes; mode++) + fprintf(stderr, "%s\n", mode_strings[mode]); +} + +bltestCipherMode +get_mode(const char *modestring) +{ + bltestCipherMode mode; + int nummodes = sizeof(mode_strings) / sizeof(char *); + for (mode=0; mode<nummodes; mode++) + if (PL_strcmp(modestring, mode_strings[mode]) == 0) + return mode; + fprintf(stderr, "%s: invalid mode: %s\n", progName, modestring); + return bltestINVALID; +} + +void +load_file_data(PRArenaPool *arena, bltestIO *data, + char *fn, bltestIOMode ioMode) +{ + PRFileDesc *file; + data->mode = ioMode; + data->file = NULL; /* don't use -- not saving anything */ + data->pBuf.data = NULL; + data->pBuf.len = 0; + file = PR_Open(fn, PR_RDONLY, 00660); + if (file) + setupIO(arena, data, file, NULL, 0); +} + +void +get_params(PRArenaPool *arena, bltestParams *params, + bltestCipherMode mode, int j) +{ + char filename[256]; + char *modestr = mode_strings[mode]; +#ifdef NSS_SOFTOKEN_DOES_RC5 + FILE *file; + char *mark, *param, *val; + int index = 0; +#endif + switch (mode) { + case bltestDES_CBC: + case bltestDES_EDE_CBC: + case bltestRC2_CBC: + case bltestAES_CBC: + case bltestCAMELLIA_CBC: + case bltestSEED_CBC: + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, "iv", j); + load_file_data(arena, ¶ms->sk.iv, filename, bltestBinary); + case bltestDES_ECB: + case bltestDES_EDE_ECB: + case bltestRC2_ECB: + case bltestRC4: + case bltestAES_ECB: + case bltestCAMELLIA_ECB: + case bltestSEED_ECB: + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, "key", j); + load_file_data(arena, ¶ms->sk.key, filename, bltestBinary); + break; +#ifdef NSS_SOFTOKEN_DOES_RC5 + case bltestRC5_ECB: + case bltestRC5_CBC: + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, "iv", j); + load_file_data(arena, ¶ms->sk.iv, filename, bltestBinary); + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, "key", j); + load_file_data(arena, ¶ms->sk.key, filename, bltestBinary); + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, + "params", j); + file = fopen(filename, "r"); + if (!file) return; + param = malloc(100); + len = fread(param, 1, 100, file); + while (index < len) { + mark = PL_strchr(param, '='); + *mark = '\0'; + val = mark + 1; + mark = PL_strchr(val, '\n'); + *mark = '\0'; + if (PL_strcmp(param, "rounds") == 0) { + params->rc5.rounds = atoi(val); + } else if (PL_strcmp(param, "wordsize") == 0) { + params->rc5.wordsize = atoi(val); + } + index += PL_strlen(param) + PL_strlen(val) + 2; + param = mark + 1; + } + break; +#endif + case bltestRSA: + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, "key", j); + load_file_data(arena, ¶ms->rsa.key, filename, bltestBase64Encoded); + params->rsa.rsakey = rsakey_from_filedata(¶ms->key.buf); + break; + case bltestDSA: + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, "key", j); + load_file_data(arena, ¶ms->dsa.key, filename, bltestBase64Encoded); + params->dsa.dsakey = dsakey_from_filedata(¶ms->key.buf); + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, "pqg", j); + load_file_data(arena, ¶ms->dsa.pqgdata, filename, + bltestBase64Encoded); + params->dsa.pqg = pqg_from_filedata(¶ms->dsa.pqgdata.buf); + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, "keyseed", j); + load_file_data(arena, ¶ms->dsa.keyseed, filename, + bltestBase64Encoded); + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, "sigseed", j); + load_file_data(arena, ¶ms->dsa.sigseed, filename, + bltestBase64Encoded); + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, "ciphertext",j); + load_file_data(arena, ¶ms->dsa.sig, filename, bltestBase64Encoded); + break; +#ifdef NSS_ENABLE_ECC + case bltestECDSA: + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, "key", j); + load_file_data(arena, ¶ms->ecdsa.key, filename, bltestBase64Encoded); + params->ecdsa.eckey = eckey_from_filedata(¶ms->key.buf); + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, "sigseed", j); + load_file_data(arena, ¶ms->ecdsa.sigseed, filename, + bltestBase64Encoded); + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, "ciphertext",j); + load_file_data(arena, ¶ms->ecdsa.sig, filename, bltestBase64Encoded); + break; +#endif + case bltestMD2: + case bltestMD5: + case bltestSHA1: + case bltestSHA256: + case bltestSHA384: + case bltestSHA512: + /*params->hash.restart = PR_TRUE;*/ + params->hash.restart = PR_FALSE; + break; + default: + break; + } +} + +SECStatus +verify_self_test(bltestIO *result, bltestIO *cmp, bltestCipherMode mode, + PRBool forward, SECStatus sigstatus) +{ + int res; + char *modestr = mode_strings[mode]; + res = SECITEM_CompareItem(&result->pBuf, &cmp->buf); + if (is_sigCipher(mode)) { + if (forward) { + if (res == 0) { + printf("Signature self-test for %s passed.\n", modestr); + } else { + printf("Signature self-test for %s failed!\n", modestr); + } + } else { + if (sigstatus == SECSuccess) { + printf("Verification self-test for %s passed.\n", modestr); + } else { + printf("Verification self-test for %s failed!\n", modestr); + } + } + return sigstatus; + } else if (is_hashCipher(mode)) { + if (res == 0) { + printf("Hash self-test for %s passed.\n", modestr); + } else { + printf("Hash self-test for %s failed!\n", modestr); + } + } else { + if (forward) { + if (res == 0) { + printf("Encryption self-test for %s passed.\n", modestr); + } else { + printf("Encryption self-test for %s failed!\n", modestr); + } + } else { + if (res == 0) { + printf("Decryption self-test for %s passed.\n", modestr); + } else { + printf("Decryption self-test for %s failed!\n", modestr); + } + } + } + return (res != 0); +} + +static SECStatus +blapi_selftest(bltestCipherMode *modes, int numModes, int inoff, int outoff, + PRBool encrypt, PRBool decrypt) +{ + bltestCipherInfo cipherInfo; + bltestIO pt, ct; + bltestCipherMode mode; + bltestParams *params; + int i, j, nummodes, numtests; + char *modestr; + char filename[256]; + PRFileDesc *file; + PRArenaPool *arena; + SECItem item; + PRBool finished; + SECStatus rv = SECSuccess, srv; + + PORT_Memset(&cipherInfo, 0, sizeof(cipherInfo)); + arena = PORT_NewArena(BLTEST_DEFAULT_CHUNKSIZE); + cipherInfo.arena = arena; + + finished = PR_FALSE; + nummodes = (numModes == 0) ? NUMMODES : numModes; + for (i=0; i < nummodes && !finished; i++) { + if (numModes > 0) + mode = modes[i]; + else + mode = i; + if (mode == bltestINVALID) { + fprintf(stderr, "%s: Skipping invalid mode.\n",progName); + continue; + } + modestr = mode_strings[mode]; + cipherInfo.mode = mode; + params = &cipherInfo.params; +#ifdef TRACK_BLTEST_BUG + if (mode == bltestRSA) { + fprintf(stderr, "[%s] Self-Testing RSA\n", __bltDBG); + } +#endif + /* get the number of tests in the directory */ + sprintf(filename, "%s/tests/%s/%s", testdir, modestr, "numtests"); + file = PR_Open(filename, PR_RDONLY, 00660); + if (!file) { + fprintf(stderr, "%s: File %s does not exist.\n", progName,filename); + return SECFailure; + } + rv = SECU_FileToItem(&item, file); +#ifdef TRACK_BLTEST_BUG + if (mode == bltestRSA) { + fprintf(stderr, "[%s] Loaded data from %s\n", __bltDBG, filename); + } +#endif + PR_Close(file); + /* loop over the tests in the directory */ + numtests = 0; + for (j=0; j<item.len; j++) { + if (!isdigit(item.data[j])) { + break; + } + numtests *= 10; + numtests += (int) (item.data[j] - '0'); + } + for (j=0; j<numtests; j++) { +#ifdef TRACK_BLTEST_BUG + if (mode == bltestRSA) { + fprintf(stderr, "[%s] Executing self-test #%d\n", __bltDBG, j); + } +#endif + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, + "plaintext", j); + load_file_data(arena, &pt, filename, +#ifdef NSS_ENABLE_ECC + ((mode == bltestDSA) || (mode == bltestECDSA)) +#else + (mode == bltestDSA) +#endif + ? bltestBase64Encoded : bltestBinary); + sprintf(filename, "%s/tests/%s/%s%d", testdir, modestr, + "ciphertext", j); + load_file_data(arena, &ct, filename, bltestBase64Encoded); +#ifdef TRACK_BLTEST_BUG + if (mode == bltestRSA) { + fprintf(stderr, "[%s] Loaded data for self-test #%d\n", __bltDBG, j); + } +#endif + get_params(arena, params, mode, j); +#ifdef TRACK_BLTEST_BUG + if (mode == bltestRSA) { + fprintf(stderr, "[%s] Got parameters for #%d\n", __bltDBG, j); + } +#endif + /* Forward Operation (Encrypt/Sign/Hash) + ** Align the input buffer (plaintext) according to request + ** then perform operation and compare to ciphertext + */ + /* XXX for now */ + rv = SECSuccess; + if (encrypt) { + bltestCopyIO(arena, &cipherInfo.input, &pt); + misalignBuffer(arena, &cipherInfo.input, inoff); + memset(&cipherInfo.output.buf, 0, sizeof cipherInfo.output.buf); + rv |= cipherInit(&cipherInfo, PR_TRUE); + misalignBuffer(arena, &cipherInfo.output, outoff); +#ifdef TRACK_BLTEST_BUG + if (mode == bltestRSA) { + fprintf(stderr, "[%s] Inited cipher context and buffers for #%d\n", __bltDBG, j); + } +#endif + rv |= cipherDoOp(&cipherInfo); +#ifdef TRACK_BLTEST_BUG + if (mode == bltestRSA) { + fprintf(stderr, "[%s] Performed encrypt for #%d\n", __bltDBG, j); + } +#endif + rv |= cipherFinish(&cipherInfo); +#ifdef TRACK_BLTEST_BUG + if (mode == bltestRSA) { + fprintf(stderr, "[%s] Finished encrypt for #%d\n", __bltDBG, j); + } +#endif + rv |= verify_self_test(&cipherInfo.output, + &ct, mode, PR_TRUE, 0); +#ifdef TRACK_BLTEST_BUG + if (mode == bltestRSA) { + fprintf(stderr, "[%s] Verified self-test for #%d\n", __bltDBG, j); + } +#endif + /* If testing hash, only one op to test */ + if (is_hashCipher(mode)) + continue; + /*if (rv) return rv;*/ + } + if (!decrypt) + continue; + /* XXX for now */ + rv = SECSuccess; + /* Reverse Operation (Decrypt/Verify) + ** Align the input buffer (ciphertext) according to request + ** then perform operation and compare to plaintext + */ +#ifdef NSS_ENABLE_ECC + if ((mode != bltestDSA) && (mode != bltestECDSA)) +#else + if (mode != bltestDSA) +#endif + bltestCopyIO(arena, &cipherInfo.input, &ct); + else + bltestCopyIO(arena, &cipherInfo.input, &pt); + misalignBuffer(arena, &cipherInfo.input, inoff); + memset(&cipherInfo.output.buf, 0, sizeof cipherInfo.output.buf); + rv |= cipherInit(&cipherInfo, PR_FALSE); + misalignBuffer(arena, &cipherInfo.output, outoff); +#ifdef TRACK_BLTEST_BUG + if (mode == bltestRSA) { + fprintf(stderr, "[%s] Inited cipher context and buffers for #%d\n", __bltDBG, j); + } +#endif + srv = SECSuccess; + srv |= cipherDoOp(&cipherInfo); +#ifdef TRACK_BLTEST_BUG + if (mode == bltestRSA) { + fprintf(stderr, "[%s] Performed decrypt for #%d\n", __bltDBG, j); + } +#endif + rv |= cipherFinish(&cipherInfo); +#ifdef TRACK_BLTEST_BUG + if (mode == bltestRSA) { + fprintf(stderr, "[%s] Finished decrypt for #%d\n", __bltDBG, j); + } +#endif + rv |= verify_self_test(&cipherInfo.output, + &pt, mode, PR_FALSE, srv); +#ifdef TRACK_BLTEST_BUG + if (mode == bltestRSA) { + fprintf(stderr, "[%s] Verified self-test for #%d\n", __bltDBG, j); + } +#endif + /*if (rv) return rv;*/ + } + } + return rv; +} + +SECStatus +dump_file(bltestCipherMode mode, char *filename) +{ + bltestIO keydata; + PRArenaPool *arena = NULL; + arena = PORT_NewArena(BLTEST_DEFAULT_CHUNKSIZE); + if (mode == bltestRSA) { + RSAPrivateKey *key; + load_file_data(arena, &keydata, filename, bltestBase64Encoded); + key = rsakey_from_filedata(&keydata.buf); + dump_rsakey(key); + } else if (mode == bltestDSA) { +#if 0 + PQGParams *pqg; + get_file_data(filename, &item, PR_TRUE); + pqg = pqg_from_filedata(&item); + dump_pqg(pqg); +#endif + DSAPrivateKey *key; + load_file_data(arena, &keydata, filename, bltestBase64Encoded); + key = dsakey_from_filedata(&keydata.buf); + dump_dsakey(key); +#ifdef NSS_ENABLE_ECC + } else if (mode == bltestECDSA) { + ECPrivateKey *key; + load_file_data(arena, &keydata, filename, bltestBase64Encoded); + key = eckey_from_filedata(&keydata.buf); + dump_eckey(key); +#endif + } + PORT_FreeArena(arena, PR_FALSE); + return SECFailure; +} + +void ThreadExecTest(void *data) +{ + bltestCipherInfo *cipherInfo = (bltestCipherInfo*)data; + + if (cipherInfo->mCarlo == PR_TRUE) { + int mciter; + for (mciter=0; mciter<10000; mciter++) { + cipherDoOp(cipherInfo); + memcpy(cipherInfo->input.buf.data, + cipherInfo->output.buf.data, + cipherInfo->input.buf.len); + } + } else { + cipherDoOp(cipherInfo); + } + cipherFinish(cipherInfo); +} + +static void rsaPrivKeyReset(RSAPrivateKey *tstKey) +{ + PLArenaPool *arena; + + tstKey->version.data = NULL; + tstKey->version.len = 0; + tstKey->modulus.data = NULL; + tstKey->modulus.len = 0; + tstKey->publicExponent.data = NULL; + tstKey->publicExponent.len = 0; + tstKey->privateExponent.data = NULL; + tstKey->privateExponent.len = 0; + tstKey->prime1.data = NULL; + tstKey->prime1.len = 0; + tstKey->prime2.data = NULL; + tstKey->prime2.len = 0; + tstKey->exponent1.data = NULL; + tstKey->exponent1.len = 0; + tstKey->exponent2.data = NULL; + tstKey->exponent2.len = 0; + tstKey->coefficient.data = NULL; + tstKey->coefficient.len = 0; + + arena = tstKey->arena; + tstKey->arena = NULL; + if (arena) { + PORT_FreeArena(arena, PR_TRUE); + } +} + + +#define RSA_TEST_EQUAL(comp) \ + if (!SECITEM_ItemsAreEqual(&(src->comp),&(dest->comp))) { \ + fprintf(stderr, "key->" #comp " not equal"); \ + if (src->comp.len != dest->comp.len) { \ + fprintf(stderr, "src_len = %d, dest_len = %d", \ + src->comp.len, dest->comp.len); \ + } \ + fprintf(stderr, "\n"); \ + areEqual = PR_FALSE; \ + } + + +static PRBool rsaPrivKeysAreEqual(RSAPrivateKey *src, RSAPrivateKey *dest) +{ + PRBool areEqual = PR_TRUE; + RSA_TEST_EQUAL(modulus) + RSA_TEST_EQUAL(publicExponent) + RSA_TEST_EQUAL(privateExponent) + RSA_TEST_EQUAL(prime1) + RSA_TEST_EQUAL(prime2) + RSA_TEST_EQUAL(exponent1) + RSA_TEST_EQUAL(exponent2) + RSA_TEST_EQUAL(coefficient) + if (!areEqual) { + fprintf(stderr, "original key:\n"); + dump_rsakey(src); + fprintf(stderr, "recreated key:\n"); + dump_rsakey(dest); + } + return areEqual; +} + +/* + * Test the RSA populate command to see that it can really build + * keys from it's components. + */ +static int doRSAPopulateTest(unsigned int keySize, unsigned long exponent) +{ + RSAPrivateKey *srcKey; + RSAPrivateKey tstKey = { 0 }; + SECItem expitem = { 0, 0, 0 }; + SECStatus rv; + unsigned char pubExp[4]; + int expLen = 0; + int failed = 0; + int i; + + for (i=0; i < sizeof(unsigned long); i++) { + int shift = (sizeof(unsigned long) - i -1 ) * 8; + if (expLen || (exponent && ((unsigned long)0xffL << shift))) { + pubExp[expLen] = (unsigned char) ((exponent >> shift) & 0xff); + expLen++; + } + } + + expitem.data = pubExp; + expitem.len = expLen; + + srcKey = RSA_NewKey(keySize, &expitem); + if (srcKey == NULL) { + fprintf(stderr, "RSA Key Gen failed"); + return -1; + } + + /* test the basic case - most common, public exponent, modulus, prime */ + tstKey.arena = NULL; + rsaPrivKeyReset(&tstKey); + + tstKey.publicExponent = srcKey->publicExponent; + tstKey.modulus = srcKey->modulus; + tstKey.prime1 = srcKey->prime1; + + rv = RSA_PopulatePrivateKey(&tstKey); + if (rv != SECSuccess) { + fprintf(stderr, "RSA Populate failed: pubExp mod p\n"); + failed = 1; + } else if (!rsaPrivKeysAreEqual(&tstKey, srcKey)) { + fprintf(stderr, "RSA Populate key mismatch: pubExp mod p\n"); + failed = 1; + } + + /* test the basic2 case, public exponent, modulus, prime2 */ + rsaPrivKeyReset(&tstKey); + + tstKey.publicExponent = srcKey->publicExponent; + tstKey.modulus = srcKey->modulus; + tstKey.prime1 = srcKey->prime2; /* test with q in the prime1 position */ + + rv = RSA_PopulatePrivateKey(&tstKey); + if (rv != SECSuccess) { + fprintf(stderr, "RSA Populate failed: pubExp mod q\n"); + failed = 1; + } else if (!rsaPrivKeysAreEqual(&tstKey, srcKey)) { + fprintf(stderr, "RSA Populate key mismatch: pubExp mod q\n"); + failed = 1; + } + + /* test the medium case, private exponent, prime1, prime2 */ + rsaPrivKeyReset(&tstKey); + + tstKey.privateExponent = srcKey->privateExponent; + tstKey.prime1 = srcKey->prime2; /* purposefully swap them to make */ + tstKey.prime2 = srcKey->prime1; /* sure populated swaps them back */ + + rv = RSA_PopulatePrivateKey(&tstKey); + if (rv != SECSuccess) { + fprintf(stderr, "RSA Populate failed: privExp p q\n"); + failed = 1; + } else if (!rsaPrivKeysAreEqual(&tstKey, srcKey)) { + fprintf(stderr, "RSA Populate key mismatch: privExp p q\n"); + failed = 1; + } + + /* test the advanced case, public exponent, private exponent, prime2 */ + rsaPrivKeyReset(&tstKey); + + tstKey.privateExponent = srcKey->privateExponent; + tstKey.publicExponent = srcKey->publicExponent; + tstKey.prime2 = srcKey->prime2; /* use q in the prime2 position */ + + rv = RSA_PopulatePrivateKey(&tstKey); + if (rv != SECSuccess) { + fprintf(stderr, "RSA Populate failed: pubExp privExp q\n"); + fprintf(stderr, " - not fatal\n"); + /* it's possible that we can't uniquely determine the original key + * from just the exponents and prime. Populate returns an error rather + * than return the wrong key. */ + } else if (!rsaPrivKeysAreEqual(&tstKey, srcKey)) { + /* if we returned a key, it *must* be correct */ + fprintf(stderr, "RSA Populate key mismatch: pubExp privExp q\n"); + rv = RSA_PrivateKeyCheck(&tstKey); + failed = 1; + } + + /* test the advanced case2, public exponent, private exponent, modulus */ + rsaPrivKeyReset(&tstKey); + + tstKey.privateExponent = srcKey->privateExponent; + tstKey.publicExponent = srcKey->publicExponent; + tstKey.modulus = srcKey->modulus; + + rv = RSA_PopulatePrivateKey(&tstKey); + if (rv != SECSuccess) { + fprintf(stderr, "RSA Populate failed: pubExp privExp mod\n"); + failed = 1; + } else if (!rsaPrivKeysAreEqual(&tstKey, srcKey)) { + fprintf(stderr, "RSA Populate key mismatch: pubExp privExp mod\n"); + failed = 1; + } + + return failed ? -1 : 0; +} + + + +/* bltest commands */ +enum { + cmd_Decrypt = 0, + cmd_Encrypt, + cmd_FIPS, + cmd_Hash, + cmd_Nonce, + cmd_Dump, + cmd_RSAPopulate, + cmd_Sign, + cmd_SelfTest, + cmd_Verify +}; + +/* bltest options */ +enum { + opt_B64 = 0, + opt_BufSize, + opt_Restart, + opt_SelfTestDir, + opt_Exponent, + opt_SigFile, + opt_KeySize, + opt_Hex, + opt_Input, + opt_PQGFile, + opt_Key, + opt_HexWSpc, + opt_Mode, +#ifdef NSS_ENABLE_ECC + opt_CurveName, +#endif + opt_Output, + opt_Repetitions, + opt_ZeroBuf, + opt_Rounds, + opt_Seed, + opt_SigSeedFile, + opt_CXReps, + opt_IV, + opt_WordSize, + opt_UseSeed, + opt_UseSigSeed, + opt_SeedFile, + opt_InputOffset, + opt_OutputOffset, + opt_MonteCarlo, + opt_ThreadNum, + opt_SecondsToRun, + opt_CmdLine +}; + +static secuCommandFlag bltest_commands[] = +{ + { /* cmd_Decrypt */ 'D', PR_FALSE, 0, PR_FALSE }, + { /* cmd_Encrypt */ 'E', PR_FALSE, 0, PR_FALSE }, + { /* cmd_FIPS */ 'F', PR_FALSE, 0, PR_FALSE }, + { /* cmd_Hash */ 'H', PR_FALSE, 0, PR_FALSE }, + { /* cmd_Nonce */ 'N', PR_FALSE, 0, PR_FALSE }, + { /* cmd_Dump */ 'P', PR_FALSE, 0, PR_FALSE }, + { /* cmd_RSAPopulate*/ 'R', PR_FALSE, 0, PR_FALSE }, + { /* cmd_Sign */ 'S', PR_FALSE, 0, PR_FALSE }, + { /* cmd_SelfTest */ 'T', PR_FALSE, 0, PR_FALSE }, + { /* cmd_Verify */ 'V', PR_FALSE, 0, PR_FALSE } +}; + +static secuCommandFlag bltest_options[] = +{ + { /* opt_B64 */ 'a', PR_FALSE, 0, PR_FALSE }, + { /* opt_BufSize */ 'b', PR_TRUE, 0, PR_FALSE }, + { /* opt_Restart */ 'c', PR_FALSE, 0, PR_FALSE }, + { /* opt_SelfTestDir */ 'd', PR_TRUE, 0, PR_FALSE }, + { /* opt_Exponent */ 'e', PR_TRUE, 0, PR_FALSE }, + { /* opt_SigFile */ 'f', PR_TRUE, 0, PR_FALSE }, + { /* opt_KeySize */ 'g', PR_TRUE, 0, PR_FALSE }, + { /* opt_Hex */ 'h', PR_FALSE, 0, PR_FALSE }, + { /* opt_Input */ 'i', PR_TRUE, 0, PR_FALSE }, + { /* opt_PQGFile */ 'j', PR_TRUE, 0, PR_FALSE }, + { /* opt_Key */ 'k', PR_TRUE, 0, PR_FALSE }, + { /* opt_HexWSpc */ 'l', PR_FALSE, 0, PR_FALSE }, + { /* opt_Mode */ 'm', PR_TRUE, 0, PR_FALSE }, +#ifdef NSS_ENABLE_ECC + { /* opt_CurveName */ 'n', PR_TRUE, 0, PR_FALSE }, +#endif + { /* opt_Output */ 'o', PR_TRUE, 0, PR_FALSE }, + { /* opt_Repetitions */ 'p', PR_TRUE, 0, PR_FALSE }, + { /* opt_ZeroBuf */ 'q', PR_FALSE, 0, PR_FALSE }, + { /* opt_Rounds */ 'r', PR_TRUE, 0, PR_FALSE }, + { /* opt_Seed */ 's', PR_TRUE, 0, PR_FALSE }, + { /* opt_SigSeedFile */ 't', PR_TRUE, 0, PR_FALSE }, + { /* opt_CXReps */ 'u', PR_TRUE, 0, PR_FALSE }, + { /* opt_IV */ 'v', PR_TRUE, 0, PR_FALSE }, + { /* opt_WordSize */ 'w', PR_TRUE, 0, PR_FALSE }, + { /* opt_UseSeed */ 'x', PR_FALSE, 0, PR_FALSE }, + { /* opt_UseSigSeed */ 'y', PR_FALSE, 0, PR_FALSE }, + { /* opt_SeedFile */ 'z', PR_FALSE, 0, PR_FALSE }, + { /* opt_InputOffset */ '1', PR_TRUE, 0, PR_FALSE }, + { /* opt_OutputOffset */ '2', PR_TRUE, 0, PR_FALSE }, + { /* opt_MonteCarlo */ '3', PR_FALSE, 0, PR_FALSE }, + { /* opt_ThreadNum */ '4', PR_TRUE, 0, PR_FALSE }, + { /* opt_SecondsToRun */ '5', PR_TRUE, 0, PR_FALSE }, + { /* opt_CmdLine */ '-', PR_FALSE, 0, PR_FALSE } +}; + +int main(int argc, char **argv) +{ + char *infileName, *outfileName, *keyfileName, *ivfileName; + SECStatus rv = SECFailure; + + double totalTime; + PRIntervalTime time1, time2; + PRFileDesc *outfile = NULL; + bltestCipherInfo *cipherInfoListHead, *cipherInfo; + bltestIOMode ioMode; + int bufsize, exponent, curThrdNum; +#ifdef NSS_ENABLE_ECC + char *curveName = NULL; +#endif + int i, commandsEntered; + int inoff, outoff; + int threads = 1; + + secuCommand bltest; + bltest.numCommands = sizeof(bltest_commands) / sizeof(secuCommandFlag); + bltest.numOptions = sizeof(bltest_options) / sizeof(secuCommandFlag); + bltest.commands = bltest_commands; + bltest.options = bltest_options; + + progName = strrchr(argv[0], '/'); + if (!progName) + progName = strrchr(argv[0], '\\'); + progName = progName ? progName+1 : argv[0]; + + rv = RNG_RNGInit(); + if (rv != SECSuccess) { + SECU_PrintPRandOSError(progName); + return -1; + } + rv = BL_Init(); + if (rv != SECSuccess) { + SECU_PrintPRandOSError(progName); + return -1; + } + RNG_SystemInfoForRNG(); + + rv = SECU_ParseCommandLine(argc, argv, progName, &bltest); + if (rv == SECFailure) { + fprintf(stderr, "%s: command line parsing error!\n", progName); + goto print_usage; + } + rv = SECFailure; + + cipherInfo = PORT_ZNew(bltestCipherInfo); + cipherInfoListHead = cipherInfo; + /* set some defaults */ + infileName = outfileName = keyfileName = ivfileName = NULL; + + /* Check the number of commands entered on the command line. */ + commandsEntered = 0; + for (i=0; i<bltest.numCommands; i++) + if (bltest.commands[i].activated) + commandsEntered++; + + if (commandsEntered > 1 && + !(commandsEntered == 2 && bltest.commands[cmd_SelfTest].activated)) { + fprintf(stderr, "%s: one command at a time!\n", progName); + goto print_usage; + } + + if (commandsEntered == 0) { + fprintf(stderr, "%s: you must enter a command!\n", progName); + goto print_usage; + } + + + if (bltest.commands[cmd_Sign].activated) + bltest.commands[cmd_Encrypt].activated = PR_TRUE; + if (bltest.commands[cmd_Verify].activated) + bltest.commands[cmd_Decrypt].activated = PR_TRUE; + if (bltest.commands[cmd_Hash].activated) + bltest.commands[cmd_Encrypt].activated = PR_TRUE; + + inoff = outoff = 0; + if (bltest.options[opt_InputOffset].activated) + inoff = PORT_Atoi(bltest.options[opt_InputOffset].arg); + if (bltest.options[opt_OutputOffset].activated) + outoff = PORT_Atoi(bltest.options[opt_OutputOffset].arg); + + testdir = (bltest.options[opt_SelfTestDir].activated) ? + strdup(bltest.options[opt_SelfTestDir].arg) : "."; + + /* + * Handle three simple cases first + */ + + /* test the RSA_PopulatePrivateKey function */ + if (bltest.commands[cmd_RSAPopulate].activated) { + unsigned int keySize = 1024; + unsigned long exponent = 65537; + int rounds = 1; + int ret; + + if (bltest.options[opt_KeySize].activated) { + keySize = PORT_Atoi(bltest.options[opt_KeySize].arg); + } + if (bltest.options[opt_Rounds].activated) { + rounds = PORT_Atoi(bltest.options[opt_Rounds].arg); + } + if (bltest.options[opt_Exponent].activated) { + exponent = PORT_Atoi(bltest.options[opt_Exponent].arg); + } + + for (i=0; i < rounds; i++) { + printf("Running RSA Populate test round %d\n",i); + ret = doRSAPopulateTest(keySize,exponent); + if (ret != 0) { + break; + } + } + if (ret != 0) { + fprintf(stderr,"RSA Populate test round %d: FAILED\n",i); + } + return ret; + } + + /* Do BLAPI self-test */ + if (bltest.commands[cmd_SelfTest].activated) { + PRBool encrypt = PR_TRUE, decrypt = PR_TRUE; + /* user may specified a set of ciphers to test. parse them. */ + bltestCipherMode modesToTest[NUMMODES]; + int numModesToTest = 0; + char *tok, *str; + str = bltest.options[opt_Mode].arg; + while (str) { + tok = strchr(str, ','); + if (tok) *tok = '\0'; + modesToTest[numModesToTest++] = get_mode(str); + if (tok) { + *tok = ','; + str = tok + 1; + } else { + break; + } + } + if (bltest.commands[cmd_Decrypt].activated && + !bltest.commands[cmd_Encrypt].activated) + encrypt = PR_FALSE; + if (bltest.commands[cmd_Encrypt].activated && + !bltest.commands[cmd_Decrypt].activated) + decrypt = PR_FALSE; + rv = blapi_selftest(modesToTest, numModesToTest, inoff, outoff, + encrypt, decrypt); + PORT_Free(cipherInfo); + return rv; + } + + /* Do FIPS self-test */ + if (bltest.commands[cmd_FIPS].activated) { + CK_RV ckrv = sftk_fipsPowerUpSelfTest(); + fprintf(stdout, "CK_RV: %ld.\n", ckrv); + PORT_Free(cipherInfo); + if (ckrv == CKR_OK) + return SECSuccess; + return SECFailure; + } + + /* + * Check command line arguments for Encrypt/Decrypt/Hash/Sign/Verify + */ + + if ((bltest.commands[cmd_Decrypt].activated || + bltest.commands[cmd_Verify].activated) && + bltest.options[opt_BufSize].activated) { + fprintf(stderr, "%s: Cannot use a nonce as input to decrypt/verify.\n", + progName); + goto print_usage; + } + + if (bltest.options[opt_Mode].activated) { + cipherInfo->mode = get_mode(bltest.options[opt_Mode].arg); + if (cipherInfo->mode == bltestINVALID) { + goto print_usage; + } + } else { + fprintf(stderr, "%s: You must specify a cipher mode with -m.\n", + progName); + goto print_usage; + } + + + if (bltest.options[opt_Repetitions].activated && + bltest.options[opt_SecondsToRun].activated) { + fprintf(stderr, "%s: Operation time should be defined in either " + "repetitions(-p) or seconds(-5) not both", + progName); + goto print_usage; + } + + if (bltest.options[opt_Repetitions].activated) { + cipherInfo->repetitionsToPerfom = + PORT_Atoi(bltest.options[opt_Repetitions].arg); + } else { + cipherInfo->repetitionsToPerfom = 0; + } + + if (bltest.options[opt_SecondsToRun].activated) { + cipherInfo->seconds = PORT_Atoi(bltest.options[opt_SecondsToRun].arg); + } else { + cipherInfo->seconds = 0; + } + + + if (bltest.options[opt_CXReps].activated) { + cipherInfo->cxreps = PORT_Atoi(bltest.options[opt_CXReps].arg); + } else { + cipherInfo->cxreps = 0; + } + + if (bltest.options[opt_ThreadNum].activated) { + threads = PORT_Atoi(bltest.options[opt_ThreadNum].arg); + if (threads <= 0) { + threads = 1; + } + } + + /* Dump a file (rsakey, dsakey, etc.) */ + if (bltest.commands[cmd_Dump].activated) { + rv = dump_file(cipherInfo->mode, bltest.options[opt_Input].arg); + PORT_Free(cipherInfo); + return rv; + } + + /* default input mode is binary */ + ioMode = (bltest.options[opt_B64].activated) ? bltestBase64Encoded : + (bltest.options[opt_Hex].activated) ? bltestHexStream : + (bltest.options[opt_HexWSpc].activated) ? bltestHexSpaceDelim : + bltestBinary; + + if (bltest.options[opt_Exponent].activated) + exponent = PORT_Atoi(bltest.options[opt_Exponent].arg); + else + exponent = 65537; + +#ifdef NSS_ENABLE_ECC + if (bltest.options[opt_CurveName].activated) + curveName = PORT_Strdup(bltest.options[opt_CurveName].arg); + else + curveName = NULL; +#endif + + if (bltest.commands[cmd_Verify].activated && + !bltest.options[opt_SigFile].activated) { + fprintf(stderr, "%s: You must specify a signature file with -f.\n", + progName); + + print_usage: + PORT_Free(cipherInfo); + Usage(); + } + + if (bltest.options[opt_MonteCarlo].activated) { + cipherInfo->mCarlo = PR_TRUE; + } else { + cipherInfo->mCarlo = PR_FALSE; + } + + for (curThrdNum = 0;curThrdNum < threads;curThrdNum++) { + int keysize = 0; + PRFileDesc *file = NULL, *infile; + bltestParams *params; + char *instr = NULL; + PRArenaPool *arena; + + if (curThrdNum > 0) { + bltestCipherInfo *newCInfo = PORT_ZNew(bltestCipherInfo); + if (!newCInfo) { + fprintf(stderr, "%s: Can not allocate memory.\n", progName); + goto exit_point; + } + newCInfo->mode = cipherInfo->mode; + newCInfo->mCarlo = cipherInfo->mCarlo; + newCInfo->repetitionsToPerfom = + cipherInfo->repetitionsToPerfom; + newCInfo->seconds = cipherInfo->seconds; + newCInfo->cxreps = cipherInfo->cxreps; + cipherInfo->next = newCInfo; + cipherInfo = newCInfo; + } + arena = PORT_NewArena(BLTEST_DEFAULT_CHUNKSIZE); + if (!arena) { + fprintf(stderr, "%s: Can not allocate memory.\n", progName); + goto exit_point; + } + cipherInfo->arena = arena; + params = &cipherInfo->params; + + /* Set up an encryption key. */ + keysize = 0; + file = NULL; + if (is_symmkeyCipher(cipherInfo->mode)) { + char *keystr = NULL; /* if key is on command line */ + if (bltest.options[opt_Key].activated) { + if (bltest.options[opt_CmdLine].activated) { + keystr = bltest.options[opt_Key].arg; + } else { + file = PR_Open(bltest.options[opt_Key].arg, + PR_RDONLY, 00660); + } + } else { + if (bltest.options[opt_KeySize].activated) + keysize = PORT_Atoi(bltest.options[opt_KeySize].arg); + else + keysize = 8; /* use 64-bit default (DES) */ + /* save the random key for reference */ + file = PR_Open("tmp.key", PR_WRONLY|PR_CREATE_FILE, 00660); + } + params->key.mode = ioMode; + setupIO(cipherInfo->arena, ¶ms->key, file, keystr, keysize); + if (file) + PR_Close(file); + } else if (is_pubkeyCipher(cipherInfo->mode)) { + if (bltest.options[opt_Key].activated) { + file = PR_Open(bltest.options[opt_Key].arg, PR_RDONLY, 00660); + } else { + if (bltest.options[opt_KeySize].activated) + keysize = PORT_Atoi(bltest.options[opt_KeySize].arg); + else + keysize = 64; /* use 512-bit default */ + file = PR_Open("tmp.key", PR_WRONLY|PR_CREATE_FILE, 00660); + } + params->key.mode = bltestBase64Encoded; +#ifdef NSS_ENABLE_ECC + pubkeyInitKey(cipherInfo, file, keysize, exponent, curveName); +#else + pubkeyInitKey(cipherInfo, file, keysize, exponent); +#endif + PR_Close(file); + } + + /* set up an initialization vector. */ + if (cipher_requires_IV(cipherInfo->mode)) { + char *ivstr = NULL; + bltestSymmKeyParams *skp; + file = NULL; +#ifdef NSS_SOFTOKEN_DOES_RC5 + if (cipherInfo->mode == bltestRC5_CBC) + skp = (bltestSymmKeyParams *)¶ms->rc5; + else +#endif + skp = ¶ms->sk; + if (bltest.options[opt_IV].activated) { + if (bltest.options[opt_CmdLine].activated) { + ivstr = bltest.options[opt_IV].arg; + } else { + file = PR_Open(bltest.options[opt_IV].arg, + PR_RDONLY, 00660); + } + } else { + /* save the random iv for reference */ + file = PR_Open("tmp.iv", PR_WRONLY|PR_CREATE_FILE, 00660); + } + memset(&skp->iv, 0, sizeof skp->iv); + skp->iv.mode = ioMode; + setupIO(cipherInfo->arena, &skp->iv, file, ivstr, keysize); + if (file) { + PR_Close(file); + } + } + + if (bltest.commands[cmd_Verify].activated) { + file = PR_Open(bltest.options[opt_SigFile].arg, PR_RDONLY, 00660); + if (cipherInfo->mode == bltestDSA) { + memset(&cipherInfo->params.dsa.sig, 0, sizeof(bltestIO)); + cipherInfo->params.dsa.sig.mode = ioMode; + setupIO(cipherInfo->arena, &cipherInfo->params.dsa.sig, + file, NULL, 0); +#ifdef NSS_ENABLE_ECC + } else if (cipherInfo->mode == bltestECDSA) { + memset(&cipherInfo->params.ecdsa.sig, 0, sizeof(bltestIO)); + cipherInfo->params.ecdsa.sig.mode = ioMode; + setupIO(cipherInfo->arena, &cipherInfo->params.ecdsa.sig, + file, NULL, 0); +#endif + } + if (file) { + PR_Close(file); + } + } + + if (bltest.options[opt_PQGFile].activated) { + file = PR_Open(bltest.options[opt_PQGFile].arg, PR_RDONLY, 00660); + params->dsa.pqgdata.mode = bltestBase64Encoded; + setupIO(cipherInfo->arena, ¶ms->dsa.pqgdata, file, NULL, 0); + if (file) { + PR_Close(file); + } + } + + /* Set up the input buffer */ + if (bltest.options[opt_Input].activated) { + if (bltest.options[opt_CmdLine].activated) { + instr = bltest.options[opt_Input].arg; + infile = NULL; + } else { + /* form file name from testdir and input arg. */ + char * filename = bltest.options[opt_Input].arg; + if (bltest.options[opt_SelfTestDir].activated && + testdir && filename && filename[0] != '/') { + filename = PR_smprintf("%s/tests/%s/%s", testdir, + mode_strings[cipherInfo->mode], + filename); + if (!filename) { + fprintf(stderr, "%s: Can not allocate memory.\n", + progName); + goto exit_point; + } + infile = PR_Open(filename, PR_RDONLY, 00660); + PR_smprintf_free(filename); + } else { + infile = PR_Open(filename, PR_RDONLY, 00660); + } + } + } else if (bltest.options[opt_BufSize].activated) { + /* save the random plaintext for reference */ + char *tmpFName = PR_smprintf("tmp.in.%d", curThrdNum); + if (!tmpFName) { + fprintf(stderr, "%s: Can not allocate memory.\n", progName); + goto exit_point; + } + infile = PR_Open(tmpFName, PR_WRONLY|PR_CREATE_FILE, 00660); + PR_smprintf_free(tmpFName); + } else { + infile = PR_STDIN; + } + if (!infile) { + fprintf(stderr, "%s: Failed to open input file.\n", progName); + goto exit_point; + } + cipherInfo->input.mode = ioMode; + + /* Set up the output stream */ + if (bltest.options[opt_Output].activated) { + /* form file name from testdir and input arg. */ + char * filename = bltest.options[opt_Output].arg; + if (bltest.options[opt_SelfTestDir].activated && + testdir && filename && filename[0] != '/') { + filename = PR_smprintf("%s/tests/%s/%s", testdir, + mode_strings[cipherInfo->mode], + filename); + if (!filename) { + fprintf(stderr, "%s: Can not allocate memory.\n", progName); + goto exit_point; + } + outfile = PR_Open(filename, PR_WRONLY|PR_CREATE_FILE, 00660); + PR_smprintf_free(filename); + } else { + outfile = PR_Open(filename, PR_WRONLY|PR_CREATE_FILE, 00660); + } + } else { + outfile = PR_STDOUT; + } + if (!outfile) { + fprintf(stderr, "%s: Failed to open output file.\n", progName); + rv = SECFailure; + goto exit_point; + } + cipherInfo->output.mode = ioMode; + if (bltest.options[opt_SelfTestDir].activated && ioMode == bltestBinary) + cipherInfo->output.mode = bltestBase64Encoded; + + if (is_hashCipher(cipherInfo->mode)) + cipherInfo->params.hash.restart = + bltest.options[opt_Restart].activated; + + bufsize = 0; + if (bltest.options[opt_BufSize].activated) + bufsize = PORT_Atoi(bltest.options[opt_BufSize].arg); + + /*infile = NULL;*/ + setupIO(cipherInfo->arena, &cipherInfo->input, infile, instr, bufsize); + if (infile && infile != PR_STDIN) + PR_Close(infile); + misalignBuffer(cipherInfo->arena, &cipherInfo->input, inoff); + + cipherInit(cipherInfo, bltest.commands[cmd_Encrypt].activated); + misalignBuffer(cipherInfo->arena, &cipherInfo->output, outoff); + } + + if (!bltest.commands[cmd_Nonce].activated) { + TIMESTART(); + cipherInfo = cipherInfoListHead; + while (cipherInfo != NULL) { + cipherInfo->cipherThread = + PR_CreateThread(PR_USER_THREAD, + ThreadExecTest, + cipherInfo, + PR_PRIORITY_NORMAL, + PR_GLOBAL_THREAD, + PR_JOINABLE_THREAD, + 0); + cipherInfo = cipherInfo->next; + } + + cipherInfo = cipherInfoListHead; + while (cipherInfo != NULL) { + PR_JoinThread(cipherInfo->cipherThread); + finishIO(&cipherInfo->output, outfile); + cipherInfo = cipherInfo->next; + } + TIMEFINISH(totalTime, 1); + } + + cipherInfo = cipherInfoListHead; + if (cipherInfo->repetitions > 0 || cipherInfo->cxreps > 0 || + threads > 1) + dump_performance_info(cipherInfoListHead, totalTime, + bltest.commands[cmd_Encrypt].activated, + (cipherInfo->repetitions == 0)); + + rv = SECSuccess; + + exit_point: + if (outfile && outfile != PR_STDOUT) + PR_Close(outfile); + cipherInfo = cipherInfoListHead; + while (cipherInfo != NULL) { + bltestCipherInfo *tmpInfo = cipherInfo; + + if (cipherInfo->arena) + PORT_FreeArena(cipherInfo->arena, PR_TRUE); + cipherInfo = cipherInfo->next; + PORT_Free(tmpInfo); + } + + /*NSS_Shutdown();*/ + + return SECSuccess; +} + diff --git a/mozilla/security/nss/cmd/bltest/manifest.mn b/mozilla/security/nss/cmd/bltest/manifest.mn new file mode 100644 index 0000000..3c283af --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/manifest.mn @@ -0,0 +1,58 @@ +# +# ***** 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) 1994-2000 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# +# 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 ***** +CORE_DEPTH = ../../.. + +MODULE = nss + +REQUIRES = seccmd dbm softoken + +INCLUDES += -I$(CORE_DEPTH)/nss/lib/softoken + +PROGRAM = bltest + + USE_STATIC_LIBS = 1 + +EXPORTS = \ + $(NULL) + +PRIVATE_EXPORTS = \ + $(NULL) + +CSRCS = \ + blapitest.c \ + $(NULL) + diff --git a/mozilla/security/nss/cmd/bltest/tests/README b/mozilla/security/nss/cmd/bltest/tests/README new file mode 100644 index 0000000..9982a2f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/README @@ -0,0 +1,49 @@ +This directory contains a set of tests for each cipher supported by +BLAPI. Each subdirectory contains known plaintext and ciphertext pairs +(and keys and/or iv's if needed). The tests can be run as a full set +with: + bltest -T +or as subsets, for example: + bltest -T -m des_ecb,md2,rsa + +In each subdirectory, the plaintext, key, and iv are ascii, and treated +as such. The ciphertext is base64-encoded to avoid the hassle of binary +files. + +To add a test, incremement the value in the numtests file. Create a +plaintext, key, and iv file, such that the name of the file is +incrememted one from the last set of tests. For example, if you are +adding the second test, put your data in files named plaintext1, key1, +and iv1 (ignoring key and iv if they are not needed, of course). Make +sure your key and iv are the correct number of bytes for your cipher (a +trailing \n is okay, but any other trailing bytes will be used!). Once +you have your input data, create output data by running bltest on a +trusted implementation. For example, for a new DES ECB test, run + bltest -E -m des_ecb -i plaintext1 -k key1 -o ciphertext1 -a in the +tests/des_ecb directory. Then run + bltest -T des_ecb from the cmd/bltest directory in the tree of the +implementation you want to test. + +Note that the -a option above is important, it tells bltest to expect +the input to be straight ASCII, and not base64 encoded binary! + +Special cases: + +RC5: +RC5 can take additional parameters, the number of rounds to perform and +the wordsize to use. The number of rounds is between is between 0 and +255, and the wordsize is either is either 16, 32, or 64 bits (at this +time only 32-bit is supported). These parameters are specified in a +paramsN file, where N is an index as above. The format of the file is +"rounds=R\nwordsize=W\n". + +public key modes (RSA and DSA): +Asymmetric key ciphers use keys with special properties, so creating a +key file with "Mozilla!" in it will not get you very far! To create a +public key, run bltest with the plaintext you want to encrypt, using a +trusted implementation. bltest will generate a key and store it in +"tmp.key", rename that file to keyN. For example: + bltest -E -m rsa -i plaintext0 -o ciphertext0 -e 65537 -g 32 -a + mv tmp.key key0 + +[note: specifying a keysize (-g) when using RSA is important!] diff --git a/mozilla/security/nss/cmd/bltest/tests/aes_cbc/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/aes_cbc/ciphertext0 new file mode 100644 index 0000000..040a397 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/aes_cbc/ciphertext0 @@ -0,0 +1 @@ +oJLgOzZ1GiWt3DGo2sPKaA==
diff --git a/mozilla/security/nss/cmd/bltest/tests/aes_cbc/iv0 b/mozilla/security/nss/cmd/bltest/tests/aes_cbc/iv0 new file mode 100644 index 0000000..4e65bc0 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/aes_cbc/iv0 @@ -0,0 +1 @@ +qwertyuiopasdfgh diff --git a/mozilla/security/nss/cmd/bltest/tests/aes_cbc/key0 b/mozilla/security/nss/cmd/bltest/tests/aes_cbc/key0 new file mode 100644 index 0000000..13911cc --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/aes_cbc/key0 @@ -0,0 +1 @@ +fedcba9876543210 diff --git a/mozilla/security/nss/cmd/bltest/tests/aes_cbc/numtests b/mozilla/security/nss/cmd/bltest/tests/aes_cbc/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/aes_cbc/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/aes_cbc/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/aes_cbc/plaintext0 new file mode 100644 index 0000000..8d6a8d5 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/aes_cbc/plaintext0 @@ -0,0 +1 @@ +0123456789abcdef diff --git a/mozilla/security/nss/cmd/bltest/tests/aes_ecb/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/aes_ecb/ciphertext0 new file mode 100644 index 0000000..d6818c1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/aes_ecb/ciphertext0 @@ -0,0 +1 @@ +PVuaCIiaKQhblgFCbVMTTg==
diff --git a/mozilla/security/nss/cmd/bltest/tests/aes_ecb/key0 b/mozilla/security/nss/cmd/bltest/tests/aes_ecb/key0 new file mode 100644 index 0000000..13911cc --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/aes_ecb/key0 @@ -0,0 +1 @@ +fedcba9876543210 diff --git a/mozilla/security/nss/cmd/bltest/tests/aes_ecb/numtests b/mozilla/security/nss/cmd/bltest/tests/aes_ecb/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/aes_ecb/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/aes_ecb/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/aes_ecb/plaintext0 new file mode 100644 index 0000000..8d6a8d5 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/aes_ecb/plaintext0 @@ -0,0 +1 @@ +0123456789abcdef diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/ciphertext0 new file mode 100644 index 0000000..e789595 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/ciphertext0 @@ -0,0 +1 @@ +taydfPlRJe3wf8Td0xJ9Tw==
diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/ciphertext1 b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/ciphertext1 new file mode 100644 index 0000000..7dbd9b0 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/ciphertext1 @@ -0,0 +1 @@ +yoYCZwKnUMcS4ADHxnwObA==
diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/ciphertext2 b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/ciphertext2 new file mode 100644 index 0000000..007a2b0 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/ciphertext2 @@ -0,0 +1 @@ +T+Wn4cs1Sbqrh/XtNd4vzQ==
diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/iv0 b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/iv0 new file mode 100644 index 0000000..4e65bc0 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/iv0 @@ -0,0 +1 @@ +qwertyuiopasdfgh diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/key0 b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/key0 new file mode 100644 index 0000000..13911cc --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/key0 @@ -0,0 +1 @@ +fedcba9876543210 diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/key1 b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/key1 new file mode 100644 index 0000000..a9cb2f1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/key1 @@ -0,0 +1 @@ +fedcba9876543210fedcba98 diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/key2 b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/key2 new file mode 100644 index 0000000..ab55fe2 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/key2 @@ -0,0 +1 @@ +fedcba9876543210fedcba9876543210 diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/numtests b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/numtests new file mode 100644 index 0000000..00750ed --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/numtests @@ -0,0 +1 @@ +3 diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/plaintext0 new file mode 100644 index 0000000..8d6a8d5 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_cbc/plaintext0 @@ -0,0 +1 @@ +0123456789abcdef diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/ciphertext0 new file mode 100644 index 0000000..084ba78 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/ciphertext0 @@ -0,0 +1 @@ +6v0CGxSwow3AhsyhunfdbQ==
diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/ciphertext1 b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/ciphertext1 new file mode 100644 index 0000000..dbd6e5f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/ciphertext1 @@ -0,0 +1 @@ +Nf1GwJiBtZT+VPJp+gBhPA==
diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/ciphertext2 b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/ciphertext2 new file mode 100644 index 0000000..0b278ce --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/ciphertext2 @@ -0,0 +1 @@ +ilB/0K3SI86Oecwh7cruGA==
diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/key0 b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/key0 new file mode 100644 index 0000000..13911cc --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/key0 @@ -0,0 +1 @@ +fedcba9876543210 diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/key1 b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/key1 new file mode 100644 index 0000000..a9cb2f1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/key1 @@ -0,0 +1 @@ +fedcba9876543210fedcba98 diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/key2 b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/key2 new file mode 100644 index 0000000..ab55fe2 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/key2 @@ -0,0 +1 @@ +fedcba9876543210fedcba9876543210 diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/numtests b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/numtests new file mode 100644 index 0000000..00750ed --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/numtests @@ -0,0 +1 @@ +3 diff --git a/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/plaintext0 new file mode 100644 index 0000000..8d6a8d5 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/camellia_ecb/plaintext0 @@ -0,0 +1 @@ +0123456789abcdef diff --git a/mozilla/security/nss/cmd/bltest/tests/des3_cbc/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/des3_cbc/ciphertext0 new file mode 100644 index 0000000..61dae31 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des3_cbc/ciphertext0 @@ -0,0 +1 @@ +KV3MDNGKWOc= diff --git a/mozilla/security/nss/cmd/bltest/tests/des3_cbc/iv0 b/mozilla/security/nss/cmd/bltest/tests/des3_cbc/iv0 new file mode 100644 index 0000000..97b5955 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des3_cbc/iv0 @@ -0,0 +1 @@ +12345678 diff --git a/mozilla/security/nss/cmd/bltest/tests/des3_cbc/key0 b/mozilla/security/nss/cmd/bltest/tests/des3_cbc/key0 new file mode 100644 index 0000000..588efd1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des3_cbc/key0 @@ -0,0 +1 @@ +abcdefghijklmnopqrstuvwx diff --git a/mozilla/security/nss/cmd/bltest/tests/des3_cbc/numtests b/mozilla/security/nss/cmd/bltest/tests/des3_cbc/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des3_cbc/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/des3_cbc/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/des3_cbc/plaintext0 new file mode 100644 index 0000000..5513e43 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des3_cbc/plaintext0 @@ -0,0 +1 @@ +Mozilla! diff --git a/mozilla/security/nss/cmd/bltest/tests/des3_ecb/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/des3_ecb/ciphertext0 new file mode 100644 index 0000000..76dc820 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des3_ecb/ciphertext0 @@ -0,0 +1 @@ +RgckVNh4QcM= diff --git a/mozilla/security/nss/cmd/bltest/tests/des3_ecb/key0 b/mozilla/security/nss/cmd/bltest/tests/des3_ecb/key0 new file mode 100644 index 0000000..588efd1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des3_ecb/key0 @@ -0,0 +1 @@ +abcdefghijklmnopqrstuvwx diff --git a/mozilla/security/nss/cmd/bltest/tests/des3_ecb/numtests b/mozilla/security/nss/cmd/bltest/tests/des3_ecb/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des3_ecb/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/des3_ecb/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/des3_ecb/plaintext0 new file mode 100644 index 0000000..5513e43 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des3_ecb/plaintext0 @@ -0,0 +1 @@ +Mozilla! diff --git a/mozilla/security/nss/cmd/bltest/tests/des_cbc/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/des_cbc/ciphertext0 new file mode 100644 index 0000000..67d2ad1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des_cbc/ciphertext0 @@ -0,0 +1 @@ +Perdg9FMYQ4= diff --git a/mozilla/security/nss/cmd/bltest/tests/des_cbc/iv0 b/mozilla/security/nss/cmd/bltest/tests/des_cbc/iv0 new file mode 100644 index 0000000..97b5955 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des_cbc/iv0 @@ -0,0 +1 @@ +12345678 diff --git a/mozilla/security/nss/cmd/bltest/tests/des_cbc/key0 b/mozilla/security/nss/cmd/bltest/tests/des_cbc/key0 new file mode 100644 index 0000000..65513c1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des_cbc/key0 @@ -0,0 +1 @@ +zyxwvuts diff --git a/mozilla/security/nss/cmd/bltest/tests/des_cbc/numtests b/mozilla/security/nss/cmd/bltest/tests/des_cbc/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des_cbc/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/des_cbc/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/des_cbc/plaintext0 new file mode 100644 index 0000000..5513e43 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des_cbc/plaintext0 @@ -0,0 +1 @@ +Mozilla! diff --git a/mozilla/security/nss/cmd/bltest/tests/des_ecb/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/des_ecb/ciphertext0 new file mode 100644 index 0000000..8be22fa --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des_ecb/ciphertext0 @@ -0,0 +1 @@ +3bNoWzzNiFc= diff --git a/mozilla/security/nss/cmd/bltest/tests/des_ecb/key0 b/mozilla/security/nss/cmd/bltest/tests/des_ecb/key0 new file mode 100644 index 0000000..65513c1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des_ecb/key0 @@ -0,0 +1 @@ +zyxwvuts diff --git a/mozilla/security/nss/cmd/bltest/tests/des_ecb/numtests b/mozilla/security/nss/cmd/bltest/tests/des_ecb/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des_ecb/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/des_ecb/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/des_ecb/plaintext0 new file mode 100644 index 0000000..5513e43 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/des_ecb/plaintext0 @@ -0,0 +1 @@ +Mozilla! diff --git a/mozilla/security/nss/cmd/bltest/tests/dsa/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/dsa/ciphertext0 new file mode 100644 index 0000000..8e71505 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/dsa/ciphertext0 @@ -0,0 +1 @@ +fB0bnKWvjT6X5NIkZ5l/Y/DXZ6QNI6j0iPhR/ZERkfj67xRnTWY1cg== diff --git a/mozilla/security/nss/cmd/bltest/tests/dsa/key0 b/mozilla/security/nss/cmd/bltest/tests/dsa/key0 new file mode 100644 index 0000000..e582eeb --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/dsa/key0 @@ -0,0 +1,6 @@ +AAAAQI3ypJRJInaqPSV1m7BoacvqwNg6+40M98u4Mk8NeILl0HYvxbchDq/C6a2s
+Mqt6rElpPfv4NyTC7Ac27jHIApEAAAAUx3MhjHN+yO6ZO08t7TD0jtrOkV8AAABA
+Ym0CeDnqChNBMWOlW0y1ACmdVSKVbO/LO/8Q85nOLC5xy53l+iS6v1jlt5Uhklyc
+xC6fb0ZLCIzFcq9T5teIAgAAAEAZExhx11sWEqgZ8p140bDXNG96p3u2KoWb/WxW
+ddqdIS06Nu8Wcu9mC4x8JVzA7HSFj7oz9EwGaZYwp2sDDuMzAAAAFCBwsyI9ujcv
+3hwP/HsuO0mLJgYU
diff --git a/mozilla/security/nss/cmd/bltest/tests/dsa/keyseed0 b/mozilla/security/nss/cmd/bltest/tests/dsa/keyseed0 new file mode 100644 index 0000000..6eea359 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/dsa/keyseed0 @@ -0,0 +1 @@ +AAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/mozilla/security/nss/cmd/bltest/tests/dsa/numtests b/mozilla/security/nss/cmd/bltest/tests/dsa/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/dsa/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/dsa/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/dsa/plaintext0 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/dsa/plaintext0 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/dsa/pqg0 b/mozilla/security/nss/cmd/bltest/tests/dsa/pqg0 new file mode 100644 index 0000000..f16326c --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/dsa/pqg0 @@ -0,0 +1,4 @@ +AAAAQI3ypJRJInaqPSV1m7BoacvqwNg6+40M98u4Mk8NeILl0HYvxbchDq/C6a2s
+Mqt6rElpPfv4NyTC7Ac27jHIApEAAAAUx3MhjHN+yO6ZO08t7TD0jtrOkV8AAABA
+Ym0CeDnqChNBMWOlW0y1ACmdVSKVbO/LO/8Q85nOLC5xy53l+iS6v1jlt5Uhklyc
+xC6fb0ZLCIzFcq9T5teIAg==
diff --git a/mozilla/security/nss/cmd/bltest/tests/dsa/sigseed0 b/mozilla/security/nss/cmd/bltest/tests/dsa/sigseed0 new file mode 100644 index 0000000..05d7fd2 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/dsa/sigseed0 @@ -0,0 +1 @@ +aHpm2QZI+ZOGfhIfTd+d2wEgVYQ=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/README b/mozilla/security/nss/cmd/bltest/tests/ecdsa/README new file mode 100644 index 0000000..764aeec --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/README @@ -0,0 +1,22 @@ +0 secp160k1 +1 secp160r1 +2 secp160r2 +3 nistk163 +4 sect163r1 +5 nistb163 +6 secp192k1 +7 nistp192 +8 secp224k1 +9 nistp224 +10 nistk233 +11 nistb233 +12 nistp256 +13 nistk283 +14 nistb283 +15 nistp384 +16 nistk409 +17 nistb409 +18 nistk571 +19 nistb571 +# the following tests are not yet implemented +#20 nistp521 diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext0 new file mode 100644 index 0000000..14d8e0e --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext0 @@ -0,0 +1 @@ +GoWqve3YezF7HOABQjioFL/3oq32oM9pHsGTQTJE7aFE62nItVqAdg==
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext1 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext1 new file mode 100644 index 0000000..4484aae --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext1 @@ -0,0 +1 @@ +PM6xHbiwP6Xcb44mg7BHtaJvd8PkxgvHAB1sh2cF0so3naFf0Tj6vQ==
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext10 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext10 new file mode 100644 index 0000000..a956d53 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext10 @@ -0,0 +1,2 @@ +AF3bbyED08NTrUgKmag9HiuUbaW0skXA/Bp9RPjRAD6M0rp3nvLDKozI940jxPP1
+nWpHF7VcyCVzJeV6
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext11 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext11 new file mode 100644 index 0000000..8cc2c26 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext11 @@ -0,0 +1,2 @@ +AOLrxy4FWd29ToUjOwLs6GyQ+dYZN6NkZ8oVO6dsAEXt55ePlCWZbOtmk6v9PrNG
+JOsY/MHnGhDeAGRl
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext12 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext12 new file mode 100644 index 0000000..5a05a78 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext12 @@ -0,0 +1,2 @@ +aQHMte9cFByD9Ff3rZOPOtPI75luPoxemmgjXIgh/9jEeoTdDk8xuAYQUkayCfs+
+DpDaGnOLkfAyZ8GcuaCujg==
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext13 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext13 new file mode 100644 index 0000000..690c00a --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext13 @@ -0,0 +1,2 @@ +AaeVCRJQPbpTqa1+zLd/8xAbkz3KKTr0dlS4tuGC8hc9j5esAeEv+7IklbA3v5Jz
+jC+nJy4p81iNO5E9H8nfGGckfQSiFzHG
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext14 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext14 new file mode 100644 index 0000000..fe527c6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext14 @@ -0,0 +1,2 @@ +AgU0N7zJPg/1UxmCWD5Z+DqDqkRKjy4heFgayCyopb/u4XErAZArgsjashAxzMKC
+PSDJasPT90T5Va8sNtjXtSpHWxc2roV9
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext15 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext15 new file mode 100644 index 0000000..d109094 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext15 @@ -0,0 +1,2 @@ +NXo8is+7lAoOwWGt7+GBbT/UX8LGs8TXEHBI+tX9311pJ4J3pfBYobgN0ZK6ZBtp
+dS6PkrPaQp0S9nrfTOS5uAH95eD1eymRfCbOnjTUKzLuIn53V17vRjdcDtLzrhzX
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext16 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext16 new file mode 100644 index 0000000..d5fe144 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext16 @@ -0,0 +1,3 @@ +ADhxjBz/ACTy4GJlL0tYZpyNpC4DsXND9lJuU7x9N7g6gkpJyBPw3vBYU1olw6PH
+dnegpgAm4Gh6MCsZB4KBcLwl1wjt4B3p2eqEqDYn5fiie5f4XuRomvI92jR5Sb+I
+nBLCHIppt/Q=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext17 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext17 new file mode 100644 index 0000000..486bf66 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext17 @@ -0,0 +1,3 @@ +AGhHQ6kfdZRgu1svQTXEIewvFVglnUy6ANPumyUbM14AEfRkCUNa1uzvhV1sbWYj
+qT3egQCA9MTjThDNJeDOvvL6hVVOryUv4+C3RtkpQGCtdml+CSsjVTej8h9JbMds
+Dme40b2G6fE=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext18 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext18 new file mode 100644 index 0000000..7eeef38 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext18 @@ -0,0 +1,3 @@ +AGBuqk48tufy0bKEWpu+xEHsmi+6KCfdwOSRwLDnpVetGe9AWknHDzeTSwe0QxcE
+RsEkUZGDpxfzUlCLSSSU+ErrYY/uyLV2AJTb3prB6A2YNwdmFGeRbDoxeOu7FuQA
+3gxBQhR+TGMuskeM+BdHFmFrwvTTdHCGzjTBa5S8mbgEJTfeik/it28T/9i+duZ8
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext19 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext19 new file mode 100644 index 0000000..ef8e5f3 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext19 @@ -0,0 +1,3 @@ +AaiotJfCiWU1d2LFe+t0CcWHDSF7EOlApWYJ+RNRSq8TbkXJIzi6abbb7BovtRwf
+i/COYwjS7OnkFQ6x5Pdrb7OZ0dTAdDRXAKtXWSKR20Y4fhnx/HUxisFwKrsCEQ3O
+uVtwDG8rh5V8zjBnCEcs5Iy9CsklucibR0PIyglVmW+ZuY42YNebuOC2VUKqHNF7
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext2 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext2 new file mode 100644 index 0000000..a3837a4 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext2 @@ -0,0 +1 @@ +Vli8Hau3xL8oder6ZdM9Y3fMd92jbguiMq6F+9CUjlUQXy5EwAVGeg==
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext20 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext20 new file mode 100644 index 0000000..67c9924 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext20 @@ -0,0 +1,3 @@ +ALAM5hGnex7TvBbSEzDlfv+n5g7aWyRyZsBbl2Y6wW1plSovbq2GcV6w1ZV1Vlot
+70zbqkKyNApvTi3xoD4Ens6pAeLMYDILwaQhnyJZWQv3etbWqUKJZNgfH1IDj03k
+n9hbjYLX3y4bc4CnrhOiv5Ab34s7M8wUYcjC+DbHwhLl/S6N
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext3 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext3 new file mode 100644 index 0000000..e9a4808 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext3 @@ -0,0 +1 @@ +AFohw5TN/dpmqbhp/T4z1Rl1boAUA6r9eEPJbYN0zf+eHZzyvezxqjxU
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext4 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext4 new file mode 100644 index 0000000..57ce239 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext4 @@ -0,0 +1 @@ +AtJdCPXn5yQW34jekhsnsNmaMOeeA3KIVl1d2+7pb6QycUAzYccgwSrp
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext5 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext5 new file mode 100644 index 0000000..e476c80 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext5 @@ -0,0 +1 @@ +AzEg0sOGHwxd0o3cv+o9dsRPOzXMAdpgtI6O0uUmVN2+a5qI5FYQlItz
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext6 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext6 new file mode 100644 index 0000000..bdea717 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext6 @@ -0,0 +1 @@ +5+HDXH/ieN8Bzxd3dfxKZoqbbhsm7jyeqWdemt6Xy0kx+7zwSYsh9Ng5KRdy6wtA
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext7 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext7 new file mode 100644 index 0000000..3273fd9 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext7 @@ -0,0 +1 @@ +WcS9umnUASP0X6lHvkWJwPY37ZVvAMLBERHLjL3Vzg6QVjwcS8kDVortTFei3aTx
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext8 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext8 new file mode 100644 index 0000000..636392e --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext8 @@ -0,0 +1,2 @@ +ItpmPaGAaoe2feXPbh5+EASLGnEzyYbEnwJ+JFNSOQcoY4a/cMV2rn8FYyBsEDiZ
+LPDBU0i2uOg=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext9 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext9 new file mode 100644 index 0000000..0c43fa3 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/ciphertext9 @@ -0,0 +1,2 @@ +QjzCVGRUjulOLqeBqC5xpY0GWomOrmQUCtImY0czn98a/jHrdgsSRKiMHukBUxM1
+TIRGjkV2L+A=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key0 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key0 new file mode 100644 index 0000000..7c6d61b --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key0 @@ -0,0 +1,2 @@ +AAAABwYFK4EEAAkAAAApBPiF0ntSFtn41JULxlA1l/lHE/zUPGJWkCqtdOryS6yD
+WFCoF/IHwHsAAAAUcw+b2b1AJUlmezgu5EjmAGPC0YQ=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key1 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key1 new file mode 100644 index 0000000..049aa1e --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key1 @@ -0,0 +1,2 @@ +AAAABwYFK4EEAAgAAAApBI80VWK9xatmkFRiDTcdeFQ0T9h3h6iVOinMURyWZw0T
+5vZqd8/gvwwAAAAUYOQMjDdtNSL5zY0nVWPWY+UJoqQ=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key10 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key10 new file mode 100644 index 0000000..3e33417 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key10 @@ -0,0 +1,3 @@ +AAAABwYFK4EEABoAAAA9BACmzalMQJBOWV2FoyV0tXSpT07Xajq4bB1SUwSY7QGn
+dgGC3GBqjPs9vEpqfMMQ2M9k3+5oubWnexNFhQAAAB4BRha/6sE7VSHl92ZqCj5p
+LYtBpK23jzfdVWO8SAY=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key11 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key11 new file mode 100644 index 0000000..6111d52 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key11 @@ -0,0 +1,3 @@ +AAAABwYFK4EEABsAAAA9BAD2/x9HSYYVEQ9AU4MivlIKPypJjsm0sTrp8BftlQGv
+KaYrKpZCg/CEw3C2kqvke7HAu+10hafK9asRxQAAAB4AXyFCurtsXhahkyJpkb5J
+LUg3xVL00vviR0KyFZY=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key12 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key12 new file mode 100644 index 0000000..491fdba --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key12 @@ -0,0 +1,3 @@ +AAAACgYIKoZIzj0DAQcAAABBBNGB7n4kH15tKA/SMpetaQVqg6WxIuuUuMQT2tDX
+NN5jKZfaxD47NsTjTr3x3D5t1qRBYuL6VtdgIuxBIHGG9dcAAAAgaGjyZBL+LN3a
+7NkGiHJBfqh7XKNH0AnPF3vFWpostIQ=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key13 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key13 new file mode 100644 index 0000000..fc8057a --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key13 @@ -0,0 +1,3 @@ +AAAABwYFK4EEABAAAABJBAT3klWkt7+1Pr6QGEcvEIZplopwt1alrsJUThDOxvUF
+7KvBpQLVjB+DQTwYQnEREb/WFyRgUBuIbII0+zd/g0fLHE4PQ8SNlAAAACQFPsMX
+mqSVRreUVasUOIZQFB2jnpwCUyoq+xa9SRril5LeOCY=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key14 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key14 new file mode 100644 index 0000000..2e15823 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key14 @@ -0,0 +1,3 @@ +AAAABwYFK4EEABEAAABJBAf/ei/XCrFrMZLBp5BFkKZ3Odn+ZJu7QIAK32Ubuxmi
+xgWTewf2vv+KY5kHwsBYuBXmmnKe9Ak9zGP4Lykvgk5n5J6iUz5ycQAAACQAQHXa
+d29OqGxoDNCl9xETW3tAL/2hfZzstNuOPLm5kj4j1Dc=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key15 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key15 new file mode 100644 index 0000000..a062f1f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key15 @@ -0,0 +1,4 @@ +AAAABwYFK4EEACIAAABhBLWMJG3t4khPYcsl3H492rAqukJ1RqJm27pqpN54rFGG
+r2VDwOfqb9tMninq8IyOh42eaaVOEPXXu4Q/ATWBEfrbTRBjTpzAE2SSPuQma0lM
+q0RSVECCgdBOKIhB0H6VxAAAADA3WPjUaMWCS9E5KbVDrEcf5CV5tCNNWJQkwjsA
+yALMCiXJqRVXwbq42WMuaELMW+g=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key16 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key16 new file mode 100644 index 0000000..d2694ae --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key16 @@ -0,0 +1,4 @@ +AAAABwYFK4EEACQAAABpBADkgknFgTPuirxQxFlqIK+vcARWzlpJR+qmyRyQsBiz
+Nh6Ws036xUKY9M8LxMIWXFNM6aIA2wxKsBF+HHD6oy27EAJSJOGbke/9F9Kv5AiW
+2RXA4mllUaxCNsuQ36PqUdqv4FeXxWTpAAAANAHTZloqhR0V4bfyaeo2hojcvY3T
+NO04ewNryBpsHZ0bhID0EfewYuwQmX00GYNfuV3mJ2w=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key17 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key17 new file mode 100644 index 0000000..30be057 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key17 @@ -0,0 +1,4 @@ +AAAABwYFK4EEACUAAABpBAAEE/bAmqCjO3FLvN93Q/UjDyDp2sj+F//buuf1hZ0K
+1rSOGXMLcBrqVa8R6UJ57F9/Yc0BCTylpJMXjfCr4eDczG4WOQk+5x8kpKQs5Q9U
+V3IolHDiQY/Nhn7o4UFn5/mF71T3qUqwAAAANAH/o7jEl9Bw+Arj9uQ7ZHkoPGgx
+t92UJg1r/lxa7UUd66iJfRI8n8yQH/sw56D1+CweeII=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key18 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key18 new file mode 100644 index 0000000..bbdcb13 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key18 @@ -0,0 +1,5 @@ +AAAABwYFK4EEACYAAACRBAffZTrfwIl0dciO2fui3UhZw6r+jnFh7gyER92gXL7+
+LzPgTHagd1vdQiIX4K8Dv76KN0BldiFuX5odP7qC26MUaiURDdWT0AWcPmumSSBH
+NXZYLLx5hQjW3BTNwV7v5bmUjezfgtuOCC30dQGs2GMgExAmiWRjTkiPrHg1SFKF
+3RklauOyMWauaVpEzh3c+wAAAEgAZvLs4/Rx7tS+QGH92fGGIxPWPbVYOpDKwabY
+poV2i1BD5Fxvw+eHlvxVOLmRPqRCPTfOLwAeNbHyt17U/BVZ8+svTChlzuA=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key19 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key19 new file mode 100644 index 0000000..31b4071 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key19 @@ -0,0 +1,5 @@ +AAAABwYFK4EEACcAAACRBASpPvOfQVqiMD+cBL/nulFit5pk/5beJ6/KpeIltg4s
+6/s7PPggJA59BP7RJwak6rgY3PsRqXVPjyM/1UkUfRUR2BJgOfNTkQe9WF7Y5zXy
+TM76cWhOP+sLSoUcscy/HTLCpHqRLLvWZPDzgjrfJqSlydMEDZjWsJRVPk9IfeQ/
+amGiWOhJIQd/bSrAazZn6AAAAEgFz1qZzjHuhuP1boJ7gzndJhQslx1efbESxHSc
+wbOpeBpw2MsCAwjtgo3Y8pviFIC8+5MStkFjE8uHQ0ngXc02wm3G0xj8XGQ=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key2 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key2 new file mode 100644 index 0000000..f4ba6f2 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key2 @@ -0,0 +1,2 @@ +AAAABwYFK4EEAB4AAAApBGouC+vgvmItzsLO4hXn+AXi3skEE+M19o/QHLfjibbA
+p7av8F4tcGgAAAAUmpQDUgnIkiXPBs0moD4jEmJHato=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key20 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key20 new file mode 100644 index 0000000..c4da348 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key20 @@ -0,0 +1,5 @@ +AAAABwYFK4EEACMAAACFBAHLMSpMFVyG6mXE7SZ5O5Bwv4d8/QiAB3BzpXkyrU1W
+jJ9O9uOYTXM+cFtF5v56+LsI4yGkaAl9+RF6lFPjrhpIswCmBmEqMBgZpjoz38my
+nLHBI9MaFF8AHkRQwD3LJLo4eSZHOVkdIvDYLwicdlgr0zD3Nf76/HB1+0DkBGqE
+MyG22gAAAEIAFah7z179UbqqdH68pzdZsP1ChXjtYZ11rBM0+HP7yLirxH3ahKTt
+DjsY19GEjz4gKsaLfLiQ1/Dp+VKVLcBKpk0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key3 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key3 new file mode 100644 index 0000000..689e06b --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key3 @@ -0,0 +1,2 @@ +AAAABwYFK4EEAAEAAAArBAe4qW9DTVGRVIYYznwJZbn8mWXLugA2A+Mv112Bu+y7
+gxI8E4/fEdLTsQAAABUGEQDNcbxi0JhwALA8FCCxvmWYM3E=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key4 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key4 new file mode 100644 index 0000000..90ecb72 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key4 @@ -0,0 +1,2 @@ +AAAABwYFK4EEAAIAAAArBAXw45Pc59l1QWmAB1W6M30lyFzQmAH/0FIFKYgEOYIa
+dnEXMwKNwaRdsQAAABUCErj052f+Rth5OxAm376LOAQyvBY=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key5 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key5 new file mode 100644 index 0000000..b9d221f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key5 @@ -0,0 +1,2 @@ +AAAABwYFK4EEAA8AAAArBAFhm71N2wsUOYCwDNr/6rFvNX1okAbki1SNlHq2TQDO
+Bktd1M0jlApWVQAAABUCILsraWg3Qi5nBsXQ1pGmZk0YuSA=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key6 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key6 new file mode 100644 index 0000000..92fb463 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key6 @@ -0,0 +1,2 @@ +AAAABwYFK4EEAB8AAAAxBHOYACoc9XsLk5n8NZZKV2U9CDoMj/VRDvqbf+myloR7
+uBfVNm+uVN33Sa65phAfXQAAABitxs6KZtkqU4tglcdQ1Rmk2U74vjYP0JM=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key7 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key7 new file mode 100644 index 0000000..83fced1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key7 @@ -0,0 +1,2 @@ +AAAACgYIKoZIzj0DAQEAAAAxBOyOI+rIs3x+jsChxQqSVblnoZGqhIM1WX0FMfw+
+D8Dz6Y25iPcAQFpIAWh29FxnrgAAABh+uEQYXwMB783sULxE6PEd1t/MNZ9HSHI=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key8 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key8 new file mode 100644 index 0000000..cc7c610 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key8 @@ -0,0 +1,3 @@ +AAAABwYFK4EEACAAAAA5BKQnZoj4VtlPqrJ5dekM4haG+7PjfgO4wNNIqD7JnrKI
+gTUd+oUQ41d517xCObyBaHNzdVPty9DvAAAAHIrG9+FE+OJV5UV2l/op7PCDPI4G
+qkpgzPIwe7U=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/key9 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key9 new file mode 100644 index 0000000..ab8f43b --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/key9 @@ -0,0 +1,3 @@ +AAAABwYFK4EEACEAAAA5BGCNDWldzQCbI83PMR96tqR6JnIUpvfIO8l6hIf/QfMc
+rx2BbrSLoy6EJmP++Jyw5yNyaoVaNYl6AAAAHDnjgcUSIshTSLuejnSsvtvU363b
+1NJv4ULUbIs=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/numtests b/mozilla/security/nss/cmd/bltest/tests/ecdsa/numtests new file mode 100644 index 0000000..aabe6ec --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/numtests @@ -0,0 +1 @@ +21 diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext0 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext0 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext1 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext1 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext1 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext10 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext10 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext10 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext11 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext11 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext11 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext12 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext12 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext12 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext13 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext13 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext13 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext14 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext14 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext14 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext15 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext15 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext15 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext16 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext16 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext16 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext17 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext17 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext17 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext18 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext18 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext18 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext19 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext19 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext19 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext2 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext2 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext2 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext20 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext20 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext20 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext3 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext3 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext3 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext4 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext4 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext4 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext5 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext5 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext5 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext6 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext6 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext6 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext7 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext7 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext7 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext8 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext8 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext8 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext9 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext9 new file mode 100644 index 0000000..48fbdb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/plaintext9 @@ -0,0 +1 @@ +qZk+NkcGgWq6PiVxeFDCbJzQ2J0=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed0 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed0 new file mode 100644 index 0000000..05d7fd2 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed0 @@ -0,0 +1 @@ +aHpm2QZI+ZOGfhIfTd+d2wEgVYQ=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed1 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed1 new file mode 100644 index 0000000..05d7fd2 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed1 @@ -0,0 +1 @@ +aHpm2QZI+ZOGfhIfTd+d2wEgVYQ=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed10 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed10 new file mode 100644 index 0000000..6983e5f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed10 @@ -0,0 +1 @@ +fjIzMWJpdHNPZlRleHQwMTAyMDMwNDA1MDYwNzA=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed11 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed11 new file mode 100644 index 0000000..6983e5f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed11 @@ -0,0 +1 @@ +fjIzMWJpdHNPZlRleHQwMTAyMDMwNDA1MDYwNzA=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed12 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed12 new file mode 100644 index 0000000..92aa40c --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed12 @@ -0,0 +1 @@ +/jI1NmJpdHNPZlRleHQwMTAyMDMwNDA1MDYwNzA4MDk=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed13 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed13 new file mode 100644 index 0000000..4ac0765 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed13 @@ -0,0 +1 @@ +ATI4MWJpdHNPZlRleHQwMTAyMDMwNDA1MDYwNzA4MDkwYTBi
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed14 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed14 new file mode 100644 index 0000000..4ac0765 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed14 @@ -0,0 +1 @@ +ATI4MWJpdHNPZlRleHQwMTAyMDMwNDA1MDYwNzA4MDkwYTBi
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed15 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed15 new file mode 100644 index 0000000..0975230 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed15 @@ -0,0 +1 @@ +/jM4NGJpdHNPZlRleHQwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDEx
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed16 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed16 new file mode 100644 index 0000000..36fbf09 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed16 @@ -0,0 +1 @@ +fjQwN2JpdHNPZlRleHQwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIx
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed17 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed17 new file mode 100644 index 0000000..36fbf09 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed17 @@ -0,0 +1 @@ +fjQwN2JpdHNPZlRleHQwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIx
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed18 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed18 new file mode 100644 index 0000000..7be8ce6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed18 @@ -0,0 +1,2 @@ +PjU2NmJpdHNPZlRleHQwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEz
+MTQxNTE2MTcxODE5MWExYjE=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed19 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed19 new file mode 100644 index 0000000..7be8ce6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed19 @@ -0,0 +1,2 @@ +PjU2NmJpdHNPZlRleHQwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEz
+MTQxNTE2MTcxODE5MWExYjE=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed2 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed2 new file mode 100644 index 0000000..05d7fd2 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed2 @@ -0,0 +1 @@ +aHpm2QZI+ZOGfhIfTd+d2wEgVYQ=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed20 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed20 new file mode 100644 index 0000000..f0dddb6 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed20 @@ -0,0 +1,2 @@ +/jUyMGJpdHNPZlRleHQwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEz
+MTQxNTE2MTcxODE=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed3 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed3 new file mode 100644 index 0000000..05d7fd2 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed3 @@ -0,0 +1 @@ +aHpm2QZI+ZOGfhIfTd+d2wEgVYQ=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed4 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed4 new file mode 100644 index 0000000..05d7fd2 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed4 @@ -0,0 +1 @@ +aHpm2QZI+ZOGfhIfTd+d2wEgVYQ=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed5 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed5 new file mode 100644 index 0000000..05d7fd2 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed5 @@ -0,0 +1 @@ +aHpm2QZI+ZOGfhIfTd+d2wEgVYQ=
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed6 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed6 new file mode 100644 index 0000000..a068719 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed6 @@ -0,0 +1 @@ +/jE5MmJpdHNPZlRleHQwMDAwMDAwMDAw
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed7 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed7 new file mode 100644 index 0000000..a068719 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed7 @@ -0,0 +1 @@ +/jE5MmJpdHNPZlRleHQwMDAwMDAwMDAw
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed8 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed8 new file mode 100644 index 0000000..01ae265 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed8 @@ -0,0 +1 @@ +/jIyNGJpdHNPZlRleHQwMDAwMDAwMDAwMDAwMA==
diff --git a/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed9 b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed9 new file mode 100644 index 0000000..01ae265 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/ecdsa/sigseed9 @@ -0,0 +1 @@ +/jIyNGJpdHNPZlRleHQwMDAwMDAwMDAwMDAwMA==
diff --git a/mozilla/security/nss/cmd/bltest/tests/md2/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/md2/ciphertext0 new file mode 100644 index 0000000..22e1fc4 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/md2/ciphertext0 @@ -0,0 +1 @@ +CS/UNcrWhB5Knt7Gf8Tz3Q== diff --git a/mozilla/security/nss/cmd/bltest/tests/md2/numtests b/mozilla/security/nss/cmd/bltest/tests/md2/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/md2/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/md2/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/md2/plaintext0 new file mode 100644 index 0000000..dce2994 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/md2/plaintext0 @@ -0,0 +1 @@ +16-bytes to MD2. diff --git a/mozilla/security/nss/cmd/bltest/tests/md5/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/md5/ciphertext0 new file mode 100644 index 0000000..ea11ee5 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/md5/ciphertext0 @@ -0,0 +1 @@ +XN8lnQuWAiMqmSGfvd8Hdw== diff --git a/mozilla/security/nss/cmd/bltest/tests/md5/numtests b/mozilla/security/nss/cmd/bltest/tests/md5/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/md5/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/md5/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/md5/plaintext0 new file mode 100644 index 0000000..5ae3875 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/md5/plaintext0 @@ -0,0 +1 @@ +63-byte input to MD5 can be a bit tricky, but no problems here. diff --git a/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/ciphertext0 new file mode 100644 index 0000000..d964ef8 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/ciphertext0 @@ -0,0 +1 @@ +3ki6eVsWpY8= diff --git a/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/iv0 b/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/iv0 new file mode 100644 index 0000000..97b5955 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/iv0 @@ -0,0 +1 @@ +12345678 diff --git a/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/key0 b/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/key0 new file mode 100644 index 0000000..65513c1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/key0 @@ -0,0 +1 @@ +zyxwvuts diff --git a/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/numtests b/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/plaintext0 new file mode 100644 index 0000000..5513e43 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc2_cbc/plaintext0 @@ -0,0 +1 @@ +Mozilla! diff --git a/mozilla/security/nss/cmd/bltest/tests/rc2_ecb/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/rc2_ecb/ciphertext0 new file mode 100644 index 0000000..337d307 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc2_ecb/ciphertext0 @@ -0,0 +1 @@ +WT+tc4fANhQ= diff --git a/mozilla/security/nss/cmd/bltest/tests/rc2_ecb/key0 b/mozilla/security/nss/cmd/bltest/tests/rc2_ecb/key0 new file mode 100644 index 0000000..65513c1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc2_ecb/key0 @@ -0,0 +1 @@ +zyxwvuts diff --git a/mozilla/security/nss/cmd/bltest/tests/rc2_ecb/numtests b/mozilla/security/nss/cmd/bltest/tests/rc2_ecb/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc2_ecb/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/rc2_ecb/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/rc2_ecb/plaintext0 new file mode 100644 index 0000000..5513e43 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc2_ecb/plaintext0 @@ -0,0 +1 @@ +Mozilla! diff --git a/mozilla/security/nss/cmd/bltest/tests/rc4/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/rc4/ciphertext0 new file mode 100644 index 0000000..004f134 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc4/ciphertext0 @@ -0,0 +1 @@ +34sTZJtr20k= diff --git a/mozilla/security/nss/cmd/bltest/tests/rc4/ciphertext1 b/mozilla/security/nss/cmd/bltest/tests/rc4/ciphertext1 new file mode 100644 index 0000000..6050da4 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc4/ciphertext1 @@ -0,0 +1 @@ +34sTZJtr20nGP6VxS3BIBxxIYm6QGIa1rehFHn51z9M= diff --git a/mozilla/security/nss/cmd/bltest/tests/rc4/key0 b/mozilla/security/nss/cmd/bltest/tests/rc4/key0 new file mode 100644 index 0000000..65513c1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc4/key0 @@ -0,0 +1 @@ +zyxwvuts diff --git a/mozilla/security/nss/cmd/bltest/tests/rc4/key1 b/mozilla/security/nss/cmd/bltest/tests/rc4/key1 new file mode 100644 index 0000000..65513c1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc4/key1 @@ -0,0 +1 @@ +zyxwvuts diff --git a/mozilla/security/nss/cmd/bltest/tests/rc4/numtests b/mozilla/security/nss/cmd/bltest/tests/rc4/numtests new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc4/numtests @@ -0,0 +1 @@ +2 diff --git a/mozilla/security/nss/cmd/bltest/tests/rc4/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/rc4/plaintext0 new file mode 100644 index 0000000..5513e43 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc4/plaintext0 @@ -0,0 +1 @@ +Mozilla! diff --git a/mozilla/security/nss/cmd/bltest/tests/rc4/plaintext1 b/mozilla/security/nss/cmd/bltest/tests/rc4/plaintext1 new file mode 100644 index 0000000..d41abc7 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc4/plaintext1 @@ -0,0 +1 @@ +Mozilla!Mozilla!Mozilla!Mozilla! diff --git a/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/ciphertext0 new file mode 100644 index 0000000..544713b --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/ciphertext0 @@ -0,0 +1 @@ +qsv4Fn2J6d0= diff --git a/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/iv0 b/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/iv0 new file mode 100644 index 0000000..97b5955 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/iv0 @@ -0,0 +1 @@ +12345678 diff --git a/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/key0 b/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/key0 new file mode 100644 index 0000000..65513c1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/key0 @@ -0,0 +1 @@ +zyxwvuts diff --git a/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/numtests b/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/params0 b/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/params0 new file mode 100644 index 0000000..d68e036 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/params0 @@ -0,0 +1,2 @@ +rounds=10 +wordsize=4 diff --git a/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/plaintext0 new file mode 100644 index 0000000..5513e43 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc5_cbc/plaintext0 @@ -0,0 +1 @@ +Mozilla! diff --git a/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/ciphertext0 new file mode 100644 index 0000000..133777d --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/ciphertext0 @@ -0,0 +1 @@ +4ZKK/1v5Ohc= diff --git a/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/key0 b/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/key0 new file mode 100644 index 0000000..65513c1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/key0 @@ -0,0 +1 @@ +zyxwvuts diff --git a/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/numtests b/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/params0 b/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/params0 new file mode 100644 index 0000000..d68e036 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/params0 @@ -0,0 +1,2 @@ +rounds=10 +wordsize=4 diff --git a/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/plaintext0 new file mode 100644 index 0000000..5513e43 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rc5_ecb/plaintext0 @@ -0,0 +1 @@ +Mozilla! diff --git a/mozilla/security/nss/cmd/bltest/tests/rsa/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/rsa/ciphertext0 new file mode 100644 index 0000000..943ea59 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rsa/ciphertext0 @@ -0,0 +1 @@ +qPVrXv0y3SC5rY44bIi6GE4Aec8uDpHH7/cCg0FU5as= diff --git a/mozilla/security/nss/cmd/bltest/tests/rsa/key0 b/mozilla/security/nss/cmd/bltest/tests/rsa/key0 new file mode 100644 index 0000000..1352fe9 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rsa/key0 @@ -0,0 +1,4 @@ +AAAAAAAAACC5lyu2K2ro8YGnvOCKaL1sFX1HEIblIVbuMXsa8oeFSwAAAAERAAAA
+IBXVjKwFG6LvPG4WOIjBBzmxGNpkQwDs3W5qZcXVzqahAAAAEOEOH/WnhZCJyM39
+oNfhf18AAAAQ0xvmxqXXs3L62xxogUl9lQAAABAaeiHgqkvy4wiQtG1Gkv/tAAAA
+EMaw2TNu6SFdKFXAYluQdjEAAAAQi0u+IlgKCt/hatGAsTrfzQ==
diff --git a/mozilla/security/nss/cmd/bltest/tests/rsa/numtests b/mozilla/security/nss/cmd/bltest/tests/rsa/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rsa/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/rsa/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/rsa/plaintext0 new file mode 100644 index 0000000..d915bc8 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/rsa/plaintext0 @@ -0,0 +1 @@ +512bitsforRSAPublicKeyEncryption diff --git a/mozilla/security/nss/cmd/bltest/tests/seed_cbc/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/seed_cbc/ciphertext0 new file mode 100644 index 0000000..97e970e --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/seed_cbc/ciphertext0 @@ -0,0 +1 @@ +JVdzim3if1YIcpGABasoCQ== diff --git a/mozilla/security/nss/cmd/bltest/tests/seed_cbc/iv0 b/mozilla/security/nss/cmd/bltest/tests/seed_cbc/iv0 new file mode 100644 index 0000000..2b3b076 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/seed_cbc/iv0 @@ -0,0 +1 @@ +1234567890123456 diff --git a/mozilla/security/nss/cmd/bltest/tests/seed_cbc/key0 b/mozilla/security/nss/cmd/bltest/tests/seed_cbc/key0 new file mode 100644 index 0000000..13911cc --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/seed_cbc/key0 @@ -0,0 +1 @@ +fedcba9876543210 diff --git a/mozilla/security/nss/cmd/bltest/tests/seed_cbc/numtests b/mozilla/security/nss/cmd/bltest/tests/seed_cbc/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/seed_cbc/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/seed_cbc/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/seed_cbc/plaintext0 new file mode 100644 index 0000000..8d6a8d5 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/seed_cbc/plaintext0 @@ -0,0 +1 @@ +0123456789abcdef diff --git a/mozilla/security/nss/cmd/bltest/tests/seed_ecb/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/seed_ecb/ciphertext0 new file mode 100644 index 0000000..314ffbd --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/seed_ecb/ciphertext0 @@ -0,0 +1 @@ +GX8KY3uUhAQnL6XbQhXjEw== diff --git a/mozilla/security/nss/cmd/bltest/tests/seed_ecb/iv0 b/mozilla/security/nss/cmd/bltest/tests/seed_ecb/iv0 new file mode 100644 index 0000000..2b3b076 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/seed_ecb/iv0 @@ -0,0 +1 @@ +1234567890123456 diff --git a/mozilla/security/nss/cmd/bltest/tests/seed_ecb/key0 b/mozilla/security/nss/cmd/bltest/tests/seed_ecb/key0 new file mode 100644 index 0000000..13911cc --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/seed_ecb/key0 @@ -0,0 +1 @@ +fedcba9876543210 diff --git a/mozilla/security/nss/cmd/bltest/tests/seed_ecb/numtests b/mozilla/security/nss/cmd/bltest/tests/seed_ecb/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/seed_ecb/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/seed_ecb/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/seed_ecb/plaintext0 new file mode 100644 index 0000000..8d6a8d5 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/seed_ecb/plaintext0 @@ -0,0 +1 @@ +0123456789abcdef diff --git a/mozilla/security/nss/cmd/bltest/tests/sha1/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/sha1/ciphertext0 new file mode 100644 index 0000000..1fe4bd2 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha1/ciphertext0 @@ -0,0 +1 @@ +cDSMAygXMPIJZC5bntZ4ZhecQ9g= diff --git a/mozilla/security/nss/cmd/bltest/tests/sha1/numtests b/mozilla/security/nss/cmd/bltest/tests/sha1/numtests new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha1/numtests @@ -0,0 +1 @@ +1 diff --git a/mozilla/security/nss/cmd/bltest/tests/sha1/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/sha1/plaintext0 new file mode 100644 index 0000000..863e79c --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha1/plaintext0 @@ -0,0 +1 @@ +A cage went in search of a bird. diff --git a/mozilla/security/nss/cmd/bltest/tests/sha256/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/sha256/ciphertext0 new file mode 100644 index 0000000..07e2ff1 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha256/ciphertext0 @@ -0,0 +1 @@ +ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0= diff --git a/mozilla/security/nss/cmd/bltest/tests/sha256/ciphertext1 b/mozilla/security/nss/cmd/bltest/tests/sha256/ciphertext1 new file mode 100644 index 0000000..2ab6e1d --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha256/ciphertext1 @@ -0,0 +1 @@ +JI1qYdIGOLjlwCaTDD5gOaM85Flk/yFn9uzt1BnbBsE= diff --git a/mozilla/security/nss/cmd/bltest/tests/sha256/numtests b/mozilla/security/nss/cmd/bltest/tests/sha256/numtests new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha256/numtests @@ -0,0 +1 @@ +2 diff --git a/mozilla/security/nss/cmd/bltest/tests/sha256/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/sha256/plaintext0 new file mode 100644 index 0000000..8baef1b --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha256/plaintext0 @@ -0,0 +1 @@ +abc diff --git a/mozilla/security/nss/cmd/bltest/tests/sha256/plaintext1 b/mozilla/security/nss/cmd/bltest/tests/sha256/plaintext1 new file mode 100644 index 0000000..afb5dce --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha256/plaintext1 @@ -0,0 +1 @@ +abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq diff --git a/mozilla/security/nss/cmd/bltest/tests/sha384/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/sha384/ciphertext0 new file mode 100644 index 0000000..c94f91e --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha384/ciphertext0 @@ -0,0 +1 @@ +ywB1P0WjXou1oD1pmsZQBycsMqsO3tFjGotgWkP/W+2AhgcroefMI1i67KE0yCWn diff --git a/mozilla/security/nss/cmd/bltest/tests/sha384/ciphertext1 b/mozilla/security/nss/cmd/bltest/tests/sha384/ciphertext1 new file mode 100644 index 0000000..833f06d --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha384/ciphertext1 @@ -0,0 +1 @@ +CTMMM/cRR+g9GS/Hgs0bR1MRGxc7OwXSL6CAhuOw9xL8x8caVX4tuWbD6fqRdGA5 diff --git a/mozilla/security/nss/cmd/bltest/tests/sha384/numtests b/mozilla/security/nss/cmd/bltest/tests/sha384/numtests new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha384/numtests @@ -0,0 +1 @@ +2 diff --git a/mozilla/security/nss/cmd/bltest/tests/sha384/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/sha384/plaintext0 new file mode 100644 index 0000000..8baef1b --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha384/plaintext0 @@ -0,0 +1 @@ +abc diff --git a/mozilla/security/nss/cmd/bltest/tests/sha384/plaintext1 b/mozilla/security/nss/cmd/bltest/tests/sha384/plaintext1 new file mode 100644 index 0000000..94fcc2b --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha384/plaintext1 @@ -0,0 +1 @@ +abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu diff --git a/mozilla/security/nss/cmd/bltest/tests/sha512/ciphertext0 b/mozilla/security/nss/cmd/bltest/tests/sha512/ciphertext0 new file mode 100644 index 0000000..8b626e2 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha512/ciphertext0 @@ -0,0 +1,2 @@ +3a81oZNherrMQXNJriBBMRLm+k6JqX6iCp7u5ktV05ohkpkqJ0/BqDa6PCOj/uu9 +RU1EI2Q86A4qmslPpUyknw== diff --git a/mozilla/security/nss/cmd/bltest/tests/sha512/ciphertext1 b/mozilla/security/nss/cmd/bltest/tests/sha512/ciphertext1 new file mode 100644 index 0000000..c02d175 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha512/ciphertext1 @@ -0,0 +1,2 @@ +jpWbddrjE9qM9PcoFPwUP493ecbrn3+hcpmurbaIkBhQHSieSQD35DMbmd7EtUM6 +x9Mp7rbdJlReluVbh0vpCQ== diff --git a/mozilla/security/nss/cmd/bltest/tests/sha512/numtests b/mozilla/security/nss/cmd/bltest/tests/sha512/numtests new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha512/numtests @@ -0,0 +1 @@ +2 diff --git a/mozilla/security/nss/cmd/bltest/tests/sha512/plaintext0 b/mozilla/security/nss/cmd/bltest/tests/sha512/plaintext0 new file mode 100644 index 0000000..8baef1b --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha512/plaintext0 @@ -0,0 +1 @@ +abc diff --git a/mozilla/security/nss/cmd/bltest/tests/sha512/plaintext1 b/mozilla/security/nss/cmd/bltest/tests/sha512/plaintext1 new file mode 100644 index 0000000..94fcc2b --- /dev/null +++ b/mozilla/security/nss/cmd/bltest/tests/sha512/plaintext1 @@ -0,0 +1 @@ +abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu |