diff options
author | Ingela Anderton Andin <ingela@erlang.org> | 2020-03-03 10:26:55 +0100 |
---|---|---|
committer | Ingela Anderton Andin <ingela@erlang.org> | 2020-03-03 16:28:21 +0100 |
commit | 7d294eaafc62af4acf4206e76c4fea7a84f2d410 (patch) | |
tree | 12900469496a4e4fb6e50a9416c350a2aada7060 | |
parent | a7395b231b04782a47403a9080e0e6ae37c76260 (diff) | |
download | erlang-7d294eaafc62af4acf4206e76c4fea7a84f2d410.tar.gz |
public_key: Add support for key exchange with Edward curves
-rw-r--r-- | lib/public_key/asn1/PKIX1Algorithms88.asn1 | 8 | ||||
-rw-r--r-- | lib/public_key/src/pubkey_cert_records.erl | 8 | ||||
-rw-r--r-- | lib/public_key/src/public_key.erl | 4 |
3 files changed, 18 insertions, 2 deletions
diff --git a/lib/public_key/asn1/PKIX1Algorithms88.asn1 b/lib/public_key/asn1/PKIX1Algorithms88.asn1 index 6cc6745af6..207ab005a9 100644 --- a/lib/public_key/asn1/PKIX1Algorithms88.asn1 +++ b/lib/public_key/asn1/PKIX1Algorithms88.asn1 @@ -283,4 +283,12 @@ sect571k1 OBJECT IDENTIFIER ::= { ellipticCurve 38 } sect571r1 OBJECT IDENTIFIER ::= { ellipticCurve 39 } + + id-edwards-curve-algs OBJECT IDENTIFIER ::= { 1 3 101 } + + id-X25519 OBJECT IDENTIFIER ::= { id-edwards-curve-algs 110 } + id-X448 OBJECT IDENTIFIER ::= { id-edwards-curve-algs 111 } + id-Ed25519 OBJECT IDENTIFIER ::= { id-edwards-curve-algs 112 } + id-Ed448 OBJECT IDENTIFIER ::= { id-edwards-curve-algs 113 } + END diff --git a/lib/public_key/src/pubkey_cert_records.erl b/lib/public_key/src/pubkey_cert_records.erl index 6a80874df8..1c79f904f3 100644 --- a/lib/public_key/src/pubkey_cert_records.erl +++ b/lib/public_key/src/pubkey_cert_records.erl @@ -113,7 +113,8 @@ supportedPublicKeyAlgorithms(?'id-keyExchangeAlgorithm') -> 'KEA-PublicKey'; supportedPublicKeyAlgorithms(?'id-ecPublicKey') -> 'ECPoint'. supportedCurvesTypes(?'characteristic-two-field') -> characteristic_two_field; -supportedCurvesTypes(?'prime-field') -> prime_field. +supportedCurvesTypes(?'prime-field') -> prime_field; +supportedCurvesTypes(?'id-edwards-curve-algs') -> edwards_curve. namedCurves(?'sect571r1') -> sect571r1; namedCurves(?'sect571k1') -> sect571k1; @@ -148,6 +149,8 @@ namedCurves(?'sect163r1') -> sect163r1; namedCurves(?'sect163k1') -> sect163k1; namedCurves(?'secp256r1') -> secp256r1; namedCurves(?'secp192r1') -> secp192r1; +namedCurves(?'id-X25519') -> x25519; +namedCurves(?'id-X448') -> x448; namedCurves(?'brainpoolP160r1') -> brainpoolP160r1; namedCurves(?'brainpoolP160t1') -> brainpoolP160t1; namedCurves(?'brainpoolP192r1') -> brainpoolP192r1; @@ -162,7 +165,6 @@ namedCurves(?'brainpoolP384r1') -> brainpoolP384r1; namedCurves(?'brainpoolP384t1') -> brainpoolP384t1; namedCurves(?'brainpoolP512r1') -> brainpoolP512r1; namedCurves(?'brainpoolP512t1') -> brainpoolP512t1; - namedCurves(sect571r1) -> ?'sect571r1'; namedCurves(sect571k1) -> ?'sect571k1'; namedCurves(sect409r1) -> ?'sect409r1'; @@ -196,6 +198,8 @@ namedCurves(sect163r1) -> ?'sect163r1'; namedCurves(sect163k1) -> ?'sect163k1'; namedCurves(secp256r1) -> ?'secp256r1'; namedCurves(secp192r1) -> ?'secp192r1'; +namedCurves(x25519) -> ?'id-X25519'; +namedCurves(x448) -> ?'id-X448'; namedCurves(brainpoolP160r1) -> ?'brainpoolP160r1'; namedCurves(brainpoolP160t1) -> ?'brainpoolP160t1'; namedCurves(brainpoolP192r1) -> ?'brainpoolP192r1'; diff --git a/lib/public_key/src/public_key.erl b/lib/public_key/src/public_key.erl index 47266c514c..ce5151750d 100644 --- a/lib/public_key/src/public_key.erl +++ b/lib/public_key/src/public_key.erl @@ -1536,6 +1536,10 @@ ec_curve_spec({ecParameters, ECParams}) -> ec_curve_spec(ECParams); ec_curve_spec({namedCurve, OID}) when is_tuple(OID), is_integer(element(1,OID)) -> ec_curve_spec({namedCurve, pubkey_cert_records:namedCurves(OID)}); +ec_curve_spec({namedCurve, x25519 = Name}) -> + Name; +ec_curve_spec({namedCurve, x448 = Name}) -> + Name; ec_curve_spec({namedCurve, Name}) when is_atom(Name) -> crypto:ec_curve(Name). |