From ffdae464b18b432ba9f9f851f5277398288df6bb Mon Sep 17 00:00:00 2001 From: sfarestam Date: Tue, 26 May 2026 14:55:38 +0200 Subject: [PATCH] Support explicit EC parameters for Brainpool curves ICAO Doc 9303 Part 12 Section 4.1.6.3 mandates that ECDSA keys in ePassport certificates use explicit EC domain parameters. PR #12916 added explicit-to-named-curve mapping for P-256, P-384, and P-521. This extends the same mapping to brainpoolP256r1, brainpoolP384r1, and brainpoolP512r1, which are already supported as named curves. Domain parameters are from RFC 5639 Section 3. Both with-seed and without-seed variants are supported, matching the NIST curve pattern. This enables loading of ePassport CSCA and Document Signer certificates from 30+ countries (Germany, Sweden, Finland, Switzerland, etc.) that use Brainpool curves with explicit parameters per the ICAO standard. Closes #5659 (Brainpool portion) --- src/rust/cryptography-key-parsing/src/ec.rs | 29 ++++- .../cryptography-x509/src/ec_constants.rs | 123 ++++++++++++++++++ tests/hazmat/primitives/test_ec.py | 12 ++ .../EC/brainpoolP256r1-explicit-no-seed.pem | 10 ++ .../EC/brainpoolP256r1-explicit-seed.pem | 10 ++ .../brainpoolP256r1-pub-explicit-no-seed.pem | 9 ++ .../EC/brainpoolP256r1-pub-explicit-seed.pem | 9 ++ .../EC/brainpoolP384r1-explicit-no-seed.pem | 13 ++ .../EC/brainpoolP384r1-explicit-seed.pem | 13 ++ .../brainpoolP384r1-pub-explicit-no-seed.pem | 12 ++ .../EC/brainpoolP384r1-pub-explicit-seed.pem | 12 ++ .../EC/brainpoolP512r1-explicit-no-seed.pem | 16 +++ .../EC/brainpoolP512r1-explicit-seed.pem | 16 +++ .../brainpoolP512r1-pub-explicit-no-seed.pem | 14 ++ .../EC/brainpoolP512r1-pub-explicit-seed.pem | 14 ++ 15 files changed, 306 insertions(+), 6 deletions(-) create mode 100644 vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-explicit-no-seed.pem create mode 100644 vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-explicit-seed.pem create mode 100644 vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-pub-explicit-no-seed.pem create mode 100644 vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-pub-explicit-seed.pem create mode 100644 vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-explicit-no-seed.pem create mode 100644 vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-explicit-seed.pem create mode 100644 vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-pub-explicit-no-seed.pem create mode 100644 vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-pub-explicit-seed.pem create mode 100644 vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-explicit-no-seed.pem create mode 100644 vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-explicit-seed.pem create mode 100644 vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-pub-explicit-no-seed.pem create mode 100644 vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-pub-explicit-seed.pem diff --git a/src/rust/cryptography-key-parsing/src/ec.rs b/src/rust/cryptography-key-parsing/src/ec.rs index f33844f3b12a..35de01ac81f8 100644 --- a/src/rust/cryptography-key-parsing/src/ec.rs +++ b/src/rust/cryptography-key-parsing/src/ec.rs @@ -68,12 +68,9 @@ pub(crate) fn ec_params_to_group( } EcParameters::SpecifiedCurve(params) => { // We do not support arbitrary explicit curves. Instead we map values - // to named curves. This currently supports only P256, P384, - // and P521. No binary curves are supported. Everything must - // match, except the seed may be omitted on NIST curves since OpenSSL - // has supported a -no_seed option for over 20 years and I don't want to - // figure out whether anyone uses that or not. No one should be using - // explicit curve encoding anyway. Curves were meant to be named! + // to named curves. No binary curves are supported. Everything must + // match, except the seed may be omitted since OpenSSL has supported + // a -no_seed option for over 20 years. Curves were meant to be named! let (curve_nid, oid) = match params { &ec_constants::P256_DOMAIN | &ec_constants::P256_DOMAIN_NO_SEED => ( openssl::nid::Nid::X9_62_PRIME256V1, @@ -87,6 +84,26 @@ pub(crate) fn ec_params_to_group( openssl::nid::Nid::SECP521R1, cryptography_x509::oid::EC_SECP521R1, ), + // NO-COVERAGE-START + #[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))] + &ec_constants::BRAINPOOLP256R1_DOMAIN + | &ec_constants::BRAINPOOLP256R1_DOMAIN_NO_SEED => ( + openssl::nid::Nid::BRAINPOOL_P256R1, + cryptography_x509::oid::EC_BRAINPOOLP256R1, + ), + #[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))] + &ec_constants::BRAINPOOLP384R1_DOMAIN + | &ec_constants::BRAINPOOLP384R1_DOMAIN_NO_SEED => ( + openssl::nid::Nid::BRAINPOOL_P384R1, + cryptography_x509::oid::EC_BRAINPOOLP384R1, + ), + #[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))] + &ec_constants::BRAINPOOLP512R1_DOMAIN + | &ec_constants::BRAINPOOLP512R1_DOMAIN_NO_SEED => ( + openssl::nid::Nid::BRAINPOOL_P512R1, + cryptography_x509::oid::EC_BRAINPOOLP512R1, + ), + // NO-COVERAGE-END _ => return Err(KeyParsingError::ExplicitCurveUnsupported), }; Ok(openssl::ec::EcGroup::from_curve_name(curve_nid) diff --git a/src/rust/cryptography-x509/src/ec_constants.rs b/src/rust/cryptography-x509/src/ec_constants.rs index d3b86fe77fdb..981d825c4a6b 100644 --- a/src/rust/cryptography-x509/src/ec_constants.rs +++ b/src/rust/cryptography-x509/src/ec_constants.rs @@ -123,3 +123,126 @@ pub const P521_DOMAIN_NO_SEED: SpecifiedECDomain<'static> = SpecifiedECDomain { order: P521_ORDER, cofactor: Some(1), }; + +// Brainpool curve domain parameters from RFC 5639, Section 3. +// https://datatracker.ietf.org/doc/html/rfc5639#section-3 + +const BRAINPOOLP256R1_FIELD: FieldID<'static> = FieldID { + field_type: asn1::DefinedByMarker::marker(), + parameters: FieldParameters::PrimeField(asn1::BigUint::new(b"\x00\xa9\xfb\x57\xdb\xa1\xee\xa9\xbc\x3e\x66\x0a\x90\x9d\x83\x8d\x72\x6e\x3b\xf6\x23\xd5\x26\x20\x28\x20\x13\x48\x1d\x1f\x6e\x53\x77").unwrap()), +}; +const BRAINPOOLP256R1_CURVE_A: &[u8; 32] = b"\x7d\x5a\x09\x75\xfc\x2c\x30\x57\xee\xf6\x75\x30\x41\x7a\xff\xe7\xfb\x80\x55\xc1\x26\xdc\x5c\x6c\xe9\x4a\x4b\x44\xf3\x30\xb5\xd9"; +const BRAINPOOLP256R1_CURVE_B: &[u8; 32] = b"\x26\xdc\x5c\x6c\xe9\x4a\x4b\x44\xf3\x30\xb5\xd9\xbb\xd7\x7c\xbf\x95\x84\x16\x29\x5c\xf7\xe1\xce\x6b\xcc\xdc\x18\xff\x8c\x07\xb6"; +const BRAINPOOLP256R1_SEED: asn1::BitString<'static> = asn1::BitString::new( + b"\x75\x7f\x59\x58\x49\x0c\xfd\x47\xd7\xc1\x9b\xb4\x21\x58\xd9\x55\x4f\x7b\x46\xbc", + 0, +) +.unwrap(); +const BRAINPOOLP256R1_UNCOMPRESSED_BASE: &[u8; 65] = b"\x04\x8b\xd2\xae\xb9\xcb\x7e\x57\xcb\x2c\x4b\x48\x2f\xfc\x81\xb7\xaf\xb9\xde\x27\xe1\xe3\xbd\x23\xc2\x3a\x44\x53\xbd\x9a\xce\x32\x62\x54\x7e\xf8\x35\xc3\xda\xc4\xfd\x97\xf8\x46\x1a\x14\x61\x1d\xc9\xc2\x77\x45\x13\x2d\xed\x8e\x54\x5c\x1d\x54\xc7\x2f\x04\x69\x97"; +const BRAINPOOLP256R1_ORDER: asn1::BigUint<'static> = asn1::BigUint::new(b"\x00\xa9\xfb\x57\xdb\xa1\xee\xa9\xbc\x3e\x66\x0a\x90\x9d\x83\x8d\x71\x8c\x39\x7a\xa3\xb5\x61\xa6\xf7\x90\x1e\x0e\x82\x97\x48\x56\xa7").unwrap(); + +pub const BRAINPOOLP256R1_DOMAIN: SpecifiedECDomain<'static> = SpecifiedECDomain { + version: 1, + field_id: BRAINPOOLP256R1_FIELD, + curve: Curve { + a: BRAINPOOLP256R1_CURVE_A, + b: BRAINPOOLP256R1_CURVE_B, + seed: Some(BRAINPOOLP256R1_SEED), + }, + base: BRAINPOOLP256R1_UNCOMPRESSED_BASE, + order: BRAINPOOLP256R1_ORDER, + cofactor: Some(1), +}; + +pub const BRAINPOOLP256R1_DOMAIN_NO_SEED: SpecifiedECDomain<'static> = SpecifiedECDomain { + version: 1, + field_id: BRAINPOOLP256R1_FIELD, + curve: Curve { + a: BRAINPOOLP256R1_CURVE_A, + b: BRAINPOOLP256R1_CURVE_B, + seed: None, + }, + base: BRAINPOOLP256R1_UNCOMPRESSED_BASE, + order: BRAINPOOLP256R1_ORDER, + cofactor: Some(1), +}; + +const BRAINPOOLP384R1_FIELD: FieldID<'static> = FieldID { + field_type: asn1::DefinedByMarker::marker(), + parameters: FieldParameters::PrimeField(asn1::BigUint::new(b"\x00\x8c\xb9\x1e\x82\xa3\x38\x6d\x28\x0f\x5d\x6f\x7e\x50\xe6\x41\xdf\x15\x2f\x71\x09\xed\x54\x56\xb4\x12\xb1\xda\x19\x7f\xb7\x11\x23\xac\xd3\xa7\x29\x90\x1d\x1a\x71\x87\x47\x00\x13\x31\x07\xec\x53").unwrap()), +}; +const BRAINPOOLP384R1_CURVE_A: &[u8; 48] = b"\x7b\xc3\x82\xc6\x3d\x8c\x15\x0c\x3c\x72\x08\x0a\xce\x05\xaf\xa0\xc2\xbe\xa2\x8e\x4f\xb2\x27\x87\x13\x91\x65\xef\xba\x91\xf9\x0f\x8a\xa5\x81\x4a\x50\x3a\xd4\xeb\x04\xa8\xc7\xdd\x22\xce\x28\x26"; +const BRAINPOOLP384R1_CURVE_B: &[u8; 48] = b"\x04\xa8\xc7\xdd\x22\xce\x28\x26\x8b\x39\xb5\x54\x16\xf0\x44\x7c\x2f\xb7\x7d\xe1\x07\xdc\xd2\xa6\x2e\x88\x0e\xa5\x3e\xeb\x62\xd5\x7c\xb4\x39\x02\x95\xdb\xc9\x94\x3a\xb7\x86\x96\xfa\x50\x4c\x11"; +const BRAINPOOLP384R1_SEED: asn1::BitString<'static> = asn1::BitString::new( + b"\xbc\xfb\xfa\x1c\x87\x7c\x56\x28\x4d\xab\x79\xcd\x4c\x2b\x32\x93\xd2\x0e\x9e\x5e", + 0, +) +.unwrap(); +const BRAINPOOLP384R1_UNCOMPRESSED_BASE: &[u8; 97] = b"\x04\x1d\x1c\x64\xf0\x68\xcf\x45\xff\xa2\xa6\x3a\x81\xb7\xc1\x3f\x6b\x88\x47\xa3\xe7\x7e\xf1\x4f\xe3\xdb\x7f\xca\xfe\x0c\xbd\x10\xe8\xe8\x26\xe0\x34\x36\xd6\x46\xaa\xef\x87\xb2\xe2\x47\xd4\xaf\x1e\x8a\xbe\x1d\x75\x20\xf9\xc2\xa4\x5c\xb1\xeb\x8e\x95\xcf\xd5\x52\x62\xb7\x0b\x29\xfe\xec\x58\x64\xe1\x9c\x05\x4f\xf9\x91\x29\x28\x0e\x46\x46\x21\x77\x91\x81\x11\x42\x82\x03\x41\x26\x3c\x53\x15"; +const BRAINPOOLP384R1_ORDER: asn1::BigUint<'static> = asn1::BigUint::new(b"\x00\x8c\xb9\x1e\x82\xa3\x38\x6d\x28\x0f\x5d\x6f\x7e\x50\xe6\x41\xdf\x15\x2f\x71\x09\xed\x54\x56\xb3\x1f\x16\x6e\x6c\xac\x04\x25\xa7\xcf\x3a\xb6\xaf\x6b\x7f\xc3\x10\x3b\x88\x32\x02\xe9\x04\x65\x65").unwrap(); + +pub const BRAINPOOLP384R1_DOMAIN: SpecifiedECDomain<'static> = SpecifiedECDomain { + version: 1, + field_id: BRAINPOOLP384R1_FIELD, + curve: Curve { + a: BRAINPOOLP384R1_CURVE_A, + b: BRAINPOOLP384R1_CURVE_B, + seed: Some(BRAINPOOLP384R1_SEED), + }, + base: BRAINPOOLP384R1_UNCOMPRESSED_BASE, + order: BRAINPOOLP384R1_ORDER, + cofactor: Some(1), +}; + +pub const BRAINPOOLP384R1_DOMAIN_NO_SEED: SpecifiedECDomain<'static> = SpecifiedECDomain { + version: 1, + field_id: BRAINPOOLP384R1_FIELD, + curve: Curve { + a: BRAINPOOLP384R1_CURVE_A, + b: BRAINPOOLP384R1_CURVE_B, + seed: None, + }, + base: BRAINPOOLP384R1_UNCOMPRESSED_BASE, + order: BRAINPOOLP384R1_ORDER, + cofactor: Some(1), +}; + +const BRAINPOOLP512R1_FIELD: FieldID<'static> = FieldID { + field_type: asn1::DefinedByMarker::marker(), + parameters: FieldParameters::PrimeField(asn1::BigUint::new(b"\x00\xaa\xdd\x9d\xb8\xdb\xe9\xc4\x8b\x3f\xd4\xe6\xae\x33\xc9\xfc\x07\xcb\x30\x8d\xb3\xb3\xc9\xd2\x0e\xd6\x63\x9c\xca\x70\x33\x08\x71\x7d\x4d\x9b\x00\x9b\xc6\x68\x42\xae\xcd\xa1\x2a\xe6\xa3\x80\xe6\x28\x81\xff\x2f\x2d\x82\xc6\x85\x28\xaa\x60\x56\x58\x3a\x48\xf3").unwrap()), +}; +const BRAINPOOLP512R1_CURVE_A: &[u8; 64] = b"\x78\x30\xa3\x31\x8b\x60\x3b\x89\xe2\x32\x71\x45\xac\x23\x4c\xc5\x94\xcb\xdd\x8d\x3d\xf9\x16\x10\xa8\x34\x41\xca\xea\x98\x63\xbc\x2d\xed\x5d\x5a\xa8\x25\x3a\xa1\x0a\x2e\xf1\xc9\x8b\x9a\xc8\xb5\x7f\x11\x17\xa7\x2b\xf2\xc7\xb9\xe7\xc1\xac\x4d\x77\xfc\x94\xca"; +const BRAINPOOLP512R1_CURVE_B: &[u8; 64] = b"\x3d\xf9\x16\x10\xa8\x34\x41\xca\xea\x98\x63\xbc\x2d\xed\x5d\x5a\xa8\x25\x3a\xa1\x0a\x2e\xf1\xc9\x8b\x9a\xc8\xb5\x7f\x11\x17\xa7\x2b\xf2\xc7\xb9\xe7\xc1\xac\x4d\x77\xfc\x94\xca\xdc\x08\x3e\x67\x98\x40\x50\xb7\x5e\xba\xe5\xdd\x28\x09\xbd\x63\x80\x16\xf7\x23"; +const BRAINPOOLP512R1_SEED: asn1::BitString<'static> = asn1::BitString::new( + b"\xaf\x02\xac\x60\xac\xc9\x3e\xd8\x74\x42\x2a\x52\xec\xb2\x38\xfe\xee\x5a\xb6\xad", + 0, +) +.unwrap(); +const BRAINPOOLP512R1_UNCOMPRESSED_BASE: &[u8; 129] = b"\x04\x81\xae\xe4\xbd\xd8\x2e\xd9\x64\x5a\x21\x32\x2e\x9c\x4c\x6a\x93\x85\xed\x9f\x70\xb5\xd9\x16\xc1\xb4\x3b\x62\xee\xf4\xd0\x09\x8e\xff\x3b\x1f\x78\xe2\xd0\xd4\x8d\x50\xd1\x68\x7b\x93\xb9\x7d\x5f\x7c\x6d\x50\x47\x40\x6a\x5e\x68\x8b\x35\x22\x09\xbc\xb9\xf8\x22\x7d\xde\x38\x5d\x56\x63\x32\xec\xc0\xea\xbf\xa9\xcf\x78\x22\xfd\xf2\x09\xf7\x00\x24\xa5\x7b\x1a\xa0\x00\xc5\x5b\x88\x1f\x81\x11\xb2\xdc\xde\x49\x4a\x5f\x48\x5e\x5b\xca\x4b\xd8\x8a\x27\x63\xae\xd1\xca\x2b\x2f\xa8\xf0\x54\x06\x78\xcd\x1e\x0f\x3a\xd8\x08\x92"; +const BRAINPOOLP512R1_ORDER: asn1::BigUint<'static> = asn1::BigUint::new(b"\x00\xaa\xdd\x9d\xb8\xdb\xe9\xc4\x8b\x3f\xd4\xe6\xae\x33\xc9\xfc\x07\xcb\x30\x8d\xb3\xb3\xc9\xd2\x0e\xd6\x63\x9c\xca\x70\x33\x08\x70\x55\x3e\x5c\x41\x4c\xa9\x26\x19\x41\x86\x61\x19\x7f\xac\x10\x47\x1d\xb1\xd3\x81\x08\x5d\xda\xdd\xb5\x87\x96\x82\x9c\xa9\x00\x69").unwrap(); + +pub const BRAINPOOLP512R1_DOMAIN: SpecifiedECDomain<'static> = SpecifiedECDomain { + version: 1, + field_id: BRAINPOOLP512R1_FIELD, + curve: Curve { + a: BRAINPOOLP512R1_CURVE_A, + b: BRAINPOOLP512R1_CURVE_B, + seed: Some(BRAINPOOLP512R1_SEED), + }, + base: BRAINPOOLP512R1_UNCOMPRESSED_BASE, + order: BRAINPOOLP512R1_ORDER, + cofactor: Some(1), +}; + +pub const BRAINPOOLP512R1_DOMAIN_NO_SEED: SpecifiedECDomain<'static> = SpecifiedECDomain { + version: 1, + field_id: BRAINPOOLP512R1_FIELD, + curve: Curve { + a: BRAINPOOLP512R1_CURVE_A, + b: BRAINPOOLP512R1_CURVE_B, + seed: None, + }, + base: BRAINPOOLP512R1_UNCOMPRESSED_BASE, + order: BRAINPOOLP512R1_ORDER, + cofactor: Some(1), +}; diff --git a/tests/hazmat/primitives/test_ec.py b/tests/hazmat/primitives/test_ec.py index 460f28d410b4..b5f55983dc4e 100644 --- a/tests/hazmat/primitives/test_ec.py +++ b/tests/hazmat/primitives/test_ec.py @@ -1113,6 +1113,12 @@ def test_load_private_key_unsupported_explicit_parameters(self): (ec.SECP384R1, "secp384r1-explicit-no-seed.pem"), (ec.SECP521R1, "secp521r1-explicit-seed.pem"), (ec.SECP521R1, "secp521r1-explicit-no-seed.pem"), + (ec.BrainpoolP256R1, "brainpoolP256r1-explicit-seed.pem"), + (ec.BrainpoolP256R1, "brainpoolP256r1-explicit-no-seed.pem"), + (ec.BrainpoolP384R1, "brainpoolP384r1-explicit-seed.pem"), + (ec.BrainpoolP384R1, "brainpoolP384r1-explicit-no-seed.pem"), + (ec.BrainpoolP512R1, "brainpoolP512r1-explicit-seed.pem"), + (ec.BrainpoolP512R1, "brainpoolP512r1-explicit-no-seed.pem"), ], ) def test_load_private_key_explicit_parameters(self, curve, file, backend): @@ -1136,6 +1142,12 @@ def test_load_private_key_explicit_parameters(self, curve, file, backend): (ec.SECP384R1, "secp384r1-pub-explicit-no-seed.pem"), (ec.SECP521R1, "secp521r1-pub-explicit-seed.pem"), (ec.SECP521R1, "secp521r1-pub-explicit-no-seed.pem"), + (ec.BrainpoolP256R1, "brainpoolP256r1-pub-explicit-seed.pem"), + (ec.BrainpoolP256R1, "brainpoolP256r1-pub-explicit-no-seed.pem"), + (ec.BrainpoolP384R1, "brainpoolP384r1-pub-explicit-seed.pem"), + (ec.BrainpoolP384R1, "brainpoolP384r1-pub-explicit-no-seed.pem"), + (ec.BrainpoolP512R1, "brainpoolP512r1-pub-explicit-seed.pem"), + (ec.BrainpoolP512R1, "brainpoolP512r1-pub-explicit-no-seed.pem"), ], ) def test_load_public_key_explicit_parameters(self, curve, file, backend): diff --git a/vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-explicit-no-seed.pem b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-explicit-no-seed.pem new file mode 100644 index 000000000000..6008cd9a10a4 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-explicit-no-seed.pem @@ -0,0 +1,10 @@ +-----BEGIN PRIVATE KEY----- +MIIBYQIBADCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEAqftX26Huqbw+ +ZgqQnYONcm479iPVJiAoIBNIHR9uU3cwRAQgfVoJdfwsMFfu9nUwQXr/5/uAVcEm +3Fxs6UpLRPMwtdkEICbcXGzpSktE8zC12bvXfL+VhBYpXPfhzmvM3Bj/jAe2BEEE +i9Kuuct+V8ssS0gv/IG3r7neJ+HjvSPCOkRTvZrOMmJUfvg1w9rE/Zf4RhoUYR3J +wndFEy3tjlRcHVTHLwRplwIhAKn7V9uh7qm8PmYKkJ2DjXGMOXqjtWGm95AeDoKX +SFanAgEBBG0wawIBAQQgIArH6Tf260XKWyhAuvWNhPlsO6n5Wo7zEv/Wg8fFCqSh +RANCAAQm0s+dHjmTrko1Z6AQEFy0/bryKGVFZJn65LGWAXw8VmR/77uzNnUF+eqM +w3GUumMwW4iWfLU9R2jZY5uJIRtG +-----END PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-explicit-seed.pem b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-explicit-seed.pem new file mode 100644 index 000000000000..dca4802d3ef1 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-explicit-seed.pem @@ -0,0 +1,10 @@ +-----BEGIN PRIVATE KEY----- +MIIBYQIBADCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEAqftX26Huqbw+ +ZgqQnYONcm479iPVJiAoIBNIHR9uU3cwRAQgfVoJdfwsMFfu9nUwQXr/5/uAVcEm +3Fxs6UpLRPMwtdkEICbcXGzpSktE8zC12bvXfL+VhBYpXPfhzmvM3Bj/jAe2BEEE +i9Kuuct+V8ssS0gv/IG3r7neJ+HjvSPCOkRTvZrOMmJUfvg1w9rE/Zf4RhoUYR3J +wndFEy3tjlRcHVTHLwRplwIhAKn7V9uh7qm8PmYKkJ2DjXGMOXqjtWGm95AeDoKX +SFanAgEBBG0wawIBAQQgUBF0Zoq6LOZ3w7xAsTcoFHlOF7ZqEChtX+0FxMln0Ieh +RANCAASP9jjhRE17lQ6ofJJnPF+VtIs+H9H0bxSLdT8Lu3QOQgm9qH4/5zxWxjKh +YgmSBIVON9pDNwNoPR7Ab5FIdmwJ +-----END PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-pub-explicit-no-seed.pem b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-pub-explicit-no-seed.pem new file mode 100644 index 000000000000..06cc1a42c60c --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-pub-explicit-no-seed.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBMzCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEAqftX26Huqbw+ZgqQ +nYONcm479iPVJiAoIBNIHR9uU3cwRAQgfVoJdfwsMFfu9nUwQXr/5/uAVcEm3Fxs +6UpLRPMwtdkEICbcXGzpSktE8zC12bvXfL+VhBYpXPfhzmvM3Bj/jAe2BEEEi9Ku +uct+V8ssS0gv/IG3r7neJ+HjvSPCOkRTvZrOMmJUfvg1w9rE/Zf4RhoUYR3JwndF +Ey3tjlRcHVTHLwRplwIhAKn7V9uh7qm8PmYKkJ2DjXGMOXqjtWGm95AeDoKXSFan +AgEBA0IABCbSz50eOZOuSjVnoBAQXLT9uvIoZUVkmfrksZYBfDxWZH/vu7M2dQX5 +6ozDcZS6YzBbiJZ8tT1HaNljm4khG0Y= +-----END PUBLIC KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-pub-explicit-seed.pem b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-pub-explicit-seed.pem new file mode 100644 index 000000000000..fe280ad38814 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP256r1-pub-explicit-seed.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBMzCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEAqftX26Huqbw+ZgqQ +nYONcm479iPVJiAoIBNIHR9uU3cwRAQgfVoJdfwsMFfu9nUwQXr/5/uAVcEm3Fxs +6UpLRPMwtdkEICbcXGzpSktE8zC12bvXfL+VhBYpXPfhzmvM3Bj/jAe2BEEEi9Ku +uct+V8ssS0gv/IG3r7neJ+HjvSPCOkRTvZrOMmJUfvg1w9rE/Zf4RhoUYR3JwndF +Ey3tjlRcHVTHLwRplwIhAKn7V9uh7qm8PmYKkJ2DjXGMOXqjtWGm95AeDoKXSFan +AgEBA0IABI/2OOFETXuVDqh8kmc8X5W0iz4f0fRvFIt1Pwu7dA5CCb2ofj/nPFbG +MqFiCZIEhU432kM3A2g9HsBvkUh2bAk= +-----END PUBLIC KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-explicit-no-seed.pem b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-explicit-no-seed.pem new file mode 100644 index 000000000000..f7a00be55f3a --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-explicit-no-seed.pem @@ -0,0 +1,13 @@ +-----BEGIN PRIVATE KEY----- +MIIB9QIBADCCAU0GByqGSM49AgEwggFAAgEBMDwGByqGSM49AQECMQCMuR6Cozht +KA9db35Q5kHfFS9xCe1UVrQSsdoZf7cRI6zTpymQHRpxh0cAEzEH7FMwZAQwe8OC +xj2MFQw8cggKzgWvoMK+oo5PsieHE5Fl77qR+Q+KpYFKUDrU6wSox90izigmBDAE +qMfdIs4oJos5tVQW8ER8L7d94Qfc0qYuiA6lPuti1Xy0OQKV28mUOreGlvpQTBEE +YQQdHGTwaM9F/6KmOoG3wT9riEej537xT+Pbf8r+DL0Q6Ogm4DQ21kaq74ey4kfU +rx6Kvh11IPnCpFyx646Vz9VSYrcLKf7sWGThnAVP+ZEpKA5GRiF3kYERQoIDQSY8 +UxUCMQCMuR6CozhtKA9db35Q5kHfFS9xCe1UVrMfFm5srAQlp886tq9rf8MQO4gy +AukEZWUCAQEEgZ4wgZsCAQEEMD0I41D1e05v2YTvpnZqBluszAa3D2YRrA8wJqcz +nQ9CftHci/1wMAC524GMaHwu26FkA2IABHeJNJXgZFVuYnyNlsMptJ9S0oJiwtUy +Y38oAasc9GcEnq7E1SapB+6cHUA+nOmV+1hqjAN8kEwsVDeye4Wvv4snvEC7hxYY +XDlQOyiHdq5C9/UUJxqZWTKWCQoDx0zQWw== +-----END PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-explicit-seed.pem b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-explicit-seed.pem new file mode 100644 index 000000000000..0c12ecbe4303 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-explicit-seed.pem @@ -0,0 +1,13 @@ +-----BEGIN PRIVATE KEY----- +MIIB9QIBADCCAU0GByqGSM49AgEwggFAAgEBMDwGByqGSM49AQECMQCMuR6Cozht +KA9db35Q5kHfFS9xCe1UVrQSsdoZf7cRI6zTpymQHRpxh0cAEzEH7FMwZAQwe8OC +xj2MFQw8cggKzgWvoMK+oo5PsieHE5Fl77qR+Q+KpYFKUDrU6wSox90izigmBDAE +qMfdIs4oJos5tVQW8ER8L7d94Qfc0qYuiA6lPuti1Xy0OQKV28mUOreGlvpQTBEE +YQQdHGTwaM9F/6KmOoG3wT9riEej537xT+Pbf8r+DL0Q6Ogm4DQ21kaq74ey4kfU +rx6Kvh11IPnCpFyx646Vz9VSYrcLKf7sWGThnAVP+ZEpKA5GRiF3kYERQoIDQSY8 +UxUCMQCMuR6CozhtKA9db35Q5kHfFS9xCe1UVrMfFm5srAQlp886tq9rf8MQO4gy +AukEZWUCAQEEgZ4wgZsCAQEEMGiTZq5cC0+JR9IjfXiYGqkJ12g7Ty0k716Hqo1F +OgErqyJ10wlS/UqHyznjZWHY+qFkA2IABIZB2azDjNjcGcEHt3d+XrVqa5vmTyDw ++6MG1NpOvEdn80WXZr/ODPoS1vbWnFm28XftbDQsq4UAoJMbNMS9nWyE7d+IipCs +2Y6PM+CEH2Q7/CQ9MqG6HlfzdSUAtpmXsA== +-----END PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-pub-explicit-no-seed.pem b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-pub-explicit-no-seed.pem new file mode 100644 index 000000000000..991b3f9d1740 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-pub-explicit-no-seed.pem @@ -0,0 +1,12 @@ +-----BEGIN PUBLIC KEY----- +MIIBtTCCAU0GByqGSM49AgEwggFAAgEBMDwGByqGSM49AQECMQCMuR6CozhtKA9d +b35Q5kHfFS9xCe1UVrQSsdoZf7cRI6zTpymQHRpxh0cAEzEH7FMwZAQwe8OCxj2M +FQw8cggKzgWvoMK+oo5PsieHE5Fl77qR+Q+KpYFKUDrU6wSox90izigmBDAEqMfd +Is4oJos5tVQW8ER8L7d94Qfc0qYuiA6lPuti1Xy0OQKV28mUOreGlvpQTBEEYQQd +HGTwaM9F/6KmOoG3wT9riEej537xT+Pbf8r+DL0Q6Ogm4DQ21kaq74ey4kfUrx6K +vh11IPnCpFyx646Vz9VSYrcLKf7sWGThnAVP+ZEpKA5GRiF3kYERQoIDQSY8UxUC +MQCMuR6CozhtKA9db35Q5kHfFS9xCe1UVrMfFm5srAQlp886tq9rf8MQO4gyAukE +ZWUCAQEDYgAEd4k0leBkVW5ifI2Wwym0n1LSgmLC1TJjfygBqxz0ZwSersTVJqkH +7pwdQD6c6ZX7WGqMA3yQTCxUN7J7ha+/iye8QLuHFhhcOVA7KId2rkL39RQnGplZ +MpYJCgPHTNBb +-----END PUBLIC KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-pub-explicit-seed.pem b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-pub-explicit-seed.pem new file mode 100644 index 000000000000..25c691f626af --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP384r1-pub-explicit-seed.pem @@ -0,0 +1,12 @@ +-----BEGIN PUBLIC KEY----- +MIIBtTCCAU0GByqGSM49AgEwggFAAgEBMDwGByqGSM49AQECMQCMuR6CozhtKA9d +b35Q5kHfFS9xCe1UVrQSsdoZf7cRI6zTpymQHRpxh0cAEzEH7FMwZAQwe8OCxj2M +FQw8cggKzgWvoMK+oo5PsieHE5Fl77qR+Q+KpYFKUDrU6wSox90izigmBDAEqMfd +Is4oJos5tVQW8ER8L7d94Qfc0qYuiA6lPuti1Xy0OQKV28mUOreGlvpQTBEEYQQd +HGTwaM9F/6KmOoG3wT9riEej537xT+Pbf8r+DL0Q6Ogm4DQ21kaq74ey4kfUrx6K +vh11IPnCpFyx646Vz9VSYrcLKf7sWGThnAVP+ZEpKA5GRiF3kYERQoIDQSY8UxUC +MQCMuR6CozhtKA9db35Q5kHfFS9xCe1UVrMfFm5srAQlp886tq9rf8MQO4gyAukE +ZWUCAQEDYgAEhkHZrMOM2NwZwQe3d35etWprm+ZPIPD7owbU2k68R2fzRZdmv84M ++hLW9tacWbbxd+1sNCyrhQCgkxs0xL2dbITt34iKkKzZjo8z4IQfZDv8JD0yoboe +V/N1JQC2mZew +-----END PUBLIC KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-explicit-no-seed.pem b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-explicit-no-seed.pem new file mode 100644 index 000000000000..eff7a6b70f74 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-explicit-no-seed.pem @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICiQIBADCCAa8GByqGSM49AgEwggGiAgEBMEwGByqGSM49AQECQQCq3Z242+nE +iz/U5q4zyfwHyzCNs7PJ0g7WY5zKcDMIcX1NmwCbxmhCrs2hKuajgOYogf8vLYLG +hSiqYFZYOkjzMIGEBEB4MKMxi2A7ieIycUWsI0zFlMvdjT35FhCoNEHK6phjvC3t +XVqoJTqhCi7xyYuayLV/ERenK/LHuefBrE13/JTKBEA9+RYQqDRByuqYY7wt7V1a +qCU6oQou8cmLmsi1fxEXpyvyx7nnwaxNd/yUytwIPmeYQFC3Xrrl3SgJvWOAFvcj +BIGBBIGu5L3YLtlkWiEyLpxMapOF7Z9wtdkWwbQ7Yu700AmO/zsfeOLQ1I1Q0Wh7 +k7l9X3xtUEdAal5oizUiCby5+CJ93jhdVmMy7MDqv6nPeCL98gn3ACSlexqgAMVb +iB+BEbLc3klKX0heW8pL2IonY67RyisvqPBUBnjNHg862AiSAkEAqt2duNvpxIs/ +1OauM8n8B8swjbOzydIO1mOcynAzCHBVPlxBTKkmGUGGYRl/rBBHHbHTgQhd2t21 +h5aCnKkAaQIBAQSB0DCBzQIBAQRAF2ldwiV2QIkPtpuRqVljBSWhen3gxGzmDOq/ +WWye7ZZYBgaQ/Lawtbar4H399RPiyps+5o/nj65AD/TnNCFEbKGBhQOBggAEY8nf +hvDBbxhFicGyb2wjyw5wYqrv2lH46k9p4JMDdVYYezaRcEwQSa9xiOBl1pZ37jek +nlfur4bA1YcCxXFnF5a3r0Xx+67cqF3Qe3K9/pCCChhnq2/hiKFeMf+uRTASkeSW +5N02YWH4nhjxAKkc5CmWYlsCOtb6PSay3YM3jVc= +-----END PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-explicit-seed.pem b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-explicit-seed.pem new file mode 100644 index 000000000000..8aae4e26b325 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-explicit-seed.pem @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICiQIBADCCAa8GByqGSM49AgEwggGiAgEBMEwGByqGSM49AQECQQCq3Z242+nE +iz/U5q4zyfwHyzCNs7PJ0g7WY5zKcDMIcX1NmwCbxmhCrs2hKuajgOYogf8vLYLG +hSiqYFZYOkjzMIGEBEB4MKMxi2A7ieIycUWsI0zFlMvdjT35FhCoNEHK6phjvC3t +XVqoJTqhCi7xyYuayLV/ERenK/LHuefBrE13/JTKBEA9+RYQqDRByuqYY7wt7V1a +qCU6oQou8cmLmsi1fxEXpyvyx7nnwaxNd/yUytwIPmeYQFC3Xrrl3SgJvWOAFvcj +BIGBBIGu5L3YLtlkWiEyLpxMapOF7Z9wtdkWwbQ7Yu700AmO/zsfeOLQ1I1Q0Wh7 +k7l9X3xtUEdAal5oizUiCby5+CJ93jhdVmMy7MDqv6nPeCL98gn3ACSlexqgAMVb +iB+BEbLc3klKX0heW8pL2IonY67RyisvqPBUBnjNHg862AiSAkEAqt2duNvpxIs/ +1OauM8n8B8swjbOzydIO1mOcynAzCHBVPlxBTKkmGUGGYRl/rBBHHbHTgQhd2t21 +h5aCnKkAaQIBAQSB0DCBzQIBAQRAAwDm0oPXzHxErdV/Vdp6D0CfjNhV2aKumzQ9 +/iLPKI1W2KYuFt//eyo6KlsDKVdOluFUw+KoKm7dyPXGnkTKkKGBhQOBggAEj/3a +DNfPMGT7HTW6YiZvV8danAo5fGEHi6LBjCBEIEIqZOFYbS3FWkPn1GX7f7FjMVkt +LW6jzu9vOUj/w9w+3GlyS9G9JbXKz416mmMfmKwFVr8/k6VNqZotzYfgo8L+fFgY +OZAI042jiKMjIoKuZN+RnZSGf2vwA+Xg6uVUSrQ= +-----END PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-pub-explicit-no-seed.pem b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-pub-explicit-no-seed.pem new file mode 100644 index 000000000000..188d547e61e3 --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-pub-explicit-no-seed.pem @@ -0,0 +1,14 @@ +-----BEGIN PUBLIC KEY----- +MIICODCCAa8GByqGSM49AgEwggGiAgEBMEwGByqGSM49AQECQQCq3Z242+nEiz/U +5q4zyfwHyzCNs7PJ0g7WY5zKcDMIcX1NmwCbxmhCrs2hKuajgOYogf8vLYLGhSiq +YFZYOkjzMIGEBEB4MKMxi2A7ieIycUWsI0zFlMvdjT35FhCoNEHK6phjvC3tXVqo +JTqhCi7xyYuayLV/ERenK/LHuefBrE13/JTKBEA9+RYQqDRByuqYY7wt7V1aqCU6 +oQou8cmLmsi1fxEXpyvyx7nnwaxNd/yUytwIPmeYQFC3Xrrl3SgJvWOAFvcjBIGB +BIGu5L3YLtlkWiEyLpxMapOF7Z9wtdkWwbQ7Yu700AmO/zsfeOLQ1I1Q0Wh7k7l9 +X3xtUEdAal5oizUiCby5+CJ93jhdVmMy7MDqv6nPeCL98gn3ACSlexqgAMVbiB+B +EbLc3klKX0heW8pL2IonY67RyisvqPBUBnjNHg862AiSAkEAqt2duNvpxIs/1Oau +M8n8B8swjbOzydIO1mOcynAzCHBVPlxBTKkmGUGGYRl/rBBHHbHTgQhd2t21h5aC +nKkAaQIBAQOBggAEY8nfhvDBbxhFicGyb2wjyw5wYqrv2lH46k9p4JMDdVYYezaR +cEwQSa9xiOBl1pZ37jeknlfur4bA1YcCxXFnF5a3r0Xx+67cqF3Qe3K9/pCCChhn +q2/hiKFeMf+uRTASkeSW5N02YWH4nhjxAKkc5CmWYlsCOtb6PSay3YM3jVc= +-----END PUBLIC KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-pub-explicit-seed.pem b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-pub-explicit-seed.pem new file mode 100644 index 000000000000..a963fa07c0ec --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/EC/brainpoolP512r1-pub-explicit-seed.pem @@ -0,0 +1,14 @@ +-----BEGIN PUBLIC KEY----- +MIICODCCAa8GByqGSM49AgEwggGiAgEBMEwGByqGSM49AQECQQCq3Z242+nEiz/U +5q4zyfwHyzCNs7PJ0g7WY5zKcDMIcX1NmwCbxmhCrs2hKuajgOYogf8vLYLGhSiq +YFZYOkjzMIGEBEB4MKMxi2A7ieIycUWsI0zFlMvdjT35FhCoNEHK6phjvC3tXVqo +JTqhCi7xyYuayLV/ERenK/LHuefBrE13/JTKBEA9+RYQqDRByuqYY7wt7V1aqCU6 +oQou8cmLmsi1fxEXpyvyx7nnwaxNd/yUytwIPmeYQFC3Xrrl3SgJvWOAFvcjBIGB +BIGu5L3YLtlkWiEyLpxMapOF7Z9wtdkWwbQ7Yu700AmO/zsfeOLQ1I1Q0Wh7k7l9 +X3xtUEdAal5oizUiCby5+CJ93jhdVmMy7MDqv6nPeCL98gn3ACSlexqgAMVbiB+B +EbLc3klKX0heW8pL2IonY67RyisvqPBUBnjNHg862AiSAkEAqt2duNvpxIs/1Oau +M8n8B8swjbOzydIO1mOcynAzCHBVPlxBTKkmGUGGYRl/rBBHHbHTgQhd2t21h5aC +nKkAaQIBAQOBggAEj/3aDNfPMGT7HTW6YiZvV8danAo5fGEHi6LBjCBEIEIqZOFY +bS3FWkPn1GX7f7FjMVktLW6jzu9vOUj/w9w+3GlyS9G9JbXKz416mmMfmKwFVr8/ +k6VNqZotzYfgo8L+fFgYOZAI042jiKMjIoKuZN+RnZSGf2vwA+Xg6uVUSrQ= +-----END PUBLIC KEY-----