diff --git a/security/nss/cmd/strsclnt/strsclnt.c b/security/nss/cmd/strsclnt/strsclnt.c index ff087c74772f..ae20c02bb964 100644 --- a/security/nss/cmd/strsclnt/strsclnt.c +++ b/security/nss/cmd/strsclnt/strsclnt.c @@ -83,6 +83,27 @@ int ssl2CipherSuites[] = { SSL_EN_RC2_128_CBC_EXPORT40_WITH_MD5, /* D */ SSL_EN_DES_64_CBC_WITH_MD5, /* E */ SSL_EN_DES_192_EDE3_CBC_WITH_MD5, /* F */ +#ifdef NSS_ENABLE_ECC + /* NOTE: Since no new SSL2 ciphersuites are being + * invented, and we've run out of lowercase letters + * for SSL3 ciphers, we use letters G and beyond + * for new SSL3 ciphers. + */ + TLS_ECDH_ECDSA_WITH_NULL_SHA, /* G */ + TLS_ECDH_ECDSA_WITH_RC4_128_SHA, /* H */ + TLS_ECDH_ECDSA_WITH_DES_CBC_SHA, /* I */ + TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, /* J */ + TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, /* K */ + TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, /* L */ + TLS_ECDH_RSA_WITH_NULL_SHA, /* M */ + TLS_ECDH_RSA_WITH_RC4_128_SHA, /* N */ + TLS_ECDH_RSA_WITH_DES_CBC_SHA, /* O */ + TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, /* P */ + TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, /* Q */ + TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, /* R */ + TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, /* S */ + TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, /* T */ +#endif /* NSS_ENABLE_ECC */ 0 }; diff --git a/security/nss/lib/cryptohi/seckey.c b/security/nss/lib/cryptohi/seckey.c index 48a7c27ff5d2..fa80fe3445f3 100644 --- a/security/nss/lib/cryptohi/seckey.c +++ b/security/nss/lib/cryptohi/seckey.c @@ -943,10 +943,14 @@ seckey_supportedECParams(SECItem *encodedParams) oid.data = encodedParams->data + 2; tag = SECOID_FindOIDTag(&oid); - return (((tag >= SEC_OID_ANSIX962_EC_PRIME192V1) - && (tag <= SEC_OID_ANSIX962_EC_PRIME256V1)) || - ((tag >= SEC_OID_SECG_EC_SECP112R1) - && (tag <= SEC_OID_SECG_EC_SECP521R1))); + return (((tag >= SEC_OID_ANSIX962_EC_PRIME192V1) && + (tag <= SEC_OID_ANSIX962_EC_PRIME256V1)) || + ((tag >= SEC_OID_SECG_EC_SECP112R1) && + (tag <= SEC_OID_SECG_EC_SECP521R1)) || + ((tag >= SEC_OID_ANSIX962_EC_C2PNB163V1) && + (tag <= SEC_OID_ANSIX962_EC_C2TNB431R1)) || + ((tag >= SEC_OID_SECG_EC_SECT113R1) && + (tag <= SEC_OID_SECG_EC_SECT571R1))); } static int @@ -1177,39 +1181,116 @@ seckey_ECParams2KeySize(SECItem *encodedParams) oid.data = encodedParams->data + 2; if ((tag = SECOID_FindOIDTag(&oid)) == SEC_OID_UNKNOWN) return 0; - switch (tag) { - case SEC_OID_ANSIX962_EC_PRIME192V1: - case SEC_OID_ANSIX962_EC_PRIME192V2: - case SEC_OID_ANSIX962_EC_PRIME192V3: - return 192; - case SEC_OID_ANSIX962_EC_PRIME239V1: - case SEC_OID_ANSIX962_EC_PRIME239V2: - case SEC_OID_ANSIX962_EC_PRIME239V3: - return 239; - case SEC_OID_ANSIX962_EC_PRIME256V1: - return 256; + switch (tag) { case SEC_OID_SECG_EC_SECP112R1: case SEC_OID_SECG_EC_SECP112R2: - return 112; + return 112; + + case SEC_OID_SECG_EC_SECT113R1: + case SEC_OID_SECG_EC_SECT113R2: + return 113; + case SEC_OID_SECG_EC_SECP128R1: case SEC_OID_SECG_EC_SECP128R2: - return 128; + return 128; + + case SEC_OID_SECG_EC_SECT131R1: + case SEC_OID_SECG_EC_SECT131R2: + return 131; + case SEC_OID_SECG_EC_SECP160K1: case SEC_OID_SECG_EC_SECP160R1: case SEC_OID_SECG_EC_SECP160R2: - return 160; + return 160; + + case SEC_OID_SECG_EC_SECT163K1: + case SEC_OID_SECG_EC_SECT163R1: + case SEC_OID_SECG_EC_SECT163R2: + case SEC_OID_ANSIX962_EC_C2PNB163V1: + case SEC_OID_ANSIX962_EC_C2PNB163V2: + case SEC_OID_ANSIX962_EC_C2PNB163V3: + return 163; + + case SEC_OID_ANSIX962_EC_C2PNB176V1: + return 176; + + case SEC_OID_ANSIX962_EC_C2TNB191V1: + case SEC_OID_ANSIX962_EC_C2TNB191V2: + case SEC_OID_ANSIX962_EC_C2TNB191V3: + case SEC_OID_ANSIX962_EC_C2ONB191V4: + case SEC_OID_ANSIX962_EC_C2ONB191V5: + return 191; + case SEC_OID_SECG_EC_SECP192K1: - return 192; + case SEC_OID_ANSIX962_EC_PRIME192V1: + case SEC_OID_ANSIX962_EC_PRIME192V2: + case SEC_OID_ANSIX962_EC_PRIME192V3: + return 192; + + case SEC_OID_SECG_EC_SECT193R1: + case SEC_OID_SECG_EC_SECT193R2: + return 193; + + case SEC_OID_ANSIX962_EC_C2PNB208W1: + return 208; + case SEC_OID_SECG_EC_SECP224K1: case SEC_OID_SECG_EC_SECP224R1: - return 224; + return 224; + + case SEC_OID_SECG_EC_SECT233K1: + case SEC_OID_SECG_EC_SECT233R1: + return 233; + + case SEC_OID_SECG_EC_SECT239K1: + case SEC_OID_ANSIX962_EC_C2TNB239V1: + case SEC_OID_ANSIX962_EC_C2TNB239V2: + case SEC_OID_ANSIX962_EC_C2TNB239V3: + case SEC_OID_ANSIX962_EC_C2ONB239V4: + case SEC_OID_ANSIX962_EC_C2ONB239V5: + case SEC_OID_ANSIX962_EC_PRIME239V1: + case SEC_OID_ANSIX962_EC_PRIME239V2: + case SEC_OID_ANSIX962_EC_PRIME239V3: + return 239; + case SEC_OID_SECG_EC_SECP256K1: - return 256; + case SEC_OID_ANSIX962_EC_PRIME256V1: + return 256; + + case SEC_OID_ANSIX962_EC_C2PNB272W1: + return 272; + + case SEC_OID_SECG_EC_SECT283K1: + case SEC_OID_SECG_EC_SECT283R1: + return 283; + + case SEC_OID_ANSIX962_EC_C2PNB304W1: + return 304; + + case SEC_OID_ANSIX962_EC_C2TNB359V1: + return 359; + + case SEC_OID_ANSIX962_EC_C2PNB368W1: + return 368; + case SEC_OID_SECG_EC_SECP384R1: - return 384; + return 384; + + case SEC_OID_SECG_EC_SECT409K1: + case SEC_OID_SECG_EC_SECT409R1: + return 409; + + case SEC_OID_ANSIX962_EC_C2TNB431R1: + return 431; + case SEC_OID_SECG_EC_SECP521R1: - return 521; + return 521; + + case SEC_OID_SECG_EC_SECT571K1: + case SEC_OID_SECG_EC_SECT571R1: + return 571; + default: return 0; } diff --git a/security/nss/lib/freebl/blapit.h b/security/nss/lib/freebl/blapit.h index 8516f0c456e1..fe0ebd631aa0 100644 --- a/security/nss/lib/freebl/blapit.h +++ b/security/nss/lib/freebl/blapit.h @@ -36,7 +36,7 @@ * may use your version of this file under either the MPL or the * GPL. * - * $Id: blapit.h,v 1.9 2003/02/27 01:31:12 nelsonb%netscape.com Exp $ + * $Id: blapit.h,v 1.10 2003/03/29 00:18:18 nelsonb%netscape.com Exp $ */ #ifndef _BLAPIT_H_ @@ -286,8 +286,8 @@ struct ECFieldIDStr { int size; /* field size in bits */ ECFieldType type; union { - SECItem prime; /* prime p for (GFp) */ - SECItem m; /* integer m for (GF2m) */ + SECItem prime; /* prime p for (GFp) */ + SECItem poly; /* irreducible binary polynomial for (GF2m) */ } u; int k1; /* first coefficient of pentanomial or * the only coefficient of trinomial diff --git a/security/nss/lib/freebl/ec.c b/security/nss/lib/freebl/ec.c index db1fefd5bcab..bb61738a0fc1 100644 --- a/security/nss/lib/freebl/ec.c +++ b/security/nss/lib/freebl/ec.c @@ -41,6 +41,7 @@ #include "secitem.h" #include "ec.h" #include "GFp_ecl.h" +#include "GF2m_ecl.h" #ifdef NSS_ENABLE_ECC @@ -69,7 +70,7 @@ ec_point_add(ECParams *params, SECItem *pointP, SECItem *pointQ, SECItem *pointR) { mp_int Px, Py, Qx, Qy, Rx, Ry; - mp_int prime, a; + mp_int irreducible, a; SECStatus rv = SECFailure; mp_err err = MP_OKAY; int len; @@ -109,7 +110,7 @@ ec_point_add(ECParams *params, SECItem *pointP, MP_DIGITS(&Qy) = 0; MP_DIGITS(&Rx) = 0; MP_DIGITS(&Ry) = 0; - MP_DIGITS(&prime) = 0; + MP_DIGITS(&irreducible) = 0; MP_DIGITS(&a) = 0; CHECK_MPI_OK( mp_init(&Px) ); CHECK_MPI_OK( mp_init(&Py) ); @@ -117,7 +118,7 @@ ec_point_add(ECParams *params, SECItem *pointP, CHECK_MPI_OK( mp_init(&Qy) ); CHECK_MPI_OK( mp_init(&Rx) ); CHECK_MPI_OK( mp_init(&Ry) ); - CHECK_MPI_OK( mp_init(&prime) ); + CHECK_MPI_OK( mp_init(&irreducible) ); CHECK_MPI_OK( mp_init(&a) ); /* Initialize Px and Py */ @@ -132,14 +133,21 @@ ec_point_add(ECParams *params, SECItem *pointP, CHECK_MPI_OK( mp_read_unsigned_octets(&Qy, pointQ->data + 1 + len, (mp_size) len) ); - /* Set up the prime and curve coefficient */ - SECITEM_TO_MPINT( params->fieldID.u.prime, &prime ); + /* Set up the curve coefficient */ SECITEM_TO_MPINT( params->curve.a, &a ); /* Compute R = P + Q */ - if (GFp_ec_pt_add(&prime, &a, &Px, &Py, &Qx, &Qy, + if (params->fieldID.type == ec_field_GFp) { + SECITEM_TO_MPINT( params->fieldID.u.prime, &irreducible ); + if (GFp_ec_pt_add(&irreducible, &a, &Px, &Py, &Qx, &Qy, &Rx, &Ry) != SECSuccess) goto cleanup; + } else { + SECITEM_TO_MPINT( params->fieldID.u.poly, &irreducible ); + if (GF2m_ec_pt_add(&irreducible, &a, &Px, &Py, &Qx, &Qy, &Rx, &Ry) + != SECSuccess) + goto cleanup; + } /* Construct the SECItem representation of the result */ pointR->data[0] = EC_POINT_FORM_UNCOMPRESSED; @@ -163,7 +171,7 @@ cleanup: mp_clear(&Qy); mp_clear(&Rx); mp_clear(&Ry); - mp_clear(&prime); + mp_clear(&irreducible); mp_clear(&a); if (err) { MP_TO_SEC_ERROR(err); @@ -182,7 +190,7 @@ ec_point_mul(ECParams *params, mp_int *k, SECItem *pointP, SECItem *pointQ) { mp_int Px, Py, Qx, Qy; - mp_int prime, a, b; + mp_int irreducible, a, b; SECStatus rv = SECFailure; mp_err err = MP_OKAY; int len; @@ -209,8 +217,7 @@ ec_point_mul(ECParams *params, mp_int *k, /* NOTE: We only support prime field curves for now */ len = (params->fieldID.size + 7) >> 3; - if ((params->fieldID.type != ec_field_GFp) || - (pointP->data[0] != EC_POINT_FORM_UNCOMPRESSED) || + if ((pointP->data[0] != EC_POINT_FORM_UNCOMPRESSED) || (pointP->len != (2 * len + 1))) { return SECFailure; }; @@ -219,33 +226,40 @@ ec_point_mul(ECParams *params, mp_int *k, MP_DIGITS(&Py) = 0; MP_DIGITS(&Qx) = 0; MP_DIGITS(&Qy) = 0; - MP_DIGITS(&prime) = 0; + MP_DIGITS(&irreducible) = 0; MP_DIGITS(&a) = 0; MP_DIGITS(&b) = 0; CHECK_MPI_OK( mp_init(&Px) ); CHECK_MPI_OK( mp_init(&Py) ); CHECK_MPI_OK( mp_init(&Qx) ); CHECK_MPI_OK( mp_init(&Qy) ); - CHECK_MPI_OK( mp_init(&prime) ); + CHECK_MPI_OK( mp_init(&irreducible) ); CHECK_MPI_OK( mp_init(&a) ); CHECK_MPI_OK( mp_init(&b) ); - /* Initialize Px and Py */ CHECK_MPI_OK( mp_read_unsigned_octets(&Px, pointP->data + 1, (mp_size) len) ); CHECK_MPI_OK( mp_read_unsigned_octets(&Py, pointP->data + 1 + len, (mp_size) len) ); - /* Set up mp_ints containing the prime and curve coefficients */ - SECITEM_TO_MPINT( params->fieldID.u.prime, &prime ); + /* Set up mp_ints containing the curve coefficients */ SECITEM_TO_MPINT( params->curve.a, &a ); SECITEM_TO_MPINT( params->curve.b, &b ); /* Compute Q = k * P */ - if (GFp_ec_pt_mul(&prime, &a, &b, &Px, &Py, k, - &Qx, &Qy) != SECSuccess) + if (params->fieldID.type == ec_field_GFp) { + SECITEM_TO_MPINT( params->fieldID.u.prime, &irreducible ); + if (GFp_ec_pt_mul(&irreducible, &a, &b, &Px, &Py, k, &Qx, &Qy) + != SECSuccess) goto cleanup; + } else { + SECITEM_TO_MPINT( params->fieldID.u.poly, &irreducible ); + if (GF2m_ec_pt_mul(&irreducible, &a, &b, &Px, &Py, k, &Qx, &Qy) + != SECSuccess) { + goto cleanup; + } + } /* Construct the SECItem representation of point Q */ pointQ->data[0] = EC_POINT_FORM_UNCOMPRESSED; @@ -253,6 +267,7 @@ ec_point_mul(ECParams *params, mp_int *k, (mp_size) len) ); CHECK_MPI_OK( mp_to_fixlen_octets(&Qy, pointQ->data + 1 + len, (mp_size) len) ); + rv = SECSuccess; #if EC_DEBUG @@ -267,7 +282,7 @@ cleanup: mp_clear(&Py); mp_clear(&Qx); mp_clear(&Qy); - mp_clear(&prime); + mp_clear(&irreducible); mp_clear(&a); mp_clear(&b); if (err) { @@ -328,8 +343,13 @@ EC_NewKeyFromSeed(ECParams *ecParams, ECPrivateKey **privKey, key->ecParams.type = ecParams->type; key->ecParams.fieldID.size = ecParams->fieldID.size; key->ecParams.fieldID.type = ecParams->fieldID.type; - CHECK_SEC_OK(SECITEM_CopyItem(arena, &key->ecParams.fieldID.u.prime, - &ecParams->fieldID.u.prime)); + if (ecParams->fieldID.type == ec_field_GFp) { + CHECK_SEC_OK(SECITEM_CopyItem(arena, &key->ecParams.fieldID.u.prime, + &ecParams->fieldID.u.prime)); + } else { + CHECK_SEC_OK(SECITEM_CopyItem(arena, &key->ecParams.fieldID.u.poly, + &ecParams->fieldID.u.poly)); + } key->ecParams.fieldID.k1 = ecParams->fieldID.k1; key->ecParams.fieldID.k2 = ecParams->fieldID.k2; key->ecParams.fieldID.k3 = ecParams->fieldID.k3; @@ -787,7 +807,6 @@ ECDSA_VerifyDigest(ECPublicKey *key, const SECItem *signature, ecParams = &(key->ecParams); len = (ecParams->fieldID.size + 7) >> 3; - printf("len is %d\n", len); if (signature->len < 2*len) { PORT_SetError(SEC_ERROR_INVALID_ARGS); goto cleanup; diff --git a/security/nss/lib/freebl/manifest.mn b/security/nss/lib/freebl/manifest.mn index c68ecb90f304..df7d79798775 100644 --- a/security/nss/lib/freebl/manifest.mn +++ b/security/nss/lib/freebl/manifest.mn @@ -68,8 +68,8 @@ PRIVATE_EXPORTS = \ ec.h \ $(NULL) -MPI_HDRS = mpi-config.h mpi.h mpi-priv.h mplogic.h mpprime.h logtab.h -MPI_SRCS = mpprime.c mpmontg.c mplogic.c mpi.c +MPI_HDRS = mpi-config.h mpi.h mpi-priv.h mplogic.h mpprime.h logtab.h mp_gf2m.h +MPI_SRCS = mpprime.c mpmontg.c mplogic.c mpi.c mp_gf2m.c ifdef MOZILLA_BSAFE_BUILD CSRCS = \ @@ -100,6 +100,7 @@ CSRCS = \ dh.c \ ec.c \ GFp_ecl.c \ + GF2m_ecl.c \ pqg.c \ dsa.c \ rsa.c \ @@ -116,6 +117,7 @@ ALL_HDRS = \ des.h \ ec.h \ GFp_ecl.h \ + GF2m_ecl.h \ loader.h \ rijndael.h \ secmpi.h \ diff --git a/security/nss/lib/freebl/mpi/Makefile b/security/nss/lib/freebl/mpi/Makefile index 3eaf740e3785..7962fd7b4c70 100644 --- a/security/nss/lib/freebl/mpi/Makefile +++ b/security/nss/lib/freebl/mpi/Makefile @@ -37,7 +37,7 @@ ## GPL. ## ## -## $Id: Makefile,v 1.18 2002/09/27 01:23:28 nelsonb%netscape.com Exp $ +## $Id: Makefile,v 1.19 2003/03/29 00:18:22 nelsonb%netscape.com Exp $ ## ## Define CC to be the C compiler you wish to use. The GNU cc @@ -262,7 +262,7 @@ VERS=1.7p6 ## ## This is the list of source files that need to be packed into ## the distribution file -SRCS= mpi.c mpprime.c mplogic.c mpmontg.c mpi-test.c primes.c tests/ \ +SRCS= mpi.c mpprime.c mplogic.c mp_gf2m.c mpmontg.c mpi-test.c primes.c tests/ \ utils/gcd.c utils/invmod.c utils/lap.c \ utils/ptab.pl utils/sieve.c utils/isprime.c\ utils/dec2hex.c utils/hex2dec.c utils/bbs_rand.c \ @@ -274,7 +274,7 @@ SRCS= mpi.c mpprime.c mplogic.c mpmontg.c mpi-test.c primes.c tests/ \ types.pl stats timetest multest ## These are the header files that go into the distribution file -HDRS=mpi.h mpi-config.h utils/mpi.h utils/mpi-config.h mpprime.h mplogic.h \ +HDRS=mpi.h mpi-config.h utils/mpi.h utils/mpi-config.h mpprime.h mplogic.h mp_gf2m.h \ utils/bbs_rand.h tests/mpi.h tests/mpprime.h ## These are the documentation files that go into the distribution file @@ -284,9 +284,9 @@ DOCS=README doc utils/README utils/PRIMES TOOLS=gcd invmod isprime lap dec2hex hex2dec primegen prng \ basecvt fact exptmod pi makeprime identest -LIBOBJS = mpprime.o mpmontg.o mplogic.o mpi.o $(AS_OBJS) +LIBOBJS = mpprime.o mpmontg.o mplogic.o mp_gf2m.o mpi.o $(AS_OBJS) LIBHDRS = mpi-config.h mpi-priv.h mpi.h -APPHDRS = mpi-config.h mpi.h mplogic.h mpprime.h +APPHDRS = mpi-config.h mpi.h mplogic.h mp_gf2m.h mpprime.h help: @ echo "" @@ -320,6 +320,8 @@ mpi.o: mpi.c logtab.h $(LIBHDRS) mplogic.o: mplogic.c mpi-priv.h mplogic.h $(LIBHDRS) +mp_gf2m.o: mp_gf2m.c mpi-priv.h mp_gf2m.h $(LIBHDRS) + mpmontg.o: mpmontg.c mpi-priv.h mplogic.h mpprime.h $(LIBHDRS) mpprime.o: mpprime.c mpi-priv.h mpprime.h mplogic.h primes.c $(LIBHDRS) @@ -354,7 +356,7 @@ mpi.i: mpi.h #--------------------------------------- MPTESTOBJS = mptest1.o mptest2.o mptest3.o mptest3a.o mptest4.o mptest4a.o \ - mptest4b.o mptest6.o mptest7.o mptest8.o mptest9.o + mptest4b.o mptest6.o mptest7.o mptest8.o mptest9.o mptestb.o MPTESTS = $(MPTESTOBJS:.o=) $(MPTESTOBJS): mptest%.o: tests/mptest-%.c $(LIBHDRS) @@ -364,7 +366,7 @@ $(MPTESTS): mptest%: mptest%.o libmpi.a $(CC) $(CFLAGS) -o $@ $^ $(LIBS) tests: mptest1 mptest2 mptest3 mptest3a mptest4 mptest4a mptest4b mptest6 \ - bbsrand + mptestb bbsrand utests: mptest7 mptest8 mptest9 diff --git a/security/nss/lib/softoken/ecdecode.c b/security/nss/lib/softoken/ecdecode.c index d65b018a404e..a981241f70bc 100644 --- a/security/nss/lib/softoken/ecdecode.c +++ b/security/nss/lib/softoken/ecdecode.c @@ -114,7 +114,942 @@ EC_FillParams(PRArenaPool *arena, const SECItem *encodedParams, params->cofactor = 0; params->type = ec_params_named; +#if EC_DEBUG + printf("Curve: %s\n", SECOID_FindOIDTagDescription(tag)); +#endif + switch (tag) { + case SEC_OID_ANSIX962_EC_C2PNB163V1: + /* Populate params for c2pnb163v1 */ + params->fieldID.size = 163; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "08000000000000000000000000000000" \ + "0000000107")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "072546B5435234A422E0789675F432C8" \ + "9435DE5242")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "00C9517D06D5240D3CFF38C74B20B6CD" \ + "4D6F9DD4D9")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "07AF69989546103D79329FCC3D74880F" \ + "33BBE803CB" \ + "01EC23211B5966ADEA1D3F87F7EA5848" \ + "AEF0B7CA9F")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "0400000000000000000001E60FC8821C" \ + "C74DAEAFC1")); + params->cofactor = 2; + break; + + case SEC_OID_ANSIX962_EC_C2PNB163V2: + /* Populate params for c2pnb163v2 */ + params->fieldID.size = 163; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "08000000000000000000000000000000" \ + "0000000107")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "0108B39E77C4B108BED981ED0E890E11" \ + "7C511CF072")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "0667ACEB38AF4E488C407433FFAE4F1C" \ + "811638DF20")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "0024266E4EB5106D0A964D92C4860E26" \ + "71DB9B6CC5" \ + "079F684DDF6684C5CD258B3890021B23" \ + "86DFD19FC5")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "03FFFFFFFFFFFFFFFFFFFDF64DE1151A" \ + "DBB78F10A7")); + params->cofactor = 2; + break; + + case SEC_OID_ANSIX962_EC_C2PNB163V3: + /* Populate params for c2pnb163v3 */ + params->fieldID.size = 163; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "08000000000000000000000000000000" \ + "0000000107")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "07A526C63D3E25A256A007699F5447E3" \ + "2AE456B50E")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "03F7061798EB99E238FD6F1BF95B48FE" \ + "EB4854252B")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "02F9F87B7C574D0BDECF8A22E6524775" \ + "F98CDEBDCB" \ + "05B935590C155E17EA48EB3FF3718B89" \ + "3DF59A05D0")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "03FFFFFFFFFFFFFFFFFFFE1AEE140F11" \ + "0AFF961309")); + params->cofactor = 2; + break; + + case SEC_OID_ANSIX962_EC_C2PNB176V1: + /* Populate params for c2pnb176v1 */ + params->fieldID.size = 176; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "01000000000000000000000000000000" \ + "00080000000007")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "E4E6DB2995065C407D9D39B8D0967B96" \ + "704BA8E9C90B")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "5DDA470ABE6414DE8EC133AE28E9BBD7" \ + "FCEC0AE0FFF2")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "8D16C2866798B600F9F08BB4A8E860F3" \ + "298CE04A5798" \ + "6FA4539C2DADDDD6BAB5167D61B436E1" \ + "D92BB16A562C")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "00010092537397ECA4F6145799D62B0A" \ + "19CE06FE26AD")); + params->cofactor = 0xFF6E; + break; + + case SEC_OID_ANSIX962_EC_C2TNB191V1: + /* Populate params for c2tnb191v1 */ + params->fieldID.size = 191; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "80000000000000000000000000000000" \ + "0000000000000201")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "2866537B676752636A68F56554E12640" \ + "276B649EF7526267")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "2E45EF571F00786F67B0081B9495A3D9" \ + "5462F5DE0AA185EC")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "36B3DAF8A23206F9C4F299D7B21A9C36" \ + "9137F2C84AE1AA0D" \ + "765BE73433B3F95E332932E70EA245CA" \ + "2418EA0EF98018FB")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "40000000000000000000000004A20E90" \ + "C39067C893BBB9A5")); + params->cofactor = 2; + break; + + case SEC_OID_ANSIX962_EC_C2TNB191V2: + /* Populate params for c2tnb191v2 */ + params->fieldID.size = 191; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "80000000000000000000000000000000" \ + "0000000000000201")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "401028774D7777C7B7666D1366EA4320" \ + "71274F89FF01E718")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "0620048D28BCBD03B6249C99182B7C8C" \ + "D19700C362C46A01")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "3809B2B7CC1B28CC5A87926AAD83FD28" \ + "789E81E2C9E3BF10" \ + "17434386626D14F3DBF01760D9213A3E" \ + "1CF37AEC437D668A")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "20000000000000000000000050508CB8" \ + "9F652824E06B8173")); + params->cofactor = 4; + break; + + case SEC_OID_ANSIX962_EC_C2TNB191V3: + /* Populate params for c2tnb191v3 */ + params->fieldID.size = 191; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "80000000000000000000000000000000" \ + "0000000000000201")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "6C01074756099122221056911C77D77E" \ + "77A777E7E7E77FCB")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "71FE1AF926CF847989EFEF8DB459F663" \ + "94D90F32AD3F15E8")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "375D4CE24FDE434489DE8746E7178601" \ + "5009E66E38A926DD" \ + "545A39176196575D985999366E6AD34C" \ + "E0A77CD7127B06BE")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "155555555555555555555555610C0B19" \ + "6812BFB6288A3EA3")); + params->cofactor = 6; + break; + + case SEC_OID_ANSIX962_EC_C2PNB208W1: + /* Populate params for c2pnb208w1 */ + params->fieldID.size = 208; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "01000000000000000000000000000000" \ + "0800000000000000000007")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "00")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "C8619ED45A62E6212E1160349E2BFA84" \ + "4439FAFC2A3FD1638F9E")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "89FDFBE4ABE193DF9559ECF07AC0CE78" \ + "554E2784EB8C1ED1A57A" \ + "0F55B51A06E78E9AC38A035FF520D8B0" \ + "1781BEB1A6BB08617DE3")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "000101BAF95C9723C57B6C21DA2EFF2D" \ + "5ED588BDD5717E212F9D")); + params->cofactor = 0xFE48; + break; + + case SEC_OID_ANSIX962_EC_C2TNB239V1: + /* Populate params for c2tnb239v1 */ + params->fieldID.size = 239; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "80000000000000000000000000000000" \ + "0000000000000000001000000001")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "32010857077C5431123A46B808906756" \ + "F543423E8D27877578125778AC76")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "790408F2EEDAF392B012EDEFB3392F30" \ + "F4327C0CA3F31FC383C422AA8C16")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "57927098FA932E7C0A96D3FD5B706EF7" \ + "E5F5C156E16B7E7C86038552E91D" \ + "61D8EE5077C33FECF6F1A16B268DE469" \ + "C3C7744EA9A971649FC7A9616305")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "2000000000000000000000000000000F" \ + "4D42FFE1492A4993F1CAD666E447")); + params->cofactor = 4; + break; + + case SEC_OID_ANSIX962_EC_C2TNB239V2: + /* Populate params for c2tnb239v2 */ + params->fieldID.size = 239; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "80000000000000000000000000000000" \ + "0000000000000000001000000001")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "4230017757A767FAE42398569B746325" \ + "D45313AF0766266479B75654E65F")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "5037EA654196CFF0CD82B2C14A2FCF2E" \ + "3FF8775285B545722F03EACDB74B")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "28F9D04E900069C8DC47A08534FE76D2" \ + "B900B7D7EF31F5709F200C4CA205" \ + "5667334C45AFF3B5A03BAD9DD75E2C71" \ + "A99362567D5453F7FA6E227EC833")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "1555555555555555555555555555553C" \ + "6F2885259C31E3FCDF154624522D")); + params->cofactor = 6; + break; + + case SEC_OID_ANSIX962_EC_C2TNB239V3: + /* Populate params for c2tnb239v3 */ + params->fieldID.size = 239; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "80000000000000000000000000000000" \ + "0000000000000000001000000001")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "01238774666A67766D6676F778E676B6" \ + "6999176666E687666D8766C66A9F")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "6A941977BA9F6A435199ACFC51067ED5" \ + "87F519C5ECB541B8E44111DE1D40")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "70F6E9D04D289C4E89913CE3530BFDE9" \ + "03977D42B146D539BF1BDE4E9C92" \ + "2E5A0EAF6E5E1305B9004DCE5C0ED7FE" \ + "59A35608F33837C816D80B79F461")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "0CCCCCCCCCCCCCCCCCCCCCCCCCCCCCAC" \ + "4912D2D9DF903EF9888B8A0E4CFF")); + params->cofactor = 0x0A; + break; + + case SEC_OID_ANSIX962_EC_C2PNB272W1: + /* Populate params for c2pnb272w1 */ + params->fieldID.size = 272; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "01000000000000000000000000000000" \ + "00000000000000000000000100000000" \ + "00000B")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "91A091F03B5FBA4AB2CCF49C4EDD220F" \ + "B028712D42BE752B2C40094DBACDB586" \ + "FB20")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "7167EFC92BB2E3CE7C8AAAFF34E12A9C" \ + "557003D7C73A6FAF003F99F6CC8482E5" \ + "40F7")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "6108BABB2CEEBCF787058A056CBE0CFE" \ + "622D7723A289E08A07AE13EF0D10D171" \ + "DD8D" \ + "10C7695716851EEF6BA7F6872E6142FB" \ + "D241B830FF5EFCACECCAB05E02005DDE" \ + "9D23")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "000100FAF51354E0E39E4892DF6E319C" \ + "72C8161603FA45AA7B998A167B8F1E62" \ + "9521")); + params->cofactor = 0xFF06; + break; + + case SEC_OID_ANSIX962_EC_C2PNB304W1: + /* Populate params for c2pnb304w1 */ + params->fieldID.size = 304; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "01000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "00000000000807")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "FD0D693149A118F651E6DCE680208537" \ + "7E5F882D1B510B44160074C128807836" \ + "5A0396C8E681")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "BDDB97E555A50A908E43B01C798EA5DA" \ + "A6788F1EA2794EFCF57166B8C1403960" \ + "1E55827340BE")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "197B07845E9BE2D96ADB0F5F3C7F2CFF" \ + "BD7A3EB8B6FEC35C7FD67F26DDF6285A" \ + "644F740A2614" \ + "E19FBEB76E0DA171517ECF401B50289B" \ + "F014103288527A9B416A105E80260B54" \ + "9FDC1B92C03B")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "000101D556572AABAC800101D556572A" \ + "ABAC8001022D5C91DD173F8FB561DA68" \ + "99164443051D")); + params->cofactor = 0xFE2E; + break; + + case SEC_OID_ANSIX962_EC_C2TNB359V1: + /* Populate params for c2tnb359v1 */ + params->fieldID.size = 359; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "80000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "00000000100000000000000001")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "5667676A654B20754F356EA92017D946" \ + "567C46675556F19556A04616B567D223" \ + "A5E05656FB549016A96656A557")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "2472E2D0197C49363F1FE7F5B6DB075D" \ + "52B6947D135D8CA445805D39BC345626" \ + "089687742B6329E70680231988")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "3C258EF3047767E7EDE0F1FDAA79DAEE" \ + "3841366A132E163ACED4ED2401DF9C6B" \ + "DCDE98E8E707C07A2239B1B097" \ + "53D7E08529547048121E9C95F3791DD8" \ + "04963948F34FAE7BF44EA82365DC7868" \ + "FE57E4AE2DE211305A407104BD")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "01AF286BCA1AF286BCA1AF286BCA1AF2" \ + "86BCA1AF286BC9FB8F6B85C556892C20" \ + "A7EB964FE7719E74F490758D3B")); + params->cofactor = 0x4C; + break; + + case SEC_OID_ANSIX962_EC_C2PNB368W1: + /* Populate params for c2pnb368w1 */ + params->fieldID.size = 368; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "01000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "000000002000000000000000000007")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "E0D2EE25095206F5E2A4F9ED229F1F25" \ + "6E79A0E2B455970D8D0D865BD94778C5" \ + "76D62F0AB7519CCD2A1A906AE30D")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "FC1217D4320A90452C760A58EDCD30C8" \ + "DD069B3C34453837A34ED50CB54917E1" \ + "C2112D84D164F444F8F74786046A")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "1085E2755381DCCCE3C1557AFA10C2F0" \ + "C0C2825646C5B34A394CBCFA8BC16B22" \ + "E7E789E927BE216F02E1FB136A5F" \ + "7B3EB1BDDCBA62D5D8B2059B525797FC" \ + "73822C59059C623A45FF3843CEE8F87C" \ + "D1855ADAA81E2A0750B80FDA2310")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "00010090512DA9AF72B08349D98A5DD4" \ + "C7B0532ECA51CE03E2D10F3B7AC579BD" \ + "87E909AE40A6F131E9CFCE5BD967")); + params->cofactor = 0xFF70; + break; + + case SEC_OID_ANSIX962_EC_C2TNB431R1: + /* Populate params for c2tnb431r1 */ + params->fieldID.size = 431; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "80000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "00000000000001000000000000000000" \ + "000000000001")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "1A827EF00DD6FC0E234CAF046C6A5D8A" \ + "85395B236CC4AD2CF32A0CADBDC9DDF6" \ + "20B0EB9906D0957F6C6FEACD615468DF" \ + "104DE296CD8F")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "10D9B4A3D9047D8B154359ABFB1B7F54" \ + "85B04CEB868237DDC9DEDA982A679A5A" \ + "919B626D4E50A8DD731B107A9962381F" \ + "B5D807BF2618")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "120FC05D3C67A99DE161D2F4092622FE" \ + "CA701BE4F50F4758714E8A87BBF2A658" \ + "EF8C21E7C5EFE965361F6C2999C0C247" \ + "B0DBD70CE6B7" \ + "20D0AF8903A96F8D5FA2C255745D3C45" \ + "1B302C9346D9B7E485E7BCE41F6B591F" \ + "3E8F6ADDCBB0BC4C2F947A7DE1A89B62" \ + "5D6A598B3760")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "03403403403403403403403403403403" \ + "40340340340340340340340323C313FA" \ + "B50589703B5EC68D3587FEC60D161CC1" \ + "49C1AD4A91")); + params->cofactor = 0x2760; + break; + + case SEC_OID_SECG_EC_SECT113R1: + /* Populate params for sect113r1 */ + params->fieldID.size = 113; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "020000000000000000000000000201")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "003088250CA6E7C7FE649CE85820F7")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "00E8BEE4D3E2260744188BE0E9C723")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "009D73616F35F4AB1407D73562C10F" \ + "00A52830277958EE84D1315ED31886")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "0100000000000000D9CCEC8A39E56F")); + params->cofactor = 2; + break; + + case SEC_OID_SECG_EC_SECT113R2: + /* Populate params for sect113r2 */ + params->fieldID.size = 113; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "020000000000000000000000000201")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "00689918DBEC7E5A0DD6DFC0AA55C7")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "0095E9A9EC9B297BD4BF36E059184F")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "01A57A6A7B26CA5EF52FCDB8164797" \ + "00B3ADC94ED1FE674C06E695BABA1D")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "010000000000000108789B2496AF93")); + params->cofactor = 2; + break; + + case SEC_OID_SECG_EC_SECT131R1: + /* Populate params for sect131r1 */ + params->fieldID.size = 131; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "08000000000000000000000000000001" \ + "0D")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "07A11B09A76B562144418FF3FF8C2570" \ + "B8")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "0217C05610884B63B9C6C7291678F9D3" \ + "41")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "0081BAF91FDF9833C40F9C1813436383" \ + "99" \ + "078C6E7EA38C001F73C8134B1B4EF9E1" \ + "50")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "0400000000000000023123953A9464B5" \ + "4D")); + params->cofactor = 2; + break; + + case SEC_OID_SECG_EC_SECT131R2: + /* Populate params for sect131r2 */ + params->fieldID.size = 131; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "08000000000000000000000000000001" \ + "0D")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "03E5A88919D7CAFCBF415F07C2176573" \ + "B2")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "04B8266A46C55657AC734CE38F018F21" \ + "92")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "0356DCD8F2F95031AD652D23951BB366" \ + "A8" \ + "0648F06D867940A5366D9E265DE9EB24" \ + "0F")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "0400000000000000016954A233049BA9" \ + "8F")); + params->cofactor = 2; + break; + + case SEC_OID_SECG_EC_SECT163K1: + /* Populate params for sect163k1 + * (the NIST K-163 curve) + */ + params->fieldID.size = 163; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "08000000000000000000000000000000" \ + "00000000C9")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "01")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "01")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "02FE13C0537BBC11ACAA07D793DE4E6D" \ + "5E5C94EEE8" \ + "0289070FB05D38FF58321F2E800536D5" \ + "38CCDAA3D9")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "04000000000000000000020108A2E0CC" \ + "0D99F8A5EF")); + params->cofactor = 2; + break; + + case SEC_OID_SECG_EC_SECT163R1: + /* Populate params for sect163r1 */ + params->fieldID.size = 163; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "08000000000000000000000000000000" \ + "00000000C9")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "07B6882CAAEFA84F9554FF8428BD88E2" \ + "46D2782AE2")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "0713612DCDDCB40AAB946BDA29CA91F7" \ + "3AF958AFD9")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "0369979697AB43897789566789567F78" \ + "7A7876A654" \ + "00435EDB42EFAFB2989D51FEFCE3C809" \ + "88F41FF883")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "03FFFFFFFFFFFFFFFFFFFF48AAB689C2" \ + "9CA710279B")); + params->cofactor = 2; + break; + + case SEC_OID_SECG_EC_SECT163R2: + /* Populate params for sect163r2 + * (the NIST B-163 curve) + */ + params->fieldID.size = 163; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "08000000000000000000000000000000" \ + "00000000C9")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "01")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "020A601907B8C953CA1481EB10512F78" \ + "744A3205FD")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "03F0EBA16286A2D57EA0991168D49946" \ + "37E8343E36" \ + "00D51FBC6C71A0094FA2CDD545B11C5C" \ + "0C797324F1")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "040000000000000000000292FE77E70C" \ + "12A4234C33")); + params->cofactor = 2; + break; + + case SEC_OID_SECG_EC_SECT193R1: + /* Populate params for sect193r1 */ + params->fieldID.size = 193; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "02000000000000000000000000000000" \ + "000000000000008001")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "0017858FEB7A98975169E171F77B4087" \ + "DE098AC8A911DF7B01")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "00FDFB49BFE6C3A89FACADAA7A1E5BBC" \ + "7CC1C2E5D831478814")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "01F481BC5F0FF84A74AD6CDF6FDEF4BF" \ + "6179625372D8C0C5E1" \ + "0025E399F2903712CCF3EA9E3A1AD17F" \ + "B0B3201B6AF7CE1B05")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "01000000000000000000000000C7F34A" \ + "778F443ACC920EBA49")); + params->cofactor = 2; + break; + + case SEC_OID_SECG_EC_SECT193R2: + /* Populate params for sect193r2 */ + params->fieldID.size = 193; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "02000000000000000000000000000000" \ + "000000000000008001")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "0163F35A5137C2CE3EA6ED8667190B0B" \ + "C43ECD69977702709B")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "00C9BB9E8927D4D64C377E2AB2856A5B" \ + "16E3EFB7F61D4316AE")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "00D9B67D192E0367C803F39E1A7E82CA1" \ + "4A651350AAE617E8F" \ + "01CE94335607C304AC29E7DEFBD9CA01" \ + "F596F927224CDECF6C")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "010000000000000000000000015AAB56" \ + "1B005413CCD4EE99D5")); + params->cofactor = 2; + break; + + case SEC_OID_SECG_EC_SECT233K1: + /* Populate params for sect233k1 + * (the NIST K-233 curve) + */ + params->fieldID.size = 233; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "02000000000000000000000000000000" \ + "0000000004000000000000000001")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "00")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "01")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "017232BA853A7E731AF129F22FF41495" \ + "63A419C26BF50A4C9D6EEFAD6126" \ + "01DB537DECE819B7F70F555A67C427A8" \ + "CD9BF18AEB9B56E0C11056FAE6A3")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "00800000000000000000000000000006" \ + "9D5BB915BCD46EFB1AD5F173ABDF")); + params->cofactor = 4; + break; + + case SEC_OID_SECG_EC_SECT233R1: + /* Populate params for sect233r1 + * (the NIST B-233 curve) + */ + params->fieldID.size = 233; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "02000000000000000000000000000000" \ + "0000000004000000000000000001")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "00000000000000000000000000000000" \ + "0000000000000000000000000001")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "0066647EDE6C332C7F8C0923BB58213B" \ + "333B20E9CE4281FE115F7D8F90AD")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "00FAC9DFCBAC8313BB2139F1BB755FEF" \ + "65BC391F8B36F8F8EB7371FD558B" \ + "01006A08A41903350678E58528BEBF8A" \ + "0BEFF867A7CA36716F7E01F81052")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "01000000000000000000000000000013" \ + "E974E72F8A6922031D2603CFE0D7")); + params->cofactor = 2; + break; + + case SEC_OID_SECG_EC_SECT239K1: + /* Populate params for sect239k1 */ + params->fieldID.size = 239; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "80000000000000000000400000000000" \ + "0000000000000000000000000001")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "00")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "01")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "29A0B6A887A983E9730988A68727A8B2" \ + "D126C44CC2CC7B2A6555193035DC" \ + "76310804F12E549BDB011C103089E735" \ + "10ACB275FC312A5DC6B76553F0CA")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "2000000000000000000000000000005A" \ + "79FEC67CB6E91F1C1DA800E478A5")); + params->cofactor = 4; + break; + + case SEC_OID_SECG_EC_SECT283K1: + /* Populate params for sect283k1 + * (the NIST K-283 curve) + */ + params->fieldID.size = 283; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "08000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "000010A1")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "00")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "01")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "0503213F78CA44883F1A3B8162F188E5" \ + "53CD265F23C1567A16876913B0C2AC24" \ + "58492836" \ + "01CCDA380F1C9E318D90F95D07E5426F" \ + "E87E45C0E8184698E45962364E341161" \ + "77DD2259")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" \ + "FFFFE9AE2ED07577265DFF7F94451E06" \ + "1E163C61")); + params->cofactor = 4; + break; + + case SEC_OID_SECG_EC_SECT283R1: + /* Populate params for sect283r1 + * (the NIST B-283 curve) + */ + params->fieldID.size = 283; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "08000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "000010A1")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "01")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "027B680AC8B8596DA5A4AF8A19A0303F" \ + "CA97FD7645309FA2A581485AF6263E31" \ + "3B79A2F5")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "05F939258DB7DD90E1934F8C70B0DFEC" \ + "2EED25B8557EAC9C80E2E198F8CDBECD" \ + "86B12053" \ + "03676854FE24141CB98FE6D4B20D02B4" \ + "516FF702350EDDB0826779C813F0DF45" \ + "BE8112F4")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" \ + "FFFFEF90399660FC938A90165B042A7C" \ + "EFADB307")); + params->cofactor = 2; + break; + + case SEC_OID_SECG_EC_SECT409K1: + /* Populate params for sect409k1 + * (the NIST K-409 curve) + */ + params->fieldID.size = 409; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "02000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "00000000000000000080000000000000" \ + "00000001")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "00")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "01")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "0060F05F658F49C1AD3AB1890F718421" \ + "0EFD0987E307C84C27ACCFB8F9F67CC2" \ + "C460189EB5AAAA62EE222EB1B35540CF" \ + "E9023746" \ + "01E369050B7C4E42ACBA1DACBF04299C" \ + "3460782F918EA427E6325165E9EA10E3" \ + "DA5F6C42E9C55215AA9CA27A5863EC48" \ + "D8E0286B")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "007FFFFFFFFFFFFFFFFFFFFFFFFFFFFF" \ + "FFFFFFFFFFFFFFFFFFFFFE5F83B2D4EA" \ + "20400EC4557D5ED3E3E7CA5B4B5C83B8" \ + "E01E5FCF")); + params->cofactor = 4; + break; + + case SEC_OID_SECG_EC_SECT409R1: + /* Populate params for sect409r1 + * (the NIST B-409 curve) + */ + params->fieldID.size = 409; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "02000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "00000000000000000080000000000000" \ + "00000001")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "01")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "0021A5C2C8EE9FEB5C4B9A753B7B476B" \ + "7FD6422EF1F3DD674761FA99D6AC27C8" \ + "A9A197B272822F6CD57A55AA4F50AE31" \ + "7B13545F")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "015D4860D088DDB3496B0C6064756260" \ + "441CDE4AF1771D4DB01FFE5B34E59703" \ + "DC255A868A1180515603AEAB60794E54" \ + "BB7996A7" \ + "0061B1CFAB6BE5F32BBFA78324ED106A" \ + "7636B9C5A7BD198D0158AA4F5488D08F" \ + "38514F1FDF4B4F40D2181B3681C364BA" \ + "0273C706")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "01000000000000000000000000000000" \ + "0000000000000000000001E2AAD6A612" \ + "F33307BE5FA47C3C9E052F838164CD37" \ + "D9A21173")); + params->cofactor = 2; + break; + + case SEC_OID_SECG_EC_SECT571K1: + /* Populate params for sect571k1 + * (the NIST K-571 curve) + */ + params->fieldID.size = 571; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "08000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "0000000000000425")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "00")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "01")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "026EB7A859923FBC82189631F8103FE4" \ + "AC9CA2970012D5D46024804801841CA4" \ + "4370958493B205E647DA304DB4CEB08C" \ + "BBD1BA39494776FB988B47174DCA88C7" \ + "E2945283A01C8972" \ + "0349DC807F4FBF374F4AEADE3BCA9531" \ + "4DD58CEC9F307A54FFC61EFC006D8A2C" \ + "9D4979C0AC44AEA74FBEBBB9F772AEDC" \ + "B620B01A7BA7AF1B320430C8591984F6" \ + "01CD4C143EF1C7A3")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "02000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "00000000131850E1F19A63E4B391A8DB" \ + "917F4138B630D84BE5D639381E91DEB4" \ + "5CFE778F637C1001")); + params->cofactor = 4; + break; + + case SEC_OID_SECG_EC_SECT571R1: + /* Populate params for sect571r1 + * (the NIST B-571 curve) + */ + params->fieldID.size = 571; + params->fieldID.type = ec_field_GF2m; + CHECK_OK(hexString2SECItem(params->arena, ¶ms->fieldID.u.poly, + "08000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "00000000000000000000000000000000" \ + "0000000000000425")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.a, + "01")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->curve.b, + "02F40E7E2221F295DE297117B7F3D62F" \ + "5C6A97FFCB8CEFF1CD6BA8CE4A9A18AD" \ + "84FFABBD8EFA59332BE7AD6756A66E29" \ + "4AFD185A78FF12AA520E4DE739BACA0C" \ + "7FFEFF7F2955727A")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->base, + "04" \ + "0303001D34B856296C16C0D40D3CD775" \ + "0A93D1D2955FA80AA5F40FC8DB7B2ABD" \ + "BDE53950F4C0D293CDD711A35B67FB14" \ + "99AE60038614F1394ABFA3B4C850D927" \ + "E1E7769C8EEC2D19" \ + "037BF27342DA639B6DCCFFFEB73D69D7" \ + "8C6C27A6009CBBCA1980F8533921E8A6" \ + "84423E43BAB08A576291AF8F461BB2A8" \ + "B3531D2F0485C19B16E2F1516E23DD3C" \ + "1A4827AF1B8AC15B")); + CHECK_OK(hexString2SECItem(params->arena, ¶ms->order, + "03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" \ + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" \ + "FFFFFFFFE661CE18FF55987308059B18" \ + "6823851EC7DD9CA1161DE93D5174D66E" \ + "8382E9BB2FE84E47")); + params->cofactor = 2; + break; + case SEC_OID_ANSIX962_EC_PRIME192V1: /* Populate params for prime192v1 aka secp192r1 * (the NIST P-192 curve) @@ -617,7 +1552,7 @@ EC_FillParams(PRArenaPool *arena, const SECItem *encodedParams, "6409")); params->cofactor = 1; break; - + default: break; }; diff --git a/security/nss/lib/softoken/pkcs11.c b/security/nss/lib/softoken/pkcs11.c index cd5cc3d2a00c..599b9a5fdb56 100644 --- a/security/nss/lib/softoken/pkcs11.c +++ b/security/nss/lib/softoken/pkcs11.c @@ -236,6 +236,8 @@ struct mechanismList { #define CKF_EC_PNU CKF_EC_FP | CKF_EC_NAMEDCURVE | CKF_EC_UNCOMPRESS +#define CKF_EC_BPNU CKF_EC_F_2M | CKF_EC_PNU + #define CK_MAX 0xffffffff static const struct mechanismList mechanisms[] = { @@ -284,10 +286,10 @@ static const struct mechanismList mechanisms[] = { {CKM_DH_PKCS_DERIVE, {128, 1024, CKF_DERIVE}, PR_TRUE}, #ifdef NSS_ENABLE_ECC /* -------------------- Elliptic Curve Operations --------------------- */ - {CKM_EC_KEY_PAIR_GEN, {112, 571, CKF_GENERATE_KEY_PAIR|CKF_EC_PNU}, PR_TRUE}, - {CKM_ECDH1_DERIVE, {112, 571, CKF_DERIVE|CKF_EC_PNU}, PR_TRUE}, - {CKM_ECDSA, {112, 571, CKF_SN_VR|CKF_EC_PNU}, PR_TRUE}, - {CKM_ECDSA_SHA1, {112, 571, CKF_SN_VR|CKF_EC_PNU}, PR_TRUE}, + {CKM_EC_KEY_PAIR_GEN, {112, 571, CKF_GENERATE_KEY_PAIR|CKF_EC_BPNU}, PR_TRUE}, + {CKM_ECDH1_DERIVE, {112, 571, CKF_DERIVE|CKF_EC_BPNU}, PR_TRUE}, + {CKM_ECDSA, {112, 571, CKF_SN_VR|CKF_EC_BPNU}, PR_TRUE}, + {CKM_ECDSA_SHA1, {112, 571, CKF_SN_VR|CKF_EC_BPNU}, PR_TRUE}, #endif /* NSS_ENABLE_ECC */ /* ------------------------- RC2 Operations --------------------------- */ {CKM_RC2_KEY_GEN, {1, 128, CKF_GENERATE}, PR_TRUE}, diff --git a/security/nss/lib/ssl/ssl3con.c b/security/nss/lib/ssl/ssl3con.c index 1f3edb2cc613..390818be1cee 100644 --- a/security/nss/lib/ssl/ssl3con.c +++ b/security/nss/lib/ssl/ssl3con.c @@ -37,7 +37,7 @@ * may use your version of this file under either the MPL or the * GPL. * - * $Id: ssl3con.c,v 1.52 2003/03/26 00:31:12 wtc%netscape.com Exp $ + * $Id: ssl3con.c,v 1.53 2003/03/29 00:18:26 nelsonb%netscape.com Exp $ */ #include "nssrenam.h" @@ -423,28 +423,27 @@ typedef enum { ec_noName = 0, ec_pastLastName } ECName; -/* XXX Change this when more curves are supported */ -#define supportedCurve(x) (((x) >= ec_secp160k1) && ((x) <= ec_secp521r1)) +#define supportedCurve(x) (((x) > ec_noName) && ((x) < ec_pastLastName)) /* Table containing OID tags for elliptic curves named in the * ECC-TLS IETF draft. */ static const SECOidTag ecName2OIDTag[] = { 0, - 0, /* SEC_OID_SECG_EC_SECT163K1, */ /* 1 */ - 0, /* SEC_OID_SECG_EC_SECT163R1, */ /* 2 */ - 0, /* SEC_OID_SECG_EC_SECT163R2, */ /* 3 */ - 0, /* SEC_OID_SECG_EC_SECT193R1, */ /* 4 */ - 0, /* SEC_OID_SECG_EC_SECT193R2, */ /* 5 */ - 0, /* SEC_OID_SECG_EC_SECT233K1, */ /* 6 */ - 0, /* SEC_OID_SECG_EC_SECT233R1, */ /* 7 */ - 0, /* SEC_OID_SECG_EC_SECT239K1, */ /* 8 */ - 0, /* SEC_OID_SECG_EC_SECT283K1, */ /* 9 */ - 0, /* SEC_OID_SECG_EC_SECT283R1, */ /* 10 */ - 0, /* SEC_OID_SECG_EC_SECT409K1, */ /* 11 */ - 0, /* SEC_OID_SECG_EC_SECT409R1, */ /* 12 */ - 0, /* SEC_OID_SECG_EC_SECT571K1, */ /* 13 */ - 0, /* SEC_OID_SECG_EC_SECT571R1, */ /* 14 */ + SEC_OID_SECG_EC_SECT163K1, /* 1 */ + SEC_OID_SECG_EC_SECT163R1, /* 2 */ + SEC_OID_SECG_EC_SECT163R2, /* 3 */ + SEC_OID_SECG_EC_SECT193R1, /* 4 */ + SEC_OID_SECG_EC_SECT193R2, /* 5 */ + SEC_OID_SECG_EC_SECT233K1, /* 6 */ + SEC_OID_SECG_EC_SECT233R1, /* 7 */ + SEC_OID_SECG_EC_SECT239K1, /* 8 */ + SEC_OID_SECG_EC_SECT283K1, /* 9 */ + SEC_OID_SECG_EC_SECT283R1, /* 10 */ + SEC_OID_SECG_EC_SECT409K1, /* 11 */ + SEC_OID_SECG_EC_SECT409R1, /* 12 */ + SEC_OID_SECG_EC_SECT571K1, /* 13 */ + SEC_OID_SECG_EC_SECT571R1, /* 14 */ SEC_OID_SECG_EC_SECP160K1, /* 15 */ SEC_OID_SECG_EC_SECP160R1, /* 16 */ SEC_OID_SECG_EC_SECP160R2, /* 17 */ diff --git a/security/nss/lib/util/secoid.c b/security/nss/lib/util/secoid.c index 89ae845c1725..e83c04d7a365 100644 --- a/security/nss/lib/util/secoid.c +++ b/security/nss/lib/util/secoid.c @@ -466,6 +466,48 @@ CONST_OID secgECsecp256k1[] = { SECG_OID, 0x0a }; CONST_OID secgECsecp384r1[] = { SECG_OID, 0x22 }; CONST_OID secgECsecp521r1[] = { SECG_OID, 0x23 }; +/* ANSI X9.62 characteristic two curve OIDs */ +CONST_OID ansiX962c2pnb163v1[] = { ANSI_X962_GF2m_OID, 0x01 }; +CONST_OID ansiX962c2pnb163v2[] = { ANSI_X962_GF2m_OID, 0x02 }; +CONST_OID ansiX962c2pnb163v3[] = { ANSI_X962_GF2m_OID, 0x03 }; +CONST_OID ansiX962c2pnb176v1[] = { ANSI_X962_GF2m_OID, 0x04 }; +CONST_OID ansiX962c2tnb191v1[] = { ANSI_X962_GF2m_OID, 0x05 }; +CONST_OID ansiX962c2tnb191v2[] = { ANSI_X962_GF2m_OID, 0x06 }; +CONST_OID ansiX962c2tnb191v3[] = { ANSI_X962_GF2m_OID, 0x07 }; +CONST_OID ansiX962c2onb191v4[] = { ANSI_X962_GF2m_OID, 0x08 }; +CONST_OID ansiX962c2onb191v5[] = { ANSI_X962_GF2m_OID, 0x09 }; +CONST_OID ansiX962c2pnb208w1[] = { ANSI_X962_GF2m_OID, 0x0a }; +CONST_OID ansiX962c2tnb239v1[] = { ANSI_X962_GF2m_OID, 0x0b }; +CONST_OID ansiX962c2tnb239v2[] = { ANSI_X962_GF2m_OID, 0x0c }; +CONST_OID ansiX962c2tnb239v3[] = { ANSI_X962_GF2m_OID, 0x0d }; +CONST_OID ansiX962c2onb239v4[] = { ANSI_X962_GF2m_OID, 0x0e }; +CONST_OID ansiX962c2onb239v5[] = { ANSI_X962_GF2m_OID, 0x0f }; +CONST_OID ansiX962c2pnb272w1[] = { ANSI_X962_GF2m_OID, 0x10 }; +CONST_OID ansiX962c2pnb304w1[] = { ANSI_X962_GF2m_OID, 0x11 }; +CONST_OID ansiX962c2tnb359v1[] = { ANSI_X962_GF2m_OID, 0x12 }; +CONST_OID ansiX962c2pnb368w1[] = { ANSI_X962_GF2m_OID, 0x13 }; +CONST_OID ansiX962c2tnb431r1[] = { ANSI_X962_GF2m_OID, 0x14 }; + +/* SECG characterisitic two curve OIDs */ +CONST_OID secgECsect113r1[] = {SECG_OID, 0x04 }; +CONST_OID secgECsect113r2[] = {SECG_OID, 0x05 }; +CONST_OID secgECsect131r1[] = {SECG_OID, 0x16 }; +CONST_OID secgECsect131r2[] = {SECG_OID, 0x17 }; +CONST_OID secgECsect163k1[] = {SECG_OID, 0x01 }; +CONST_OID secgECsect163r1[] = {SECG_OID, 0x02 }; +CONST_OID secgECsect163r2[] = {SECG_OID, 0x0f }; +CONST_OID secgECsect193r1[] = {SECG_OID, 0x18 }; +CONST_OID secgECsect193r2[] = {SECG_OID, 0x19 }; +CONST_OID secgECsect233k1[] = {SECG_OID, 0x1a }; +CONST_OID secgECsect233r1[] = {SECG_OID, 0x1b }; +CONST_OID secgECsect239k1[] = {SECG_OID, 0x03 }; +CONST_OID secgECsect283k1[] = {SECG_OID, 0x10 }; +CONST_OID secgECsect283r1[] = {SECG_OID, 0x11 }; +CONST_OID secgECsect409k1[] = {SECG_OID, 0x24 }; +CONST_OID secgECsect409r1[] = {SECG_OID, 0x25 }; +CONST_OID secgECsect571k1[] = {SECG_OID, 0x26 }; +CONST_OID secgECsect571r1[] = {SECG_OID, 0x27 }; + #define OI(x) { siDEROID, (unsigned char *)x, sizeof x } #ifndef SECOID_NO_STRINGS #define OD(oid,tag,desc,mech,ext) { OI(oid), tag, desc, mech, ext } @@ -1181,6 +1223,163 @@ const static SECOidData oids[] = { "SECG elliptic curve secp521r1 (aka NIST P-521)", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION ), + + /* ANSI X9.62 named elliptic curves (characteristic two field) */ + OD( ansiX962c2pnb163v1, SEC_OID_ANSIX962_EC_C2PNB163V1, + "ANSI X9.62 elliptic curve c2pnb163v1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2pnb163v2, SEC_OID_ANSIX962_EC_C2PNB163V2, + "ANSI X9.62 elliptic curve c2pnb163v2", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2pnb163v3, SEC_OID_ANSIX962_EC_C2PNB163V3, + "ANSI X9.62 elliptic curve c2pnb163v3", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2pnb176v1, SEC_OID_ANSIX962_EC_C2PNB176V1, + "ANSI X9.62 elliptic curve c2pnb176v1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2tnb191v1, SEC_OID_ANSIX962_EC_C2TNB191V1, + "ANSI X9.62 elliptic curve c2tnb191v1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2tnb191v2, SEC_OID_ANSIX962_EC_C2TNB191V2, + "ANSI X9.62 elliptic curve c2tnb191v2", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2tnb191v3, SEC_OID_ANSIX962_EC_C2TNB191V3, + "ANSI X9.62 elliptic curve c2tnb191v3", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2onb191v4, SEC_OID_ANSIX962_EC_C2ONB191V4, + "ANSI X9.62 elliptic curve c2onb191v4", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2onb191v5, SEC_OID_ANSIX962_EC_C2ONB191V5, + "ANSI X9.62 elliptic curve c2onb191v5", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2pnb208w1, SEC_OID_ANSIX962_EC_C2PNB208W1, + "ANSI X9.62 elliptic curve c2pnb208w1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2tnb239v1, SEC_OID_ANSIX962_EC_C2TNB239V1, + "ANSI X9.62 elliptic curve c2tnb239v1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2tnb239v2, SEC_OID_ANSIX962_EC_C2TNB239V2, + "ANSI X9.62 elliptic curve c2tnb239v2", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2tnb239v3, SEC_OID_ANSIX962_EC_C2TNB239V3, + "ANSI X9.62 elliptic curve c2tnb239v3", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2onb239v4, SEC_OID_ANSIX962_EC_C2ONB239V4, + "ANSI X9.62 elliptic curve c2onb239v4", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2onb239v5, SEC_OID_ANSIX962_EC_C2ONB239V5, + "ANSI X9.62 elliptic curve c2onb239v5", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2pnb272w1, SEC_OID_ANSIX962_EC_C2PNB272W1, + "ANSI X9.62 elliptic curve c2pnb272w1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2pnb304w1, SEC_OID_ANSIX962_EC_C2PNB304W1, + "ANSI X9.62 elliptic curve c2pnb304w1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2tnb359v1, SEC_OID_ANSIX962_EC_C2TNB359V1, + "ANSI X9.62 elliptic curve c2tnb359v1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2pnb368w1, SEC_OID_ANSIX962_EC_C2PNB368W1, + "ANSI X9.62 elliptic curve c2pnb368w1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( ansiX962c2tnb431r1, SEC_OID_ANSIX962_EC_C2TNB431R1, + "ANSI X9.62 elliptic curve c2tnb431r1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + + /* SECG named elliptic curves (characterisitic two field) */ + OD( secgECsect113r1, SEC_OID_SECG_EC_SECT113R1, + "SECG elliptic curve sect113r1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect113r2, SEC_OID_SECG_EC_SECT113R2, + "SECG elliptic curve sect113r2", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect131r1, SEC_OID_SECG_EC_SECT131R1, + "SECG elliptic curve sect131r1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect131r2, SEC_OID_SECG_EC_SECT131R2, + "SECG elliptic curve sect131r2", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect163k1, SEC_OID_SECG_EC_SECT163K1, + "SECG elliptic curve sect163k1 (aka NIST K-163)", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect163r1, SEC_OID_SECG_EC_SECT163R1, + "SECG elliptic curve sect163r1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect163r2, SEC_OID_SECG_EC_SECT163R2, + "SECG elliptic curve sect163r2 (aka NIST B-163)", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect193r1, SEC_OID_SECG_EC_SECT193R1, + "SECG elliptic curve sect193r1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect193r2, SEC_OID_SECG_EC_SECT193R2, + "SECG elliptic curve sect193r2", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect233k1, SEC_OID_SECG_EC_SECT233K1, + "SECG elliptic curve sect233k1 (aka NIST K-233)", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect233r1, SEC_OID_SECG_EC_SECT233R1, + "SECG elliptic curve sect233r1 (aka NIST B-233)", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect239k1, SEC_OID_SECG_EC_SECT239K1, + "SECG elliptic curve sect239k1", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect283k1, SEC_OID_SECG_EC_SECT283K1, + "SECG elliptic curve sect283k1 (aka NIST K-283)", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect283r1, SEC_OID_SECG_EC_SECT283R1, + "SECG elliptic curve sect283r1 (aka NIST B-283)", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect409k1, SEC_OID_SECG_EC_SECT409K1, + "SECG elliptic curve sect409k1 (aka NIST K-409)", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect409r1, SEC_OID_SECG_EC_SECT409R1, + "SECG elliptic curve sect409r1 (aka NIST B-409)", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect571k1, SEC_OID_SECG_EC_SECT571K1, + "SECG elliptic curve sect571k1 (aka NIST K-571)", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( secgECsect571r1, SEC_OID_SECG_EC_SECT571R1, + "SECG elliptic curve sect571r1 (aka NIST B-571)", + CKM_INVALID_MECHANISM, + INVALID_CERT_EXTENSION ), + OD( netscapeAOLScreenname, SEC_OID_NETSCAPE_AOLSCREENNAME, "AOL Screenname", CKM_INVALID_MECHANISM, INVALID_CERT_EXTENSION ), diff --git a/security/nss/lib/util/secoidt.h b/security/nss/lib/util/secoidt.h index f9dcabaffdc7..f19ffb95ceef 100644 --- a/security/nss/lib/util/secoidt.h +++ b/security/nss/lib/util/secoidt.h @@ -40,7 +40,7 @@ /* * secoidt.h - public data structures for ASN.1 OID functions * - * $Id: secoidt.h,v 1.13 2003/03/20 23:53:39 relyea%netscape.com Exp $ + * $Id: secoidt.h,v 1.14 2003/03/29 00:18:30 nelsonb%netscape.com Exp $ */ #include "secitem.h" @@ -341,7 +341,50 @@ typedef enum { /* SEC_OID_SECG_EC_SECP256R1 is SEC_OID_ANSIX962_EC_PRIME256V1 */ SEC_OID_SECG_EC_SECP384R1 = 220, SEC_OID_SECG_EC_SECP521R1 = 221, - SEC_OID_NETSCAPE_AOLSCREENNAME = 222, + + /* ANSI X9.62 named elliptic curves (characteristic two field) */ + SEC_OID_ANSIX962_EC_C2PNB163V1 = 222, + SEC_OID_ANSIX962_EC_C2PNB163V2 = 223, + SEC_OID_ANSIX962_EC_C2PNB163V3 = 224, + SEC_OID_ANSIX962_EC_C2PNB176V1 = 225, + SEC_OID_ANSIX962_EC_C2TNB191V1 = 226, + SEC_OID_ANSIX962_EC_C2TNB191V2 = 227, + SEC_OID_ANSIX962_EC_C2TNB191V3 = 228, + SEC_OID_ANSIX962_EC_C2ONB191V4 = 229, + SEC_OID_ANSIX962_EC_C2ONB191V5 = 230, + SEC_OID_ANSIX962_EC_C2PNB208W1 = 231, + SEC_OID_ANSIX962_EC_C2TNB239V1 = 232, + SEC_OID_ANSIX962_EC_C2TNB239V2 = 233, + SEC_OID_ANSIX962_EC_C2TNB239V3 = 234, + SEC_OID_ANSIX962_EC_C2ONB239V4 = 235, + SEC_OID_ANSIX962_EC_C2ONB239V5 = 236, + SEC_OID_ANSIX962_EC_C2PNB272W1 = 237, + SEC_OID_ANSIX962_EC_C2PNB304W1 = 238, + SEC_OID_ANSIX962_EC_C2TNB359V1 = 239, + SEC_OID_ANSIX962_EC_C2PNB368W1 = 240, + SEC_OID_ANSIX962_EC_C2TNB431R1 = 241, + + /* SECG named elliptic curves (characteristic two field) */ + SEC_OID_SECG_EC_SECT113R1 = 242, + SEC_OID_SECG_EC_SECT113R2 = 243, + SEC_OID_SECG_EC_SECT131R1 = 244, + SEC_OID_SECG_EC_SECT131R2 = 245, + SEC_OID_SECG_EC_SECT163K1 = 246, + SEC_OID_SECG_EC_SECT163R1 = 247, + SEC_OID_SECG_EC_SECT163R2 = 248, + SEC_OID_SECG_EC_SECT193R1 = 249, + SEC_OID_SECG_EC_SECT193R2 = 250, + SEC_OID_SECG_EC_SECT233K1 = 251, + SEC_OID_SECG_EC_SECT233R1 = 252, + SEC_OID_SECG_EC_SECT239K1 = 253, + SEC_OID_SECG_EC_SECT283K1 = 254, + SEC_OID_SECG_EC_SECT283R1 = 255, + SEC_OID_SECG_EC_SECT409K1 = 256, + SEC_OID_SECG_EC_SECT409R1 = 257, + SEC_OID_SECG_EC_SECT571K1 = 258, + SEC_OID_SECG_EC_SECT571R1 = 259, + + SEC_OID_NETSCAPE_AOLSCREENNAME = 260, SEC_OID_TOTAL } SECOidTag;