Skip to content

Commit 6350b87

Browse files
Add brainpoolP320r1 elliptic curve
Add brainpoolP320r1 (320-bit, OID 1.3.36.3.3.2.8.1.1.9) from RFC 5639. This curve is fully supported by OpenSSL (NID 929) and used by the Netherlands for DG15 Active Authentication keys in ePassport documents per ICAO 9303. brainpoolP224r1 is deferred as it requires a NID addition to the openssl Rust crate first.
1 parent 2c3cfc4 commit 6350b87

4 files changed

Lines changed: 16 additions & 0 deletions

File tree

  • src
    • cryptography/hazmat/primitives/asymmetric
    • rust

src/cryptography/hazmat/primitives/asymmetric/ec.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class EllipticCurveOID:
2323
SECP384R1 = ObjectIdentifier("1.3.132.0.34")
2424
SECP521R1 = ObjectIdentifier("1.3.132.0.35")
2525
BRAINPOOLP256R1 = ObjectIdentifier("1.3.36.3.3.2.8.1.1.7")
26+
BRAINPOOLP320R1 = ObjectIdentifier("1.3.36.3.3.2.8.1.1.9")
2627
BRAINPOOLP384R1 = ObjectIdentifier("1.3.36.3.3.2.8.1.1.11")
2728
BRAINPOOLP512R1 = ObjectIdentifier("1.3.36.3.3.2.8.1.1.13")
2829

@@ -265,6 +266,12 @@ class BrainpoolP256R1(EllipticCurve):
265266
)
266267

267268

269+
class BrainpoolP320R1(EllipticCurve):
270+
name = "brainpoolP320r1"
271+
key_size = 320
272+
group_order = 0xD35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D482EC7EE8658E98691555B44C59311 # noqa: E501
273+
274+
268275
class BrainpoolP384R1(EllipticCurve):
269276
name = "brainpoolP384r1"
270277
key_size = 384
@@ -287,6 +294,7 @@ class BrainpoolP512R1(EllipticCurve):
287294
"secp521r1": SECP521R1(),
288295
"secp256k1": SECP256K1(),
289296
"brainpoolP256r1": BrainpoolP256R1(),
297+
"brainpoolP320r1": BrainpoolP320R1(),
290298
"brainpoolP384r1": BrainpoolP384R1(),
291299
"brainpoolP512r1": BrainpoolP512R1(),
292300
}
@@ -354,6 +362,7 @@ class ECDH:
354362
EllipticCurveOID.SECP384R1: SECP384R1,
355363
EllipticCurveOID.SECP521R1: SECP521R1,
356364
EllipticCurveOID.BRAINPOOLP256R1: BrainpoolP256R1,
365+
EllipticCurveOID.BRAINPOOLP320R1: BrainpoolP320R1,
357366
EllipticCurveOID.BRAINPOOLP384R1: BrainpoolP384R1,
358367
EllipticCurveOID.BRAINPOOLP512R1: BrainpoolP512R1,
359368
}

src/rust/cryptography-key-parsing/src/ec.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ pub(crate) fn group_to_curve_oid(
3232
#[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))]
3333
openssl::nid::Nid::BRAINPOOL_P256R1 => Some(cryptography_x509::oid::EC_BRAINPOOLP256R1),
3434
#[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))]
35+
openssl::nid::Nid::BRAINPOOL_P320R1 => Some(cryptography_x509::oid::EC_BRAINPOOLP320R1),
36+
#[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))]
3537
openssl::nid::Nid::BRAINPOOL_P384R1 => Some(cryptography_x509::oid::EC_BRAINPOOLP384R1),
3638
#[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))]
3739
openssl::nid::Nid::BRAINPOOL_P512R1 => Some(cryptography_x509::oid::EC_BRAINPOOLP512R1),
@@ -56,6 +58,8 @@ pub(crate) fn ec_params_to_group(
5658
#[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))]
5759
&cryptography_x509::oid::EC_BRAINPOOLP256R1 => openssl::nid::Nid::BRAINPOOL_P256R1,
5860
#[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))]
61+
&cryptography_x509::oid::EC_BRAINPOOLP320R1 => openssl::nid::Nid::BRAINPOOL_P320R1,
62+
#[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))]
5963
&cryptography_x509::oid::EC_BRAINPOOLP384R1 => openssl::nid::Nid::BRAINPOOL_P384R1,
6064
#[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))]
6165
&cryptography_x509::oid::EC_BRAINPOOLP512R1 => openssl::nid::Nid::BRAINPOOL_P512R1,

src/rust/cryptography-x509/src/oid.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ pub const EC_SECP521R1: asn1::ObjectIdentifier = asn1::oid!(1, 3, 132, 0, 35);
6060
pub const EC_SECP256K1: asn1::ObjectIdentifier = asn1::oid!(1, 3, 132, 0, 10);
6161

6262
pub const EC_BRAINPOOLP256R1: asn1::ObjectIdentifier = asn1::oid!(1, 3, 36, 3, 3, 2, 8, 1, 1, 7);
63+
pub const EC_BRAINPOOLP320R1: asn1::ObjectIdentifier = asn1::oid!(1, 3, 36, 3, 3, 2, 8, 1, 1, 9);
6364
pub const EC_BRAINPOOLP384R1: asn1::ObjectIdentifier = asn1::oid!(1, 3, 36, 3, 3, 2, 8, 1, 1, 11);
6465
pub const EC_BRAINPOOLP512R1: asn1::ObjectIdentifier = asn1::oid!(1, 3, 36, 3, 3, 2, 8, 1, 1, 13);
6566

src/rust/src/backend/ec.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ fn curve_from_py_curve(
5050
#[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))]
5151
"brainpoolP256r1" => openssl::nid::Nid::BRAINPOOL_P256R1,
5252
#[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))]
53+
"brainpoolP320r1" => openssl::nid::Nid::BRAINPOOL_P320R1,
54+
#[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))]
5355
"brainpoolP384r1" => openssl::nid::Nid::BRAINPOOL_P384R1,
5456
#[cfg(not(any(CRYPTOGRAPHY_IS_BORINGSSL, CRYPTOGRAPHY_IS_AWSLC)))]
5557
"brainpoolP512r1" => openssl::nid::Nid::BRAINPOOL_P512R1,

0 commit comments

Comments
 (0)