5050
5151-export_type ([key / 0 ]).
5252
53+ % % Macros
54+ -ifdef (OTP_RELEASE ).
55+ -if (? OTP_RELEASE >= 28 ).
56+ -define (EC_PRIVATE_KEY_VERSION , ecPrivkeyVer1 ).
57+ -define (EC_PRIVATE_KEY_VERSION_COMPAT , 1 ).
58+ -else .
59+ -define (EC_PRIVATE_KEY_VERSION , 1 ).
60+ -define (EC_PRIVATE_KEY_VERSION_COMPAT , ecPrivkeyVer1 ).
61+ -endif .
62+ -else .
63+ -define (EC_PRIVATE_KEY_VERSION , 1 ).
64+ -define (EC_PRIVATE_KEY_VERSION_COMPAT , ecPrivkeyVer1 ).
65+ -endif .
66+
5367% %====================================================================
5468% % jose_jwk callbacks
5569% %====================================================================
5670
5771from_map (F = #{ <<" kty" >> := <<" EC" >>, <<" d" >> := _ }) ->
58- from_map_ec_private_key (jose_jwa :ec_key_mode (), maps :remove (<<" kty" >>, F ), # 'ECPrivateKey' { version = 1 });
72+ from_map_ec_private_key (jose_jwa :ec_key_mode (), maps :remove (<<" kty" >>, F ), # 'ECPrivateKey' { version = ? EC_PRIVATE_KEY_VERSION });
5973from_map (F = #{ <<" kty" >> := <<" EC" >> }) ->
6074 from_map_ec_public_key (maps :remove (<<" kty" >>, F ), {# 'ECPoint' {}, undefined }).
6175
@@ -65,7 +79,7 @@ to_key(ECPublicKey={#'ECPoint'{}, _}) ->
6579 ECPublicKey .
6680
6781to_map (# 'ECPrivateKey' {
68- version = 1 ,
82+ version = ? EC_PRIVATE_KEY_VERSION ,
6983 privateKey = D ,
7084 parameters = {namedCurve , Parameters },
7185 publicKey = PublicKey }, Fields ) when is_binary (D ) andalso is_binary (PublicKey ) ->
@@ -88,13 +102,16 @@ to_map({#'ECPoint'{
88102 <<" y" >> => jose_jwa_base64url :encode (Y )
89103 };
90104to_map (ECPrivateKey0 = # 'ECPrivateKey' {
91- version = 1 ,
105+ version = ? EC_PRIVATE_KEY_VERSION ,
92106 privateKey = D ,
93107 parameters = {namedCurve , _Parameters },
94108 publicKey = {_ , PublicKey }}, Fields ) when is_list (D ) andalso is_binary (PublicKey ) ->
95109 ECPrivateKey = ECPrivateKey0 # 'ECPrivateKey' {
96110 privateKey = list_to_binary (D ),
97111 publicKey = PublicKey },
112+ to_map (ECPrivateKey , Fields );
113+ to_map (ECPrivateKey0 = # 'ECPrivateKey' {version = ? EC_PRIVATE_KEY_VERSION_COMPAT }, Fields ) ->
114+ ECPrivateKey = ECPrivateKey0 # 'ECPrivateKey' {version = ? EC_PRIVATE_KEY_VERSION },
98115 to_map (ECPrivateKey , Fields ).
99116
100117to_public_map (K = # 'ECPrivateKey' {}, F ) ->
0 commit comments