From 29d324ff04e799fbb7e9edee10e65abcee01b02b Mon Sep 17 00:00:00 2001 From: 5HT Date: Tue, 4 Jul 2023 13:22:56 +0300 Subject: [PATCH] AES WRAP ASN.1 --- lib/sec.ex | 14 +- priv/cms/AESKeyWrapWithPad-02.asn1 | 84 +++++++ priv/cms/AESKeyWrapWithPad-88.asn1 | 25 ++ src/CryptographicMessageSyntax-2009.erl | 318 ++++++++++++------------ src/CryptographicMessageSyntax-2009.hrl | 2 +- src/oid.erl | 7 +- 6 files changed, 286 insertions(+), 164 deletions(-) create mode 100644 priv/cms/AESKeyWrapWithPad-02.asn1 create mode 100644 priv/cms/AESKeyWrapWithPad-88.asn1 diff --git a/lib/sec.ex b/lib/sec.ex index 67aa15c..8fab84e 100644 --- a/lib/sec.ex +++ b/lib/sec.ex @@ -1,9 +1,17 @@ defmodule CA.CRYPTO do @aad "AES256CBC" + def unwrap() do + y = "0004290728E36FA052424AB5649D08B62893E1037A96F3A55542A602A3ADC498B6C79962237F3A06B0165B" + "474E8700F08E5050298E49CE3B2CC55E2FA3752FFCDFEE8A59E76FA2CEFC841A50086D8F47018E5E26BE4D" + "68B2CD926583A9A41257113C" + z = "884B58ACC3A022028967505E052BEF8E" + w = "D434906245409BD25A7EBA7827F42F64" + x = :oid.unhex "4C5A459B4A305BC8B356571308AEAF7B269BBBE7CB17D09AAC9DCF6868685214D20F40478B0B186B" + end + def testCMSX509() do - {_,base} = :file.read_file "priv/encrypted.txt" - bin = :base64.decode base + {_,bin} = :file.read_file "priv/encrypted.bin" :'CryptographicMessageSyntax-2009'.decode(:ContentInfo, bin) end @@ -25,7 +33,7 @@ defmodule CA.CRYPTO do def test() do key = privat "client" public = public "client" - {_,{:ContentInfo,_,{:EnvelopedData,_,_,x,{:EncryptedContentInfo,_,_,cipher},_}}} = CA.CRYPTO.testCMSX509 + {_,{:ContentInfo,_,{:EnvelopedData,_,_,x,{:EncryptedContentInfo,_,_,cipher},_}}} = CA.CRYPTO.testCMSX509 [kari: {_,:v3,{_,{_,_,pub}},_,_,[{_,_,data}]}] = x {pub,public,data,key,cipher} diff --git a/priv/cms/AESKeyWrapWithPad-02.asn1 b/priv/cms/AESKeyWrapWithPad-02.asn1 new file mode 100644 index 0000000..b7ee682 --- /dev/null +++ b/priv/cms/AESKeyWrapWithPad-02.asn1 @@ -0,0 +1,84 @@ +AESKeyWrapWithPad-02 { iso(1) member-body(2) us(840) rsadsi(113549) + pkcs(1) pkcs-9(9) smime(16) modules(0) 48 } + + DEFINITIONS IMPLICIT TAGS ::= + + BEGIN + + -- EXPORTS ALL -- + + IMPORTS + AlgorithmIdentifier{}, CONTENT-ENCRYPTION, KEY-WRAP, SMIME-CAPS + FROM AlgorithmInformation-2009 -- [CMS-ASN] + { iso(1) identified-organization(3) dod(6) internet(1) + security(5) mechanisms(5) pkix(7) id-mod(0) + id-mod-algorithmInformation-02(58) }; + + AES-ContentEncryption CONTENT-ENCRYPTION ::= { + cea-aes128-wrap-pad | + cea-aes192-wrap-pad | + cea-aes256-wrap-pad, + ... } + + AES-KeyWrap KEY-WRAP ::= { + kwa-aes128-wrap-pad | + kwa-aes192-wrap-pad | + kwa-aes256-wrap-pad, + ... } + + SMimeCaps SMIME-CAPS ::= { + cea-aes128-wrap-pad.&smimeCaps | + cea-aes192-wrap-pad.&smimeCaps | + cea-aes256-wrap-pad.&smimeCaps | + kwa-aes128-wrap-pad.&smimeCaps | + kwa-aes192-wrap-pad.&smimeCaps | + kwa-aes256-wrap-pad.&smimeCaps, + ... } + + -- AES object identifier + + aes OBJECT IDENTIFIER ::= { + joint-iso-itu-t(2) country(16) us(840) organization(1) + gov(101) csor(3) nistAlgorithms(4) 1 } + + -- Content Encryption Algorithms + + cea-aes128-wrap-pad CONTENT-ENCRYPTION ::= { + IDENTIFIER id-aes128-wrap-pad + PARAMS ARE absent + SMIME-CAPS { IDENTIFIED BY id-aes128-wrap-pad } } + + cea-aes192-wrap-pad CONTENT-ENCRYPTION ::= { + IDENTIFIER id-aes192-wrap-pad + PARAMS ARE absent + SMIME-CAPS { IDENTIFIED BY id-aes192-wrap-pad } } + + cea-aes256-wrap-pad CONTENT-ENCRYPTION ::= { + IDENTIFIER id-aes256-wrap-pad + PARAMS ARE absent + SMIME-CAPS { IDENTIFIED BY id-aes256-wrap-pad } } + + -- Key Wrap Algorithms + + kwa-aes128-wrap-pad KEY-WRAP ::= { + IDENTIFIER id-aes128-wrap-pad + PARAMS ARE absent + SMIME-CAPS { IDENTIFIED BY id-aes128-wrap-pad } } + + id-aes128-wrap-pad OBJECT IDENTIFIER ::= { aes 8 } + + kwa-aes192-wrap-pad KEY-WRAP ::= { + IDENTIFIER id-aes192-wrap-pad + PARAMS ARE absent + SMIME-CAPS { IDENTIFIED BY id-aes192-wrap-pad } } + + id-aes192-wrap-pad OBJECT IDENTIFIER ::= { aes 28 } + + kwa-aes256-wrap-pad KEY-WRAP ::= { + IDENTIFIER id-aes256-wrap-pad + PARAMS ARE absent + SMIME-CAPS { IDENTIFIED BY id-aes256-wrap-pad } } + + id-aes256-wrap-pad OBJECT IDENTIFIER ::= { aes 48 } + + END diff --git a/priv/cms/AESKeyWrapWithPad-88.asn1 b/priv/cms/AESKeyWrapWithPad-88.asn1 new file mode 100644 index 0000000..0a9b4d0 --- /dev/null +++ b/priv/cms/AESKeyWrapWithPad-88.asn1 @@ -0,0 +1,25 @@ + AESKeyWrapWithPad-88 { iso(1) member-body(2) us(840) rsadsi(113549) + pkcs(1) pkcs-9(9) smime(16) modules(0) 47 } + + DEFINITIONS IMPLICIT TAGS ::= + + BEGIN + + -- EXPORTS ALL -- + + -- IMPORTS NONE -- + + -- AES information object identifiers -- + + aes OBJECT IDENTIFIER ::= { + joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) + csor(3) nistAlgorithms(4) 1 } + + -- AES Key Wrap With Padding Algorithm Identifiers are to be used + -- with the Parameter field absent + + id-aes128-wrap-pad OBJECT IDENTIFIER ::= { aes 8 } + id-aes192-wrap-pad OBJECT IDENTIFIER ::= { aes 28 } + id-aes256-wrap-pad OBJECT IDENTIFIER ::= { aes 48 } + + END diff --git a/src/CryptographicMessageSyntax-2009.erl b/src/CryptographicMessageSyntax-2009.erl index 263ca37..9ee3ab9 100644 --- a/src/CryptographicMessageSyntax-2009.erl +++ b/src/CryptographicMessageSyntax-2009.erl @@ -1,4 +1,4 @@ -%% Generated by the Erlang ASN.1 BER compiler. Version: 5.0.17 +%% Generated by the Erlang ASN.1 BER compiler. Version: 5.0.21 %% Purpose: Encoding and decoding of the types in CryptographicMessageSyntax-2009. -module('CryptographicMessageSyntax-2009'). @@ -6,13 +6,13 @@ -dialyzer(no_improper_lists). -dialyzer(no_match). -include("CryptographicMessageSyntax-2009.hrl"). --asn1_info([{vsn,'5.0.17'}, +-asn1_info([{vsn,'5.0.21'}, {module,'CryptographicMessageSyntax-2009'}, {options,[warnings,ber,errors, - {cwd,"/home/maxim/depot/synrc/ca/priv/cms"}, - {outdir,"/home/maxim/depot/synrc/ca/priv/cms"}, + {cwd,"/Users/maxim/depot/synrc/ca/priv/cms"}, + {outdir,"/Users/maxim/depot/synrc/ca/priv/cms"}, {i,"."}, - {i,"/home/maxim/depot/synrc/ca/priv/cms"}]}]). + {i,"/Users/maxim/depot/synrc/ca/priv/cms"}]}]). -export([encoding_rule/0,maps/0,bit_string_format/0, legacy_erlang_types/0]). @@ -190,25 +190,25 @@ getenc_MessageAuthenticationCodeAlgorithmSet/1, getenc_SupportedOtherRevokInfo/1, getenc_SupportedCertFormats/1, getenc_SupportedKeyAttributes/1, +getenc_internal_object_set_argument_57/1, +getenc_internal_object_set_argument_56/1, +getenc_internal_object_set_argument_54/1, +getenc_internal_object_set_argument_53/1, +getenc_internal_object_set_argument_52/1, +getenc_internal_object_set_argument_51/1, +getenc_internal_object_set_argument_50/1, +getenc_internal_object_set_argument_2/1, getenc_internal_object_set_argument_38/1, getenc_internal_object_set_argument_37/1, getenc_internal_object_set_argument_36/1, getenc_internal_object_set_argument_35/1, -getenc_internal_object_set_argument_2/1, getenc_internal_object_set_argument_48/1, getenc_internal_object_set_argument_46/1, getenc_internal_object_set_argument_44/1, getenc_internal_object_set_argument_42/1, getenc_internal_object_set_argument_40/1, -getenc_internal_object_set_argument_57/1, -getenc_internal_object_set_argument_56/1, -getenc_internal_object_set_argument_54/1, -getenc_internal_object_set_argument_53/1, getenc_internal_object_set_argument_13/1, -getenc_internal_object_set_argument_52/1, -getenc_internal_object_set_argument_51/1, -getenc_internal_object_set_argument_11/1, -getenc_internal_object_set_argument_50/1 +getenc_internal_object_set_argument_11/1 ]). -export([ @@ -230,25 +230,25 @@ getdec_MessageAuthenticationCodeAlgorithmSet/1, getdec_SupportedOtherRevokInfo/1, getdec_SupportedCertFormats/1, getdec_SupportedKeyAttributes/1, +getdec_internal_object_set_argument_57/1, +getdec_internal_object_set_argument_56/1, +getdec_internal_object_set_argument_54/1, +getdec_internal_object_set_argument_53/1, +getdec_internal_object_set_argument_52/1, +getdec_internal_object_set_argument_51/1, +getdec_internal_object_set_argument_50/1, +getdec_internal_object_set_argument_2/1, getdec_internal_object_set_argument_38/1, getdec_internal_object_set_argument_37/1, getdec_internal_object_set_argument_36/1, getdec_internal_object_set_argument_35/1, -getdec_internal_object_set_argument_2/1, getdec_internal_object_set_argument_48/1, getdec_internal_object_set_argument_46/1, getdec_internal_object_set_argument_44/1, getdec_internal_object_set_argument_42/1, getdec_internal_object_set_argument_40/1, -getdec_internal_object_set_argument_57/1, -getdec_internal_object_set_argument_56/1, -getdec_internal_object_set_argument_54/1, -getdec_internal_object_set_argument_53/1, getdec_internal_object_set_argument_13/1, -getdec_internal_object_set_argument_52/1, -getdec_internal_object_set_argument_51/1, -getdec_internal_object_set_argument_11/1, -getdec_internal_object_set_argument_50/1 +getdec_internal_object_set_argument_11/1 ]). -export([ @@ -5380,11 +5380,15 @@ getdec_SupportedKeyAttributes(_) -> %%================================ -%% internal_object_set_argument_38 +%% internal_object_set_argument_57 %%================================ -getenc_internal_object_set_argument_38(Id) when Id =:= {1,2,840,113549,1,9,6} -> - fun 'enc_aa-countersignature'/3; -getenc_internal_object_set_argument_38(_) -> +getenc_internal_object_set_argument_57(Id) when Id =:= {1,2,840,113549,1,9,3} -> + fun 'enc_aa-contentType'/3; +getenc_internal_object_set_argument_57(Id) when Id =:= {1,2,840,113549,1,9,4} -> + fun 'enc_aa-messageDigest'/3; +getenc_internal_object_set_argument_57(Id) when Id =:= {1,2,840,113549,1,9,5} -> + fun 'enc_aa-signingTime'/3; +getenc_internal_object_set_argument_57(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5392,9 +5396,13 @@ getenc_internal_object_set_argument_38(_) -> end end. -getdec_internal_object_set_argument_38(Id) when Id =:= {1,2,840,113549,1,9,6} -> - fun 'dec_aa-countersignature'/3; -getdec_internal_object_set_argument_38(_) -> +getdec_internal_object_set_argument_57(Id) when Id =:= {1,2,840,113549,1,9,3} -> + fun 'dec_aa-contentType'/3; +getdec_internal_object_set_argument_57(Id) when Id =:= {1,2,840,113549,1,9,4} -> + fun 'dec_aa-messageDigest'/3; +getdec_internal_object_set_argument_57(Id) when Id =:= {1,2,840,113549,1,9,5} -> + fun 'dec_aa-signingTime'/3; +getdec_internal_object_set_argument_57(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5409,11 +5417,11 @@ getdec_internal_object_set_argument_38(_) -> %%================================ -%% internal_object_set_argument_37 +%% internal_object_set_argument_56 %%================================ -getenc_internal_object_set_argument_37(Id) when Id =:= {1,2,840,113549,1,9,6} -> - fun 'enc_aa-countersignature'/3; -getenc_internal_object_set_argument_37(_) -> +getenc_internal_object_set_argument_56(Id) when Id =:= {1,3,6,1,5,5,8,1,2} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_maca-hMAC-SHA1'(T,V,O) end; +getenc_internal_object_set_argument_56(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5421,9 +5429,9 @@ getenc_internal_object_set_argument_37(_) -> end end. -getdec_internal_object_set_argument_37(Id) when Id =:= {1,2,840,113549,1,9,6} -> - fun 'dec_aa-countersignature'/3; -getdec_internal_object_set_argument_37(_) -> +getdec_internal_object_set_argument_56(Id) when Id =:= {1,3,6,1,5,5,8,1,2} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_maca-hMAC-SHA1'(T,V,O) end; +getdec_internal_object_set_argument_56(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5438,15 +5446,9 @@ getdec_internal_object_set_argument_37(_) -> %%================================ -%% internal_object_set_argument_36 +%% internal_object_set_argument_54 %%================================ -getenc_internal_object_set_argument_36(Id) when Id =:= {1,2,840,113549,1,9,3} -> - fun 'enc_aa-contentType'/3; -getenc_internal_object_set_argument_36(Id) when Id =:= {1,2,840,113549,1,9,4} -> - fun 'enc_aa-messageDigest'/3; -getenc_internal_object_set_argument_36(Id) when Id =:= {1,2,840,113549,1,9,5} -> - fun 'enc_aa-signingTime'/3; -getenc_internal_object_set_argument_36(_) -> +getenc_internal_object_set_argument_54(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5454,13 +5456,7 @@ getenc_internal_object_set_argument_36(_) -> end end. -getdec_internal_object_set_argument_36(Id) when Id =:= {1,2,840,113549,1,9,3} -> - fun 'dec_aa-contentType'/3; -getdec_internal_object_set_argument_36(Id) when Id =:= {1,2,840,113549,1,9,4} -> - fun 'dec_aa-messageDigest'/3; -getdec_internal_object_set_argument_36(Id) when Id =:= {1,2,840,113549,1,9,5} -> - fun 'dec_aa-signingTime'/3; -getdec_internal_object_set_argument_36(_) -> +getdec_internal_object_set_argument_54(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5475,15 +5471,9 @@ getdec_internal_object_set_argument_36(_) -> %%================================ -%% internal_object_set_argument_35 +%% internal_object_set_argument_53 %%================================ -getenc_internal_object_set_argument_35(Id) when Id =:= {1,2,840,113549,1,9,3} -> - fun 'enc_aa-contentType'/3; -getenc_internal_object_set_argument_35(Id) when Id =:= {1,2,840,113549,1,9,4} -> - fun 'enc_aa-messageDigest'/3; -getenc_internal_object_set_argument_35(Id) when Id =:= {1,2,840,113549,1,9,5} -> - fun 'enc_aa-signingTime'/3; -getenc_internal_object_set_argument_35(_) -> +getenc_internal_object_set_argument_53(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5491,13 +5481,7 @@ getenc_internal_object_set_argument_35(_) -> end end. -getdec_internal_object_set_argument_35(Id) when Id =:= {1,2,840,113549,1,9,3} -> - fun 'dec_aa-contentType'/3; -getdec_internal_object_set_argument_35(Id) when Id =:= {1,2,840,113549,1,9,4} -> - fun 'dec_aa-messageDigest'/3; -getdec_internal_object_set_argument_35(Id) when Id =:= {1,2,840,113549,1,9,5} -> - fun 'dec_aa-signingTime'/3; -getdec_internal_object_set_argument_35(_) -> +getdec_internal_object_set_argument_53(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5512,9 +5496,9 @@ getdec_internal_object_set_argument_35(_) -> %%================================ -%% internal_object_set_argument_2 +%% internal_object_set_argument_52 %%================================ -getenc_internal_object_set_argument_2(_) -> +getenc_internal_object_set_argument_52(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5522,7 +5506,7 @@ getenc_internal_object_set_argument_2(_) -> end end. -getdec_internal_object_set_argument_2(_) -> +getdec_internal_object_set_argument_52(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5537,11 +5521,9 @@ getdec_internal_object_set_argument_2(_) -> %%================================ -%% internal_object_set_argument_48 +%% internal_object_set_argument_51 %%================================ -getenc_internal_object_set_argument_48(Id) when Id =:= {1,2,840,113549,1,5,12} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_kda-PBKDF2'(T,V,O) end; -getenc_internal_object_set_argument_48(_) -> +getenc_internal_object_set_argument_51(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5549,9 +5531,7 @@ getenc_internal_object_set_argument_48(_) -> end end. -getdec_internal_object_set_argument_48(Id) when Id =:= {1,2,840,113549,1,5,12} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_kda-PBKDF2'(T,V,O) end; -getdec_internal_object_set_argument_48(_) -> +getdec_internal_object_set_argument_51(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5566,13 +5546,13 @@ getdec_internal_object_set_argument_48(_) -> %%================================ -%% internal_object_set_argument_46 +%% internal_object_set_argument_50 %%================================ -getenc_internal_object_set_argument_46(Id) when Id =:= {1,2,840,113549,1,9,16,3,6} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_kwa-3DESWrap'(T,V,O) end; -getenc_internal_object_set_argument_46(Id) when Id =:= {1,2,840,113549,1,9,16,3,7} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_kwa-RC2Wrap'(T,V,O) end; -getenc_internal_object_set_argument_46(_) -> +getenc_internal_object_set_argument_50(Id) when Id =:= {1,2,840,113549,3,2} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_cea-RC2-cbc'(T,V,O) end; +getenc_internal_object_set_argument_50(Id) when Id =:= {1,2,840,113549,3,7} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_cea-3DES-cbc'(T,V,O) end; +getenc_internal_object_set_argument_50(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5580,11 +5560,11 @@ getenc_internal_object_set_argument_46(_) -> end end. -getdec_internal_object_set_argument_46(Id) when Id =:= {1,2,840,113549,1,9,16,3,6} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_kwa-3DESWrap'(T,V,O) end; -getdec_internal_object_set_argument_46(Id) when Id =:= {1,2,840,113549,1,9,16,3,7} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_kwa-RC2Wrap'(T,V,O) end; -getdec_internal_object_set_argument_46(_) -> +getdec_internal_object_set_argument_50(Id) when Id =:= {1,2,840,113549,3,2} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_cea-RC2-cbc'(T,V,O) end; +getdec_internal_object_set_argument_50(Id) when Id =:= {1,2,840,113549,3,7} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_cea-3DES-cbc'(T,V,O) end; +getdec_internal_object_set_argument_50(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5599,13 +5579,9 @@ getdec_internal_object_set_argument_46(_) -> %%================================ -%% internal_object_set_argument_44 +%% internal_object_set_argument_2 %%================================ -getenc_internal_object_set_argument_44(Id) when Id =:= {1,2,840,113549,1,9,16,3,5} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_kaa-esdh'(T,V,O) end; -getenc_internal_object_set_argument_44(Id) when Id =:= {1,2,840,113549,1,9,16,3,10} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_kaa-ssdh'(T,V,O) end; -getenc_internal_object_set_argument_44(_) -> +getenc_internal_object_set_argument_2(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5613,11 +5589,7 @@ getenc_internal_object_set_argument_44(_) -> end end. -getdec_internal_object_set_argument_44(Id) when Id =:= {1,2,840,113549,1,9,16,3,5} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_kaa-esdh'(T,V,O) end; -getdec_internal_object_set_argument_44(Id) when Id =:= {1,2,840,113549,1,9,16,3,10} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_kaa-ssdh'(T,V,O) end; -getdec_internal_object_set_argument_44(_) -> +getdec_internal_object_set_argument_2(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5632,11 +5604,11 @@ getdec_internal_object_set_argument_44(_) -> %%================================ -%% internal_object_set_argument_42 +%% internal_object_set_argument_38 %%================================ -getenc_internal_object_set_argument_42(Id) when Id =:= {1,2,840,10046,2,1} -> - fun(T,V,O) -> 'PKIXAlgs-2009':'enc_pk-dh'(T,V,O) end; -getenc_internal_object_set_argument_42(_) -> +getenc_internal_object_set_argument_38(Id) when Id =:= {1,2,840,113549,1,9,6} -> + fun 'enc_aa-countersignature'/3; +getenc_internal_object_set_argument_38(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5644,9 +5616,9 @@ getenc_internal_object_set_argument_42(_) -> end end. -getdec_internal_object_set_argument_42(Id) when Id =:= {1,2,840,10046,2,1} -> - fun(T,V,O) -> 'PKIXAlgs-2009':'dec_pk-dh'(T,V,O) end; -getdec_internal_object_set_argument_42(_) -> +getdec_internal_object_set_argument_38(Id) when Id =:= {1,2,840,113549,1,9,6} -> + fun 'dec_aa-countersignature'/3; +getdec_internal_object_set_argument_38(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5661,11 +5633,11 @@ getdec_internal_object_set_argument_42(_) -> %%================================ -%% internal_object_set_argument_40 +%% internal_object_set_argument_37 %%================================ -getenc_internal_object_set_argument_40(Id) when Id =:= {1,2,840,113549,1,1,1} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_kt-rsa'(T,V,O) end; -getenc_internal_object_set_argument_40(_) -> +getenc_internal_object_set_argument_37(Id) when Id =:= {1,2,840,113549,1,9,6} -> + fun 'enc_aa-countersignature'/3; +getenc_internal_object_set_argument_37(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5673,9 +5645,9 @@ getenc_internal_object_set_argument_40(_) -> end end. -getdec_internal_object_set_argument_40(Id) when Id =:= {1,2,840,113549,1,1,1} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_kt-rsa'(T,V,O) end; -getdec_internal_object_set_argument_40(_) -> +getdec_internal_object_set_argument_37(Id) when Id =:= {1,2,840,113549,1,9,6} -> + fun 'dec_aa-countersignature'/3; +getdec_internal_object_set_argument_37(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5690,15 +5662,15 @@ getdec_internal_object_set_argument_40(_) -> %%================================ -%% internal_object_set_argument_57 +%% internal_object_set_argument_36 %%================================ -getenc_internal_object_set_argument_57(Id) when Id =:= {1,2,840,113549,1,9,3} -> +getenc_internal_object_set_argument_36(Id) when Id =:= {1,2,840,113549,1,9,3} -> fun 'enc_aa-contentType'/3; -getenc_internal_object_set_argument_57(Id) when Id =:= {1,2,840,113549,1,9,4} -> +getenc_internal_object_set_argument_36(Id) when Id =:= {1,2,840,113549,1,9,4} -> fun 'enc_aa-messageDigest'/3; -getenc_internal_object_set_argument_57(Id) when Id =:= {1,2,840,113549,1,9,5} -> +getenc_internal_object_set_argument_36(Id) when Id =:= {1,2,840,113549,1,9,5} -> fun 'enc_aa-signingTime'/3; -getenc_internal_object_set_argument_57(_) -> +getenc_internal_object_set_argument_36(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5706,13 +5678,13 @@ getenc_internal_object_set_argument_57(_) -> end end. -getdec_internal_object_set_argument_57(Id) when Id =:= {1,2,840,113549,1,9,3} -> +getdec_internal_object_set_argument_36(Id) when Id =:= {1,2,840,113549,1,9,3} -> fun 'dec_aa-contentType'/3; -getdec_internal_object_set_argument_57(Id) when Id =:= {1,2,840,113549,1,9,4} -> +getdec_internal_object_set_argument_36(Id) when Id =:= {1,2,840,113549,1,9,4} -> fun 'dec_aa-messageDigest'/3; -getdec_internal_object_set_argument_57(Id) when Id =:= {1,2,840,113549,1,9,5} -> +getdec_internal_object_set_argument_36(Id) when Id =:= {1,2,840,113549,1,9,5} -> fun 'dec_aa-signingTime'/3; -getdec_internal_object_set_argument_57(_) -> +getdec_internal_object_set_argument_36(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5727,11 +5699,15 @@ getdec_internal_object_set_argument_57(_) -> %%================================ -%% internal_object_set_argument_56 +%% internal_object_set_argument_35 %%================================ -getenc_internal_object_set_argument_56(Id) when Id =:= {1,3,6,1,5,5,8,1,2} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_maca-hMAC-SHA1'(T,V,O) end; -getenc_internal_object_set_argument_56(_) -> +getenc_internal_object_set_argument_35(Id) when Id =:= {1,2,840,113549,1,9,3} -> + fun 'enc_aa-contentType'/3; +getenc_internal_object_set_argument_35(Id) when Id =:= {1,2,840,113549,1,9,4} -> + fun 'enc_aa-messageDigest'/3; +getenc_internal_object_set_argument_35(Id) when Id =:= {1,2,840,113549,1,9,5} -> + fun 'enc_aa-signingTime'/3; +getenc_internal_object_set_argument_35(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5739,9 +5715,13 @@ getenc_internal_object_set_argument_56(_) -> end end. -getdec_internal_object_set_argument_56(Id) when Id =:= {1,3,6,1,5,5,8,1,2} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_maca-hMAC-SHA1'(T,V,O) end; -getdec_internal_object_set_argument_56(_) -> +getdec_internal_object_set_argument_35(Id) when Id =:= {1,2,840,113549,1,9,3} -> + fun 'dec_aa-contentType'/3; +getdec_internal_object_set_argument_35(Id) when Id =:= {1,2,840,113549,1,9,4} -> + fun 'dec_aa-messageDigest'/3; +getdec_internal_object_set_argument_35(Id) when Id =:= {1,2,840,113549,1,9,5} -> + fun 'dec_aa-signingTime'/3; +getdec_internal_object_set_argument_35(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5756,9 +5736,11 @@ getdec_internal_object_set_argument_56(_) -> %%================================ -%% internal_object_set_argument_54 +%% internal_object_set_argument_48 %%================================ -getenc_internal_object_set_argument_54(_) -> +getenc_internal_object_set_argument_48(Id) when Id =:= {1,2,840,113549,1,5,12} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_kda-PBKDF2'(T,V,O) end; +getenc_internal_object_set_argument_48(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5766,7 +5748,9 @@ getenc_internal_object_set_argument_54(_) -> end end. -getdec_internal_object_set_argument_54(_) -> +getdec_internal_object_set_argument_48(Id) when Id =:= {1,2,840,113549,1,5,12} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_kda-PBKDF2'(T,V,O) end; +getdec_internal_object_set_argument_48(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5781,9 +5765,13 @@ getdec_internal_object_set_argument_54(_) -> %%================================ -%% internal_object_set_argument_53 +%% internal_object_set_argument_46 %%================================ -getenc_internal_object_set_argument_53(_) -> +getenc_internal_object_set_argument_46(Id) when Id =:= {1,2,840,113549,1,9,16,3,6} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_kwa-3DESWrap'(T,V,O) end; +getenc_internal_object_set_argument_46(Id) when Id =:= {1,2,840,113549,1,9,16,3,7} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_kwa-RC2Wrap'(T,V,O) end; +getenc_internal_object_set_argument_46(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5791,7 +5779,11 @@ getenc_internal_object_set_argument_53(_) -> end end. -getdec_internal_object_set_argument_53(_) -> +getdec_internal_object_set_argument_46(Id) when Id =:= {1,2,840,113549,1,9,16,3,6} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_kwa-3DESWrap'(T,V,O) end; +getdec_internal_object_set_argument_46(Id) when Id =:= {1,2,840,113549,1,9,16,3,7} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_kwa-RC2Wrap'(T,V,O) end; +getdec_internal_object_set_argument_46(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5806,9 +5798,13 @@ getdec_internal_object_set_argument_53(_) -> %%================================ -%% internal_object_set_argument_13 +%% internal_object_set_argument_44 %%================================ -getenc_internal_object_set_argument_13(_) -> +getenc_internal_object_set_argument_44(Id) when Id =:= {1,2,840,113549,1,9,16,3,5} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_kaa-esdh'(T,V,O) end; +getenc_internal_object_set_argument_44(Id) when Id =:= {1,2,840,113549,1,9,16,3,10} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_kaa-ssdh'(T,V,O) end; +getenc_internal_object_set_argument_44(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5816,7 +5812,11 @@ getenc_internal_object_set_argument_13(_) -> end end. -getdec_internal_object_set_argument_13(_) -> +getdec_internal_object_set_argument_44(Id) when Id =:= {1,2,840,113549,1,9,16,3,5} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_kaa-esdh'(T,V,O) end; +getdec_internal_object_set_argument_44(Id) when Id =:= {1,2,840,113549,1,9,16,3,10} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_kaa-ssdh'(T,V,O) end; +getdec_internal_object_set_argument_44(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5831,9 +5831,11 @@ getdec_internal_object_set_argument_13(_) -> %%================================ -%% internal_object_set_argument_52 +%% internal_object_set_argument_42 %%================================ -getenc_internal_object_set_argument_52(_) -> +getenc_internal_object_set_argument_42(Id) when Id =:= {1,2,840,10046,2,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_pk-dh'(T,V,O) end; +getenc_internal_object_set_argument_42(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5841,7 +5843,9 @@ getenc_internal_object_set_argument_52(_) -> end end. -getdec_internal_object_set_argument_52(_) -> +getdec_internal_object_set_argument_42(Id) when Id =:= {1,2,840,10046,2,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_pk-dh'(T,V,O) end; +getdec_internal_object_set_argument_42(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5856,9 +5860,11 @@ getdec_internal_object_set_argument_52(_) -> %%================================ -%% internal_object_set_argument_51 +%% internal_object_set_argument_40 %%================================ -getenc_internal_object_set_argument_51(_) -> +getenc_internal_object_set_argument_40(Id) when Id =:= {1,2,840,113549,1,1,1} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_kt-rsa'(T,V,O) end; +getenc_internal_object_set_argument_40(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5866,7 +5872,9 @@ getenc_internal_object_set_argument_51(_) -> end end. -getdec_internal_object_set_argument_51(_) -> +getdec_internal_object_set_argument_40(Id) when Id =:= {1,2,840,113549,1,1,1} -> + fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_kt-rsa'(T,V,O) end; +getdec_internal_object_set_argument_40(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5881,9 +5889,9 @@ getdec_internal_object_set_argument_51(_) -> %%================================ -%% internal_object_set_argument_11 +%% internal_object_set_argument_13 %%================================ -getenc_internal_object_set_argument_11(_) -> +getenc_internal_object_set_argument_13(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5891,7 +5899,7 @@ getenc_internal_object_set_argument_11(_) -> end end. -getdec_internal_object_set_argument_11(_) -> +getdec_internal_object_set_argument_13(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -5906,13 +5914,9 @@ getdec_internal_object_set_argument_11(_) -> %%================================ -%% internal_object_set_argument_50 +%% internal_object_set_argument_11 %%================================ -getenc_internal_object_set_argument_50(Id) when Id =:= {1,2,840,113549,3,2} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_cea-RC2-cbc'(T,V,O) end; -getenc_internal_object_set_argument_50(Id) when Id =:= {1,2,840,113549,3,7} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'enc_cea-3DES-cbc'(T,V,O) end; -getenc_internal_object_set_argument_50(_) -> +getenc_internal_object_set_argument_11(_) -> fun(_, Val, _RestPrimFieldName) -> case Val of {asn1_OPENTYPE,Bin} when is_binary(Bin) -> @@ -5920,11 +5924,7 @@ getenc_internal_object_set_argument_50(_) -> end end. -getdec_internal_object_set_argument_50(Id) when Id =:= {1,2,840,113549,3,2} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_cea-RC2-cbc'(T,V,O) end; -getdec_internal_object_set_argument_50(Id) when Id =:= {1,2,840,113549,3,7} -> - fun(T,V,O) -> 'CryptographicMessageSyntaxAlgorithms-2009':'dec_cea-3DES-cbc'(T,V,O) end; -getdec_internal_object_set_argument_50(_) -> +getdec_internal_object_set_argument_11(_) -> fun(_,Bytes, _RestPrimFieldName) -> case Bytes of Bin when is_binary(Bin) -> @@ -6062,7 +6062,7 @@ encode_integer(Val, Tag) when is_integer(Val) -> encode_integer(Val, _Tag) -> exit({error, {asn1, {encode_integer, Val}}}). -encode_integer_neg(- 1, [B1 | _T] = L) when B1 > 127 -> +encode_integer_neg(-1, [B1 | _T] = L) when B1 > 127 -> L; encode_integer_neg(N, Acc) -> encode_integer_neg(N bsr 8, [N band 255 | Acc]). diff --git a/src/CryptographicMessageSyntax-2009.hrl b/src/CryptographicMessageSyntax-2009.hrl index 5c08af0..2f3fafa 100644 --- a/src/CryptographicMessageSyntax-2009.hrl +++ b/src/CryptographicMessageSyntax-2009.hrl @@ -1,4 +1,4 @@ -%% Generated by the Erlang ASN.1 compiler. Version: 5.0.17 +%% Generated by the Erlang ASN.1 compiler. Version: 5.0.21 %% Purpose: Erlang record definitions for each named and unnamed %% SEQUENCE and SET, and macro definitions for each value %% definition in module CryptographicMessageSyntax-2009. diff --git a/src/oid.erl b/src/oid.erl index c9becd5..6722db6 100644 --- a/src/oid.erl +++ b/src/oid.erl @@ -1,5 +1,10 @@ -module(oid). --export([decode/1]). +-export([decode/1, hex/1, unhex/1]). + +digit(X) when X >= 0 andalso X =< 9 -> X + 48; +digit(X) when X >= 10 andalso X =< 15 -> X + 87. +hex(Bin) -> << << (digit(A1)),(digit(A2)) >> || <> <= Bin >>. +unhex(Hex) -> << << (erlang:list_to_integer([H1,H2], 16)) >> || <> <= Hex >>. match_tags({T, V}, [T]) -> V; match_tags({T, V}, [T | Tt]) -> match_tags(V, Tt);