diff --git a/lib/cmp.ex b/lib/cmp.ex index dbbca7c..1f26f0d 100644 --- a/lib/cmp.ex +++ b/lib/cmp.ex @@ -1,5 +1,10 @@ defmodule CA.CMP do + # IETF 2510:2005 X.509 PKI CMP + + # openssl cmp -cmd genm -server 127.0.0.1:829 \ + # -recipient "/CN=CMPserver" -ref 1234 -secret pass:0000 + def start(), do: :erlang.spawn(fn -> listen(829) end) def listen(port) do {:ok, socket} = :gen_tcp.listen(port, @@ -14,11 +19,11 @@ defmodule CA.CMP do def loop(socket) do case :gen_tcp.recv(socket, 0) do {:ok, data} -> - :io.format '~p~n', [data] - case :'LDAP'.decode(:'LDAPMessage',data) do - {:ok,decoded} -> :io.format '~p~n', [decoded] ; loop(socket) - {:error,_} -> :exit - end + {{_,headers},asn} = :asn1rt_nif.decode_ber_tlv(data) + [_,body] = :string.split asn, "\r\n\r\n", :all + dec = :'PKIXCMP-2009'.decode(:'PKIMessage', body) + :io.format 'CMP: ~ps~n', [dec] + loop(socket) {:error, :closed} -> :exit end end diff --git a/lib/cms.ex b/lib/cms.ex index f86d9aa..6b6bbcf 100644 --- a/lib/cms.ex +++ b/lib/cms.ex @@ -20,8 +20,8 @@ defmodule CA.CMS do sharedKey = :crypto.compute_key(:ecdh,publicKey,privateKeyBin,scheme) {_,payload} = :'CMSECCAlgs-2009-02'.encode(:'ECC-CMS-SharedInfo', sharedInfo(ukm,256)) derived = case map(kdf) do - {:kdf,hash} -> KDF.derive({:kdf,hash}, sharedKey, 32, payload) - {:hkdf,hash} -> HKDF.derive({:kdf,hash}, sharedKey, 32, payload) + {:kdf,hash} -> CA.KDF.derive({:kdf,hash}, sharedKey, 32, payload) + {:hkdf,hash} -> CA.HKDF.derive({:kdf,hash}, sharedKey, 32, payload) end unwrap = CA.AES.KW.unwrap(encryptedKey, derived) res = CA.AES.decrypt(enc, data, unwrap, iv) diff --git a/lib/cms_test.ex b/lib/cms_test.ex index f57f250..1960eb3 100644 --- a/lib/cms_test.ex +++ b/lib/cms_test.ex @@ -96,7 +96,7 @@ defmodule CA.CMS.Test do [{:kari,{_,:v3,{_,{_,_,publicKey}},ukm,_,[{_,_,encryptedKey}]}}|_] = x sharedKey = :crypto.compute_key(:ecdh,publicKey,privateKey,scheme) {_,content} = :'CMSECCAlgs-2009-02'.encode(:'ECC-CMS-SharedInfo', CA.CMS.sharedInfo(ukm,256)) - kdf = KDF.derive({:kdf, :sha256}, sharedKey, 32, content) + kdf = CA.KDF.derive({:kdf, :sha256}, sharedKey, 32, content) unwrap = :aes_kw.unwrap(encryptedKey, kdf) CA.AES.decrypt(:'id-aes256-CBC', data, unwrap, iv) end diff --git a/lib/csr.ex b/lib/csr.ex index e6cf0d7..4dc9c23 100644 --- a/lib/csr.ex +++ b/lib/csr.ex @@ -1,4 +1,4 @@ -defmodule CSR do +defmodule CA.CSR do def ca() do ca_key = X509.PrivateKey.new_ec(:sect571r1) diff --git a/lib/hkdf.ex b/lib/hkdf.ex index 451c7ce..7d326df 100644 --- a/lib/hkdf.ex +++ b/lib/hkdf.ex @@ -1,4 +1,4 @@ -defmodule HKDF do +defmodule CA.HKDF do def hl(:sha), do: 20 def hl(:sha224), do: 28 diff --git a/lib/kdf.ex b/lib/kdf.ex index 91bac2d..1bf483d 100644 --- a/lib/kdf.ex +++ b/lib/kdf.ex @@ -1,4 +1,4 @@ -defmodule KDF do +defmodule CA.KDF do def hl(:md5), do: 16 def hl(:sha), do: 20 diff --git a/lib/ldap.ex b/lib/ldap.ex index a4ef4cd..ef30d7d 100644 --- a/lib/ldap.ex +++ b/lib/ldap.ex @@ -1,5 +1,4 @@ defmodule CA.LDAP do - def start(), do: :erlang.spawn(fn -> listen(389) end) def listen(port) do {:ok, socket} = :gen_tcp.listen(port, @@ -14,9 +13,8 @@ defmodule CA.LDAP do def loop(socket) do case :gen_tcp.recv(socket, 0) do {:ok, data} -> - :io.format '~p~n', [data] case :'LDAP'.decode(:'LDAPMessage',data) do - {:ok,decoded} -> :io.format '~p~n', [decoded] ; loop(socket) + {:ok,decoded} -> :io.format 'LDAP: ~p~n', [decoded] ; loop(socket) {:error,_} -> :exit end {:error, :closed} -> :exit diff --git a/src/LDAP.erl b/src/LDAP.erl new file mode 100644 index 0000000..d282953 --- /dev/null +++ b/src/LDAP.erl @@ -0,0 +1,3208 @@ +%% Generated by the Erlang ASN.1 BER compiler. Version: 5.0.21 +%% Purpose: Encoding and decoding of the types in LDAP. + +-module('LDAP'). +-compile(nowarn_unused_vars). +-dialyzer(no_improper_lists). +-dialyzer(no_match). +-include("LDAP.hrl"). +-asn1_info([{vsn,'5.0.21'}, + {module,'LDAP'}, + {options,[warnings,ber,errors, + {cwd,"/Users/maxim/depot/synrc/ca/priv/ldap"}, + {outdir,"/Users/maxim/depot/synrc/ca/priv/ldap"}, + {i,"."}, + {i,"/Users/maxim/depot/synrc/ca/priv/ldap"}]}]). + +-export([encoding_rule/0,maps/0,bit_string_format/0, + legacy_erlang_types/0]). +-export(['dialyzer-suppressions'/1]). +-export([ +enc_LDAPMessage/2, +enc_MessageID/2, +enc_LDAPString/2, +enc_LDAPOID/2, +enc_LDAPDN/2, +enc_RelativeLDAPDN/2, +enc_AttributeDescription/2, +enc_AttributeValue/2, +enc_AttributeValueAssertion/2, +enc_AssertionValue/2, +enc_PartialAttribute/2, +enc_Attribute/2, +enc_MatchingRuleId/2, +enc_LDAPResult/2, +enc_Referral/2, +enc_URI/2, +enc_Controls/2, +enc_Control/2, +enc_BindRequest/2, +enc_AuthenticationChoice/2, +enc_SaslCredentials/2, +enc_BindResponse/2, +enc_UnbindRequest/2, +enc_SearchRequest/2, +enc_AttributeSelection/2, +enc_Filter/2, +enc_SubstringFilter/2, +enc_MatchingRuleAssertion/2, +enc_SearchResultEntry/2, +enc_PartialAttributeList/2, +enc_SearchResultReference/2, +enc_SearchResultDone/2, +enc_ModifyRequest/2, +enc_ModifyResponse/2, +enc_AddRequest/2, +enc_AttributeList/2, +enc_AddResponse/2, +enc_DelRequest/2, +enc_DelResponse/2, +enc_ModifyDNRequest/2, +enc_ModifyDNResponse/2, +enc_CompareRequest/2, +enc_CompareResponse/2, +enc_AbandonRequest/2, +enc_ExtendedRequest/2, +enc_ExtendedResponse/2, +enc_IntermediateResponse/2 +]). + +-export([ +dec_LDAPMessage/2, +dec_MessageID/2, +dec_LDAPString/2, +dec_LDAPOID/2, +dec_LDAPDN/2, +dec_RelativeLDAPDN/2, +dec_AttributeDescription/2, +dec_AttributeValue/2, +dec_AttributeValueAssertion/2, +dec_AssertionValue/2, +dec_PartialAttribute/2, +dec_Attribute/2, +dec_MatchingRuleId/2, +dec_LDAPResult/2, +dec_Referral/2, +dec_URI/2, +dec_Controls/2, +dec_Control/2, +dec_BindRequest/2, +dec_AuthenticationChoice/2, +dec_SaslCredentials/2, +dec_BindResponse/2, +dec_UnbindRequest/2, +dec_SearchRequest/2, +dec_AttributeSelection/2, +dec_Filter/2, +dec_SubstringFilter/2, +dec_MatchingRuleAssertion/2, +dec_SearchResultEntry/2, +dec_PartialAttributeList/2, +dec_SearchResultReference/2, +dec_SearchResultDone/2, +dec_ModifyRequest/2, +dec_ModifyResponse/2, +dec_AddRequest/2, +dec_AttributeList/2, +dec_AddResponse/2, +dec_DelRequest/2, +dec_DelResponse/2, +dec_ModifyDNRequest/2, +dec_ModifyDNResponse/2, +dec_CompareRequest/2, +dec_CompareResponse/2, +dec_AbandonRequest/2, +dec_ExtendedRequest/2, +dec_ExtendedResponse/2, +dec_IntermediateResponse/2 +]). + +-export([ +maxInt/0 +]). + +-export([info/0]). + +-export([encode/2,decode/2]). + +encoding_rule() -> ber. + +maps() -> false. + +bit_string_format() -> bitstring. + +legacy_erlang_types() -> false. + +encode(Type, Data) -> +try iolist_to_binary(element(1, encode_disp(Type, Data))) of + Bytes -> + {ok,Bytes} + catch + Class:Exception:Stk when Class =:= error; Class =:= exit -> + case Exception of + {error,{asn1,Reason}} -> + {error,{asn1,{Reason,Stk}}}; + Reason -> + {error,{asn1,{Reason,Stk}}} + end +end. + +decode(Type, Data) -> +try + Result = decode_disp(Type, element(1, ber_decode_nif(Data))), + {ok,Result} + catch + Class:Exception:Stk when Class =:= error; Class =:= exit -> + case Exception of + {error,{asn1,Reason}} -> + {error,{asn1,{Reason,Stk}}}; + Reason -> + {error,{asn1,{Reason,Stk}}} + end +end. + +encode_disp('LDAPMessage', Data) -> enc_LDAPMessage(Data); +encode_disp('MessageID', Data) -> enc_MessageID(Data); +encode_disp('LDAPString', Data) -> enc_LDAPString(Data); +encode_disp('LDAPOID', Data) -> enc_LDAPOID(Data); +encode_disp('LDAPDN', Data) -> enc_LDAPDN(Data); +encode_disp('RelativeLDAPDN', Data) -> enc_RelativeLDAPDN(Data); +encode_disp('AttributeDescription', Data) -> enc_AttributeDescription(Data); +encode_disp('AttributeValue', Data) -> enc_AttributeValue(Data); +encode_disp('AttributeValueAssertion', Data) -> enc_AttributeValueAssertion(Data); +encode_disp('AssertionValue', Data) -> enc_AssertionValue(Data); +encode_disp('PartialAttribute', Data) -> enc_PartialAttribute(Data); +encode_disp('Attribute', Data) -> enc_Attribute(Data); +encode_disp('MatchingRuleId', Data) -> enc_MatchingRuleId(Data); +encode_disp('LDAPResult', Data) -> enc_LDAPResult(Data); +encode_disp('Referral', Data) -> enc_Referral(Data); +encode_disp('URI', Data) -> enc_URI(Data); +encode_disp('Controls', Data) -> enc_Controls(Data); +encode_disp('Control', Data) -> enc_Control(Data); +encode_disp('BindRequest', Data) -> enc_BindRequest(Data); +encode_disp('AuthenticationChoice', Data) -> enc_AuthenticationChoice(Data); +encode_disp('SaslCredentials', Data) -> enc_SaslCredentials(Data); +encode_disp('BindResponse', Data) -> enc_BindResponse(Data); +encode_disp('UnbindRequest', Data) -> enc_UnbindRequest(Data); +encode_disp('SearchRequest', Data) -> enc_SearchRequest(Data); +encode_disp('AttributeSelection', Data) -> enc_AttributeSelection(Data); +encode_disp('Filter', Data) -> enc_Filter(Data); +encode_disp('SubstringFilter', Data) -> enc_SubstringFilter(Data); +encode_disp('MatchingRuleAssertion', Data) -> enc_MatchingRuleAssertion(Data); +encode_disp('SearchResultEntry', Data) -> enc_SearchResultEntry(Data); +encode_disp('PartialAttributeList', Data) -> enc_PartialAttributeList(Data); +encode_disp('SearchResultReference', Data) -> enc_SearchResultReference(Data); +encode_disp('SearchResultDone', Data) -> enc_SearchResultDone(Data); +encode_disp('ModifyRequest', Data) -> enc_ModifyRequest(Data); +encode_disp('ModifyResponse', Data) -> enc_ModifyResponse(Data); +encode_disp('AddRequest', Data) -> enc_AddRequest(Data); +encode_disp('AttributeList', Data) -> enc_AttributeList(Data); +encode_disp('AddResponse', Data) -> enc_AddResponse(Data); +encode_disp('DelRequest', Data) -> enc_DelRequest(Data); +encode_disp('DelResponse', Data) -> enc_DelResponse(Data); +encode_disp('ModifyDNRequest', Data) -> enc_ModifyDNRequest(Data); +encode_disp('ModifyDNResponse', Data) -> enc_ModifyDNResponse(Data); +encode_disp('CompareRequest', Data) -> enc_CompareRequest(Data); +encode_disp('CompareResponse', Data) -> enc_CompareResponse(Data); +encode_disp('AbandonRequest', Data) -> enc_AbandonRequest(Data); +encode_disp('ExtendedRequest', Data) -> enc_ExtendedRequest(Data); +encode_disp('ExtendedResponse', Data) -> enc_ExtendedResponse(Data); +encode_disp('IntermediateResponse', Data) -> enc_IntermediateResponse(Data); +encode_disp(Type, _Data) -> exit({error,{asn1,{undefined_type,Type}}}). + +decode_disp('LDAPMessage', Data) -> dec_LDAPMessage(Data); +decode_disp('MessageID', Data) -> dec_MessageID(Data); +decode_disp('LDAPString', Data) -> dec_LDAPString(Data); +decode_disp('LDAPOID', Data) -> dec_LDAPOID(Data); +decode_disp('LDAPDN', Data) -> dec_LDAPDN(Data); +decode_disp('RelativeLDAPDN', Data) -> dec_RelativeLDAPDN(Data); +decode_disp('AttributeDescription', Data) -> dec_AttributeDescription(Data); +decode_disp('AttributeValue', Data) -> dec_AttributeValue(Data); +decode_disp('AttributeValueAssertion', Data) -> dec_AttributeValueAssertion(Data); +decode_disp('AssertionValue', Data) -> dec_AssertionValue(Data); +decode_disp('PartialAttribute', Data) -> dec_PartialAttribute(Data); +decode_disp('Attribute', Data) -> dec_Attribute(Data); +decode_disp('MatchingRuleId', Data) -> dec_MatchingRuleId(Data); +decode_disp('LDAPResult', Data) -> dec_LDAPResult(Data); +decode_disp('Referral', Data) -> dec_Referral(Data); +decode_disp('URI', Data) -> dec_URI(Data); +decode_disp('Controls', Data) -> dec_Controls(Data); +decode_disp('Control', Data) -> dec_Control(Data); +decode_disp('BindRequest', Data) -> dec_BindRequest(Data); +decode_disp('AuthenticationChoice', Data) -> dec_AuthenticationChoice(Data); +decode_disp('SaslCredentials', Data) -> dec_SaslCredentials(Data); +decode_disp('BindResponse', Data) -> dec_BindResponse(Data); +decode_disp('UnbindRequest', Data) -> dec_UnbindRequest(Data); +decode_disp('SearchRequest', Data) -> dec_SearchRequest(Data); +decode_disp('AttributeSelection', Data) -> dec_AttributeSelection(Data); +decode_disp('Filter', Data) -> dec_Filter(Data); +decode_disp('SubstringFilter', Data) -> dec_SubstringFilter(Data); +decode_disp('MatchingRuleAssertion', Data) -> dec_MatchingRuleAssertion(Data); +decode_disp('SearchResultEntry', Data) -> dec_SearchResultEntry(Data); +decode_disp('PartialAttributeList', Data) -> dec_PartialAttributeList(Data); +decode_disp('SearchResultReference', Data) -> dec_SearchResultReference(Data); +decode_disp('SearchResultDone', Data) -> dec_SearchResultDone(Data); +decode_disp('ModifyRequest', Data) -> dec_ModifyRequest(Data); +decode_disp('ModifyResponse', Data) -> dec_ModifyResponse(Data); +decode_disp('AddRequest', Data) -> dec_AddRequest(Data); +decode_disp('AttributeList', Data) -> dec_AttributeList(Data); +decode_disp('AddResponse', Data) -> dec_AddResponse(Data); +decode_disp('DelRequest', Data) -> dec_DelRequest(Data); +decode_disp('DelResponse', Data) -> dec_DelResponse(Data); +decode_disp('ModifyDNRequest', Data) -> dec_ModifyDNRequest(Data); +decode_disp('ModifyDNResponse', Data) -> dec_ModifyDNResponse(Data); +decode_disp('CompareRequest', Data) -> dec_CompareRequest(Data); +decode_disp('CompareResponse', Data) -> dec_CompareResponse(Data); +decode_disp('AbandonRequest', Data) -> dec_AbandonRequest(Data); +decode_disp('ExtendedRequest', Data) -> dec_ExtendedRequest(Data); +decode_disp('ExtendedResponse', Data) -> dec_ExtendedResponse(Data); +decode_disp('IntermediateResponse', Data) -> dec_IntermediateResponse(Data); +decode_disp(Type, _Data) -> exit({error,{asn1,{undefined_type,Type}}}). + +info() -> + case ?MODULE:module_info(attributes) of + Attributes when is_list(Attributes) -> + case lists:keyfind(asn1_info, 1, Attributes) of + {_,Info} when is_list(Info) -> + Info; + _ -> + [] + end; + _ -> + [] + end. + + +%%================================ +%% LDAPMessage +%%================================ +enc_LDAPMessage(Val) -> + enc_LDAPMessage(Val, [<<48>>]). + +enc_LDAPMessage(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute messageID(1) with type INTEGER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_integer(Cindex1, [<<2>>]), + +%%------------------------------------------------- +%% attribute protocolOp(2) with type CHOICE +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_LDAPMessage_protocolOp'(Cindex2, []), + +%%------------------------------------------------- +%% attribute controls(3) External LDAP:Controls OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_Controls'(Cindex3, [<<160>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% LDAPMessage_protocolOp +%%================================ +enc_LDAPMessage_protocolOp(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + bindRequest -> + 'enc_BindRequest'(element(2,Val), [<<96>>]); + bindResponse -> + 'enc_BindResponse'(element(2,Val), [<<97>>]); + unbindRequest -> + encode_null(element(2,Val), [<<66>>]); + searchRequest -> + 'enc_SearchRequest'(element(2,Val), [<<99>>]); + searchResEntry -> + 'enc_SearchResultEntry'(element(2,Val), [<<100>>]); + searchResDone -> + 'enc_SearchResultDone'(element(2,Val), [<<101>>]); + searchResRef -> + 'enc_SearchResultReference'(element(2,Val), [<<115>>]); + modifyRequest -> + 'enc_ModifyRequest'(element(2,Val), [<<102>>]); + modifyResponse -> + 'enc_ModifyResponse'(element(2,Val), [<<103>>]); + addRequest -> + 'enc_AddRequest'(element(2,Val), [<<104>>]); + addResponse -> + 'enc_AddResponse'(element(2,Val), [<<105>>]); + delRequest -> + encode_restricted_string(element(2,Val), [<<74>>]); + delResponse -> + 'enc_DelResponse'(element(2,Val), [<<107>>]); + modDNRequest -> + 'enc_ModifyDNRequest'(element(2,Val), [<<108>>]); + modDNResponse -> + 'enc_ModifyDNResponse'(element(2,Val), [<<109>>]); + compareRequest -> + 'enc_CompareRequest'(element(2,Val), [<<110>>]); + compareResponse -> + 'enc_CompareResponse'(element(2,Val), [<<111>>]); + abandonRequest -> + encode_integer(element(2,Val), [<<80>>]); + extendedReq -> + 'enc_ExtendedRequest'(element(2,Val), [<<119>>]); + extendedResp -> + 'enc_ExtendedResponse'(element(2,Val), [<<120>>]); + intermediateResponse -> + 'enc_IntermediateResponse'(element(2,Val), [<<121>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_LDAPMessage(Tlv) -> + dec_LDAPMessage(Tlv, [16]). + +dec_LDAPMessage(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute messageID(1) with type INTEGER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = begin +Val1 = decode_integer(V1, [2]), +if 0 =< Val1, Val1 =< 2147483647 -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end, + +%%------------------------------------------------- +%% attribute protocolOp(2) with type CHOICE +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_LDAPMessage_protocolOp'(V2, []), + +%%------------------------------------------------- +%% attribute controls(3) External LDAP:Controls OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{131072,V3}|TempTlv4] -> + {'dec_Controls'(V3, []), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'LDAPMessage',Term1,Term2,Term3}, +Res1. +'dec_LDAPMessage_protocolOp'(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'bindRequest' + {65536, V1} -> + {bindRequest, 'dec_BindRequest'(V1, [])}; + + +%% 'bindResponse' + {65537, V1} -> + {bindResponse, 'dec_BindResponse'(V1, [])}; + + +%% 'unbindRequest' + {65538, V1} -> + {unbindRequest, decode_null(V1, [])}; + + +%% 'searchRequest' + {65539, V1} -> + {searchRequest, 'dec_SearchRequest'(V1, [])}; + + +%% 'searchResEntry' + {65540, V1} -> + {searchResEntry, 'dec_SearchResultEntry'(V1, [])}; + + +%% 'searchResDone' + {65541, V1} -> + {searchResDone, 'dec_SearchResultDone'(V1, [])}; + + +%% 'searchResRef' + {65555, V1} -> + {searchResRef, 'dec_SearchResultReference'(V1, [])}; + + +%% 'modifyRequest' + {65542, V1} -> + {modifyRequest, 'dec_ModifyRequest'(V1, [])}; + + +%% 'modifyResponse' + {65543, V1} -> + {modifyResponse, 'dec_ModifyResponse'(V1, [])}; + + +%% 'addRequest' + {65544, V1} -> + {addRequest, 'dec_AddRequest'(V1, [])}; + + +%% 'addResponse' + {65545, V1} -> + {addResponse, 'dec_AddResponse'(V1, [])}; + + +%% 'delRequest' + {65546, V1} -> + {delRequest, decode_octet_string(V1, [])}; + + +%% 'delResponse' + {65547, V1} -> + {delResponse, 'dec_DelResponse'(V1, [])}; + + +%% 'modDNRequest' + {65548, V1} -> + {modDNRequest, 'dec_ModifyDNRequest'(V1, [])}; + + +%% 'modDNResponse' + {65549, V1} -> + {modDNResponse, 'dec_ModifyDNResponse'(V1, [])}; + + +%% 'compareRequest' + {65550, V1} -> + {compareRequest, 'dec_CompareRequest'(V1, [])}; + + +%% 'compareResponse' + {65551, V1} -> + {compareResponse, 'dec_CompareResponse'(V1, [])}; + + +%% 'abandonRequest' + {65552, V1} -> + {abandonRequest, begin +Val1 = decode_integer(V1, []), +if 0 =< Val1, Val1 =< 2147483647 -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end}; + + +%% 'extendedReq' + {65559, V1} -> + {extendedReq, 'dec_ExtendedRequest'(V1, [])}; + + +%% 'extendedResp' + {65560, V1} -> + {extendedResp, 'dec_ExtendedResponse'(V1, [])}; + + +%% 'intermediateResponse' + {65561, V1} -> + {intermediateResponse, 'dec_IntermediateResponse'(V1, [])}; + + Else -> + {asn1_ExtAlt,ber_encode(Else)} + end +. + + +%%================================ +%% MessageID +%%================================ +enc_MessageID(Val) -> + enc_MessageID(Val, [<<2>>]). + +enc_MessageID(Val, TagIn) -> +encode_integer(Val, TagIn). + + +dec_MessageID(Tlv) -> + dec_MessageID(Tlv, [2]). + +dec_MessageID(Tlv, TagIn) -> +begin +Val1 = decode_integer(Tlv, TagIn), +if 0 =< Val1, Val1 =< 2147483647 -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end. + + + +%%================================ +%% LDAPString +%%================================ +enc_LDAPString(Val) -> + enc_LDAPString(Val, [<<4>>]). + +enc_LDAPString(Val, TagIn) -> +encode_restricted_string(Val, TagIn). + + +dec_LDAPString(Tlv) -> + dec_LDAPString(Tlv, [4]). + +dec_LDAPString(Tlv, TagIn) -> +decode_octet_string(Tlv, TagIn). + + + +%%================================ +%% LDAPOID +%%================================ +enc_LDAPOID(Val) -> + enc_LDAPOID(Val, [<<4>>]). + +enc_LDAPOID(Val, TagIn) -> +encode_restricted_string(Val, TagIn). + + +dec_LDAPOID(Tlv) -> + dec_LDAPOID(Tlv, [4]). + +dec_LDAPOID(Tlv, TagIn) -> +decode_octet_string(Tlv, TagIn). + + + +%%================================ +%% LDAPDN +%%================================ +enc_LDAPDN(Val) -> + enc_LDAPDN(Val, [<<4>>]). + +enc_LDAPDN(Val, TagIn) -> +encode_restricted_string(Val, TagIn). + + +dec_LDAPDN(Tlv) -> + dec_LDAPDN(Tlv, [4]). + +dec_LDAPDN(Tlv, TagIn) -> +decode_octet_string(Tlv, TagIn). + + + +%%================================ +%% RelativeLDAPDN +%%================================ +enc_RelativeLDAPDN(Val) -> + enc_RelativeLDAPDN(Val, [<<4>>]). + +enc_RelativeLDAPDN(Val, TagIn) -> +encode_restricted_string(Val, TagIn). + + +dec_RelativeLDAPDN(Tlv) -> + dec_RelativeLDAPDN(Tlv, [4]). + +dec_RelativeLDAPDN(Tlv, TagIn) -> +decode_octet_string(Tlv, TagIn). + + + +%%================================ +%% AttributeDescription +%%================================ +enc_AttributeDescription(Val) -> + enc_AttributeDescription(Val, [<<4>>]). + +enc_AttributeDescription(Val, TagIn) -> +encode_restricted_string(Val, TagIn). + + +dec_AttributeDescription(Tlv) -> + dec_AttributeDescription(Tlv, [4]). + +dec_AttributeDescription(Tlv, TagIn) -> +decode_octet_string(Tlv, TagIn). + + + +%%================================ +%% AttributeValue +%%================================ +enc_AttributeValue(Val) -> + enc_AttributeValue(Val, [<<4>>]). + +enc_AttributeValue(Val, TagIn) -> +encode_restricted_string(Val, TagIn). + + +dec_AttributeValue(Tlv) -> + dec_AttributeValue(Tlv, [4]). + +dec_AttributeValue(Tlv, TagIn) -> +decode_octet_string(Tlv, TagIn). + + + +%%================================ +%% AttributeValueAssertion +%%================================ +enc_AttributeValueAssertion(Val) -> + enc_AttributeValueAssertion(Val, [<<48>>]). + +enc_AttributeValueAssertion(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute attributeDesc(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute assertionValue(2) with type OCTET STRING +%%------------------------------------------------- + {EncBytes2,EncLen2} = encode_restricted_string(Cindex2, [<<4>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_AttributeValueAssertion(Tlv) -> + dec_AttributeValueAssertion(Tlv, [16]). + +dec_AttributeValueAssertion(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute attributeDesc(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute assertionValue(2) with type OCTET STRING +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = decode_octet_string(V2, [4]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'AttributeValueAssertion',Term1,Term2}, +Res1. + + +%%================================ +%% AssertionValue +%%================================ +enc_AssertionValue(Val) -> + enc_AssertionValue(Val, [<<4>>]). + +enc_AssertionValue(Val, TagIn) -> +encode_restricted_string(Val, TagIn). + + +dec_AssertionValue(Tlv) -> + dec_AssertionValue(Tlv, [4]). + +dec_AssertionValue(Tlv, TagIn) -> +decode_octet_string(Tlv, TagIn). + + + +%%================================ +%% PartialAttribute +%%================================ +enc_PartialAttribute(Val) -> + enc_PartialAttribute(Val, [<<48>>]). + +enc_PartialAttribute(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute type(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute vals(2) with type SET OF +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_PartialAttribute_vals'(Cindex2, [<<49>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% PartialAttribute_vals +%%================================ +enc_PartialAttribute_vals(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_PartialAttribute_vals_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_PartialAttribute_vals_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_PartialAttribute_vals_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = encode_restricted_string(H, [<<4>>]), + 'enc_PartialAttribute_vals_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_PartialAttribute(Tlv) -> + dec_PartialAttribute(Tlv, [16]). + +dec_PartialAttribute(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute type(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute vals(2) with type SET OF +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_PartialAttribute_vals'(V2, [17]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PartialAttribute',Term1,Term2}, +Res1. +'dec_PartialAttribute_vals'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +[decode_octet_string(V1, [4]) || V1 <- Tlv1]. + + + + +%%================================ +%% Attribute +%%================================ +enc_Attribute(Val) -> + enc_Attribute(Val, [<<48>>]). + +enc_Attribute(Val, TagIn) -> + enc_PartialAttribute(Val, TagIn). + + +dec_Attribute(Tlv) -> + dec_Attribute(Tlv, [16]). + +dec_Attribute(Tlv, TagIn) -> +'dec_PartialAttribute'(Tlv, TagIn). + + + +%%================================ +%% MatchingRuleId +%%================================ +enc_MatchingRuleId(Val) -> + enc_MatchingRuleId(Val, [<<4>>]). + +enc_MatchingRuleId(Val, TagIn) -> +encode_restricted_string(Val, TagIn). + + +dec_MatchingRuleId(Tlv) -> + dec_MatchingRuleId(Tlv, [4]). + +dec_MatchingRuleId(Tlv, TagIn) -> +decode_octet_string(Tlv, TagIn). + + + +%%================================ +%% LDAPResult +%%================================ +enc_LDAPResult(Val) -> + enc_LDAPResult(Val, [<<48>>]). + +enc_LDAPResult(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4} = Val, + +%%------------------------------------------------- +%% attribute resultCode(1) with type ENUMERATED +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of +success -> encode_tags([<<10>>], [0], 1); +operationsError -> encode_tags([<<10>>], [1], 1); +protocolError -> encode_tags([<<10>>], [2], 1); +timeLimitExceeded -> encode_tags([<<10>>], [3], 1); +sizeLimitExceeded -> encode_tags([<<10>>], [4], 1); +compareFalse -> encode_tags([<<10>>], [5], 1); +compareTrue -> encode_tags([<<10>>], [6], 1); +authMethodNotSupported -> encode_tags([<<10>>], [7], 1); +strongerAuthRequired -> encode_tags([<<10>>], [8], 1); +referral -> encode_tags([<<10>>], [10], 1); +adminLimitExceeded -> encode_tags([<<10>>], [11], 1); +unavailableCriticalExtension -> encode_tags([<<10>>], [12], 1); +confidentialityRequired -> encode_tags([<<10>>], [13], 1); +saslBindInProgress -> encode_tags([<<10>>], [14], 1); +noSuchAttribute -> encode_tags([<<10>>], [16], 1); +undefinedAttributeType -> encode_tags([<<10>>], [17], 1); +inappropriateMatching -> encode_tags([<<10>>], [18], 1); +constraintViolation -> encode_tags([<<10>>], [19], 1); +attributeOrValueExists -> encode_tags([<<10>>], [20], 1); +invalidAttributeSyntax -> encode_tags([<<10>>], [21], 1); +noSuchObject -> encode_tags([<<10>>], [32], 1); +aliasProblem -> encode_tags([<<10>>], [33], 1); +invalidDNSyntax -> encode_tags([<<10>>], [34], 1); +aliasDereferencingProblem -> encode_tags([<<10>>], [36], 1); +inappropriateAuthentication -> encode_tags([<<10>>], [48], 1); +invalidCredentials -> encode_tags([<<10>>], [49], 1); +insufficientAccessRights -> encode_tags([<<10>>], [50], 1); +busy -> encode_tags([<<10>>], [51], 1); +unavailable -> encode_tags([<<10>>], [52], 1); +unwillingToPerform -> encode_tags([<<10>>], [53], 1); +loopDetect -> encode_tags([<<10>>], [54], 1); +namingViolation -> encode_tags([<<10>>], [64], 1); +objectClassViolation -> encode_tags([<<10>>], [65], 1); +notAllowedOnNonLeaf -> encode_tags([<<10>>], [66], 1); +notAllowedOnRDN -> encode_tags([<<10>>], [67], 1); +entryAlreadyExists -> encode_tags([<<10>>], [68], 1); +objectClassModsProhibited -> encode_tags([<<10>>], [69], 1); +affectsMultipleDSAs -> encode_tags([<<10>>], [71], 1); +other -> encode_tags([<<10>>], [80], 1); +Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}}) +end, + +%%------------------------------------------------- +%% attribute matchedDN(2) with type OCTET STRING +%%------------------------------------------------- + {EncBytes2,EncLen2} = encode_restricted_string(Cindex2, [<<4>>]), + +%%------------------------------------------------- +%% attribute diagnosticMessage(3) with type OCTET STRING +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_restricted_string(Cindex3, [<<4>>]), + +%%------------------------------------------------- +%% attribute referral(4) External LDAP:Referral OPTIONAL +%%------------------------------------------------- + {EncBytes4,EncLen4} = case Cindex4 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_Referral'(Cindex4, [<<163>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_LDAPResult(Tlv) -> + dec_LDAPResult(Tlv, [16]). + +dec_LDAPResult(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute resultCode(1) with type ENUMERATED +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = case decode_integer(V1, [10]) of +0 -> success; +1 -> operationsError; +2 -> protocolError; +3 -> timeLimitExceeded; +4 -> sizeLimitExceeded; +5 -> compareFalse; +6 -> compareTrue; +7 -> authMethodNotSupported; +8 -> strongerAuthRequired; +10 -> referral; +11 -> adminLimitExceeded; +12 -> unavailableCriticalExtension; +13 -> confidentialityRequired; +14 -> saslBindInProgress; +16 -> noSuchAttribute; +17 -> undefinedAttributeType; +18 -> inappropriateMatching; +19 -> constraintViolation; +20 -> attributeOrValueExists; +21 -> invalidAttributeSyntax; +32 -> noSuchObject; +33 -> aliasProblem; +34 -> invalidDNSyntax; +36 -> aliasDereferencingProblem; +48 -> inappropriateAuthentication; +49 -> invalidCredentials; +50 -> insufficientAccessRights; +51 -> busy; +52 -> unavailable; +53 -> unwillingToPerform; +54 -> loopDetect; +64 -> namingViolation; +65 -> objectClassViolation; +66 -> notAllowedOnNonLeaf; +67 -> notAllowedOnRDN; +68 -> entryAlreadyExists; +69 -> objectClassModsProhibited; +71 -> affectsMultipleDSAs; +80 -> other; +Default1 -> {asn1_enum,Default1} +end, + +%%------------------------------------------------- +%% attribute matchedDN(2) with type OCTET STRING +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = decode_octet_string(V2, [4]), + +%%------------------------------------------------- +%% attribute diagnosticMessage(3) with type OCTET STRING +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_octet_string(V3, [4]), + +%%------------------------------------------------- +%% attribute referral(4) External LDAP:Referral OPTIONAL +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[{131075,V4}|TempTlv5] -> + {'dec_Referral'(V4, []), TempTlv5}; + _ -> + { asn1_NOVALUE, Tlv4} +end, + +case Tlv5 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed +end, +Res1 = {'LDAPResult',Term1,Term2,Term3,Term4}, +Res1. + + +%%================================ +%% Referral +%%================================ +enc_Referral(Val) -> + enc_Referral(Val, [<<48>>]). + +enc_Referral(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_Referral_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_Referral_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_Referral_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = encode_restricted_string(H, [<<4>>]), + 'enc_Referral_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_Referral(Tlv) -> + dec_Referral(Tlv, [16]). + +dec_Referral(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +[decode_octet_string(V1, [4]) || V1 <- Tlv1]. + + + + +%%================================ +%% URI +%%================================ +enc_URI(Val) -> + enc_URI(Val, [<<4>>]). + +enc_URI(Val, TagIn) -> +encode_restricted_string(Val, TagIn). + + +dec_URI(Tlv) -> + dec_URI(Tlv, [4]). + +dec_URI(Tlv, TagIn) -> +decode_octet_string(Tlv, TagIn). + + + +%%================================ +%% Controls +%%================================ +enc_Controls(Val) -> + enc_Controls(Val, [<<48>>]). + +enc_Controls(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_Controls_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_Controls_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_Controls_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_Control'(H, [<<48>>]), + 'enc_Controls_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_Controls(Tlv) -> + dec_Controls(Tlv, [16]). + +dec_Controls(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_Control'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% Control +%%================================ +enc_Control(Val) -> + enc_Control(Val, [<<48>>]). + +enc_Control(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute controlType(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute criticality(2) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_DEFAULT -> + {<<>>,0}; + _ when Cindex2 =:= false -> + {<<>>,0}; + _ -> + encode_boolean(Cindex2, [<<1>>]) + end, + +%%------------------------------------------------- +%% attribute controlValue(3) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex3, [<<4>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_Control(Tlv) -> + dec_Control(Tlv, [16]). + +dec_Control(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute controlType(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute criticality(2) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{1,V2}|TempTlv3] -> + {decode_boolean(V2, []), TempTlv3}; + _ -> + {false,Tlv2} +end, + +%%------------------------------------------------- +%% attribute controlValue(3) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{4,V3}|TempTlv4] -> + {decode_octet_string(V3, []), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'Control',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% BindRequest +%%================================ +enc_BindRequest(Val) -> + enc_BindRequest(Val, [<<96>>]). + +enc_BindRequest(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute version(1) with type INTEGER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_integer(Cindex1, [<<2>>]), + +%%------------------------------------------------- +%% attribute name(2) with type OCTET STRING +%%------------------------------------------------- + {EncBytes2,EncLen2} = encode_restricted_string(Cindex2, [<<4>>]), + +%%------------------------------------------------- +%% attribute authentication(3) External LDAP:AuthenticationChoice +%%------------------------------------------------- + {EncBytes3,EncLen3} = 'enc_AuthenticationChoice'(Cindex3, []), + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_BindRequest(Tlv) -> + dec_BindRequest(Tlv, [65536]). + +dec_BindRequest(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute version(1) with type INTEGER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = begin +Val1 = decode_integer(V1, [2]), +if 1 =< Val1, Val1 =< 127 -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end, + +%%------------------------------------------------- +%% attribute name(2) with type OCTET STRING +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = decode_octet_string(V2, [4]), + +%%------------------------------------------------- +%% attribute authentication(3) External LDAP:AuthenticationChoice +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = 'dec_AuthenticationChoice'(V3, []), + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'BindRequest',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% AuthenticationChoice +%%================================ +enc_AuthenticationChoice(Val) -> + enc_AuthenticationChoice(Val, []). + +enc_AuthenticationChoice(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + simple -> + encode_restricted_string(element(2,Val), [<<128>>]); + sasl -> + 'enc_SaslCredentials'(element(2,Val), [<<163>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_AuthenticationChoice(Tlv) -> + dec_AuthenticationChoice(Tlv, []). + +dec_AuthenticationChoice(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'simple' + {131072, V1} -> + {simple, decode_octet_string(V1, [])}; + + +%% 'sasl' + {131075, V1} -> + {sasl, 'dec_SaslCredentials'(V1, [])}; + + Else -> + {asn1_ExtAlt,ber_encode(Else)} + end +. + + +%%================================ +%% SaslCredentials +%%================================ +enc_SaslCredentials(Val) -> + enc_SaslCredentials(Val, [<<48>>]). + +enc_SaslCredentials(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute mechanism(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute credentials(2) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex2, [<<4>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_SaslCredentials(Tlv) -> + dec_SaslCredentials(Tlv, [16]). + +dec_SaslCredentials(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute mechanism(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute credentials(2) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{4,V2}|TempTlv3] -> + {decode_octet_string(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'SaslCredentials',Term1,Term2}, +Res1. + + +%%================================ +%% BindResponse +%%================================ +enc_BindResponse(Val) -> + enc_BindResponse(Val, [<<97>>]). + +enc_BindResponse(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4,Cindex5} = Val, + +%%------------------------------------------------- +%% attribute resultCode(1) with type ENUMERATED +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of +success -> encode_tags([<<10>>], [0], 1); +operationsError -> encode_tags([<<10>>], [1], 1); +protocolError -> encode_tags([<<10>>], [2], 1); +timeLimitExceeded -> encode_tags([<<10>>], [3], 1); +sizeLimitExceeded -> encode_tags([<<10>>], [4], 1); +compareFalse -> encode_tags([<<10>>], [5], 1); +compareTrue -> encode_tags([<<10>>], [6], 1); +authMethodNotSupported -> encode_tags([<<10>>], [7], 1); +strongerAuthRequired -> encode_tags([<<10>>], [8], 1); +referral -> encode_tags([<<10>>], [10], 1); +adminLimitExceeded -> encode_tags([<<10>>], [11], 1); +unavailableCriticalExtension -> encode_tags([<<10>>], [12], 1); +confidentialityRequired -> encode_tags([<<10>>], [13], 1); +saslBindInProgress -> encode_tags([<<10>>], [14], 1); +noSuchAttribute -> encode_tags([<<10>>], [16], 1); +undefinedAttributeType -> encode_tags([<<10>>], [17], 1); +inappropriateMatching -> encode_tags([<<10>>], [18], 1); +constraintViolation -> encode_tags([<<10>>], [19], 1); +attributeOrValueExists -> encode_tags([<<10>>], [20], 1); +invalidAttributeSyntax -> encode_tags([<<10>>], [21], 1); +noSuchObject -> encode_tags([<<10>>], [32], 1); +aliasProblem -> encode_tags([<<10>>], [33], 1); +invalidDNSyntax -> encode_tags([<<10>>], [34], 1); +aliasDereferencingProblem -> encode_tags([<<10>>], [36], 1); +inappropriateAuthentication -> encode_tags([<<10>>], [48], 1); +invalidCredentials -> encode_tags([<<10>>], [49], 1); +insufficientAccessRights -> encode_tags([<<10>>], [50], 1); +busy -> encode_tags([<<10>>], [51], 1); +unavailable -> encode_tags([<<10>>], [52], 1); +unwillingToPerform -> encode_tags([<<10>>], [53], 1); +loopDetect -> encode_tags([<<10>>], [54], 1); +namingViolation -> encode_tags([<<10>>], [64], 1); +objectClassViolation -> encode_tags([<<10>>], [65], 1); +notAllowedOnNonLeaf -> encode_tags([<<10>>], [66], 1); +notAllowedOnRDN -> encode_tags([<<10>>], [67], 1); +entryAlreadyExists -> encode_tags([<<10>>], [68], 1); +objectClassModsProhibited -> encode_tags([<<10>>], [69], 1); +affectsMultipleDSAs -> encode_tags([<<10>>], [71], 1); +other -> encode_tags([<<10>>], [80], 1); +Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}}) +end, + +%%------------------------------------------------- +%% attribute matchedDN(2) with type OCTET STRING +%%------------------------------------------------- + {EncBytes2,EncLen2} = encode_restricted_string(Cindex2, [<<4>>]), + +%%------------------------------------------------- +%% attribute diagnosticMessage(3) with type OCTET STRING +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_restricted_string(Cindex3, [<<4>>]), + +%%------------------------------------------------- +%% attribute referral(4) External LDAP:Referral OPTIONAL +%%------------------------------------------------- + {EncBytes4,EncLen4} = case Cindex4 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_Referral'(Cindex4, [<<163>>]) + end, + +%%------------------------------------------------- +%% attribute serverSaslCreds(5) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes5,EncLen5} = case Cindex5 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex5, [<<135>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4, EncBytes5], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4 + EncLen5, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_BindResponse(Tlv) -> + dec_BindResponse(Tlv, [65537]). + +dec_BindResponse(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute resultCode(1) with type ENUMERATED +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = case decode_integer(V1, [10]) of +0 -> success; +1 -> operationsError; +2 -> protocolError; +3 -> timeLimitExceeded; +4 -> sizeLimitExceeded; +5 -> compareFalse; +6 -> compareTrue; +7 -> authMethodNotSupported; +8 -> strongerAuthRequired; +10 -> referral; +11 -> adminLimitExceeded; +12 -> unavailableCriticalExtension; +13 -> confidentialityRequired; +14 -> saslBindInProgress; +16 -> noSuchAttribute; +17 -> undefinedAttributeType; +18 -> inappropriateMatching; +19 -> constraintViolation; +20 -> attributeOrValueExists; +21 -> invalidAttributeSyntax; +32 -> noSuchObject; +33 -> aliasProblem; +34 -> invalidDNSyntax; +36 -> aliasDereferencingProblem; +48 -> inappropriateAuthentication; +49 -> invalidCredentials; +50 -> insufficientAccessRights; +51 -> busy; +52 -> unavailable; +53 -> unwillingToPerform; +54 -> loopDetect; +64 -> namingViolation; +65 -> objectClassViolation; +66 -> notAllowedOnNonLeaf; +67 -> notAllowedOnRDN; +68 -> entryAlreadyExists; +69 -> objectClassModsProhibited; +71 -> affectsMultipleDSAs; +80 -> other; +Default1 -> {asn1_enum,Default1} +end, + +%%------------------------------------------------- +%% attribute matchedDN(2) with type OCTET STRING +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = decode_octet_string(V2, [4]), + +%%------------------------------------------------- +%% attribute diagnosticMessage(3) with type OCTET STRING +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_octet_string(V3, [4]), + +%%------------------------------------------------- +%% attribute referral(4) External LDAP:Referral OPTIONAL +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[{131075,V4}|TempTlv5] -> + {'dec_Referral'(V4, []), TempTlv5}; + _ -> + { asn1_NOVALUE, Tlv4} +end, + +%%------------------------------------------------- +%% attribute serverSaslCreds(5) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term5,Tlv6} = case Tlv5 of +[{131079,V5}|TempTlv6] -> + {decode_octet_string(V5, []), TempTlv6}; + _ -> + { asn1_NOVALUE, Tlv5} +end, + +case Tlv6 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv6}}}) % extra fields not allowed +end, +Res1 = {'BindResponse',Term1,Term2,Term3,Term4,Term5}, +Res1. + + +%%================================ +%% UnbindRequest +%%================================ +enc_UnbindRequest(Val) -> + enc_UnbindRequest(Val, [<<66>>]). + +enc_UnbindRequest(Val, TagIn) -> +encode_null(Val, TagIn). + + +dec_UnbindRequest(Tlv) -> + dec_UnbindRequest(Tlv, [65538]). + +dec_UnbindRequest(Tlv, TagIn) -> +decode_null(Tlv, TagIn). + + + +%%================================ +%% SearchRequest +%%================================ +enc_SearchRequest(Val) -> + enc_SearchRequest(Val, [<<99>>]). + +enc_SearchRequest(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4,Cindex5,Cindex6,Cindex7,Cindex8} = Val, + +%%------------------------------------------------- +%% attribute baseObject(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute scope(2) with type ENUMERATED +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of +baseObject -> encode_tags([<<10>>], [0], 1); +singleLevel -> encode_tags([<<10>>], [1], 1); +wholeSubtree -> encode_tags([<<10>>], [2], 1); +Enumval2 -> exit({error,{asn1, {enumerated_not_in_range,Enumval2}}}) +end, + +%%------------------------------------------------- +%% attribute derefAliases(3) with type ENUMERATED +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of +neverDerefAliases -> encode_tags([<<10>>], [0], 1); +derefInSearching -> encode_tags([<<10>>], [1], 1); +derefFindingBaseObj -> encode_tags([<<10>>], [2], 1); +derefAlways -> encode_tags([<<10>>], [3], 1); +Enumval3 -> exit({error,{asn1, {enumerated_not_in_range,Enumval3}}}) +end, + +%%------------------------------------------------- +%% attribute sizeLimit(4) with type INTEGER +%%------------------------------------------------- + {EncBytes4,EncLen4} = encode_integer(Cindex4, [<<2>>]), + +%%------------------------------------------------- +%% attribute timeLimit(5) with type INTEGER +%%------------------------------------------------- + {EncBytes5,EncLen5} = encode_integer(Cindex5, [<<2>>]), + +%%------------------------------------------------- +%% attribute typesOnly(6) with type BOOLEAN +%%------------------------------------------------- + {EncBytes6,EncLen6} = encode_boolean(Cindex6, [<<1>>]), + +%%------------------------------------------------- +%% attribute filter(7) External LDAP:Filter +%%------------------------------------------------- + {EncBytes7,EncLen7} = 'enc_Filter'(Cindex7, []), + +%%------------------------------------------------- +%% attribute attributes(8) External LDAP:AttributeSelection +%%------------------------------------------------- + {EncBytes8,EncLen8} = 'enc_AttributeSelection'(Cindex8, [<<48>>]), + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4, EncBytes5, EncBytes6, EncBytes7, EncBytes8], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4 + EncLen5 + EncLen6 + EncLen7 + EncLen8, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_SearchRequest(Tlv) -> + dec_SearchRequest(Tlv, [65539]). + +dec_SearchRequest(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute baseObject(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute scope(2) with type ENUMERATED +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = case decode_integer(V2, [10]) of +0 -> baseObject; +1 -> singleLevel; +2 -> wholeSubtree; +Default1 -> {asn1_enum,Default1} +end, + +%%------------------------------------------------- +%% attribute derefAliases(3) with type ENUMERATED +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = case decode_integer(V3, [10]) of +0 -> neverDerefAliases; +1 -> derefInSearching; +2 -> derefFindingBaseObj; +3 -> derefAlways; +Default2 -> exit({error,{asn1,{illegal_enumerated,Default2}}}) +end, + +%%------------------------------------------------- +%% attribute sizeLimit(4) with type INTEGER +%%------------------------------------------------- +[V4|Tlv5] = Tlv4, +Term4 = begin +Val1 = decode_integer(V4, [2]), +if 0 =< Val1, Val1 =< 2147483647 -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end, + +%%------------------------------------------------- +%% attribute timeLimit(5) with type INTEGER +%%------------------------------------------------- +[V5|Tlv6] = Tlv5, +Term5 = begin +Val2 = decode_integer(V5, [2]), +if 0 =< Val2, Val2 =< 2147483647 -> +Val2; +true -> +exit({error,{asn1,bad_range}}) +end +end, + +%%------------------------------------------------- +%% attribute typesOnly(6) with type BOOLEAN +%%------------------------------------------------- +[V6|Tlv7] = Tlv6, +Term6 = decode_boolean(V6, [1]), + +%%------------------------------------------------- +%% attribute filter(7) External LDAP:Filter +%%------------------------------------------------- +[V7|Tlv8] = Tlv7, +Term7 = 'dec_Filter'(V7, []), + +%%------------------------------------------------- +%% attribute attributes(8) External LDAP:AttributeSelection +%%------------------------------------------------- +[V8|Tlv9] = Tlv8, +Term8 = 'dec_AttributeSelection'(V8, [16]), + +case Tlv9 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv9}}}) % extra fields not allowed +end, +Res1 = {'SearchRequest',Term1,Term2,Term3,Term4,Term5,Term6,Term7,Term8}, +Res1. + + +%%================================ +%% AttributeSelection +%%================================ +enc_AttributeSelection(Val) -> + enc_AttributeSelection(Val, [<<48>>]). + +enc_AttributeSelection(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_AttributeSelection_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_AttributeSelection_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_AttributeSelection_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = encode_restricted_string(H, [<<4>>]), + 'enc_AttributeSelection_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_AttributeSelection(Tlv) -> + dec_AttributeSelection(Tlv, [16]). + +dec_AttributeSelection(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +[decode_octet_string(V1, [4]) || V1 <- Tlv1]. + + + + +%%================================ +%% Filter +%%================================ +enc_Filter(Val) -> + enc_Filter(Val, []). + +enc_Filter(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + 'and' -> + 'enc_Filter_and'(element(2,Val), [<<160>>]); + 'or' -> + 'enc_Filter_or'(element(2,Val), [<<161>>]); + 'not' -> + 'enc_Filter'(element(2,Val), [<<162>>]); + equalityMatch -> + 'enc_AttributeValueAssertion'(element(2,Val), [<<163>>]); + substrings -> + 'enc_SubstringFilter'(element(2,Val), [<<164>>]); + greaterOrEqual -> + 'enc_AttributeValueAssertion'(element(2,Val), [<<165>>]); + lessOrEqual -> + 'enc_AttributeValueAssertion'(element(2,Val), [<<166>>]); + present -> + encode_restricted_string(element(2,Val), [<<135>>]); + approxMatch -> + 'enc_AttributeValueAssertion'(element(2,Val), [<<168>>]); + extensibleMatch -> + 'enc_MatchingRuleAssertion'(element(2,Val), [<<169>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + + +%%================================ +%% Filter_and +%%================================ +enc_Filter_and(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_Filter_and_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_Filter_and_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_Filter_and_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_Filter'(H, []), + 'enc_Filter_and_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% Filter_or +%%================================ +enc_Filter_or(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_Filter_or_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_Filter_or_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_Filter_or_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_Filter'(H, []), + 'enc_Filter_or_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_Filter(Tlv) -> + dec_Filter(Tlv, []). + +dec_Filter(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'and' + {131072, V1} -> + {'and', 'dec_Filter_and'(V1, [])}; + + +%% 'or' + {131073, V1} -> + {'or', 'dec_Filter_or'(V1, [])}; + + +%% 'not' + {131074, V1} -> + {'not', 'dec_Filter'(V1, [])}; + + +%% 'equalityMatch' + {131075, V1} -> + {equalityMatch, 'dec_AttributeValueAssertion'(V1, [])}; + + +%% 'substrings' + {131076, V1} -> + {substrings, 'dec_SubstringFilter'(V1, [])}; + + +%% 'greaterOrEqual' + {131077, V1} -> + {greaterOrEqual, 'dec_AttributeValueAssertion'(V1, [])}; + + +%% 'lessOrEqual' + {131078, V1} -> + {lessOrEqual, 'dec_AttributeValueAssertion'(V1, [])}; + + +%% 'present' + {131079, V1} -> + {present, decode_octet_string(V1, [])}; + + +%% 'approxMatch' + {131080, V1} -> + {approxMatch, 'dec_AttributeValueAssertion'(V1, [])}; + + +%% 'extensibleMatch' + {131081, V1} -> + {extensibleMatch, 'dec_MatchingRuleAssertion'(V1, [])}; + + Else -> + {asn1_ExtAlt,ber_encode(Else)} + end +. +'dec_Filter_and'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_Filter'(V1, []) || V1 <- Tlv1]. + + +'dec_Filter_or'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_Filter'(V1, []) || V1 <- Tlv1]. + + + + +%%================================ +%% SubstringFilter +%%================================ +enc_SubstringFilter(Val) -> + enc_SubstringFilter(Val, [<<48>>]). + +enc_SubstringFilter(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute type(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute substrings(2) with type SEQUENCE OF +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_SubstringFilter_substrings'(Cindex2, [<<48>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% SubstringFilter_substrings +%%================================ +enc_SubstringFilter_substrings(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_SubstringFilter_substrings_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_SubstringFilter_substrings_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_SubstringFilter_substrings_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_SubstringFilter_substrings_SEQOF'(H, []), + 'enc_SubstringFilter_substrings_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% SubstringFilter_substrings_SEQOF +%%================================ +enc_SubstringFilter_substrings_SEQOF(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + initial -> + encode_restricted_string(element(2,Val), [<<128>>]); + any -> + encode_restricted_string(element(2,Val), [<<129>>]); + final -> + encode_restricted_string(element(2,Val), [<<130>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_SubstringFilter(Tlv) -> + dec_SubstringFilter(Tlv, [16]). + +dec_SubstringFilter(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute type(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute substrings(2) with type SEQUENCE OF +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_SubstringFilter_substrings'(V2, [16]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'SubstringFilter',Term1,Term2}, +Res1. +'dec_SubstringFilter_substrings'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_SubstringFilter_substrings_SEQOF'(V1, []) || V1 <- Tlv1]. + + +'dec_SubstringFilter_substrings_SEQOF'(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'initial' + {131072, V1} -> + {initial, decode_octet_string(V1, [])}; + + +%% 'any' + {131073, V1} -> + {any, decode_octet_string(V1, [])}; + + +%% 'final' + {131074, V1} -> + {final, decode_octet_string(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% MatchingRuleAssertion +%%================================ +enc_MatchingRuleAssertion(Val) -> + enc_MatchingRuleAssertion(Val, [<<48>>]). + +enc_MatchingRuleAssertion(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4} = Val, + +%%------------------------------------------------- +%% attribute matchingRule(1) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex1, [<<129>>]) + end, + +%%------------------------------------------------- +%% attribute type(2) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex2, [<<130>>]) + end, + +%%------------------------------------------------- +%% attribute matchValue(3) with type OCTET STRING +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_restricted_string(Cindex3, [<<131>>]), + +%%------------------------------------------------- +%% attribute dnAttributes(4) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- + {EncBytes4,EncLen4} = case Cindex4 of + asn1_DEFAULT -> + {<<>>,0}; + _ when Cindex4 =:= false -> + {<<>>,0}; + _ -> + encode_boolean(Cindex4, [<<132>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_MatchingRuleAssertion(Tlv) -> + dec_MatchingRuleAssertion(Tlv, [16]). + +dec_MatchingRuleAssertion(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute matchingRule(1) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131073,V1}|TempTlv2] -> + {decode_octet_string(V1, []), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute type(2) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131074,V2}|TempTlv3] -> + {decode_octet_string(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +%%------------------------------------------------- +%% attribute matchValue(3) with type OCTET STRING +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_octet_string(V3, [131075]), + +%%------------------------------------------------- +%% attribute dnAttributes(4) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[{131076,V4}|TempTlv5] -> + {decode_boolean(V4, []), TempTlv5}; + _ -> + {false,Tlv4} +end, + +case Tlv5 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed +end, +Res1 = {'MatchingRuleAssertion',Term1,Term2,Term3,Term4}, +Res1. + + +%%================================ +%% SearchResultEntry +%%================================ +enc_SearchResultEntry(Val) -> + enc_SearchResultEntry(Val, [<<100>>]). + +enc_SearchResultEntry(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute objectName(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute attributes(2) External LDAP:PartialAttributeList +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_PartialAttributeList'(Cindex2, [<<48>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_SearchResultEntry(Tlv) -> + dec_SearchResultEntry(Tlv, [65540]). + +dec_SearchResultEntry(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute objectName(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute attributes(2) External LDAP:PartialAttributeList +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_PartialAttributeList'(V2, [16]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'SearchResultEntry',Term1,Term2}, +Res1. + + +%%================================ +%% PartialAttributeList +%%================================ +enc_PartialAttributeList(Val) -> + enc_PartialAttributeList(Val, [<<48>>]). + +enc_PartialAttributeList(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_PartialAttributeList_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_PartialAttributeList_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_PartialAttributeList_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_PartialAttribute'(H, [<<48>>]), + 'enc_PartialAttributeList_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_PartialAttributeList(Tlv) -> + dec_PartialAttributeList(Tlv, [16]). + +dec_PartialAttributeList(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_PartialAttribute'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% SearchResultReference +%%================================ +enc_SearchResultReference(Val) -> + enc_SearchResultReference(Val, [<<115>>]). + +enc_SearchResultReference(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_SearchResultReference_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_SearchResultReference_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_SearchResultReference_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = encode_restricted_string(H, [<<4>>]), + 'enc_SearchResultReference_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_SearchResultReference(Tlv) -> + dec_SearchResultReference(Tlv, [65555]). + +dec_SearchResultReference(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +[decode_octet_string(V1, [4]) || V1 <- Tlv1]. + + + + +%%================================ +%% SearchResultDone +%%================================ +enc_SearchResultDone(Val) -> + enc_SearchResultDone(Val, [<<101>>]). + +enc_SearchResultDone(Val, TagIn) -> + enc_LDAPResult(Val, TagIn). + + +dec_SearchResultDone(Tlv) -> + dec_SearchResultDone(Tlv, [65541]). + +dec_SearchResultDone(Tlv, TagIn) -> +'dec_LDAPResult'(Tlv, TagIn). + + + +%%================================ +%% ModifyRequest +%%================================ +enc_ModifyRequest(Val) -> + enc_ModifyRequest(Val, [<<102>>]). + +enc_ModifyRequest(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute object(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute changes(2) with type SEQUENCE OF +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_ModifyRequest_changes'(Cindex2, [<<48>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% ModifyRequest_changes +%%================================ +enc_ModifyRequest_changes(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_ModifyRequest_changes_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_ModifyRequest_changes_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_ModifyRequest_changes_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_ModifyRequest_changes_SEQOF'(H, [<<48>>]), + 'enc_ModifyRequest_changes_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% ModifyRequest_changes_SEQOF +%%================================ +enc_ModifyRequest_changes_SEQOF(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute operation(1) with type ENUMERATED +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of +add -> encode_tags([<<10>>], [0], 1); +delete -> encode_tags([<<10>>], [1], 1); +replace -> encode_tags([<<10>>], [2], 1); +Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}}) +end, + +%%------------------------------------------------- +%% attribute modification(2) External LDAP:PartialAttribute +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_PartialAttribute'(Cindex2, [<<48>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_ModifyRequest(Tlv) -> + dec_ModifyRequest(Tlv, [65542]). + +dec_ModifyRequest(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute object(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute changes(2) with type SEQUENCE OF +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_ModifyRequest_changes'(V2, [16]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'ModifyRequest',Term1,Term2}, +Res1. +'dec_ModifyRequest_changes'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_ModifyRequest_changes_SEQOF'(V1, [16]) || V1 <- Tlv1]. + + +'dec_ModifyRequest_changes_SEQOF'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute operation(1) with type ENUMERATED +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = case decode_integer(V1, [10]) of +0 -> add; +1 -> delete; +2 -> replace; +Default1 -> {asn1_enum,Default1} +end, + +%%------------------------------------------------- +%% attribute modification(2) External LDAP:PartialAttribute +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_PartialAttribute'(V2, [16]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'ModifyRequest_changes_SEQOF',Term1,Term2}, +Res1. + + +%%================================ +%% ModifyResponse +%%================================ +enc_ModifyResponse(Val) -> + enc_ModifyResponse(Val, [<<103>>]). + +enc_ModifyResponse(Val, TagIn) -> + enc_LDAPResult(Val, TagIn). + + +dec_ModifyResponse(Tlv) -> + dec_ModifyResponse(Tlv, [65543]). + +dec_ModifyResponse(Tlv, TagIn) -> +'dec_LDAPResult'(Tlv, TagIn). + + + +%%================================ +%% AddRequest +%%================================ +enc_AddRequest(Val) -> + enc_AddRequest(Val, [<<104>>]). + +enc_AddRequest(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute entry(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute attributes(2) External LDAP:AttributeList +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_AttributeList'(Cindex2, [<<48>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_AddRequest(Tlv) -> + dec_AddRequest(Tlv, [65544]). + +dec_AddRequest(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute entry(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute attributes(2) External LDAP:AttributeList +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_AttributeList'(V2, [16]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'AddRequest',Term1,Term2}, +Res1. + + +%%================================ +%% AttributeList +%%================================ +enc_AttributeList(Val) -> + enc_AttributeList(Val, [<<48>>]). + +enc_AttributeList(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_AttributeList_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_AttributeList_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_AttributeList_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_Attribute'(H, [<<48>>]), + 'enc_AttributeList_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_AttributeList(Tlv) -> + dec_AttributeList(Tlv, [16]). + +dec_AttributeList(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_Attribute'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% AddResponse +%%================================ +enc_AddResponse(Val) -> + enc_AddResponse(Val, [<<105>>]). + +enc_AddResponse(Val, TagIn) -> + enc_LDAPResult(Val, TagIn). + + +dec_AddResponse(Tlv) -> + dec_AddResponse(Tlv, [65545]). + +dec_AddResponse(Tlv, TagIn) -> +'dec_LDAPResult'(Tlv, TagIn). + + + +%%================================ +%% DelRequest +%%================================ +enc_DelRequest(Val) -> + enc_DelRequest(Val, [<<74>>]). + +enc_DelRequest(Val, TagIn) -> +encode_restricted_string(Val, TagIn). + + +dec_DelRequest(Tlv) -> + dec_DelRequest(Tlv, [65546]). + +dec_DelRequest(Tlv, TagIn) -> +decode_octet_string(Tlv, TagIn). + + + +%%================================ +%% DelResponse +%%================================ +enc_DelResponse(Val) -> + enc_DelResponse(Val, [<<107>>]). + +enc_DelResponse(Val, TagIn) -> + enc_LDAPResult(Val, TagIn). + + +dec_DelResponse(Tlv) -> + dec_DelResponse(Tlv, [65547]). + +dec_DelResponse(Tlv, TagIn) -> +'dec_LDAPResult'(Tlv, TagIn). + + + +%%================================ +%% ModifyDNRequest +%%================================ +enc_ModifyDNRequest(Val) -> + enc_ModifyDNRequest(Val, [<<108>>]). + +enc_ModifyDNRequest(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4} = Val, + +%%------------------------------------------------- +%% attribute entry(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute newrdn(2) with type OCTET STRING +%%------------------------------------------------- + {EncBytes2,EncLen2} = encode_restricted_string(Cindex2, [<<4>>]), + +%%------------------------------------------------- +%% attribute deleteoldrdn(3) with type BOOLEAN +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_boolean(Cindex3, [<<1>>]), + +%%------------------------------------------------- +%% attribute newSuperior(4) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes4,EncLen4} = case Cindex4 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex4, [<<128>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_ModifyDNRequest(Tlv) -> + dec_ModifyDNRequest(Tlv, [65548]). + +dec_ModifyDNRequest(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute entry(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute newrdn(2) with type OCTET STRING +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = decode_octet_string(V2, [4]), + +%%------------------------------------------------- +%% attribute deleteoldrdn(3) with type BOOLEAN +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_boolean(V3, [1]), + +%%------------------------------------------------- +%% attribute newSuperior(4) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[{131072,V4}|TempTlv5] -> + {decode_octet_string(V4, []), TempTlv5}; + _ -> + { asn1_NOVALUE, Tlv4} +end, + +case Tlv5 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed +end, +Res1 = {'ModifyDNRequest',Term1,Term2,Term3,Term4}, +Res1. + + +%%================================ +%% ModifyDNResponse +%%================================ +enc_ModifyDNResponse(Val) -> + enc_ModifyDNResponse(Val, [<<109>>]). + +enc_ModifyDNResponse(Val, TagIn) -> + enc_LDAPResult(Val, TagIn). + + +dec_ModifyDNResponse(Tlv) -> + dec_ModifyDNResponse(Tlv, [65549]). + +dec_ModifyDNResponse(Tlv, TagIn) -> +'dec_LDAPResult'(Tlv, TagIn). + + + +%%================================ +%% CompareRequest +%%================================ +enc_CompareRequest(Val) -> + enc_CompareRequest(Val, [<<110>>]). + +enc_CompareRequest(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute entry(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute ava(2) External LDAP:AttributeValueAssertion +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_AttributeValueAssertion'(Cindex2, [<<48>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_CompareRequest(Tlv) -> + dec_CompareRequest(Tlv, [65550]). + +dec_CompareRequest(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute entry(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute ava(2) External LDAP:AttributeValueAssertion +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_AttributeValueAssertion'(V2, [16]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'CompareRequest',Term1,Term2}, +Res1. + + +%%================================ +%% CompareResponse +%%================================ +enc_CompareResponse(Val) -> + enc_CompareResponse(Val, [<<111>>]). + +enc_CompareResponse(Val, TagIn) -> + enc_LDAPResult(Val, TagIn). + + +dec_CompareResponse(Tlv) -> + dec_CompareResponse(Tlv, [65551]). + +dec_CompareResponse(Tlv, TagIn) -> +'dec_LDAPResult'(Tlv, TagIn). + + + +%%================================ +%% AbandonRequest +%%================================ +enc_AbandonRequest(Val) -> + enc_AbandonRequest(Val, [<<80>>]). + +enc_AbandonRequest(Val, TagIn) -> +encode_integer(Val, TagIn). + + +dec_AbandonRequest(Tlv) -> + dec_AbandonRequest(Tlv, [65552]). + +dec_AbandonRequest(Tlv, TagIn) -> +begin +Val1 = decode_integer(Tlv, TagIn), +if 0 =< Val1, Val1 =< 2147483647 -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end. + + + +%%================================ +%% ExtendedRequest +%%================================ +enc_ExtendedRequest(Val) -> + enc_ExtendedRequest(Val, [<<119>>]). + +enc_ExtendedRequest(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute requestName(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<128>>]), + +%%------------------------------------------------- +%% attribute requestValue(2) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex2, [<<129>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_ExtendedRequest(Tlv) -> + dec_ExtendedRequest(Tlv, [65559]). + +dec_ExtendedRequest(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute requestName(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [131072]), + +%%------------------------------------------------- +%% attribute requestValue(2) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131073,V2}|TempTlv3] -> + {decode_octet_string(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'ExtendedRequest',Term1,Term2}, +Res1. + + +%%================================ +%% ExtendedResponse +%%================================ +enc_ExtendedResponse(Val) -> + enc_ExtendedResponse(Val, [<<120>>]). + +enc_ExtendedResponse(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4,Cindex5,Cindex6} = Val, + +%%------------------------------------------------- +%% attribute resultCode(1) with type ENUMERATED +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of +success -> encode_tags([<<10>>], [0], 1); +operationsError -> encode_tags([<<10>>], [1], 1); +protocolError -> encode_tags([<<10>>], [2], 1); +timeLimitExceeded -> encode_tags([<<10>>], [3], 1); +sizeLimitExceeded -> encode_tags([<<10>>], [4], 1); +compareFalse -> encode_tags([<<10>>], [5], 1); +compareTrue -> encode_tags([<<10>>], [6], 1); +authMethodNotSupported -> encode_tags([<<10>>], [7], 1); +strongerAuthRequired -> encode_tags([<<10>>], [8], 1); +referral -> encode_tags([<<10>>], [10], 1); +adminLimitExceeded -> encode_tags([<<10>>], [11], 1); +unavailableCriticalExtension -> encode_tags([<<10>>], [12], 1); +confidentialityRequired -> encode_tags([<<10>>], [13], 1); +saslBindInProgress -> encode_tags([<<10>>], [14], 1); +noSuchAttribute -> encode_tags([<<10>>], [16], 1); +undefinedAttributeType -> encode_tags([<<10>>], [17], 1); +inappropriateMatching -> encode_tags([<<10>>], [18], 1); +constraintViolation -> encode_tags([<<10>>], [19], 1); +attributeOrValueExists -> encode_tags([<<10>>], [20], 1); +invalidAttributeSyntax -> encode_tags([<<10>>], [21], 1); +noSuchObject -> encode_tags([<<10>>], [32], 1); +aliasProblem -> encode_tags([<<10>>], [33], 1); +invalidDNSyntax -> encode_tags([<<10>>], [34], 1); +aliasDereferencingProblem -> encode_tags([<<10>>], [36], 1); +inappropriateAuthentication -> encode_tags([<<10>>], [48], 1); +invalidCredentials -> encode_tags([<<10>>], [49], 1); +insufficientAccessRights -> encode_tags([<<10>>], [50], 1); +busy -> encode_tags([<<10>>], [51], 1); +unavailable -> encode_tags([<<10>>], [52], 1); +unwillingToPerform -> encode_tags([<<10>>], [53], 1); +loopDetect -> encode_tags([<<10>>], [54], 1); +namingViolation -> encode_tags([<<10>>], [64], 1); +objectClassViolation -> encode_tags([<<10>>], [65], 1); +notAllowedOnNonLeaf -> encode_tags([<<10>>], [66], 1); +notAllowedOnRDN -> encode_tags([<<10>>], [67], 1); +entryAlreadyExists -> encode_tags([<<10>>], [68], 1); +objectClassModsProhibited -> encode_tags([<<10>>], [69], 1); +affectsMultipleDSAs -> encode_tags([<<10>>], [71], 1); +other -> encode_tags([<<10>>], [80], 1); +Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}}) +end, + +%%------------------------------------------------- +%% attribute matchedDN(2) with type OCTET STRING +%%------------------------------------------------- + {EncBytes2,EncLen2} = encode_restricted_string(Cindex2, [<<4>>]), + +%%------------------------------------------------- +%% attribute diagnosticMessage(3) with type OCTET STRING +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_restricted_string(Cindex3, [<<4>>]), + +%%------------------------------------------------- +%% attribute referral(4) External LDAP:Referral OPTIONAL +%%------------------------------------------------- + {EncBytes4,EncLen4} = case Cindex4 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_Referral'(Cindex4, [<<163>>]) + end, + +%%------------------------------------------------- +%% attribute responseName(5) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes5,EncLen5} = case Cindex5 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex5, [<<138>>]) + end, + +%%------------------------------------------------- +%% attribute responseValue(6) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes6,EncLen6} = case Cindex6 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex6, [<<139>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4, EncBytes5, EncBytes6], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4 + EncLen5 + EncLen6, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_ExtendedResponse(Tlv) -> + dec_ExtendedResponse(Tlv, [65560]). + +dec_ExtendedResponse(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute resultCode(1) with type ENUMERATED +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = case decode_integer(V1, [10]) of +0 -> success; +1 -> operationsError; +2 -> protocolError; +3 -> timeLimitExceeded; +4 -> sizeLimitExceeded; +5 -> compareFalse; +6 -> compareTrue; +7 -> authMethodNotSupported; +8 -> strongerAuthRequired; +10 -> referral; +11 -> adminLimitExceeded; +12 -> unavailableCriticalExtension; +13 -> confidentialityRequired; +14 -> saslBindInProgress; +16 -> noSuchAttribute; +17 -> undefinedAttributeType; +18 -> inappropriateMatching; +19 -> constraintViolation; +20 -> attributeOrValueExists; +21 -> invalidAttributeSyntax; +32 -> noSuchObject; +33 -> aliasProblem; +34 -> invalidDNSyntax; +36 -> aliasDereferencingProblem; +48 -> inappropriateAuthentication; +49 -> invalidCredentials; +50 -> insufficientAccessRights; +51 -> busy; +52 -> unavailable; +53 -> unwillingToPerform; +54 -> loopDetect; +64 -> namingViolation; +65 -> objectClassViolation; +66 -> notAllowedOnNonLeaf; +67 -> notAllowedOnRDN; +68 -> entryAlreadyExists; +69 -> objectClassModsProhibited; +71 -> affectsMultipleDSAs; +80 -> other; +Default1 -> {asn1_enum,Default1} +end, + +%%------------------------------------------------- +%% attribute matchedDN(2) with type OCTET STRING +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = decode_octet_string(V2, [4]), + +%%------------------------------------------------- +%% attribute diagnosticMessage(3) with type OCTET STRING +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_octet_string(V3, [4]), + +%%------------------------------------------------- +%% attribute referral(4) External LDAP:Referral OPTIONAL +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[{131075,V4}|TempTlv5] -> + {'dec_Referral'(V4, []), TempTlv5}; + _ -> + { asn1_NOVALUE, Tlv4} +end, + +%%------------------------------------------------- +%% attribute responseName(5) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term5,Tlv6} = case Tlv5 of +[{131082,V5}|TempTlv6] -> + {decode_octet_string(V5, []), TempTlv6}; + _ -> + { asn1_NOVALUE, Tlv5} +end, + +%%------------------------------------------------- +%% attribute responseValue(6) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term6,Tlv7} = case Tlv6 of +[{131083,V6}|TempTlv7] -> + {decode_octet_string(V6, []), TempTlv7}; + _ -> + { asn1_NOVALUE, Tlv6} +end, + +case Tlv7 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv7}}}) % extra fields not allowed +end, +Res1 = {'ExtendedResponse',Term1,Term2,Term3,Term4,Term5,Term6}, +Res1. + + +%%================================ +%% IntermediateResponse +%%================================ +enc_IntermediateResponse(Val) -> + enc_IntermediateResponse(Val, [<<121>>]). + +enc_IntermediateResponse(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute responseName(1) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex1, [<<128>>]) + end, + +%%------------------------------------------------- +%% attribute responseValue(2) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex2, [<<129>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_IntermediateResponse(Tlv) -> + dec_IntermediateResponse(Tlv, [65561]). + +dec_IntermediateResponse(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute responseName(1) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {decode_octet_string(V1, []), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute responseValue(2) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131073,V2}|TempTlv3] -> + {decode_octet_string(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'IntermediateResponse',Term1,Term2}, +Res1. +maxInt() -> +2147483647. + + +%%% +%%% Run-time functions. +%%% + +'dialyzer-suppressions'(Arg) -> + ok. + +ber_decode_nif(B) -> + asn1rt_nif:decode_ber_tlv(B). + +ber_encode([Tlv]) -> + ber_encode(Tlv); +ber_encode(Tlv) when is_binary(Tlv) -> + Tlv; +ber_encode(Tlv) -> + asn1rt_nif:encode_ber_tlv(Tlv). + +collect_parts(TlvList) -> + collect_parts(TlvList, []). + +collect_parts([{_, L} | Rest], Acc) when is_list(L) -> + collect_parts(Rest, [collect_parts(L) | Acc]); +collect_parts([{3, <>} | Rest], _Acc) -> + collect_parts_bit(Rest, [Bits], Unused); +collect_parts([{_T, V} | Rest], Acc) -> + collect_parts(Rest, [V | Acc]); +collect_parts([], Acc) -> + list_to_binary(lists:reverse(Acc)). + +collect_parts_bit([{3, <>} | Rest], Acc, Uacc) -> + collect_parts_bit(Rest, [Bits | Acc], Unused + Uacc); +collect_parts_bit([], Acc, Uacc) -> + list_to_binary([Uacc | lists:reverse(Acc)]). + +decode_boolean(Tlv, TagIn) -> + Val = match_tags(Tlv, TagIn), + case Val of + <<0:8>> -> + false; + <<_:8>> -> + true; + _ -> + exit({error, {asn1, {decode_boolean, Val}}}) + end. + +decode_integer(Tlv, TagIn) -> + Bin = match_tags(Tlv, TagIn), + Len = byte_size(Bin), + <> = Bin, + Int. + +decode_null(Tlv, Tags) -> + Val = match_tags(Tlv, Tags), + case Val of + <<>> -> + 'NULL'; + _ -> + exit({error, {asn1, {decode_null, Val}}}) + end. + +decode_octet_string(Tlv, TagsIn) -> + Bin = match_and_collect(Tlv, TagsIn), + binary:copy(Bin). + +encode_boolean(true, TagIn) -> + encode_tags(TagIn, [255], 1); +encode_boolean(false, TagIn) -> + encode_tags(TagIn, [0], 1); +encode_boolean(X, _) -> + exit({error, {asn1, {encode_boolean, X}}}). + +encode_integer(Val) -> + Bytes = + if + Val >= 0 -> + encode_integer_pos(Val, []); + true -> + encode_integer_neg(Val, []) + end, + {Bytes, length(Bytes)}. + +encode_integer(Val, Tag) when is_integer(Val) -> + encode_tags(Tag, encode_integer(Val)); +encode_integer(Val, _Tag) -> + exit({error, {asn1, {encode_integer, Val}}}). + +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]). + +encode_integer_pos(0, [B | _Acc] = L) when B < 128 -> + L; +encode_integer_pos(N, Acc) -> + encode_integer_pos(N bsr 8, [N band 255 | Acc]). + +encode_length(L) when L =< 127 -> + {[L], 1}; +encode_length(L) -> + Oct = minimum_octets(L), + Len = length(Oct), + if + Len =< 126 -> + {[128 bor Len | Oct], Len + 1}; + true -> + exit({error, {asn1, too_long_length_oct, Len}}) + end. + +encode_null(_Val, TagIn) -> + encode_tags(TagIn, [], 0). + +encode_restricted_string(OctetList, TagIn) when is_binary(OctetList) -> + encode_tags(TagIn, OctetList, byte_size(OctetList)); +encode_restricted_string(OctetList, TagIn) when is_list(OctetList) -> + encode_tags(TagIn, OctetList, length(OctetList)). + +encode_tags(TagIn, {BytesSoFar, LenSoFar}) -> + encode_tags(TagIn, BytesSoFar, LenSoFar). + +encode_tags([Tag | Trest], BytesSoFar, LenSoFar) -> + {Bytes2, L2} = encode_length(LenSoFar), + encode_tags(Trest, + [Tag, Bytes2 | BytesSoFar], + LenSoFar + byte_size(Tag) + L2); +encode_tags([], BytesSoFar, LenSoFar) -> + {BytesSoFar, LenSoFar}. + +match_and_collect(Tlv, TagsIn) -> + Val = match_tags(Tlv, TagsIn), + case Val of + [_ | _] = PartList -> + collect_parts(PartList); + Bin when is_binary(Bin) -> + Bin + end. + +match_tags({T, V}, [T]) -> + V; +match_tags({T, V}, [T | Tt]) -> + match_tags(V, Tt); +match_tags([{T, V}], [T | Tt]) -> + match_tags(V, Tt); +match_tags([{T, _V} | _] = Vlist, [T]) -> + Vlist; +match_tags(Tlv, []) -> + Tlv; +match_tags({Tag, _V} = Tlv, [T | _Tt]) -> + exit({error, {asn1, {wrong_tag, {{expected, T}, {got, Tag, Tlv}}}}}). + +minimum_octets(0, Acc) -> + Acc; +minimum_octets(Val, Acc) -> + minimum_octets(Val bsr 8, [Val band 255 | Acc]). + +minimum_octets(Val) -> + minimum_octets(Val, []). diff --git a/src/LDAP.hrl b/src/LDAP.hrl new file mode 100644 index 0000000..7c6213a --- /dev/null +++ b/src/LDAP.hrl @@ -0,0 +1,132 @@ +%% 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 LDAP. + +-ifndef(_LDAP_HRL_). +-define(_LDAP_HRL_, true). + +-record('LDAPMessage', { + messageID, + protocolOp, + controls = asn1_NOVALUE +}). + +-record('AttributeValueAssertion', { + attributeDesc, + assertionValue +}). + +-record('PartialAttribute', { + type, + vals +}). + +-record('LDAPResult', { + resultCode, + matchedDN, + diagnosticMessage, + referral = asn1_NOVALUE +}). + +-record('Control', { + controlType, + criticality = asn1_DEFAULT, + controlValue = asn1_NOVALUE +}). + +-record('BindRequest', { + version, + name, + authentication +}). + +-record('SaslCredentials', { + mechanism, + credentials = asn1_NOVALUE +}). + +-record('BindResponse', { + resultCode, + matchedDN, + diagnosticMessage, + referral = asn1_NOVALUE, + serverSaslCreds = asn1_NOVALUE +}). + +-record('SearchRequest', { + baseObject, + scope, + derefAliases, + sizeLimit, + timeLimit, + typesOnly, + filter, + attributes +}). + +-record('SubstringFilter', { + type, + substrings +}). + +-record('MatchingRuleAssertion', { + matchingRule = asn1_NOVALUE, + type = asn1_NOVALUE, + matchValue, + dnAttributes = asn1_DEFAULT +}). + +-record('SearchResultEntry', { + objectName, + attributes +}). + +-record('ModifyRequest', { + object, + changes +}). + +-record('ModifyRequest_changes_SEQOF', { + operation, + modification +}). + +-record('AddRequest', { + entry, + attributes +}). + +-record('ModifyDNRequest', { + entry, + newrdn, + deleteoldrdn, + newSuperior = asn1_NOVALUE +}). + +-record('CompareRequest', { + entry, + ava +}). + +-record('ExtendedRequest', { + requestName, + requestValue = asn1_NOVALUE +}). + +-record('ExtendedResponse', { + resultCode, + matchedDN, + diagnosticMessage, + referral = asn1_NOVALUE, + responseName = asn1_NOVALUE, + responseValue = asn1_NOVALUE +}). + +-record('IntermediateResponse', { + responseName = asn1_NOVALUE, + responseValue = asn1_NOVALUE +}). + +-define('maxInt', 2147483647). +-endif. %% _LDAP_HRL_ diff --git a/src/PKIX1Implicit-2009.erl b/src/PKIX1Implicit-2009.erl new file mode 100644 index 0000000..23d2c60 --- /dev/null +++ b/src/PKIX1Implicit-2009.erl @@ -0,0 +1,3828 @@ +%% Generated by the Erlang ASN.1 BER compiler. Version: 5.0.21 +%% Purpose: Encoding and decoding of the types in PKIX1Implicit-2009. + +-module('PKIX1Implicit-2009'). +-compile(nowarn_unused_vars). +-dialyzer(no_improper_lists). +-dialyzer(no_match). +-include("PKIX1Implicit-2009.hrl"). +-asn1_info([{vsn,'5.0.21'}, + {module,'PKIX1Implicit-2009'}, + {options,[warnings,ber,errors, + {cwd,"/Users/maxim/depot/synrc/ca/priv/cms"}, + {outdir,"/Users/maxim/depot/synrc/ca/priv/cms"}, + {i,"."}, + {i,"/Users/maxim/depot/synrc/ca/priv/cms"}]}]). + +-export([encoding_rule/0,maps/0,bit_string_format/0, + legacy_erlang_types/0]). +-export(['dialyzer-suppressions'/1]). +-export([ +enc_AuthorityKeyIdentifier/2, +enc_KeyIdentifier/2, +enc_KeyUsage/2, +enc_PrivateKeyUsagePeriod/2, +enc_CertificatePolicies/2, +enc_PolicyInformation/2, +enc_CertPolicyId/2, +enc_PolicyQualifierInfo/2, +enc_CPSuri/2, +enc_UserNotice/2, +enc_NoticeReference/2, +enc_DisplayText/2, +enc_PolicyMappings/2, +enc_GeneralNames/2, +enc_GeneralName/2, +enc_EDIPartyName/2, +enc_SubjectDirectoryAttributes/2, +enc_BasicConstraints/2, +enc_NameConstraints/2, +enc_GeneralSubtrees/2, +enc_GeneralSubtree/2, +enc_BaseDistance/2, +enc_PolicyConstraints/2, +enc_SkipCerts/2, +enc_CRLDistributionPoints/2, +enc_DistributionPoint/2, +enc_DistributionPointName/2, +enc_ReasonFlags/2, +enc_ExtKeyUsageSyntax/2, +enc_KeyPurposeId/2, +enc_AuthorityInfoAccessSyntax/2, +enc_AccessDescription/2, +enc_SubjectInfoAccessSyntax/2, +enc_CRLNumber/2, +enc_IssuingDistributionPoint/2, +enc_CRLReason/2, +'enc_INSTANCE OF'/2 +]). + +-export([ +dec_AuthorityKeyIdentifier/2, +dec_KeyIdentifier/2, +dec_KeyUsage/2, +dec_PrivateKeyUsagePeriod/2, +dec_CertificatePolicies/2, +dec_PolicyInformation/2, +dec_CertPolicyId/2, +dec_PolicyQualifierInfo/2, +dec_CPSuri/2, +dec_UserNotice/2, +dec_NoticeReference/2, +dec_DisplayText/2, +dec_PolicyMappings/2, +dec_GeneralNames/2, +dec_GeneralName/2, +dec_EDIPartyName/2, +dec_SubjectDirectoryAttributes/2, +dec_BasicConstraints/2, +dec_NameConstraints/2, +dec_GeneralSubtrees/2, +dec_GeneralSubtree/2, +dec_BaseDistance/2, +dec_PolicyConstraints/2, +dec_SkipCerts/2, +dec_CRLDistributionPoints/2, +dec_DistributionPoint/2, +dec_DistributionPointName/2, +dec_ReasonFlags/2, +dec_ExtKeyUsageSyntax/2, +dec_KeyPurposeId/2, +dec_AuthorityInfoAccessSyntax/2, +dec_AccessDescription/2, +dec_SubjectInfoAccessSyntax/2, +dec_CRLNumber/2, +dec_IssuingDistributionPoint/2, +dec_CRLReason/2, +'dec_INSTANCE OF'/2 +]). + +-export([ +'enc_ext-AuthorityKeyIdentifier'/3, +'enc_ext-SubjectKeyIdentifier'/3, +'enc_ext-KeyUsage'/3, +'enc_ext-PrivateKeyUsagePeriod'/3, +'enc_ext-CertificatePolicies'/3, +'enc_pqid-cps'/3, +'enc_pqid-unotice'/3, +'enc_ext-PolicyMappings'/3, +'enc_ext-SubjectAltName'/3, +'enc_ext-IssuerAltName'/3, +'enc_ext-SubjectDirectoryAttributes'/3, +'enc_ext-BasicConstraints'/3, +'enc_ext-NameConstraints'/3, +'enc_ext-PolicyConstraints'/3, +'enc_ext-CRLDistributionPoints'/3, +'enc_ext-ExtKeyUsage'/3, +'enc_ext-InhibitAnyPolicy'/3, +'enc_ext-FreshestCRL'/3, +'enc_ext-AuthorityInfoAccess'/3, +'enc_ext-SubjectInfoAccessSyntax'/3, +'enc_ext-CRLNumber'/3, +'enc_ext-IssuingDistributionPoint'/3, +'enc_ext-DeltaCRLIndicator'/3, +'enc_ext-CRLReason'/3, +'enc_ext-CertificateIssuer'/3, +'enc_ext-HoldInstructionCode'/3, +'enc_ext-InvalidityDate'/3 +]). + +-export([ +'dec_ext-AuthorityKeyIdentifier'/3, +'dec_ext-SubjectKeyIdentifier'/3, +'dec_ext-KeyUsage'/3, +'dec_ext-PrivateKeyUsagePeriod'/3, +'dec_ext-CertificatePolicies'/3, +'dec_pqid-cps'/3, +'dec_pqid-unotice'/3, +'dec_ext-PolicyMappings'/3, +'dec_ext-SubjectAltName'/3, +'dec_ext-IssuerAltName'/3, +'dec_ext-SubjectDirectoryAttributes'/3, +'dec_ext-BasicConstraints'/3, +'dec_ext-NameConstraints'/3, +'dec_ext-PolicyConstraints'/3, +'dec_ext-CRLDistributionPoints'/3, +'dec_ext-ExtKeyUsage'/3, +'dec_ext-InhibitAnyPolicy'/3, +'dec_ext-FreshestCRL'/3, +'dec_ext-AuthorityInfoAccess'/3, +'dec_ext-SubjectInfoAccessSyntax'/3, +'dec_ext-CRLNumber'/3, +'dec_ext-IssuingDistributionPoint'/3, +'dec_ext-DeltaCRLIndicator'/3, +'dec_ext-CRLReason'/3, +'dec_ext-CertificateIssuer'/3, +'dec_ext-HoldInstructionCode'/3, +'dec_ext-InvalidityDate'/3 +]). + +-export([ +getenc_CertExtensions/1, +getenc_CrlExtensions/1, +getenc_CrlEntryExtensions/1, +getenc_PolicyQualifierId/1, +getenc_internal_object_set_argument_2/1 +]). + +-export([ +getdec_CertExtensions/1, +getdec_CrlExtensions/1, +getdec_CrlEntryExtensions/1, +getdec_PolicyQualifierId/1, +getdec_internal_object_set_argument_2/1 +]). + +-export([ +'id-ce'/0, +'id-ce-authorityKeyIdentifier'/0, +'id-ce-subjectKeyIdentifier'/0, +'id-ce-keyUsage'/0, +'id-ce-privateKeyUsagePeriod'/0, +'id-ce-certificatePolicies'/0, +'id-ce-policyMappings'/0, +'id-ce-subjectAltName'/0, +'id-ce-issuerAltName'/0, +'id-ce-subjectDirectoryAttributes'/0, +'id-ce-basicConstraints'/0, +'id-ce-nameConstraints'/0, +'id-ce-policyConstraints'/0, +'id-ce-cRLDistributionPoints'/0, +'id-ce-extKeyUsage'/0, +anyExtendedKeyUsage/0, +'id-kp-serverAuth'/0, +'id-kp-clientAuth'/0, +'id-kp-codeSigning'/0, +'id-kp-emailProtection'/0, +'id-kp-timeStamping'/0, +'id-kp-OCSPSigning'/0, +'id-ce-inhibitAnyPolicy'/0, +'id-ce-freshestCRL'/0, +'id-pe-authorityInfoAccess'/0, +'id-pe-subjectInfoAccess'/0, +'id-ce-cRLNumber'/0, +'id-ce-issuingDistributionPoint'/0, +'id-ce-deltaCRLIndicator'/0, +'id-ce-cRLReasons'/0, +'id-ce-certificateIssuer'/0, +'id-ce-holdInstructionCode'/0, +holdInstruction/0, +'id-holdinstruction-none'/0, +'id-holdinstruction-callissuer'/0, +'id-holdinstruction-reject'/0, +'id-ce-invalidityDate'/0, +ubMax/0 +]). + +-export([info/0]). + +-export([encode/2,decode/2]). + +encoding_rule() -> ber. + +maps() -> false. + +bit_string_format() -> bitstring. + +legacy_erlang_types() -> false. + +encode(Type, Data) -> +try iolist_to_binary(element(1, encode_disp(Type, Data))) of + Bytes -> + {ok,Bytes} + catch + Class:Exception:Stk when Class =:= error; Class =:= exit -> + case Exception of + {error,{asn1,Reason}} -> + {error,{asn1,{Reason,Stk}}}; + Reason -> + {error,{asn1,{Reason,Stk}}} + end +end. + +decode(Type, Data) -> +try + Result = decode_disp(Type, element(1, ber_decode_nif(Data))), + {ok,Result} + catch + Class:Exception:Stk when Class =:= error; Class =:= exit -> + case Exception of + {error,{asn1,Reason}} -> + {error,{asn1,{Reason,Stk}}}; + Reason -> + {error,{asn1,{Reason,Stk}}} + end +end. + +encode_disp('AuthorityKeyIdentifier', Data) -> enc_AuthorityKeyIdentifier(Data); +encode_disp('KeyIdentifier', Data) -> enc_KeyIdentifier(Data); +encode_disp('KeyUsage', Data) -> enc_KeyUsage(Data); +encode_disp('PrivateKeyUsagePeriod', Data) -> enc_PrivateKeyUsagePeriod(Data); +encode_disp('CertificatePolicies', Data) -> enc_CertificatePolicies(Data); +encode_disp('PolicyInformation', Data) -> enc_PolicyInformation(Data); +encode_disp('CertPolicyId', Data) -> enc_CertPolicyId(Data); +encode_disp('PolicyQualifierInfo', Data) -> enc_PolicyQualifierInfo(Data); +encode_disp('CPSuri', Data) -> enc_CPSuri(Data); +encode_disp('UserNotice', Data) -> enc_UserNotice(Data); +encode_disp('NoticeReference', Data) -> enc_NoticeReference(Data); +encode_disp('DisplayText', Data) -> enc_DisplayText(Data); +encode_disp('PolicyMappings', Data) -> enc_PolicyMappings(Data); +encode_disp('GeneralNames', Data) -> enc_GeneralNames(Data); +encode_disp('GeneralName', Data) -> enc_GeneralName(Data); +encode_disp('EDIPartyName', Data) -> enc_EDIPartyName(Data); +encode_disp('SubjectDirectoryAttributes', Data) -> enc_SubjectDirectoryAttributes(Data); +encode_disp('BasicConstraints', Data) -> enc_BasicConstraints(Data); +encode_disp('NameConstraints', Data) -> enc_NameConstraints(Data); +encode_disp('GeneralSubtrees', Data) -> enc_GeneralSubtrees(Data); +encode_disp('GeneralSubtree', Data) -> enc_GeneralSubtree(Data); +encode_disp('BaseDistance', Data) -> enc_BaseDistance(Data); +encode_disp('PolicyConstraints', Data) -> enc_PolicyConstraints(Data); +encode_disp('SkipCerts', Data) -> enc_SkipCerts(Data); +encode_disp('CRLDistributionPoints', Data) -> enc_CRLDistributionPoints(Data); +encode_disp('DistributionPoint', Data) -> enc_DistributionPoint(Data); +encode_disp('DistributionPointName', Data) -> enc_DistributionPointName(Data); +encode_disp('ReasonFlags', Data) -> enc_ReasonFlags(Data); +encode_disp('ExtKeyUsageSyntax', Data) -> enc_ExtKeyUsageSyntax(Data); +encode_disp('KeyPurposeId', Data) -> enc_KeyPurposeId(Data); +encode_disp('AuthorityInfoAccessSyntax', Data) -> enc_AuthorityInfoAccessSyntax(Data); +encode_disp('AccessDescription', Data) -> enc_AccessDescription(Data); +encode_disp('SubjectInfoAccessSyntax', Data) -> enc_SubjectInfoAccessSyntax(Data); +encode_disp('CRLNumber', Data) -> enc_CRLNumber(Data); +encode_disp('IssuingDistributionPoint', Data) -> enc_IssuingDistributionPoint(Data); +encode_disp('CRLReason', Data) -> enc_CRLReason(Data); +encode_disp('INSTANCE OF', Data) -> 'enc_INSTANCE OF'(Data); +encode_disp(Type, _Data) -> exit({error,{asn1,{undefined_type,Type}}}). + +decode_disp('AuthorityKeyIdentifier', Data) -> dec_AuthorityKeyIdentifier(Data); +decode_disp('KeyIdentifier', Data) -> dec_KeyIdentifier(Data); +decode_disp('KeyUsage', Data) -> dec_KeyUsage(Data); +decode_disp('PrivateKeyUsagePeriod', Data) -> dec_PrivateKeyUsagePeriod(Data); +decode_disp('CertificatePolicies', Data) -> dec_CertificatePolicies(Data); +decode_disp('PolicyInformation', Data) -> dec_PolicyInformation(Data); +decode_disp('CertPolicyId', Data) -> dec_CertPolicyId(Data); +decode_disp('PolicyQualifierInfo', Data) -> dec_PolicyQualifierInfo(Data); +decode_disp('CPSuri', Data) -> dec_CPSuri(Data); +decode_disp('UserNotice', Data) -> dec_UserNotice(Data); +decode_disp('NoticeReference', Data) -> dec_NoticeReference(Data); +decode_disp('DisplayText', Data) -> dec_DisplayText(Data); +decode_disp('PolicyMappings', Data) -> dec_PolicyMappings(Data); +decode_disp('GeneralNames', Data) -> dec_GeneralNames(Data); +decode_disp('GeneralName', Data) -> dec_GeneralName(Data); +decode_disp('EDIPartyName', Data) -> dec_EDIPartyName(Data); +decode_disp('SubjectDirectoryAttributes', Data) -> dec_SubjectDirectoryAttributes(Data); +decode_disp('BasicConstraints', Data) -> dec_BasicConstraints(Data); +decode_disp('NameConstraints', Data) -> dec_NameConstraints(Data); +decode_disp('GeneralSubtrees', Data) -> dec_GeneralSubtrees(Data); +decode_disp('GeneralSubtree', Data) -> dec_GeneralSubtree(Data); +decode_disp('BaseDistance', Data) -> dec_BaseDistance(Data); +decode_disp('PolicyConstraints', Data) -> dec_PolicyConstraints(Data); +decode_disp('SkipCerts', Data) -> dec_SkipCerts(Data); +decode_disp('CRLDistributionPoints', Data) -> dec_CRLDistributionPoints(Data); +decode_disp('DistributionPoint', Data) -> dec_DistributionPoint(Data); +decode_disp('DistributionPointName', Data) -> dec_DistributionPointName(Data); +decode_disp('ReasonFlags', Data) -> dec_ReasonFlags(Data); +decode_disp('ExtKeyUsageSyntax', Data) -> dec_ExtKeyUsageSyntax(Data); +decode_disp('KeyPurposeId', Data) -> dec_KeyPurposeId(Data); +decode_disp('AuthorityInfoAccessSyntax', Data) -> dec_AuthorityInfoAccessSyntax(Data); +decode_disp('AccessDescription', Data) -> dec_AccessDescription(Data); +decode_disp('SubjectInfoAccessSyntax', Data) -> dec_SubjectInfoAccessSyntax(Data); +decode_disp('CRLNumber', Data) -> dec_CRLNumber(Data); +decode_disp('IssuingDistributionPoint', Data) -> dec_IssuingDistributionPoint(Data); +decode_disp('CRLReason', Data) -> dec_CRLReason(Data); +decode_disp('INSTANCE OF', Data) -> 'dec_INSTANCE OF'(Data); +decode_disp(Type, _Data) -> exit({error,{asn1,{undefined_type,Type}}}). + +info() -> + case ?MODULE:module_info(attributes) of + Attributes when is_list(Attributes) -> + case lists:keyfind(asn1_info, 1, Attributes) of + {_,Info} when is_list(Info) -> + Info; + _ -> + [] + end; + _ -> + [] + end. + + +%%================================ +%% AuthorityKeyIdentifier +%%================================ +enc_AuthorityKeyIdentifier(Val) -> + enc_AuthorityKeyIdentifier(Val, [<<48>>]). + +enc_AuthorityKeyIdentifier(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute keyIdentifier(1) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex1, [<<128>>]) + end, + +%%------------------------------------------------- +%% attribute authorityCertIssuer(2) External PKIX1Implicit-2009:GeneralNames OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_GeneralNames'(Cindex2, [<<161>>]) + end, + +%%------------------------------------------------- +%% attribute authorityCertSerialNumber(3) with type INTEGER OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_integer(Cindex3, [<<130>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_AuthorityKeyIdentifier(Tlv) -> + dec_AuthorityKeyIdentifier(Tlv, [16]). + +dec_AuthorityKeyIdentifier(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute keyIdentifier(1) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {decode_octet_string(V1, []), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute authorityCertIssuer(2) External PKIX1Implicit-2009:GeneralNames OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131073,V2}|TempTlv3] -> + {'dec_GeneralNames'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +%%------------------------------------------------- +%% attribute authorityCertSerialNumber(3) with type INTEGER OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{131074,V3}|TempTlv4] -> + {decode_integer(V3, []), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'AuthorityKeyIdentifier',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% KeyIdentifier +%%================================ +enc_KeyIdentifier(Val) -> + enc_KeyIdentifier(Val, [<<4>>]). + +enc_KeyIdentifier(Val, TagIn) -> +encode_restricted_string(Val, TagIn). + + +dec_KeyIdentifier(Tlv) -> + dec_KeyIdentifier(Tlv, [4]). + +dec_KeyIdentifier(Tlv, TagIn) -> +decode_octet_string(Tlv, TagIn). + + + +%%================================ +%% KeyUsage +%%================================ +enc_KeyUsage(Val) -> + enc_KeyUsage(Val, [<<3>>]). + +enc_KeyUsage(Val, TagIn) -> +encode_named_bit_string(Val, [{digitalSignature,0},{nonRepudiation,1},{keyEncipherment,2},{dataEncipherment,3},{keyAgreement,4},{keyCertSign,5},{cRLSign,6},{encipherOnly,7},{decipherOnly,8}], TagIn). + + +dec_KeyUsage(Tlv) -> + dec_KeyUsage(Tlv, [3]). + +dec_KeyUsage(Tlv, TagIn) -> +decode_named_bit_string(Tlv, [{digitalSignature,0},{nonRepudiation,1},{keyEncipherment,2},{dataEncipherment,3},{keyAgreement,4},{keyCertSign,5},{cRLSign,6},{encipherOnly,7},{decipherOnly,8}], TagIn). + + + +%%================================ +%% PrivateKeyUsagePeriod +%%================================ +enc_PrivateKeyUsagePeriod(Val) -> + enc_PrivateKeyUsagePeriod(Val, [<<48>>]). + +enc_PrivateKeyUsagePeriod(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute notBefore(1) with type GeneralizedTime OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex1, [<<128>>]) + end, + +%%------------------------------------------------- +%% attribute notAfter(2) with type GeneralizedTime OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex2, [<<129>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_PrivateKeyUsagePeriod(Tlv) -> + dec_PrivateKeyUsagePeriod(Tlv, [16]). + +dec_PrivateKeyUsagePeriod(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute notBefore(1) with type GeneralizedTime OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {begin +binary_to_list(decode_restricted_string(V1, [])) +end +, TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute notAfter(2) with type GeneralizedTime OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131073,V2}|TempTlv3] -> + {begin +binary_to_list(decode_restricted_string(V2, [])) +end +, TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PrivateKeyUsagePeriod',Term1,Term2}, +Res1. + + +%%================================ +%% CertificatePolicies +%%================================ +enc_CertificatePolicies(Val) -> + enc_CertificatePolicies(Val, [<<48>>]). + +enc_CertificatePolicies(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_CertificatePolicies_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_CertificatePolicies_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_CertificatePolicies_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_PolicyInformation'(H, [<<48>>]), + 'enc_CertificatePolicies_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_CertificatePolicies(Tlv) -> + dec_CertificatePolicies(Tlv, [16]). + +dec_CertificatePolicies(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_PolicyInformation'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% PolicyInformation +%%================================ +enc_PolicyInformation(Val) -> + enc_PolicyInformation(Val, [<<48>>]). + +enc_PolicyInformation(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute policyIdentifier(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute policyQualifiers(2) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_PolicyInformation_policyQualifiers'(Cindex2, [<<48>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% PolicyInformation_policyQualifiers +%%================================ +enc_PolicyInformation_policyQualifiers(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_PolicyInformation_policyQualifiers_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_PolicyInformation_policyQualifiers_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_PolicyInformation_policyQualifiers_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_PolicyQualifierInfo'(H, [<<48>>]), + 'enc_PolicyInformation_policyQualifiers_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_PolicyInformation(Tlv) -> + dec_PolicyInformation(Tlv, [16]). + +dec_PolicyInformation(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute policyIdentifier(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute policyQualifiers(2) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{16,V2}|TempTlv3] -> + {'dec_PolicyInformation_policyQualifiers'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PolicyInformation',Term1,Term2}, +Res1. +'dec_PolicyInformation_policyQualifiers'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_PolicyQualifierInfo'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% CertPolicyId +%%================================ +enc_CertPolicyId(Val) -> + enc_CertPolicyId(Val, [<<6>>]). + +enc_CertPolicyId(Val, TagIn) -> +encode_object_identifier(Val, TagIn). + + +dec_CertPolicyId(Tlv) -> + dec_CertPolicyId(Tlv, [6]). + +dec_CertPolicyId(Tlv, TagIn) -> +decode_object_identifier(Tlv, TagIn). + + + +%%================================ +%% PolicyQualifierInfo +%%================================ +enc_PolicyQualifierInfo(Val) -> + enc_PolicyQualifierInfo(Val, [<<48>>]). + +enc_PolicyQualifierInfo(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, +ObjpolicyQualifierId = + 'PKIX1Implicit-2009':'getenc_PolicyQualifierId'( Cindex1), + +%%------------------------------------------------- +%% attribute policyQualifierId(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute qualifier(2) with type typefieldType +%%------------------------------------------------- + {TmpBytes2,_} = ObjpolicyQualifierId('Type', Cindex2, []), + {EncBytes2,EncLen2} = encode_open_type(TmpBytes2, []) +, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_PolicyQualifierInfo(Tlv) -> + dec_PolicyQualifierInfo(Tlv, [16]). + +dec_PolicyQualifierInfo(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute policyQualifierId(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute qualifier(2) with type typefieldType +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, + + Tmpterm1 = decode_open_type(V2, []), + +DecObjpolicyQualifierIdTerm1 = + 'PKIX1Implicit-2009':'getdec_PolicyQualifierId'(Term1), +Term2 = + case (catch DecObjpolicyQualifierIdTerm1('Type', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PolicyQualifierInfo',Term1,Term2}, +Res1. + + +%%================================ +%% CPSuri +%%================================ +enc_CPSuri(Val) -> + enc_CPSuri(Val, [<<22>>]). + +enc_CPSuri(Val, TagIn) -> +encode_restricted_string(Val, TagIn). + + +dec_CPSuri(Tlv) -> + dec_CPSuri(Tlv, [22]). + +dec_CPSuri(Tlv, TagIn) -> +begin +binary_to_list(decode_restricted_string(Tlv, TagIn)) +end +. + + + +%%================================ +%% UserNotice +%%================================ +enc_UserNotice(Val) -> + enc_UserNotice(Val, [<<48>>]). + +enc_UserNotice(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute noticeRef(1) External PKIX1Implicit-2009:NoticeReference OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_NoticeReference'(Cindex1, [<<48>>]) + end, + +%%------------------------------------------------- +%% attribute explicitText(2) External PKIX1Implicit-2009:DisplayText OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_DisplayText'(Cindex2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_UserNotice(Tlv) -> + dec_UserNotice(Tlv, [16]). + +dec_UserNotice(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute noticeRef(1) External PKIX1Implicit-2009:NoticeReference OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{16,V1}|TempTlv2] -> + {'dec_NoticeReference'(V1, []), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute explicitText(2) External PKIX1Implicit-2009:DisplayText OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[V2 = {22,_}|TempTlv3] -> + {'dec_DisplayText'(V2, []), TempTlv3}; +[V2 = {26,_}|TempTlv3] -> + {'dec_DisplayText'(V2, []), TempTlv3}; +[V2 = {30,_}|TempTlv3] -> + {'dec_DisplayText'(V2, []), TempTlv3}; +[V2 = {12,_}|TempTlv3] -> + {'dec_DisplayText'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'UserNotice',Term1,Term2}, +Res1. + + +%%================================ +%% NoticeReference +%%================================ +enc_NoticeReference(Val) -> + enc_NoticeReference(Val, [<<48>>]). + +enc_NoticeReference(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute organization(1) External PKIX1Implicit-2009:DisplayText +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_DisplayText'(Cindex1, []), + +%%------------------------------------------------- +%% attribute noticeNumbers(2) with type SEQUENCE OF +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_NoticeReference_noticeNumbers'(Cindex2, [<<48>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% NoticeReference_noticeNumbers +%%================================ +enc_NoticeReference_noticeNumbers(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_NoticeReference_noticeNumbers_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_NoticeReference_noticeNumbers_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_NoticeReference_noticeNumbers_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = encode_integer(H, [<<2>>]), + 'enc_NoticeReference_noticeNumbers_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_NoticeReference(Tlv) -> + dec_NoticeReference(Tlv, [16]). + +dec_NoticeReference(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute organization(1) External PKIX1Implicit-2009:DisplayText +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_DisplayText'(V1, []), + +%%------------------------------------------------- +%% attribute noticeNumbers(2) with type SEQUENCE OF +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_NoticeReference_noticeNumbers'(V2, [16]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'NoticeReference',Term1,Term2}, +Res1. +'dec_NoticeReference_noticeNumbers'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +[decode_integer(V1, [2]) || V1 <- Tlv1]. + + + + +%%================================ +%% DisplayText +%%================================ +enc_DisplayText(Val) -> + enc_DisplayText(Val, []). + +enc_DisplayText(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + ia5String -> + encode_restricted_string(element(2,Val), [<<22>>]); + visibleString -> + encode_restricted_string(element(2,Val), [<<26>>]); + bmpString -> + encode_BMP_string(element(2,Val), [<<30>>]); + utf8String -> + encode_UTF8_string(element(2,Val), [<<12>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_DisplayText(Tlv) -> + dec_DisplayText(Tlv, []). + +dec_DisplayText(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'ia5String' + {22, V1} -> + {ia5String, begin +Val1 = decode_restricted_string(V1, []), +C1 = byte_size(Val1), +if 1 =< C1, C1 =< 200 -> +binary_to_list(Val1); +true -> +exit({error,{asn1,bad_range}}) +end +end}; + + +%% 'visibleString' + {26, V1} -> + {visibleString, begin +Val2 = decode_restricted_string(V1, []), +C2 = byte_size(Val2), +if 1 =< C2, C2 =< 200 -> +binary_to_list(Val2); +true -> +exit({error,{asn1,bad_range}}) +end +end}; + + +%% 'bmpString' + {30, V1} -> + {bmpString, begin +Val3 = decode_BMP_string(V1, []), +C3 = length(Val3), +if 1 =< C3, C3 =< 200 -> +Val3; +true -> +exit({error,{asn1,bad_range}}) +end +end}; + + +%% 'utf8String' + {12, V1} -> + {utf8String, decode_UTF8_string(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% PolicyMappings +%%================================ +enc_PolicyMappings(Val) -> + enc_PolicyMappings(Val, [<<48>>]). + +enc_PolicyMappings(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_PolicyMappings_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_PolicyMappings_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_PolicyMappings_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_PolicyMappings_SEQOF'(H, [<<48>>]), + 'enc_PolicyMappings_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% PolicyMappings_SEQOF +%%================================ +enc_PolicyMappings_SEQOF(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute issuerDomainPolicy(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute subjectDomainPolicy(2) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes2,EncLen2} = encode_object_identifier(Cindex2, [<<6>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_PolicyMappings(Tlv) -> + dec_PolicyMappings(Tlv, [16]). + +dec_PolicyMappings(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_PolicyMappings_SEQOF'(V1, [16]) || V1 <- Tlv1]. + + +'dec_PolicyMappings_SEQOF'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute issuerDomainPolicy(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute subjectDomainPolicy(2) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = decode_object_identifier(V2, [6]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PolicyMappings_SEQOF',Term1,Term2}, +Res1. + + +%%================================ +%% GeneralNames +%%================================ +enc_GeneralNames(Val) -> + enc_GeneralNames(Val, [<<48>>]). + +enc_GeneralNames(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_GeneralNames_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_GeneralNames_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_GeneralNames_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_GeneralName'(H, []), + 'enc_GeneralNames_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_GeneralNames(Tlv) -> + dec_GeneralNames(Tlv, [16]). + +dec_GeneralNames(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_GeneralName'(V1, []) || V1 <- Tlv1]. + + + + +%%================================ +%% GeneralName +%%================================ +enc_GeneralName(Val) -> + enc_GeneralName(Val, []). + +enc_GeneralName(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + otherName -> + 'enc_INSTANCE OF'(element(2,Val), [<<160>>]); + rfc822Name -> + encode_restricted_string(element(2,Val), [<<129>>]); + dNSName -> + encode_restricted_string(element(2,Val), [<<130>>]); + x400Address -> + 'PKIX-X400Address-2009':'enc_ORAddress'(element(2,Val), [<<163>>]); + directoryName -> + 'PKIX1Explicit-2009':'enc_Name'(element(2,Val), [<<164>>]); + ediPartyName -> + 'enc_EDIPartyName'(element(2,Val), [<<165>>]); + uniformResourceIdentifier -> + encode_restricted_string(element(2,Val), [<<134>>]); + iPAddress -> + encode_restricted_string(element(2,Val), [<<135>>]); + registeredID -> + encode_object_identifier(element(2,Val), [<<136>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_GeneralName(Tlv) -> + dec_GeneralName(Tlv, []). + +dec_GeneralName(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'otherName' + {131072, V1} -> + {otherName, 'dec_INSTANCE OF'(V1, [])}; + + +%% 'rfc822Name' + {131073, V1} -> + {rfc822Name, begin +binary_to_list(decode_restricted_string(V1, [])) +end +}; + + +%% 'dNSName' + {131074, V1} -> + {dNSName, begin +binary_to_list(decode_restricted_string(V1, [])) +end +}; + + +%% 'x400Address' + {131075, V1} -> + {x400Address, 'PKIX-X400Address-2009':'dec_ORAddress'(V1, [])}; + + +%% 'directoryName' + {131076, V1} -> + {directoryName, 'PKIX1Explicit-2009':'dec_Name'(V1, [])}; + + +%% 'ediPartyName' + {131077, V1} -> + {ediPartyName, 'dec_EDIPartyName'(V1, [])}; + + +%% 'uniformResourceIdentifier' + {131078, V1} -> + {uniformResourceIdentifier, begin +binary_to_list(decode_restricted_string(V1, [])) +end +}; + + +%% 'iPAddress' + {131079, V1} -> + {iPAddress, decode_octet_string(V1, [])}; + + +%% 'registeredID' + {131080, V1} -> + {registeredID, decode_object_identifier(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% EDIPartyName +%%================================ +enc_EDIPartyName(Val) -> + enc_EDIPartyName(Val, [<<48>>]). + +enc_EDIPartyName(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute nameAssigner(1) with type CHOICE OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_EDIPartyName_nameAssigner'(Cindex1, [<<160>>]) + end, + +%%------------------------------------------------- +%% attribute partyName(2) with type CHOICE +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_EDIPartyName_partyName'(Cindex2, [<<161>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% EDIPartyName_nameAssigner +%%================================ +enc_EDIPartyName_nameAssigner(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + teletexString -> + encode_restricted_string(element(2,Val), [<<20>>]); + printableString -> + encode_restricted_string(element(2,Val), [<<19>>]); + bmpString -> + encode_BMP_string(element(2,Val), [<<30>>]); + universalString -> + encode_universal_string(element(2,Val), [<<28>>]); + uTF8String -> + encode_UTF8_string(element(2,Val), [<<12>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + + +%%================================ +%% EDIPartyName_partyName +%%================================ +enc_EDIPartyName_partyName(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + teletexString -> + encode_restricted_string(element(2,Val), [<<20>>]); + printableString -> + encode_restricted_string(element(2,Val), [<<19>>]); + bmpString -> + encode_BMP_string(element(2,Val), [<<30>>]); + universalString -> + encode_universal_string(element(2,Val), [<<28>>]); + uTF8String -> + encode_UTF8_string(element(2,Val), [<<12>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_EDIPartyName(Tlv) -> + dec_EDIPartyName(Tlv, [16]). + +dec_EDIPartyName(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute nameAssigner(1) with type CHOICE OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {'dec_EDIPartyName_nameAssigner'(V1, []), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute partyName(2) with type CHOICE +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_EDIPartyName_partyName'(V2, [131073]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'EDIPartyName',Term1,Term2}, +Res1. +'dec_EDIPartyName_nameAssigner'(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'teletexString' + {20, V1} -> + {teletexString, begin +Val1 = decode_restricted_string(V1, []), +C1 = byte_size(Val1), +if 1 =< C1, C1 =< 32768 -> +binary_to_list(Val1); +true -> +exit({error,{asn1,bad_range}}) +end +end}; + + +%% 'printableString' + {19, V1} -> + {printableString, begin +Val2 = decode_restricted_string(V1, []), +C2 = byte_size(Val2), +if 1 =< C2, C2 =< 32768 -> +binary_to_list(Val2); +true -> +exit({error,{asn1,bad_range}}) +end +end}; + + +%% 'bmpString' + {30, V1} -> + {bmpString, begin +Val3 = decode_BMP_string(V1, []), +C3 = length(Val3), +if 1 =< C3, C3 =< 32768 -> +Val3; +true -> +exit({error,{asn1,bad_range}}) +end +end}; + + +%% 'universalString' + {28, V1} -> + {universalString, begin +Val4 = decode_universal_string(V1, []), +C4 = length(Val4), +if 1 =< C4, C4 =< 32768 -> +Val4; +true -> +exit({error,{asn1,bad_range}}) +end +end}; + + +%% 'uTF8String' + {12, V1} -> + {uTF8String, decode_UTF8_string(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. +'dec_EDIPartyName_partyName'(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'teletexString' + {20, V1} -> + {teletexString, begin +Val1 = decode_restricted_string(V1, []), +C1 = byte_size(Val1), +if 1 =< C1, C1 =< 32768 -> +binary_to_list(Val1); +true -> +exit({error,{asn1,bad_range}}) +end +end}; + + +%% 'printableString' + {19, V1} -> + {printableString, begin +Val2 = decode_restricted_string(V1, []), +C2 = byte_size(Val2), +if 1 =< C2, C2 =< 32768 -> +binary_to_list(Val2); +true -> +exit({error,{asn1,bad_range}}) +end +end}; + + +%% 'bmpString' + {30, V1} -> + {bmpString, begin +Val3 = decode_BMP_string(V1, []), +C3 = length(Val3), +if 1 =< C3, C3 =< 32768 -> +Val3; +true -> +exit({error,{asn1,bad_range}}) +end +end}; + + +%% 'universalString' + {28, V1} -> + {universalString, begin +Val4 = decode_universal_string(V1, []), +C4 = length(Val4), +if 1 =< C4, C4 =< 32768 -> +Val4; +true -> +exit({error,{asn1,bad_range}}) +end +end}; + + +%% 'uTF8String' + {12, V1} -> + {uTF8String, decode_UTF8_string(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% SubjectDirectoryAttributes +%%================================ +enc_SubjectDirectoryAttributes(Val) -> + enc_SubjectDirectoryAttributes(Val, [<<48>>]). + +enc_SubjectDirectoryAttributes(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_SubjectDirectoryAttributes_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_SubjectDirectoryAttributes_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_SubjectDirectoryAttributes_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_SubjectDirectoryAttributes_AttributeSet'(H, [<<48>>]), + 'enc_SubjectDirectoryAttributes_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% SubjectDirectoryAttributes_AttributeSet +%%================================ +enc_SubjectDirectoryAttributes_AttributeSet(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objtype = + 'PKIX1Implicit-2009':'getenc_internal_object_set_argument_2'( Cindex1), + +%%------------------------------------------------- +%% attribute type(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute values(2) with type SET OF +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_SubjectDirectoryAttributes_AttributeSet_values'(Cindex2, [<<49>>], Objtype), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% SubjectDirectoryAttributes_AttributeSet_values +%%================================ +enc_SubjectDirectoryAttributes_AttributeSet_values(Val, TagIn, ObjFun) -> + {EncBytes,EncLen} = 'enc_SubjectDirectoryAttributes_AttributeSet_values_components'(Val, ObjFun,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_SubjectDirectoryAttributes_AttributeSet_values_components'([], _, AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_SubjectDirectoryAttributes_AttributeSet_values_components'([H|T], ObjFun,AccBytes, AccLen) -> + {TmpBytes,_} = ObjFun('Type', H, []), + {EncBytes,EncLen} = encode_open_type(TmpBytes, []) +, + 'enc_SubjectDirectoryAttributes_AttributeSet_values_components'(T, ObjFun,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_SubjectDirectoryAttributes(Tlv) -> + dec_SubjectDirectoryAttributes(Tlv, [16]). + +dec_SubjectDirectoryAttributes(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_SubjectDirectoryAttributes_AttributeSet'(V1, [16]) || V1 <- Tlv1]. + + +'dec_SubjectDirectoryAttributes_AttributeSet'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute type(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), +ObjFun = 'PKIX1Implicit-2009':'getdec_internal_object_set_argument_2'(Term1), + +%%------------------------------------------------- +%% attribute values(2) with type SET OF +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_SubjectDirectoryAttributes_AttributeSet_values'(V2, [17], ObjFun), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'AttributeSet',Term1,Term2}, +Res1. +'dec_SubjectDirectoryAttributes_AttributeSet_values'(Tlv, TagIn, ObjFun) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +[ + begin + Tmptlv1 = decode_open_type(V1, []), + case (catch ObjFun('Type', Tmptlv1, [])) of + {'EXIT',Reason1} -> + exit({'Type not compatible with table constraint', Reason1}); + Tmpterm1 -> + Tmpterm1 + end + end + || V1 <- Tlv1]. + + + + +%%================================ +%% BasicConstraints +%%================================ +enc_BasicConstraints(Val) -> + enc_BasicConstraints(Val, [<<48>>]). + +enc_BasicConstraints(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute cA(1) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_DEFAULT -> + {<<>>,0}; + _ when Cindex1 =:= false -> + {<<>>,0}; + _ -> + encode_boolean(Cindex1, [<<1>>]) + end, + +%%------------------------------------------------- +%% attribute pathLenConstraint(2) with type INTEGER OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_integer(Cindex2, [<<2>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_BasicConstraints(Tlv) -> + dec_BasicConstraints(Tlv, [16]). + +dec_BasicConstraints(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute cA(1) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{1,V1}|TempTlv2] -> + {decode_boolean(V1, []), TempTlv2}; + _ -> + {false,Tlv1} +end, + +%%------------------------------------------------- +%% attribute pathLenConstraint(2) with type INTEGER OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{2,V2}|TempTlv3] -> + {begin +Val1 = decode_integer(V2, []), +if 0 =< Val1, Val1 =< 'MAX' -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end, TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'BasicConstraints',Term1,Term2}, +Res1. + + +%%================================ +%% NameConstraints +%%================================ +enc_NameConstraints(Val) -> + enc_NameConstraints(Val, [<<48>>]). + +enc_NameConstraints(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute permittedSubtrees(1) External PKIX1Implicit-2009:GeneralSubtrees OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_GeneralSubtrees'(Cindex1, [<<160>>]) + end, + +%%------------------------------------------------- +%% attribute excludedSubtrees(2) External PKIX1Implicit-2009:GeneralSubtrees OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_GeneralSubtrees'(Cindex2, [<<161>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_NameConstraints(Tlv) -> + dec_NameConstraints(Tlv, [16]). + +dec_NameConstraints(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute permittedSubtrees(1) External PKIX1Implicit-2009:GeneralSubtrees OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {'dec_GeneralSubtrees'(V1, []), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute excludedSubtrees(2) External PKIX1Implicit-2009:GeneralSubtrees OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131073,V2}|TempTlv3] -> + {'dec_GeneralSubtrees'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'NameConstraints',Term1,Term2}, +Res1. + + +%%================================ +%% GeneralSubtrees +%%================================ +enc_GeneralSubtrees(Val) -> + enc_GeneralSubtrees(Val, [<<48>>]). + +enc_GeneralSubtrees(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_GeneralSubtrees_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_GeneralSubtrees_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_GeneralSubtrees_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_GeneralSubtree'(H, [<<48>>]), + 'enc_GeneralSubtrees_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_GeneralSubtrees(Tlv) -> + dec_GeneralSubtrees(Tlv, [16]). + +dec_GeneralSubtrees(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_GeneralSubtree'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% GeneralSubtree +%%================================ +enc_GeneralSubtree(Val) -> + enc_GeneralSubtree(Val, [<<48>>]). + +enc_GeneralSubtree(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute base(1) External PKIX1Implicit-2009:GeneralName +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_GeneralName'(Cindex1, []), + +%%------------------------------------------------- +%% attribute minimum(2) with type INTEGER DEFAULT = 0 +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_DEFAULT -> + {<<>>,0}; + _ when Cindex2 =:= 0 -> + {<<>>,0}; + _ -> + encode_integer(Cindex2, [<<128>>]) + end, + +%%------------------------------------------------- +%% attribute maximum(3) with type INTEGER OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_integer(Cindex3, [<<129>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_GeneralSubtree(Tlv) -> + dec_GeneralSubtree(Tlv, [16]). + +dec_GeneralSubtree(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute base(1) External PKIX1Implicit-2009:GeneralName +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_GeneralName'(V1, []), + +%%------------------------------------------------- +%% attribute minimum(2) with type INTEGER DEFAULT = 0 +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131072,V2}|TempTlv3] -> + {begin +Val1 = decode_integer(V2, []), +if 0 =< Val1, Val1 =< 'MAX' -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end, TempTlv3}; + _ -> + {0,Tlv2} +end, + +%%------------------------------------------------- +%% attribute maximum(3) with type INTEGER OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{131073,V3}|TempTlv4] -> + {begin +Val2 = decode_integer(V3, []), +if 0 =< Val2, Val2 =< 'MAX' -> +Val2; +true -> +exit({error,{asn1,bad_range}}) +end +end, TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'GeneralSubtree',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% BaseDistance +%%================================ +enc_BaseDistance(Val) -> + enc_BaseDistance(Val, [<<2>>]). + +enc_BaseDistance(Val, TagIn) -> +encode_integer(Val, TagIn). + + +dec_BaseDistance(Tlv) -> + dec_BaseDistance(Tlv, [2]). + +dec_BaseDistance(Tlv, TagIn) -> +begin +Val1 = decode_integer(Tlv, TagIn), +if 0 =< Val1, Val1 =< 'MAX' -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end. + + + +%%================================ +%% PolicyConstraints +%%================================ +enc_PolicyConstraints(Val) -> + enc_PolicyConstraints(Val, [<<48>>]). + +enc_PolicyConstraints(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute requireExplicitPolicy(1) with type INTEGER OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_integer(Cindex1, [<<128>>]) + end, + +%%------------------------------------------------- +%% attribute inhibitPolicyMapping(2) with type INTEGER OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_integer(Cindex2, [<<129>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_PolicyConstraints(Tlv) -> + dec_PolicyConstraints(Tlv, [16]). + +dec_PolicyConstraints(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute requireExplicitPolicy(1) with type INTEGER OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {begin +Val1 = decode_integer(V1, []), +if 0 =< Val1, Val1 =< 'MAX' -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end, TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute inhibitPolicyMapping(2) with type INTEGER OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131073,V2}|TempTlv3] -> + {begin +Val2 = decode_integer(V2, []), +if 0 =< Val2, Val2 =< 'MAX' -> +Val2; +true -> +exit({error,{asn1,bad_range}}) +end +end, TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PolicyConstraints',Term1,Term2}, +Res1. + + +%%================================ +%% SkipCerts +%%================================ +enc_SkipCerts(Val) -> + enc_SkipCerts(Val, [<<2>>]). + +enc_SkipCerts(Val, TagIn) -> +encode_integer(Val, TagIn). + + +dec_SkipCerts(Tlv) -> + dec_SkipCerts(Tlv, [2]). + +dec_SkipCerts(Tlv, TagIn) -> +begin +Val1 = decode_integer(Tlv, TagIn), +if 0 =< Val1, Val1 =< 'MAX' -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end. + + + +%%================================ +%% CRLDistributionPoints +%%================================ +enc_CRLDistributionPoints(Val) -> + enc_CRLDistributionPoints(Val, [<<48>>]). + +enc_CRLDistributionPoints(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_CRLDistributionPoints_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_CRLDistributionPoints_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_CRLDistributionPoints_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_DistributionPoint'(H, [<<48>>]), + 'enc_CRLDistributionPoints_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_CRLDistributionPoints(Tlv) -> + dec_CRLDistributionPoints(Tlv, [16]). + +dec_CRLDistributionPoints(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_DistributionPoint'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% DistributionPoint +%%================================ +enc_DistributionPoint(Val) -> + enc_DistributionPoint(Val, [<<48>>]). + +enc_DistributionPoint(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute distributionPoint(1) External PKIX1Implicit-2009:DistributionPointName OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_DistributionPointName'(Cindex1, [<<160>>]) + end, + +%%------------------------------------------------- +%% attribute reasons(2) with type BIT STRING OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_named_bit_string(Cindex2, [{unused,0},{keyCompromise,1},{cACompromise,2},{affiliationChanged,3},{superseded,4},{cessationOfOperation,5},{certificateHold,6},{privilegeWithdrawn,7},{aACompromise,8}], [<<129>>]) + end, + +%%------------------------------------------------- +%% attribute cRLIssuer(3) External PKIX1Implicit-2009:GeneralNames OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_GeneralNames'(Cindex3, [<<162>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_DistributionPoint(Tlv) -> + dec_DistributionPoint(Tlv, [16]). + +dec_DistributionPoint(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute distributionPoint(1) External PKIX1Implicit-2009:DistributionPointName OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {'dec_DistributionPointName'(V1, []), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute reasons(2) with type BIT STRING OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131073,V2}|TempTlv3] -> + {decode_named_bit_string(V2, [{unused,0},{keyCompromise,1},{cACompromise,2},{affiliationChanged,3},{superseded,4},{cessationOfOperation,5},{certificateHold,6},{privilegeWithdrawn,7},{aACompromise,8}], []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +%%------------------------------------------------- +%% attribute cRLIssuer(3) External PKIX1Implicit-2009:GeneralNames OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{131074,V3}|TempTlv4] -> + {'dec_GeneralNames'(V3, []), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'DistributionPoint',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% DistributionPointName +%%================================ +enc_DistributionPointName(Val) -> + enc_DistributionPointName(Val, []). + +enc_DistributionPointName(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + fullName -> + 'enc_GeneralNames'(element(2,Val), [<<160>>]); + nameRelativeToCRLIssuer -> + 'PKIX1Explicit-2009':'enc_RelativeDistinguishedName'(element(2,Val), [<<161>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_DistributionPointName(Tlv) -> + dec_DistributionPointName(Tlv, []). + +dec_DistributionPointName(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'fullName' + {131072, V1} -> + {fullName, 'dec_GeneralNames'(V1, [])}; + + +%% 'nameRelativeToCRLIssuer' + {131073, V1} -> + {nameRelativeToCRLIssuer, 'PKIX1Explicit-2009':'dec_RelativeDistinguishedName'(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% ReasonFlags +%%================================ +enc_ReasonFlags(Val) -> + enc_ReasonFlags(Val, [<<3>>]). + +enc_ReasonFlags(Val, TagIn) -> +encode_named_bit_string(Val, [{unused,0},{keyCompromise,1},{cACompromise,2},{affiliationChanged,3},{superseded,4},{cessationOfOperation,5},{certificateHold,6},{privilegeWithdrawn,7},{aACompromise,8}], TagIn). + + +dec_ReasonFlags(Tlv) -> + dec_ReasonFlags(Tlv, [3]). + +dec_ReasonFlags(Tlv, TagIn) -> +decode_named_bit_string(Tlv, [{unused,0},{keyCompromise,1},{cACompromise,2},{affiliationChanged,3},{superseded,4},{cessationOfOperation,5},{certificateHold,6},{privilegeWithdrawn,7},{aACompromise,8}], TagIn). + + + +%%================================ +%% ExtKeyUsageSyntax +%%================================ +enc_ExtKeyUsageSyntax(Val) -> + enc_ExtKeyUsageSyntax(Val, [<<48>>]). + +enc_ExtKeyUsageSyntax(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_ExtKeyUsageSyntax_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_ExtKeyUsageSyntax_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_ExtKeyUsageSyntax_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = encode_object_identifier(H, [<<6>>]), + 'enc_ExtKeyUsageSyntax_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_ExtKeyUsageSyntax(Tlv) -> + dec_ExtKeyUsageSyntax(Tlv, [16]). + +dec_ExtKeyUsageSyntax(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +[decode_object_identifier(V1, [6]) || V1 <- Tlv1]. + + + + +%%================================ +%% KeyPurposeId +%%================================ +enc_KeyPurposeId(Val) -> + enc_KeyPurposeId(Val, [<<6>>]). + +enc_KeyPurposeId(Val, TagIn) -> +encode_object_identifier(Val, TagIn). + + +dec_KeyPurposeId(Tlv) -> + dec_KeyPurposeId(Tlv, [6]). + +dec_KeyPurposeId(Tlv, TagIn) -> +decode_object_identifier(Tlv, TagIn). + + + +%%================================ +%% AuthorityInfoAccessSyntax +%%================================ +enc_AuthorityInfoAccessSyntax(Val) -> + enc_AuthorityInfoAccessSyntax(Val, [<<48>>]). + +enc_AuthorityInfoAccessSyntax(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_AuthorityInfoAccessSyntax_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_AuthorityInfoAccessSyntax_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_AuthorityInfoAccessSyntax_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_AccessDescription'(H, [<<48>>]), + 'enc_AuthorityInfoAccessSyntax_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_AuthorityInfoAccessSyntax(Tlv) -> + dec_AuthorityInfoAccessSyntax(Tlv, [16]). + +dec_AuthorityInfoAccessSyntax(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_AccessDescription'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% AccessDescription +%%================================ +enc_AccessDescription(Val) -> + enc_AccessDescription(Val, [<<48>>]). + +enc_AccessDescription(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute accessMethod(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute accessLocation(2) External PKIX1Implicit-2009:GeneralName +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_GeneralName'(Cindex2, []), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_AccessDescription(Tlv) -> + dec_AccessDescription(Tlv, [16]). + +dec_AccessDescription(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute accessMethod(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute accessLocation(2) External PKIX1Implicit-2009:GeneralName +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_GeneralName'(V2, []), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'AccessDescription',Term1,Term2}, +Res1. + + +%%================================ +%% SubjectInfoAccessSyntax +%%================================ +enc_SubjectInfoAccessSyntax(Val) -> + enc_SubjectInfoAccessSyntax(Val, [<<48>>]). + +enc_SubjectInfoAccessSyntax(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_SubjectInfoAccessSyntax_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_SubjectInfoAccessSyntax_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_SubjectInfoAccessSyntax_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_AccessDescription'(H, [<<48>>]), + 'enc_SubjectInfoAccessSyntax_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_SubjectInfoAccessSyntax(Tlv) -> + dec_SubjectInfoAccessSyntax(Tlv, [16]). + +dec_SubjectInfoAccessSyntax(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_AccessDescription'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% CRLNumber +%%================================ +enc_CRLNumber(Val) -> + enc_CRLNumber(Val, [<<2>>]). + +enc_CRLNumber(Val, TagIn) -> +encode_integer(Val, TagIn). + + +dec_CRLNumber(Tlv) -> + dec_CRLNumber(Tlv, [2]). + +dec_CRLNumber(Tlv, TagIn) -> +begin +Val1 = decode_integer(Tlv, TagIn), +if 0 =< Val1, Val1 =< 'MAX' -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end. + + + +%%================================ +%% IssuingDistributionPoint +%%================================ +enc_IssuingDistributionPoint(Val) -> + enc_IssuingDistributionPoint(Val, [<<48>>]). + +enc_IssuingDistributionPoint(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4,Cindex5,Cindex6} = Val, + +%%------------------------------------------------- +%% attribute distributionPoint(1) External PKIX1Implicit-2009:DistributionPointName OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_DistributionPointName'(Cindex1, [<<160>>]) + end, + +%%------------------------------------------------- +%% attribute onlyContainsUserCerts(2) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_DEFAULT -> + {<<>>,0}; + _ when Cindex2 =:= false -> + {<<>>,0}; + _ -> + encode_boolean(Cindex2, [<<129>>]) + end, + +%%------------------------------------------------- +%% attribute onlyContainsCACerts(3) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_DEFAULT -> + {<<>>,0}; + _ when Cindex3 =:= false -> + {<<>>,0}; + _ -> + encode_boolean(Cindex3, [<<130>>]) + end, + +%%------------------------------------------------- +%% attribute onlySomeReasons(4) with type BIT STRING OPTIONAL +%%------------------------------------------------- + {EncBytes4,EncLen4} = case Cindex4 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_named_bit_string(Cindex4, [{unused,0},{keyCompromise,1},{cACompromise,2},{affiliationChanged,3},{superseded,4},{cessationOfOperation,5},{certificateHold,6},{privilegeWithdrawn,7},{aACompromise,8}], [<<131>>]) + end, + +%%------------------------------------------------- +%% attribute indirectCRL(5) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- + {EncBytes5,EncLen5} = case Cindex5 of + asn1_DEFAULT -> + {<<>>,0}; + _ when Cindex5 =:= false -> + {<<>>,0}; + _ -> + encode_boolean(Cindex5, [<<132>>]) + end, + +%%------------------------------------------------- +%% attribute onlyContainsAttributeCerts(6) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- + {EncBytes6,EncLen6} = case Cindex6 of + asn1_DEFAULT -> + {<<>>,0}; + _ when Cindex6 =:= false -> + {<<>>,0}; + _ -> + encode_boolean(Cindex6, [<<133>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4, EncBytes5, EncBytes6], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4 + EncLen5 + EncLen6, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_IssuingDistributionPoint(Tlv) -> + dec_IssuingDistributionPoint(Tlv, [16]). + +dec_IssuingDistributionPoint(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute distributionPoint(1) External PKIX1Implicit-2009:DistributionPointName OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {'dec_DistributionPointName'(V1, []), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute onlyContainsUserCerts(2) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131073,V2}|TempTlv3] -> + {decode_boolean(V2, []), TempTlv3}; + _ -> + {false,Tlv2} +end, + +%%------------------------------------------------- +%% attribute onlyContainsCACerts(3) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{131074,V3}|TempTlv4] -> + {decode_boolean(V3, []), TempTlv4}; + _ -> + {false,Tlv3} +end, + +%%------------------------------------------------- +%% attribute onlySomeReasons(4) with type BIT STRING OPTIONAL +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[{131075,V4}|TempTlv5] -> + {decode_named_bit_string(V4, [{unused,0},{keyCompromise,1},{cACompromise,2},{affiliationChanged,3},{superseded,4},{cessationOfOperation,5},{certificateHold,6},{privilegeWithdrawn,7},{aACompromise,8}], []), TempTlv5}; + _ -> + { asn1_NOVALUE, Tlv4} +end, + +%%------------------------------------------------- +%% attribute indirectCRL(5) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- +{Term5,Tlv6} = case Tlv5 of +[{131076,V5}|TempTlv6] -> + {decode_boolean(V5, []), TempTlv6}; + _ -> + {false,Tlv5} +end, + +%%------------------------------------------------- +%% attribute onlyContainsAttributeCerts(6) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- +{Term6,Tlv7} = case Tlv6 of +[{131077,V6}|TempTlv7] -> + {decode_boolean(V6, []), TempTlv7}; + _ -> + {false,Tlv6} +end, + +case Tlv7 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv7}}}) % extra fields not allowed +end, +Res1 = {'IssuingDistributionPoint',Term1,Term2,Term3,Term4,Term5,Term6}, +Res1. + + +%%================================ +%% CRLReason +%%================================ +enc_CRLReason(Val) -> + enc_CRLReason(Val, [<<10>>]). + +enc_CRLReason(Val, TagIn) -> +case Val of +unspecified -> encode_tags(TagIn, [0], 1); +keyCompromise -> encode_tags(TagIn, [1], 1); +cACompromise -> encode_tags(TagIn, [2], 1); +affiliationChanged -> encode_tags(TagIn, [3], 1); +superseded -> encode_tags(TagIn, [4], 1); +cessationOfOperation -> encode_tags(TagIn, [5], 1); +certificateHold -> encode_tags(TagIn, [6], 1); +removeFromCRL -> encode_tags(TagIn, [8], 1); +privilegeWithdrawn -> encode_tags(TagIn, [9], 1); +aACompromise -> encode_tags(TagIn, [10], 1); +Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}}) +end. + + +dec_CRLReason(Tlv) -> + dec_CRLReason(Tlv, [10]). + +dec_CRLReason(Tlv, TagIn) -> +case decode_integer(Tlv, TagIn) of +0 -> unspecified; +1 -> keyCompromise; +2 -> cACompromise; +3 -> affiliationChanged; +4 -> superseded; +5 -> cessationOfOperation; +6 -> certificateHold; +8 -> removeFromCRL; +9 -> privilegeWithdrawn; +10 -> aACompromise; +Default1 -> exit({error,{asn1,{illegal_enumerated,Default1}}}) +end. + + + +%%================================ +%% INSTANCE OF +%%================================ +'enc_INSTANCE OF'(Val) -> + 'enc_INSTANCE OF'(Val, [<<40>>]). + +'enc_INSTANCE OF'(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute type-id(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute value(2) with type ASN1_OPEN_TYPE +%%------------------------------------------------- + {EncBytes2,EncLen2} = encode_open_type(Cindex2, [<<160>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +'dec_INSTANCE OF'(Tlv) -> + 'dec_INSTANCE OF'(Tlv, [8]). + +'dec_INSTANCE OF'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute type-id(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute value(2) with type ASN1_OPEN_TYPE +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = decode_open_type_as_binary(V2, [131072]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'INSTANCE OF',Term1,Term2}, +Res1. +'id-ce'() -> +{2,5,29}. + +'id-ce-authorityKeyIdentifier'() -> +{2,5,29,35}. + +'id-ce-subjectKeyIdentifier'() -> +{2,5,29,14}. + +'id-ce-keyUsage'() -> +{2,5,29,15}. + +'id-ce-privateKeyUsagePeriod'() -> +{2,5,29,16}. + +'id-ce-certificatePolicies'() -> +{2,5,29,32}. + +'id-ce-policyMappings'() -> +{2,5,29,33}. + +'id-ce-subjectAltName'() -> +{2,5,29,17}. + +'id-ce-issuerAltName'() -> +{2,5,29,18}. + +'id-ce-subjectDirectoryAttributes'() -> +{2,5,29,9}. + +'id-ce-basicConstraints'() -> +{2,5,29,19}. + +'id-ce-nameConstraints'() -> +{2,5,29,30}. + +'id-ce-policyConstraints'() -> +{2,5,29,36}. + +'id-ce-cRLDistributionPoints'() -> +{2,5,29,31}. + +'id-ce-extKeyUsage'() -> +{2,5,29,37}. + +anyExtendedKeyUsage() -> +{2,5,29,37,0}. + +'id-kp-serverAuth'() -> +{1,3,6,1,5,5,7,3,1}. + +'id-kp-clientAuth'() -> +{1,3,6,1,5,5,7,3,2}. + +'id-kp-codeSigning'() -> +{1,3,6,1,5,5,7,3,3}. + +'id-kp-emailProtection'() -> +{1,3,6,1,5,5,7,3,4}. + +'id-kp-timeStamping'() -> +{1,3,6,1,5,5,7,3,8}. + +'id-kp-OCSPSigning'() -> +{1,3,6,1,5,5,7,3,9}. + +'id-ce-inhibitAnyPolicy'() -> +{2,5,29,54}. + +'id-ce-freshestCRL'() -> +{2,5,29,46}. + +'id-pe-authorityInfoAccess'() -> +{1,3,6,1,5,5,7,1,1}. + +'id-pe-subjectInfoAccess'() -> +{1,3,6,1,5,5,7,1,11}. + +'id-ce-cRLNumber'() -> +{2,5,29,20}. + +'id-ce-issuingDistributionPoint'() -> +{2,5,29,28}. + +'id-ce-deltaCRLIndicator'() -> +{2,5,29,27}. + +'id-ce-cRLReasons'() -> +{2,5,29,21}. + +'id-ce-certificateIssuer'() -> +{2,5,29,29}. + +'id-ce-holdInstructionCode'() -> +{2,5,29,23}. + +holdInstruction() -> +{2,2,840,10040,2}. + +'id-holdinstruction-none'() -> +{2,2,840,10040,2,1}. + +'id-holdinstruction-callissuer'() -> +{2,2,840,10040,2,2}. + +'id-holdinstruction-reject'() -> +{2,2,840,10040,2,3}. + +'id-ce-invalidityDate'() -> +{2,5,29,24}. + +ubMax() -> +32768. + + + + +%%================================ +%% ext-AuthorityKeyIdentifier +%%================================ +'enc_ext-AuthorityKeyIdentifier'('ExtnType', Val, _RestPrimFieldName) -> + enc_AuthorityKeyIdentifier(Val, [<<48>>]). + + +'dec_ext-AuthorityKeyIdentifier'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_AuthorityKeyIdentifier(Tlv, [16]). + +tlv_format(Bytes) when is_binary(Bytes) -> + {Tlv,_} = ber_decode_nif(Bytes), + Tlv; +tlv_format(Bytes) -> + Bytes. + + + +%%================================ +%% ext-SubjectKeyIdentifier +%%================================ +'enc_ext-SubjectKeyIdentifier'('ExtnType', Val, _RestPrimFieldName) -> + enc_KeyIdentifier(Val, [<<4>>]). + + +'dec_ext-SubjectKeyIdentifier'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_KeyIdentifier(Tlv, [4]). + + + + +%%================================ +%% ext-KeyUsage +%%================================ +'enc_ext-KeyUsage'('ExtnType', Val, _RestPrimFieldName) -> + enc_KeyUsage(Val, [<<3>>]). + + +'dec_ext-KeyUsage'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_KeyUsage(Tlv, [3]). + + + + +%%================================ +%% ext-PrivateKeyUsagePeriod +%%================================ +'enc_ext-PrivateKeyUsagePeriod'('ExtnType', Val, _RestPrimFieldName) -> + enc_PrivateKeyUsagePeriod(Val, [<<48>>]). + + +'dec_ext-PrivateKeyUsagePeriod'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_PrivateKeyUsagePeriod(Tlv, [16]). + + + + +%%================================ +%% ext-CertificatePolicies +%%================================ +'enc_ext-CertificatePolicies'('ExtnType', Val, _RestPrimFieldName) -> + enc_CertificatePolicies(Val, [<<48>>]). + + +'dec_ext-CertificatePolicies'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_CertificatePolicies(Tlv, [16]). + + + + +%%================================ +%% pqid-cps +%%================================ +'enc_pqid-cps'('Type', Val, _RestPrimFieldName) -> + enc_CPSuri(Val, [<<22>>]). + + +'dec_pqid-cps'('Type', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_CPSuri(Tlv, [22]). + + + + +%%================================ +%% pqid-unotice +%%================================ +'enc_pqid-unotice'('Type', Val, _RestPrimFieldName) -> + enc_UserNotice(Val, [<<48>>]). + + +'dec_pqid-unotice'('Type', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_UserNotice(Tlv, [16]). + + + + +%%================================ +%% ext-PolicyMappings +%%================================ +'enc_ext-PolicyMappings'('ExtnType', Val, _RestPrimFieldName) -> + enc_PolicyMappings(Val, [<<48>>]). + + +'dec_ext-PolicyMappings'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_PolicyMappings(Tlv, [16]). + + + + +%%================================ +%% ext-SubjectAltName +%%================================ +'enc_ext-SubjectAltName'('ExtnType', Val, _RestPrimFieldName) -> + enc_GeneralNames(Val, [<<48>>]). + + +'dec_ext-SubjectAltName'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_GeneralNames(Tlv, [16]). + + + + +%%================================ +%% ext-IssuerAltName +%%================================ +'enc_ext-IssuerAltName'('ExtnType', Val, _RestPrimFieldName) -> + enc_GeneralNames(Val, [<<48>>]). + + +'dec_ext-IssuerAltName'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_GeneralNames(Tlv, [16]). + + + + +%%================================ +%% ext-SubjectDirectoryAttributes +%%================================ +'enc_ext-SubjectDirectoryAttributes'('ExtnType', Val, _RestPrimFieldName) -> + enc_SubjectDirectoryAttributes(Val, [<<48>>]). + + +'dec_ext-SubjectDirectoryAttributes'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_SubjectDirectoryAttributes(Tlv, [16]). + + + + +%%================================ +%% ext-BasicConstraints +%%================================ +'enc_ext-BasicConstraints'('ExtnType', Val, _RestPrimFieldName) -> + enc_BasicConstraints(Val, [<<48>>]). + + +'dec_ext-BasicConstraints'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_BasicConstraints(Tlv, [16]). + + + + +%%================================ +%% ext-NameConstraints +%%================================ +'enc_ext-NameConstraints'('ExtnType', Val, _RestPrimFieldName) -> + enc_NameConstraints(Val, [<<48>>]). + + +'dec_ext-NameConstraints'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_NameConstraints(Tlv, [16]). + + + + +%%================================ +%% ext-PolicyConstraints +%%================================ +'enc_ext-PolicyConstraints'('ExtnType', Val, _RestPrimFieldName) -> + enc_PolicyConstraints(Val, [<<48>>]). + + +'dec_ext-PolicyConstraints'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_PolicyConstraints(Tlv, [16]). + + + + +%%================================ +%% ext-CRLDistributionPoints +%%================================ +'enc_ext-CRLDistributionPoints'('ExtnType', Val, _RestPrimFieldName) -> + enc_CRLDistributionPoints(Val, [<<48>>]). + + +'dec_ext-CRLDistributionPoints'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_CRLDistributionPoints(Tlv, [16]). + + + + +%%================================ +%% ext-ExtKeyUsage +%%================================ +'enc_ext-ExtKeyUsage'('ExtnType', Val, _RestPrimFieldName) -> + enc_ExtKeyUsageSyntax(Val, [<<48>>]). + + +'dec_ext-ExtKeyUsage'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_ExtKeyUsageSyntax(Tlv, [16]). + + + + +%%================================ +%% ext-InhibitAnyPolicy +%%================================ +'enc_ext-InhibitAnyPolicy'('ExtnType', Val, _RestPrimFieldName) -> + enc_SkipCerts(Val, [<<2>>]). + + +'dec_ext-InhibitAnyPolicy'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_SkipCerts(Tlv, [2]). + + + + +%%================================ +%% ext-FreshestCRL +%%================================ +'enc_ext-FreshestCRL'('ExtnType', Val, _RestPrimFieldName) -> + enc_CRLDistributionPoints(Val, [<<48>>]). + + +'dec_ext-FreshestCRL'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_CRLDistributionPoints(Tlv, [16]). + + + + +%%================================ +%% ext-AuthorityInfoAccess +%%================================ +'enc_ext-AuthorityInfoAccess'('ExtnType', Val, _RestPrimFieldName) -> + enc_AuthorityInfoAccessSyntax(Val, [<<48>>]). + + +'dec_ext-AuthorityInfoAccess'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_AuthorityInfoAccessSyntax(Tlv, [16]). + + + + +%%================================ +%% ext-SubjectInfoAccessSyntax +%%================================ +'enc_ext-SubjectInfoAccessSyntax'('ExtnType', Val, _RestPrimFieldName) -> + enc_SubjectInfoAccessSyntax(Val, [<<48>>]). + + +'dec_ext-SubjectInfoAccessSyntax'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_SubjectInfoAccessSyntax(Tlv, [16]). + + + + +%%================================ +%% ext-CRLNumber +%%================================ +'enc_ext-CRLNumber'('ExtnType', Val, _RestPrimFieldName) -> +encode_integer(Val, [<<2>>]). + + +'dec_ext-CRLNumber'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), +begin +Val1 = decode_integer(Tlv, [2]), +if 0 =< Val1, Val1 =< 'MAX' -> +Val1; +true -> +exit({error,{asn1,bad_range}}) +end +end. + + + + +%%================================ +%% ext-IssuingDistributionPoint +%%================================ +'enc_ext-IssuingDistributionPoint'('ExtnType', Val, _RestPrimFieldName) -> + enc_IssuingDistributionPoint(Val, [<<48>>]). + + +'dec_ext-IssuingDistributionPoint'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_IssuingDistributionPoint(Tlv, [16]). + + + + +%%================================ +%% ext-DeltaCRLIndicator +%%================================ +'enc_ext-DeltaCRLIndicator'('ExtnType', Val, _RestPrimFieldName) -> + enc_CRLNumber(Val, [<<2>>]). + + +'dec_ext-DeltaCRLIndicator'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_CRLNumber(Tlv, [2]). + + + + +%%================================ +%% ext-CRLReason +%%================================ +'enc_ext-CRLReason'('ExtnType', Val, _RestPrimFieldName) -> + enc_CRLReason(Val, [<<10>>]). + + +'dec_ext-CRLReason'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_CRLReason(Tlv, [10]). + + + + +%%================================ +%% ext-CertificateIssuer +%%================================ +'enc_ext-CertificateIssuer'('ExtnType', Val, _RestPrimFieldName) -> + enc_GeneralNames(Val, [<<48>>]). + + +'dec_ext-CertificateIssuer'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_GeneralNames(Tlv, [16]). + + + + +%%================================ +%% ext-HoldInstructionCode +%%================================ +'enc_ext-HoldInstructionCode'('ExtnType', Val, _RestPrimFieldName) -> +encode_object_identifier(Val, [<<6>>]). + + +'dec_ext-HoldInstructionCode'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), +decode_object_identifier(Tlv, [6]). + + + + +%%================================ +%% ext-InvalidityDate +%%================================ +'enc_ext-InvalidityDate'('ExtnType', Val, _RestPrimFieldName) -> +encode_restricted_string(Val, [<<24>>]). + + +'dec_ext-InvalidityDate'('ExtnType', Bytes,_) -> + Tlv = tlv_format(Bytes), +begin +binary_to_list(decode_restricted_string(Tlv, [24])) +end +. + + + + +%%================================ +%% CertExtensions +%%================================ +getenc_CertExtensions(Id) when Id =:= {2,5,29,9} -> + fun 'enc_ext-SubjectDirectoryAttributes'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,14} -> + fun 'enc_ext-SubjectKeyIdentifier'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,15} -> + fun 'enc_ext-KeyUsage'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,16} -> + fun 'enc_ext-PrivateKeyUsagePeriod'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,17} -> + fun 'enc_ext-SubjectAltName'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,18} -> + fun 'enc_ext-IssuerAltName'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,19} -> + fun 'enc_ext-BasicConstraints'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,30} -> + fun 'enc_ext-NameConstraints'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,31} -> + fun 'enc_ext-CRLDistributionPoints'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,32} -> + fun 'enc_ext-CertificatePolicies'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,33} -> + fun 'enc_ext-PolicyMappings'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,35} -> + fun 'enc_ext-AuthorityKeyIdentifier'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,36} -> + fun 'enc_ext-PolicyConstraints'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,37} -> + fun 'enc_ext-ExtKeyUsage'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,46} -> + fun 'enc_ext-FreshestCRL'/3; +getenc_CertExtensions(Id) when Id =:= {2,5,29,54} -> + fun 'enc_ext-InhibitAnyPolicy'/3; +getenc_CertExtensions(Id) when Id =:= {1,3,6,1,5,5,7,1,1} -> + fun 'enc_ext-AuthorityInfoAccess'/3; +getenc_CertExtensions(Id) when Id =:= {1,3,6,1,5,5,7,1,11} -> + fun 'enc_ext-SubjectInfoAccessSyntax'/3; +getenc_CertExtensions(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_CertExtensions(Id) when Id =:= {2,5,29,9} -> + fun 'dec_ext-SubjectDirectoryAttributes'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,14} -> + fun 'dec_ext-SubjectKeyIdentifier'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,15} -> + fun 'dec_ext-KeyUsage'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,16} -> + fun 'dec_ext-PrivateKeyUsagePeriod'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,17} -> + fun 'dec_ext-SubjectAltName'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,18} -> + fun 'dec_ext-IssuerAltName'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,19} -> + fun 'dec_ext-BasicConstraints'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,30} -> + fun 'dec_ext-NameConstraints'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,31} -> + fun 'dec_ext-CRLDistributionPoints'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,32} -> + fun 'dec_ext-CertificatePolicies'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,33} -> + fun 'dec_ext-PolicyMappings'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,35} -> + fun 'dec_ext-AuthorityKeyIdentifier'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,36} -> + fun 'dec_ext-PolicyConstraints'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,37} -> + fun 'dec_ext-ExtKeyUsage'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,46} -> + fun 'dec_ext-FreshestCRL'/3; +getdec_CertExtensions(Id) when Id =:= {2,5,29,54} -> + fun 'dec_ext-InhibitAnyPolicy'/3; +getdec_CertExtensions(Id) when Id =:= {1,3,6,1,5,5,7,1,1} -> + fun 'dec_ext-AuthorityInfoAccess'/3; +getdec_CertExtensions(Id) when Id =:= {1,3,6,1,5,5,7,1,11} -> + fun 'dec_ext-SubjectInfoAccessSyntax'/3; +getdec_CertExtensions(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% CrlExtensions +%%================================ +getenc_CrlExtensions(Id) when Id =:= {2,5,29,18} -> + fun 'enc_ext-IssuerAltName'/3; +getenc_CrlExtensions(Id) when Id =:= {2,5,29,20} -> + fun 'enc_ext-CRLNumber'/3; +getenc_CrlExtensions(Id) when Id =:= {2,5,29,27} -> + fun 'enc_ext-DeltaCRLIndicator'/3; +getenc_CrlExtensions(Id) when Id =:= {2,5,29,28} -> + fun 'enc_ext-IssuingDistributionPoint'/3; +getenc_CrlExtensions(Id) when Id =:= {2,5,29,35} -> + fun 'enc_ext-AuthorityKeyIdentifier'/3; +getenc_CrlExtensions(Id) when Id =:= {2,5,29,46} -> + fun 'enc_ext-FreshestCRL'/3; +getenc_CrlExtensions(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_CrlExtensions(Id) when Id =:= {2,5,29,18} -> + fun 'dec_ext-IssuerAltName'/3; +getdec_CrlExtensions(Id) when Id =:= {2,5,29,20} -> + fun 'dec_ext-CRLNumber'/3; +getdec_CrlExtensions(Id) when Id =:= {2,5,29,27} -> + fun 'dec_ext-DeltaCRLIndicator'/3; +getdec_CrlExtensions(Id) when Id =:= {2,5,29,28} -> + fun 'dec_ext-IssuingDistributionPoint'/3; +getdec_CrlExtensions(Id) when Id =:= {2,5,29,35} -> + fun 'dec_ext-AuthorityKeyIdentifier'/3; +getdec_CrlExtensions(Id) when Id =:= {2,5,29,46} -> + fun 'dec_ext-FreshestCRL'/3; +getdec_CrlExtensions(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% CrlEntryExtensions +%%================================ +getenc_CrlEntryExtensions(Id) when Id =:= {2,5,29,21} -> + fun 'enc_ext-CRLReason'/3; +getenc_CrlEntryExtensions(Id) when Id =:= {2,5,29,23} -> + fun 'enc_ext-HoldInstructionCode'/3; +getenc_CrlEntryExtensions(Id) when Id =:= {2,5,29,24} -> + fun 'enc_ext-InvalidityDate'/3; +getenc_CrlEntryExtensions(Id) when Id =:= {2,5,29,29} -> + fun 'enc_ext-CertificateIssuer'/3; +getenc_CrlEntryExtensions(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_CrlEntryExtensions(Id) when Id =:= {2,5,29,21} -> + fun 'dec_ext-CRLReason'/3; +getdec_CrlEntryExtensions(Id) when Id =:= {2,5,29,23} -> + fun 'dec_ext-HoldInstructionCode'/3; +getdec_CrlEntryExtensions(Id) when Id =:= {2,5,29,24} -> + fun 'dec_ext-InvalidityDate'/3; +getdec_CrlEntryExtensions(Id) when Id =:= {2,5,29,29} -> + fun 'dec_ext-CertificateIssuer'/3; +getdec_CrlEntryExtensions(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% PolicyQualifierId +%%================================ +getenc_PolicyQualifierId(Id) when Id =:= {1,3,6,1,5,5,7,2,1} -> + fun 'enc_pqid-cps'/3; +getenc_PolicyQualifierId(Id) when Id =:= {1,3,6,1,5,5,7,2,2} -> + fun 'enc_pqid-unotice'/3; +getenc_PolicyQualifierId(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_PolicyQualifierId(Id) when Id =:= {1,3,6,1,5,5,7,2,1} -> + fun 'dec_pqid-cps'/3; +getdec_PolicyQualifierId(Id) when Id =:= {1,3,6,1,5,5,7,2,2} -> + fun 'dec_pqid-unotice'/3; +getdec_PolicyQualifierId(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_2 +%%================================ +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,3} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-x520CommonName'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,4} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-surname'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,5} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-x520SerialNumber'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,6} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-x520countryName'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,7} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-x520LocalityName'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,8} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-x520StateOrProvinceName'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,10} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-x520OrganizationName'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,11} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-x520OrganizationalUnitName'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,12} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-x520Title'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,41} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-name'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,42} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-givenName'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,43} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-initials'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,44} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-generationQualifier'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,46} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-x520dnQualifier'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,5,4,65} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-x520Pseudonym'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {0,9,2342,19200300,100,1,25} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-domainComponent'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {1,2,840,113549,1,9,1} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'enc_at-emailAddress'(T,V,O) end; +getenc_internal_object_set_argument_2(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,3} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-x520CommonName'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,4} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-surname'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,5} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-x520SerialNumber'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,6} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-x520countryName'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,7} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-x520LocalityName'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,8} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-x520StateOrProvinceName'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,10} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-x520OrganizationName'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,11} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-x520OrganizationalUnitName'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,12} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-x520Title'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,41} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-name'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,42} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-givenName'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,43} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-initials'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,44} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-generationQualifier'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,46} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-x520dnQualifier'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,5,4,65} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-x520Pseudonym'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {0,9,2342,19200300,100,1,25} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-domainComponent'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {1,2,840,113549,1,9,1} -> + fun(T,V,O) -> 'PKIX1Explicit-2009':'dec_at-emailAddress'(T,V,O) end; +getdec_internal_object_set_argument_2(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + +%%% +%%% Run-time functions. +%%% + +'dialyzer-suppressions'(Arg) -> + ok. + +ber_decode_nif(B) -> + asn1rt_nif:decode_ber_tlv(B). + +ber_encode([Tlv]) -> + ber_encode(Tlv); +ber_encode(Tlv) when is_binary(Tlv) -> + Tlv; +ber_encode(Tlv) -> + asn1rt_nif:encode_ber_tlv(Tlv). + +collect_parts(TlvList) -> + collect_parts(TlvList, []). + +collect_parts([{_, L} | Rest], Acc) when is_list(L) -> + collect_parts(Rest, [collect_parts(L) | Acc]); +collect_parts([{3, <>} | Rest], _Acc) -> + collect_parts_bit(Rest, [Bits], Unused); +collect_parts([{_T, V} | Rest], Acc) -> + collect_parts(Rest, [V | Acc]); +collect_parts([], Acc) -> + list_to_binary(lists:reverse(Acc)). + +collect_parts_bit([{3, <>} | Rest], Acc, Uacc) -> + collect_parts_bit(Rest, [Bits | Acc], Unused + Uacc); +collect_parts_bit([], Acc, Uacc) -> + list_to_binary([Uacc | lists:reverse(Acc)]). + +dec_subidentifiers(<<>>, _Av, Al) -> + lists:reverse(Al); +dec_subidentifiers(<<1:1,H:7,T/binary>>, Av, Al) -> + dec_subidentifiers(T, Av bsl 7 + H, Al); +dec_subidentifiers(<>, Av, Al) -> + dec_subidentifiers(T, 0, [Av bsl 7 + H | Al]). + +decode_BMP_string(Buffer, Tags) -> + Bin = match_and_collect(Buffer, Tags), + mk_BMP_string(binary_to_list(Bin)). + +decode_UTF8_string(Tlv, TagsIn) -> + Val = match_tags(Tlv, TagsIn), + case Val of + [_ | _] = PartList -> + collect_parts(PartList); + Bin -> + Bin + end. + +decode_bitstring2(1, Unused, + <>) -> + lists:sublist([B7, B6, B5, B4, B3, B2, B1, B0], 8 - Unused); +decode_bitstring2(Len, Unused, + <>) -> + [B7, B6, B5, B4, B3, B2, B1, B0 | + decode_bitstring2(Len - 1, Unused, Buffer)]. + +decode_bitstring_NNL(BitList, NamedNumberList) -> + decode_bitstring_NNL(BitList, NamedNumberList, 0, []). + +decode_bitstring_NNL([], _, _No, Result) -> + lists:reverse(Result); +decode_bitstring_NNL([B | BitList], + [{Name, No} | NamedNumberList], + No, Result) -> + if + B =:= 0 -> + decode_bitstring_NNL(BitList, NamedNumberList, + No + 1, + Result); + true -> + decode_bitstring_NNL(BitList, NamedNumberList, + No + 1, + [Name | Result]) + end; +decode_bitstring_NNL([1 | BitList], NamedNumberList, No, Result) -> + decode_bitstring_NNL(BitList, NamedNumberList, + No + 1, + [{bit, No} | Result]); +decode_bitstring_NNL([0 | BitList], NamedNumberList, No, Result) -> + decode_bitstring_NNL(BitList, NamedNumberList, No + 1, Result). + +decode_boolean(Tlv, TagIn) -> + Val = match_tags(Tlv, TagIn), + case Val of + <<0:8>> -> + false; + <<_:8>> -> + true; + _ -> + exit({error, {asn1, {decode_boolean, Val}}}) + end. + +decode_integer(Tlv, TagIn) -> + Bin = match_tags(Tlv, TagIn), + Len = byte_size(Bin), + <> = Bin, + Int. + +decode_named_bit_string(Buffer, NamedNumberList, Tags) -> + case match_and_collect(Buffer, Tags) of + <<0>> -> + []; + <> -> + BitString = decode_bitstring2(byte_size(Bits), Unused, Bits), + decode_bitstring_NNL(BitString, NamedNumberList) + end. + +decode_object_identifier(Tlv, Tags) -> + Val = match_tags(Tlv, Tags), + [AddedObjVal | ObjVals] = dec_subidentifiers(Val, 0, []), + {Val1, Val2} = + if + AddedObjVal < 40 -> + {0, AddedObjVal}; + AddedObjVal < 80 -> + {1, AddedObjVal - 40}; + true -> + {2, AddedObjVal - 80} + end, + list_to_tuple([Val1, Val2 | ObjVals]). + +decode_octet_string(Tlv, TagsIn) -> + Bin = match_and_collect(Tlv, TagsIn), + binary:copy(Bin). + +decode_open_type(Tlv, TagIn) -> + case match_tags(Tlv, TagIn) of + Bin when is_binary(Bin) -> + {InnerTlv, _} = ber_decode_nif(Bin), + InnerTlv; + TlvBytes -> + TlvBytes + end. + +decode_open_type_as_binary(Tlv, TagIn) -> + ber_encode(match_tags(Tlv, TagIn)). + +decode_restricted_string(Tlv, TagsIn) -> + match_and_collect(Tlv, TagsIn). + +decode_universal_string(Buffer, Tags) -> + Bin = match_and_collect(Buffer, Tags), + mk_universal_string(binary_to_list(Bin)). + +do_encode_named_bit_string([FirstVal | RestVal], NamedBitList, TagIn) -> + ToSetPos = get_all_bitposes([FirstVal | RestVal], NamedBitList, []), + Size = lists:max(ToSetPos) + 1, + BitList = make_and_set_list(Size, ToSetPos, 0), + {Len, Unused, OctetList} = encode_bitstring(BitList), + encode_tags(TagIn, [Unused | OctetList], Len + 1). + +e_object_identifier({'OBJECT IDENTIFIER', V}) -> + e_object_identifier(V); +e_object_identifier(V) when is_tuple(V) -> + e_object_identifier(tuple_to_list(V)); +e_object_identifier([E1, E2 | Tail]) -> + Head = 40 * E1 + E2, + {H, Lh} = mk_object_val(Head), + {R, Lr} = lists:mapfoldl(fun enc_obj_id_tail/2, 0, Tail), + {[H | R], Lh + Lr}. + +enc_obj_id_tail(H, Len) -> + {B, L} = mk_object_val(H), + {B, Len + L}. + +encode_BMP_string(BMPString, TagIn) -> + OctetList = mk_BMP_list(BMPString), + encode_tags(TagIn, OctetList, length(OctetList)). + +encode_UTF8_string(UTF8String, TagIn) when is_binary(UTF8String) -> + encode_tags(TagIn, UTF8String, byte_size(UTF8String)); +encode_UTF8_string(UTF8String, TagIn) -> + encode_tags(TagIn, UTF8String, length(UTF8String)). + +encode_bitstring([B8, B7, B6, B5, B4, B3, B2, B1 | Rest]) -> + Val = + B8 bsl 7 bor (B7 bsl 6) bor (B6 bsl 5) bor (B5 bsl 4) + bor + (B4 bsl 3) + bor + (B3 bsl 2) + bor + (B2 bsl 1) + bor + B1, + encode_bitstring(Rest, [Val], 1); +encode_bitstring(Val) -> + {Unused, Octet} = unused_bitlist(Val, 7, 0), + {1, Unused, [Octet]}. + +encode_bitstring([B8, B7, B6, B5, B4, B3, B2, B1 | Rest], Ack, Len) -> + Val = + B8 bsl 7 bor (B7 bsl 6) bor (B6 bsl 5) bor (B5 bsl 4) + bor + (B4 bsl 3) + bor + (B3 bsl 2) + bor + (B2 bsl 1) + bor + B1, + encode_bitstring(Rest, [Ack, Val], Len + 1); +encode_bitstring([], Ack, Len) -> + {Len, 0, Ack}; +encode_bitstring(Rest, Ack, Len) -> + {Unused, Val} = unused_bitlist(Rest, 7, 0), + {Len + 1, Unused, [Ack, Val]}. + +encode_boolean(true, TagIn) -> + encode_tags(TagIn, [255], 1); +encode_boolean(false, TagIn) -> + encode_tags(TagIn, [0], 1); +encode_boolean(X, _) -> + exit({error, {asn1, {encode_boolean, X}}}). + +encode_integer(Val) -> + Bytes = + if + Val >= 0 -> + encode_integer_pos(Val, []); + true -> + encode_integer_neg(Val, []) + end, + {Bytes, length(Bytes)}. + +encode_integer(Val, Tag) when is_integer(Val) -> + encode_tags(Tag, encode_integer(Val)); +encode_integer(Val, _Tag) -> + exit({error, {asn1, {encode_integer, Val}}}). + +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]). + +encode_integer_pos(0, [B | _Acc] = L) when B < 128 -> + L; +encode_integer_pos(N, Acc) -> + encode_integer_pos(N bsr 8, [N band 255 | Acc]). + +encode_length(L) when L =< 127 -> + {[L], 1}; +encode_length(L) -> + Oct = minimum_octets(L), + Len = length(Oct), + if + Len =< 126 -> + {[128 bor Len | Oct], Len + 1}; + true -> + exit({error, {asn1, too_long_length_oct, Len}}) + end. + +encode_named_bit_string([H | _] = Bits, NamedBitList, TagIn) + when is_atom(H) -> + do_encode_named_bit_string(Bits, NamedBitList, TagIn); +encode_named_bit_string([{bit, _} | _] = Bits, NamedBitList, TagIn) -> + do_encode_named_bit_string(Bits, NamedBitList, TagIn); +encode_named_bit_string([], _NamedBitList, TagIn) -> + encode_unnamed_bit_string(<<>>, TagIn); +encode_named_bit_string(Bits, _NamedBitList, TagIn) + when is_bitstring(Bits) -> + encode_unnamed_bit_string(Bits, TagIn). + +encode_object_identifier(Val, TagIn) -> + encode_tags(TagIn, e_object_identifier(Val)). + +encode_open_type(Val, T) when is_list(Val) -> + encode_open_type(list_to_binary(Val), T); +encode_open_type(Val, Tag) -> + encode_tags(Tag, Val, byte_size(Val)). + +encode_restricted_string(OctetList, TagIn) when is_binary(OctetList) -> + encode_tags(TagIn, OctetList, byte_size(OctetList)); +encode_restricted_string(OctetList, TagIn) when is_list(OctetList) -> + encode_tags(TagIn, OctetList, length(OctetList)). + +encode_tags(TagIn, {BytesSoFar, LenSoFar}) -> + encode_tags(TagIn, BytesSoFar, LenSoFar). + +encode_tags([Tag | Trest], BytesSoFar, LenSoFar) -> + {Bytes2, L2} = encode_length(LenSoFar), + encode_tags(Trest, + [Tag, Bytes2 | BytesSoFar], + LenSoFar + byte_size(Tag) + L2); +encode_tags([], BytesSoFar, LenSoFar) -> + {BytesSoFar, LenSoFar}. + +encode_universal_string(Universal, TagIn) -> + OctetList = mk_uni_list(Universal), + encode_tags(TagIn, OctetList, length(OctetList)). + +encode_unnamed_bit_string(Bits, TagIn) -> + Unused = (8 - bit_size(Bits) band 7) band 7, + Bin = <>, + encode_tags(TagIn, Bin, byte_size(Bin)). + +get_all_bitposes([{bit, ValPos} | Rest], NamedBitList, Ack) -> + get_all_bitposes(Rest, NamedBitList, [ValPos | Ack]); +get_all_bitposes([Val | Rest], NamedBitList, Ack) when is_atom(Val) -> + case lists:keyfind(Val, 1, NamedBitList) of + {_ValName, ValPos} -> + get_all_bitposes(Rest, NamedBitList, [ValPos | Ack]); + _ -> + exit({error, {asn1, {bitstring_namedbit, Val}}}) + end; +get_all_bitposes([], _NamedBitList, Ack) -> + lists:sort(Ack). + +make_and_set_list(0, [], _) -> + []; +make_and_set_list(0, _, _) -> + exit({error, {asn1, bitstring_sizeconstraint}}); +make_and_set_list(Len, [XPos | SetPos], XPos) -> + [1 | make_and_set_list(Len - 1, SetPos, XPos + 1)]; +make_and_set_list(Len, [Pos | SetPos], XPos) -> + [0 | make_and_set_list(Len - 1, [Pos | SetPos], XPos + 1)]; +make_and_set_list(Len, [], XPos) -> + [0 | make_and_set_list(Len - 1, [], XPos + 1)]. + +match_and_collect(Tlv, TagsIn) -> + Val = match_tags(Tlv, TagsIn), + case Val of + [_ | _] = PartList -> + collect_parts(PartList); + Bin when is_binary(Bin) -> + Bin + end. + +match_tags({T, V}, [T]) -> + V; +match_tags({T, V}, [T | Tt]) -> + match_tags(V, Tt); +match_tags([{T, V}], [T | Tt]) -> + match_tags(V, Tt); +match_tags([{T, _V} | _] = Vlist, [T]) -> + Vlist; +match_tags(Tlv, []) -> + Tlv; +match_tags({Tag, _V} = Tlv, [T | _Tt]) -> + exit({error, {asn1, {wrong_tag, {{expected, T}, {got, Tag, Tlv}}}}}). + +minimum_octets(0, Acc) -> + Acc; +minimum_octets(Val, Acc) -> + minimum_octets(Val bsr 8, [Val band 255 | Acc]). + +minimum_octets(Val) -> + minimum_octets(Val, []). + +mk_BMP_list(In) -> + mk_BMP_list(In, []). + +mk_BMP_list([], List) -> + lists:reverse(List); +mk_BMP_list([{0, 0, C, D} | T], List) -> + mk_BMP_list(T, [D, C | List]); +mk_BMP_list([H | T], List) -> + mk_BMP_list(T, [H, 0 | List]). + +mk_BMP_string(In) -> + mk_BMP_string(In, []). + +mk_BMP_string([], US) -> + lists:reverse(US); +mk_BMP_string([0, B | T], US) -> + mk_BMP_string(T, [B | US]); +mk_BMP_string([C, D | T], US) -> + mk_BMP_string(T, [{0, 0, C, D} | US]). + +mk_object_val(0, Ack, Len) -> + {Ack, Len}; +mk_object_val(Val, Ack, Len) -> + mk_object_val(Val bsr 7, [Val band 127 bor 128 | Ack], Len + 1). + +mk_object_val(Val) when Val =< 127 -> + {[255 band Val], 1}; +mk_object_val(Val) -> + mk_object_val(Val bsr 7, [Val band 127], 1). + +mk_uni_list(In) -> + mk_uni_list(In, []). + +mk_uni_list([], List) -> + lists:reverse(List); +mk_uni_list([{A, B, C, D} | T], List) -> + mk_uni_list(T, [D, C, B, A | List]); +mk_uni_list([H | T], List) -> + mk_uni_list(T, [H, 0, 0, 0 | List]). + +mk_universal_string(In) -> + mk_universal_string(In, []). + +mk_universal_string([], Acc) -> + lists:reverse(Acc); +mk_universal_string([0, 0, 0, D | T], Acc) -> + mk_universal_string(T, [D | Acc]); +mk_universal_string([A, B, C, D | T], Acc) -> + mk_universal_string(T, [{A, B, C, D} | Acc]). + +unused_bitlist([], Trail, Ack) -> + {Trail + 1, Ack}; +unused_bitlist([Bit | Rest], Trail, Ack) -> + unused_bitlist(Rest, Trail - 1, Bit bsl Trail bor Ack). diff --git a/src/PKIX1Implicit-2009.hrl b/src/PKIX1Implicit-2009.hrl new file mode 100644 index 0000000..6dccb6f --- /dev/null +++ b/src/PKIX1Implicit-2009.hrl @@ -0,0 +1,139 @@ +%% 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 PKIX1Implicit-2009. + +-ifndef(_PKIX1IMPLICIT_2009_HRL_). +-define(_PKIX1IMPLICIT_2009_HRL_, true). + +-record('AuthorityKeyIdentifier', { + keyIdentifier = asn1_NOVALUE, + authorityCertIssuer = asn1_NOVALUE, + authorityCertSerialNumber = asn1_NOVALUE +}). + +-record('PrivateKeyUsagePeriod', { + notBefore = asn1_NOVALUE, + notAfter = asn1_NOVALUE +}). + +-record('PolicyInformation', { + policyIdentifier, + policyQualifiers = asn1_NOVALUE +}). + +-record('PolicyQualifierInfo', { + policyQualifierId, + qualifier +}). + +-record('UserNotice', { + noticeRef = asn1_NOVALUE, + explicitText = asn1_NOVALUE +}). + +-record('NoticeReference', { + organization, + noticeNumbers +}). + +-record('PolicyMappings_SEQOF', { + issuerDomainPolicy, + subjectDomainPolicy +}). + +-record('EDIPartyName', { + nameAssigner = asn1_NOVALUE, + partyName +}). + +-record('SubjectDirectoryAttributes_SEQOF', { + type, + values +}). + +-record('BasicConstraints', { + cA = asn1_DEFAULT, + pathLenConstraint = asn1_NOVALUE +}). + +-record('NameConstraints', { + permittedSubtrees = asn1_NOVALUE, + excludedSubtrees = asn1_NOVALUE +}). + +-record('GeneralSubtree', { + base, + minimum = asn1_DEFAULT, + maximum = asn1_NOVALUE +}). + +-record('PolicyConstraints', { + requireExplicitPolicy = asn1_NOVALUE, + inhibitPolicyMapping = asn1_NOVALUE +}). + +-record('DistributionPoint', { + distributionPoint = asn1_NOVALUE, + reasons = asn1_NOVALUE, + cRLIssuer = asn1_NOVALUE +}). + +-record('AccessDescription', { + accessMethod, + accessLocation +}). + +-record('IssuingDistributionPoint', { + distributionPoint = asn1_NOVALUE, + onlyContainsUserCerts = asn1_DEFAULT, + onlyContainsCACerts = asn1_DEFAULT, + onlySomeReasons = asn1_NOVALUE, + indirectCRL = asn1_DEFAULT, + onlyContainsAttributeCerts = asn1_DEFAULT +}). + +-record('INSTANCE OF', { + 'type-id', + value +}). + +-define('id-ce', {2,5,29}). +-define('id-ce-authorityKeyIdentifier', {2,5,29,35}). +-define('id-ce-subjectKeyIdentifier', {2,5,29,14}). +-define('id-ce-keyUsage', {2,5,29,15}). +-define('id-ce-privateKeyUsagePeriod', {2,5,29,16}). +-define('id-ce-certificatePolicies', {2,5,29,32}). +-define('id-ce-policyMappings', {2,5,29,33}). +-define('id-ce-subjectAltName', {2,5,29,17}). +-define('id-ce-issuerAltName', {2,5,29,18}). +-define('id-ce-subjectDirectoryAttributes', {2,5,29,9}). +-define('id-ce-basicConstraints', {2,5,29,19}). +-define('id-ce-nameConstraints', {2,5,29,30}). +-define('id-ce-policyConstraints', {2,5,29,36}). +-define('id-ce-cRLDistributionPoints', {2,5,29,31}). +-define('id-ce-extKeyUsage', {2,5,29,37}). +-define('anyExtendedKeyUsage', {2,5,29,37,0}). +-define('id-kp-serverAuth', {1,3,6,1,5,5,7,3,1}). +-define('id-kp-clientAuth', {1,3,6,1,5,5,7,3,2}). +-define('id-kp-codeSigning', {1,3,6,1,5,5,7,3,3}). +-define('id-kp-emailProtection', {1,3,6,1,5,5,7,3,4}). +-define('id-kp-timeStamping', {1,3,6,1,5,5,7,3,8}). +-define('id-kp-OCSPSigning', {1,3,6,1,5,5,7,3,9}). +-define('id-ce-inhibitAnyPolicy', {2,5,29,54}). +-define('id-ce-freshestCRL', {2,5,29,46}). +-define('id-pe-authorityInfoAccess', {1,3,6,1,5,5,7,1,1}). +-define('id-pe-subjectInfoAccess', {1,3,6,1,5,5,7,1,11}). +-define('id-ce-cRLNumber', {2,5,29,20}). +-define('id-ce-issuingDistributionPoint', {2,5,29,28}). +-define('id-ce-deltaCRLIndicator', {2,5,29,27}). +-define('id-ce-cRLReasons', {2,5,29,21}). +-define('id-ce-certificateIssuer', {2,5,29,29}). +-define('id-ce-holdInstructionCode', {2,5,29,23}). +-define('holdInstruction', {2,2,840,10040,2}). +-define('id-holdinstruction-none', {2,2,840,10040,2,1}). +-define('id-holdinstruction-callissuer', {2,2,840,10040,2,2}). +-define('id-holdinstruction-reject', {2,2,840,10040,2,3}). +-define('id-ce-invalidityDate', {2,5,29,24}). +-define('ubMax', 32768). +-endif. %% _PKIX1IMPLICIT_2009_HRL_ diff --git a/src/PKIXCMP-2009.erl b/src/PKIXCMP-2009.erl new file mode 100644 index 0000000..44e4658 --- /dev/null +++ b/src/PKIXCMP-2009.erl @@ -0,0 +1,4348 @@ +%% Generated by the Erlang ASN.1 BER compiler. Version: 5.0.21 +%% Purpose: Encoding and decoding of the types in PKIXCMP-2009. + +-module('PKIXCMP-2009'). +-compile(nowarn_unused_vars). +-dialyzer(no_improper_lists). +-dialyzer(no_match). +-include("PKIXCMP-2009.hrl"). +-asn1_info([{vsn,'5.0.21'}, + {module,'PKIXCMP-2009'}, + {options,[warnings,ber,errors, + {cwd,"/Users/maxim/depot/synrc/ca/priv/cms"}, + {outdir,"/Users/maxim/depot/synrc/ca/priv/cms"}, + {i,"."}, + {i,"/Users/maxim/depot/synrc/ca/priv/cms"}]}]). + +-export([encoding_rule/0,maps/0,bit_string_format/0, + legacy_erlang_types/0]). +-export(['dialyzer-suppressions'/1]). +-export([ +enc_CMPCertificate/2, +enc_PKIMessage/2, +enc_PKIMessages/2, +enc_PKIHeader/2, +enc_PKIFreeText/2, +enc_PKIBody/2, +enc_PKIProtection/2, +enc_ProtectedPart/2, +enc_PBMParameter/2, +enc_DHBMParameter/2, +enc_PKIStatus/2, +enc_PKIFailureInfo/2, +enc_PKIStatusInfo/2, +enc_OOBCert/2, +enc_OOBCertHash/2, +enc_POPODecKeyChallContent/2, +enc_Challenge/2, +enc_POPODecKeyRespContent/2, +enc_CertRepMessage/2, +enc_CertResponse/2, +enc_CertifiedKeyPair/2, +enc_CertOrEncCert/2, +enc_KeyRecRepContent/2, +enc_RevReqContent/2, +enc_RevDetails/2, +enc_RevRepContent/2, +enc_CAKeyUpdAnnContent/2, +enc_CertAnnContent/2, +enc_RevAnnContent/2, +enc_CRLAnnContent/2, +enc_PKIConfirmContent/2, +enc_NestedMessageContent/2, +enc_InfoTypeAndValue/2, +enc_GenMsgContent/2, +enc_GenRepContent/2, +enc_ErrorMsgContent/2, +enc_CertConfirmContent/2, +enc_CertStatus/2, +enc_PollReqContent/2, +enc_PollRepContent/2 +]). + +-export([ +dec_CMPCertificate/2, +dec_PKIMessage/2, +dec_PKIMessages/2, +dec_PKIHeader/2, +dec_PKIFreeText/2, +dec_PKIBody/2, +dec_PKIProtection/2, +dec_ProtectedPart/2, +dec_PBMParameter/2, +dec_DHBMParameter/2, +dec_PKIStatus/2, +dec_PKIFailureInfo/2, +dec_PKIStatusInfo/2, +dec_OOBCert/2, +dec_OOBCertHash/2, +dec_POPODecKeyChallContent/2, +dec_Challenge/2, +dec_POPODecKeyRespContent/2, +dec_CertRepMessage/2, +dec_CertResponse/2, +dec_CertifiedKeyPair/2, +dec_CertOrEncCert/2, +dec_KeyRecRepContent/2, +dec_RevReqContent/2, +dec_RevDetails/2, +dec_RevRepContent/2, +dec_CAKeyUpdAnnContent/2, +dec_CertAnnContent/2, +dec_RevAnnContent/2, +dec_CRLAnnContent/2, +dec_PKIConfirmContent/2, +dec_NestedMessageContent/2, +dec_InfoTypeAndValue/2, +dec_GenMsgContent/2, +dec_GenRepContent/2, +dec_ErrorMsgContent/2, +dec_CertConfirmContent/2, +dec_CertStatus/2, +dec_PollReqContent/2, +dec_PollRepContent/2 +]). + +-export([ +getenc_SupportedInfoSet/1, +getenc_internal_object_set_argument_79/1, +getenc_internal_object_set_argument_77/1, +getenc_internal_object_set_argument_76/1, +getenc_internal_object_set_argument_75/1, +getenc_internal_object_set_argument_74/1, +getenc_internal_object_set_argument_73/1, +getenc_internal_object_set_argument_87/1, +getenc_internal_object_set_argument_85/1, +getenc_internal_object_set_argument_83/1, +getenc_internal_object_set_argument_81/1, +getenc_internal_object_set_argument_10/1 +]). + +-export([ +getdec_SupportedInfoSet/1, +getdec_internal_object_set_argument_79/1, +getdec_internal_object_set_argument_77/1, +getdec_internal_object_set_argument_76/1, +getdec_internal_object_set_argument_75/1, +getdec_internal_object_set_argument_74/1, +getdec_internal_object_set_argument_73/1, +getdec_internal_object_set_argument_87/1, +getdec_internal_object_set_argument_85/1, +getdec_internal_object_set_argument_83/1, +getdec_internal_object_set_argument_81/1, +getdec_internal_object_set_argument_10/1 +]). + +-export([ +'id-PasswordBasedMac'/0, +'id-DHBasedMac'/0 +]). + +-export([info/0]). + +-export([encode/2,decode/2]). + +encoding_rule() -> ber. + +maps() -> false. + +bit_string_format() -> bitstring. + +legacy_erlang_types() -> false. + +encode(Type, Data) -> +try iolist_to_binary(element(1, encode_disp(Type, Data))) of + Bytes -> + {ok,Bytes} + catch + Class:Exception:Stk when Class =:= error; Class =:= exit -> + case Exception of + {error,{asn1,Reason}} -> + {error,{asn1,{Reason,Stk}}}; + Reason -> + {error,{asn1,{Reason,Stk}}} + end +end. + +decode(Type, Data) -> +try + Result = decode_disp(Type, element(1, ber_decode_nif(Data))), + {ok,Result} + catch + Class:Exception:Stk when Class =:= error; Class =:= exit -> + case Exception of + {error,{asn1,Reason}} -> + {error,{asn1,{Reason,Stk}}}; + Reason -> + {error,{asn1,{Reason,Stk}}} + end +end. + +encode_disp('CMPCertificate', Data) -> enc_CMPCertificate(Data); +encode_disp('PKIMessage', Data) -> enc_PKIMessage(Data); +encode_disp('PKIMessages', Data) -> enc_PKIMessages(Data); +encode_disp('PKIHeader', Data) -> enc_PKIHeader(Data); +encode_disp('PKIFreeText', Data) -> enc_PKIFreeText(Data); +encode_disp('PKIBody', Data) -> enc_PKIBody(Data); +encode_disp('PKIProtection', Data) -> enc_PKIProtection(Data); +encode_disp('ProtectedPart', Data) -> enc_ProtectedPart(Data); +encode_disp('PBMParameter', Data) -> enc_PBMParameter(Data); +encode_disp('DHBMParameter', Data) -> enc_DHBMParameter(Data); +encode_disp('PKIStatus', Data) -> enc_PKIStatus(Data); +encode_disp('PKIFailureInfo', Data) -> enc_PKIFailureInfo(Data); +encode_disp('PKIStatusInfo', Data) -> enc_PKIStatusInfo(Data); +encode_disp('OOBCert', Data) -> enc_OOBCert(Data); +encode_disp('OOBCertHash', Data) -> enc_OOBCertHash(Data); +encode_disp('POPODecKeyChallContent', Data) -> enc_POPODecKeyChallContent(Data); +encode_disp('Challenge', Data) -> enc_Challenge(Data); +encode_disp('POPODecKeyRespContent', Data) -> enc_POPODecKeyRespContent(Data); +encode_disp('CertRepMessage', Data) -> enc_CertRepMessage(Data); +encode_disp('CertResponse', Data) -> enc_CertResponse(Data); +encode_disp('CertifiedKeyPair', Data) -> enc_CertifiedKeyPair(Data); +encode_disp('CertOrEncCert', Data) -> enc_CertOrEncCert(Data); +encode_disp('KeyRecRepContent', Data) -> enc_KeyRecRepContent(Data); +encode_disp('RevReqContent', Data) -> enc_RevReqContent(Data); +encode_disp('RevDetails', Data) -> enc_RevDetails(Data); +encode_disp('RevRepContent', Data) -> enc_RevRepContent(Data); +encode_disp('CAKeyUpdAnnContent', Data) -> enc_CAKeyUpdAnnContent(Data); +encode_disp('CertAnnContent', Data) -> enc_CertAnnContent(Data); +encode_disp('RevAnnContent', Data) -> enc_RevAnnContent(Data); +encode_disp('CRLAnnContent', Data) -> enc_CRLAnnContent(Data); +encode_disp('PKIConfirmContent', Data) -> enc_PKIConfirmContent(Data); +encode_disp('NestedMessageContent', Data) -> enc_NestedMessageContent(Data); +encode_disp('InfoTypeAndValue', Data) -> enc_InfoTypeAndValue(Data); +encode_disp('GenMsgContent', Data) -> enc_GenMsgContent(Data); +encode_disp('GenRepContent', Data) -> enc_GenRepContent(Data); +encode_disp('ErrorMsgContent', Data) -> enc_ErrorMsgContent(Data); +encode_disp('CertConfirmContent', Data) -> enc_CertConfirmContent(Data); +encode_disp('CertStatus', Data) -> enc_CertStatus(Data); +encode_disp('PollReqContent', Data) -> enc_PollReqContent(Data); +encode_disp('PollRepContent', Data) -> enc_PollRepContent(Data); +encode_disp(Type, _Data) -> exit({error,{asn1,{undefined_type,Type}}}). + +decode_disp('CMPCertificate', Data) -> dec_CMPCertificate(Data); +decode_disp('PKIMessage', Data) -> dec_PKIMessage(Data); +decode_disp('PKIMessages', Data) -> dec_PKIMessages(Data); +decode_disp('PKIHeader', Data) -> dec_PKIHeader(Data); +decode_disp('PKIFreeText', Data) -> dec_PKIFreeText(Data); +decode_disp('PKIBody', Data) -> dec_PKIBody(Data); +decode_disp('PKIProtection', Data) -> dec_PKIProtection(Data); +decode_disp('ProtectedPart', Data) -> dec_ProtectedPart(Data); +decode_disp('PBMParameter', Data) -> dec_PBMParameter(Data); +decode_disp('DHBMParameter', Data) -> dec_DHBMParameter(Data); +decode_disp('PKIStatus', Data) -> dec_PKIStatus(Data); +decode_disp('PKIFailureInfo', Data) -> dec_PKIFailureInfo(Data); +decode_disp('PKIStatusInfo', Data) -> dec_PKIStatusInfo(Data); +decode_disp('OOBCert', Data) -> dec_OOBCert(Data); +decode_disp('OOBCertHash', Data) -> dec_OOBCertHash(Data); +decode_disp('POPODecKeyChallContent', Data) -> dec_POPODecKeyChallContent(Data); +decode_disp('Challenge', Data) -> dec_Challenge(Data); +decode_disp('POPODecKeyRespContent', Data) -> dec_POPODecKeyRespContent(Data); +decode_disp('CertRepMessage', Data) -> dec_CertRepMessage(Data); +decode_disp('CertResponse', Data) -> dec_CertResponse(Data); +decode_disp('CertifiedKeyPair', Data) -> dec_CertifiedKeyPair(Data); +decode_disp('CertOrEncCert', Data) -> dec_CertOrEncCert(Data); +decode_disp('KeyRecRepContent', Data) -> dec_KeyRecRepContent(Data); +decode_disp('RevReqContent', Data) -> dec_RevReqContent(Data); +decode_disp('RevDetails', Data) -> dec_RevDetails(Data); +decode_disp('RevRepContent', Data) -> dec_RevRepContent(Data); +decode_disp('CAKeyUpdAnnContent', Data) -> dec_CAKeyUpdAnnContent(Data); +decode_disp('CertAnnContent', Data) -> dec_CertAnnContent(Data); +decode_disp('RevAnnContent', Data) -> dec_RevAnnContent(Data); +decode_disp('CRLAnnContent', Data) -> dec_CRLAnnContent(Data); +decode_disp('PKIConfirmContent', Data) -> dec_PKIConfirmContent(Data); +decode_disp('NestedMessageContent', Data) -> dec_NestedMessageContent(Data); +decode_disp('InfoTypeAndValue', Data) -> dec_InfoTypeAndValue(Data); +decode_disp('GenMsgContent', Data) -> dec_GenMsgContent(Data); +decode_disp('GenRepContent', Data) -> dec_GenRepContent(Data); +decode_disp('ErrorMsgContent', Data) -> dec_ErrorMsgContent(Data); +decode_disp('CertConfirmContent', Data) -> dec_CertConfirmContent(Data); +decode_disp('CertStatus', Data) -> dec_CertStatus(Data); +decode_disp('PollReqContent', Data) -> dec_PollReqContent(Data); +decode_disp('PollRepContent', Data) -> dec_PollRepContent(Data); +decode_disp(Type, _Data) -> exit({error,{asn1,{undefined_type,Type}}}). + +info() -> + case ?MODULE:module_info(attributes) of + Attributes when is_list(Attributes) -> + case lists:keyfind(asn1_info, 1, Attributes) of + {_,Info} when is_list(Info) -> + Info; + _ -> + [] + end; + _ -> + [] + end. + + +%%================================ +%% CMPCertificate +%%================================ +enc_CMPCertificate(Val) -> + enc_CMPCertificate(Val, []). + +enc_CMPCertificate(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + x509v3PKCert -> + 'PKIX1Explicit-2009':'enc_Certificate'(element(2,Val), [<<48>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_CMPCertificate(Tlv) -> + dec_CMPCertificate(Tlv, []). + +dec_CMPCertificate(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'x509v3PKCert' + {16, V1} -> + {x509v3PKCert, 'PKIX1Explicit-2009':'dec_Certificate'(V1, [])}; + + Else -> + {asn1_ExtAlt,ber_encode(Else)} + end +. + + +%%================================ +%% PKIMessage +%%================================ +enc_PKIMessage(Val) -> + enc_PKIMessage(Val, [<<48>>]). + +enc_PKIMessage(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4} = Val, + +%%------------------------------------------------- +%% attribute header(1) External PKIXCMP-2009:PKIHeader +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_PKIHeader'(Cindex1, [<<48>>]), + +%%------------------------------------------------- +%% attribute body(2) External PKIXCMP-2009:PKIBody +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_PKIBody'(Cindex2, []), + +%%------------------------------------------------- +%% attribute protection(3) with type BIT STRING OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_unnamed_bit_string(Cindex3, [<<3>>,<<160>>]) + end, + +%%------------------------------------------------- +%% attribute extraCerts(4) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- + {EncBytes4,EncLen4} = case Cindex4 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_PKIMessage_extraCerts'(Cindex4, [<<48>>,<<161>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% PKIMessage_extraCerts +%%================================ +enc_PKIMessage_extraCerts(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_PKIMessage_extraCerts_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_PKIMessage_extraCerts_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_PKIMessage_extraCerts_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_CMPCertificate'(H, []), + 'enc_PKIMessage_extraCerts_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_PKIMessage(Tlv) -> + dec_PKIMessage(Tlv, [16]). + +dec_PKIMessage(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute header(1) External PKIXCMP-2009:PKIHeader +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_PKIHeader'(V1, [16]), + +%%------------------------------------------------- +%% attribute body(2) External PKIXCMP-2009:PKIBody +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_PKIBody'(V2, []), + +%%------------------------------------------------- +%% attribute protection(3) with type BIT STRING OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{131072,V3}|TempTlv4] -> + {decode_native_bit_string(V3, [3]), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +%%------------------------------------------------- +%% attribute extraCerts(4) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[{131073,V4}|TempTlv5] -> + {'dec_PKIMessage_extraCerts'(V4, [16]), TempTlv5}; + _ -> + { asn1_NOVALUE, Tlv4} +end, + +case Tlv5 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed +end, +Res1 = {'PKIMessage',Term1,Term2,Term3,Term4}, +Res1. +'dec_PKIMessage_extraCerts'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_CMPCertificate'(V1, []) || V1 <- Tlv1]. + + + + +%%================================ +%% PKIMessages +%%================================ +enc_PKIMessages(Val) -> + enc_PKIMessages(Val, [<<48>>]). + +enc_PKIMessages(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_PKIMessages_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_PKIMessages_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_PKIMessages_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_PKIMessage'(H, [<<48>>]), + 'enc_PKIMessages_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_PKIMessages(Tlv) -> + dec_PKIMessages(Tlv, [16]). + +dec_PKIMessages(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_PKIMessage'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% PKIHeader +%%================================ +enc_PKIHeader(Val) -> + enc_PKIHeader(Val, [<<48>>]). + +enc_PKIHeader(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4,Cindex5,Cindex6,Cindex7,Cindex8,Cindex9,Cindex10,Cindex11,Cindex12} = Val, + +%%------------------------------------------------- +%% attribute pvno(1) with type INTEGER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_integer(Cindex1, [{cmp1999,1},{cmp2000,2}], [<<2>>]), + +%%------------------------------------------------- +%% attribute sender(2) External PKIX1Implicit-2009:GeneralName +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'PKIX1Implicit-2009':'enc_GeneralName'(Cindex2, []), + +%%------------------------------------------------- +%% attribute recipient(3) External PKIX1Implicit-2009:GeneralName +%%------------------------------------------------- + {EncBytes3,EncLen3} = 'PKIX1Implicit-2009':'enc_GeneralName'(Cindex3, []), + +%%------------------------------------------------- +%% attribute messageTime(4) with type GeneralizedTime OPTIONAL +%%------------------------------------------------- + {EncBytes4,EncLen4} = case Cindex4 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex4, [<<24>>,<<160>>]) + end, + +%%------------------------------------------------- +%% attribute protectionAlg(5) with type SEQUENCE OPTIONAL +%%------------------------------------------------- + {EncBytes5,EncLen5} = case Cindex5 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_PKIHeader_protectionAlg'(Cindex5, [<<48>>,<<161>>]) + end, + +%%------------------------------------------------- +%% attribute senderKID(6) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes6,EncLen6} = case Cindex6 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex6, [<<4>>,<<162>>]) + end, + +%%------------------------------------------------- +%% attribute recipKID(7) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes7,EncLen7} = case Cindex7 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex7, [<<4>>,<<163>>]) + end, + +%%------------------------------------------------- +%% attribute transactionID(8) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes8,EncLen8} = case Cindex8 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex8, [<<4>>,<<164>>]) + end, + +%%------------------------------------------------- +%% attribute senderNonce(9) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes9,EncLen9} = case Cindex9 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex9, [<<4>>,<<165>>]) + end, + +%%------------------------------------------------- +%% attribute recipNonce(10) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes10,EncLen10} = case Cindex10 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex10, [<<4>>,<<166>>]) + end, + +%%------------------------------------------------- +%% attribute freeText(11) External PKIXCMP-2009:PKIFreeText OPTIONAL +%%------------------------------------------------- + {EncBytes11,EncLen11} = case Cindex11 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_PKIFreeText'(Cindex11, [<<48>>,<<167>>]) + end, + +%%------------------------------------------------- +%% attribute generalInfo(12) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- + {EncBytes12,EncLen12} = case Cindex12 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_PKIHeader_generalInfo'(Cindex12, [<<48>>,<<168>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4, EncBytes5, EncBytes6, EncBytes7, EncBytes8, EncBytes9, EncBytes10, EncBytes11, EncBytes12], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4 + EncLen5 + EncLen6 + EncLen7 + EncLen8 + EncLen9 + EncLen10 + EncLen11 + EncLen12, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% PKIHeader_protectionAlg +%%================================ +enc_PKIHeader_protectionAlg(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCMP-2009':'getenc_internal_object_set_argument_10'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% PKIHeader_generalInfo +%%================================ +enc_PKIHeader_generalInfo(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_PKIHeader_generalInfo_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_PKIHeader_generalInfo_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_PKIHeader_generalInfo_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_InfoTypeAndValue'(H, [<<48>>]), + 'enc_PKIHeader_generalInfo_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_PKIHeader(Tlv) -> + dec_PKIHeader(Tlv, [16]). + +dec_PKIHeader(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute pvno(1) with type INTEGER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = begin +Val1 = decode_integer(V1, [2]), +number2name(Val1, [{cmp1999,1},{cmp2000,2}]) +end +, + +%%------------------------------------------------- +%% attribute sender(2) External PKIX1Implicit-2009:GeneralName +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'PKIX1Implicit-2009':'dec_GeneralName'(V2, []), + +%%------------------------------------------------- +%% attribute recipient(3) External PKIX1Implicit-2009:GeneralName +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = 'PKIX1Implicit-2009':'dec_GeneralName'(V3, []), + +%%------------------------------------------------- +%% attribute messageTime(4) with type GeneralizedTime OPTIONAL +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[{131072,V4}|TempTlv5] -> + {begin +binary_to_list(decode_restricted_string(V4, [24])) +end +, TempTlv5}; + _ -> + { asn1_NOVALUE, Tlv4} +end, + +%%------------------------------------------------- +%% attribute protectionAlg(5) with type SEQUENCE OPTIONAL +%%------------------------------------------------- +{Term5,Tlv6} = case Tlv5 of +[{131073,V5}|TempTlv6] -> + {'dec_PKIHeader_protectionAlg'(V5, [16]), TempTlv6}; + _ -> + { asn1_NOVALUE, Tlv5} +end, + +%%------------------------------------------------- +%% attribute senderKID(6) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term6,Tlv7} = case Tlv6 of +[{131074,V6}|TempTlv7] -> + {decode_octet_string(V6, [4]), TempTlv7}; + _ -> + { asn1_NOVALUE, Tlv6} +end, + +%%------------------------------------------------- +%% attribute recipKID(7) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term7,Tlv8} = case Tlv7 of +[{131075,V7}|TempTlv8] -> + {decode_octet_string(V7, [4]), TempTlv8}; + _ -> + { asn1_NOVALUE, Tlv7} +end, + +%%------------------------------------------------- +%% attribute transactionID(8) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term8,Tlv9} = case Tlv8 of +[{131076,V8}|TempTlv9] -> + {decode_octet_string(V8, [4]), TempTlv9}; + _ -> + { asn1_NOVALUE, Tlv8} +end, + +%%------------------------------------------------- +%% attribute senderNonce(9) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term9,Tlv10} = case Tlv9 of +[{131077,V9}|TempTlv10] -> + {decode_octet_string(V9, [4]), TempTlv10}; + _ -> + { asn1_NOVALUE, Tlv9} +end, + +%%------------------------------------------------- +%% attribute recipNonce(10) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term10,Tlv11} = case Tlv10 of +[{131078,V10}|TempTlv11] -> + {decode_octet_string(V10, [4]), TempTlv11}; + _ -> + { asn1_NOVALUE, Tlv10} +end, + +%%------------------------------------------------- +%% attribute freeText(11) External PKIXCMP-2009:PKIFreeText OPTIONAL +%%------------------------------------------------- +{Term11,Tlv12} = case Tlv11 of +[{131079,V11}|TempTlv12] -> + {'dec_PKIFreeText'(V11, [16]), TempTlv12}; + _ -> + { asn1_NOVALUE, Tlv11} +end, + +%%------------------------------------------------- +%% attribute generalInfo(12) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- +{Term12,Tlv13} = case Tlv12 of +[{131080,V12}|TempTlv13] -> + {'dec_PKIHeader_generalInfo'(V12, [16]), TempTlv13}; + _ -> + { asn1_NOVALUE, Tlv12} +end, + +case Tlv13 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv13}}}) % extra fields not allowed +end, +Res1 = {'PKIHeader',Term1,Term2,Term3,Term4,Term5,Term6,Term7,Term8,Term9,Term10,Term11,Term12}, +Res1. +'dec_PKIHeader_protectionAlg'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCMP-2009':'getdec_internal_object_set_argument_10'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PKIHeader_protectionAlg',Term1,Term2}, +Res1. +'dec_PKIHeader_generalInfo'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_InfoTypeAndValue'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% PKIFreeText +%%================================ +enc_PKIFreeText(Val) -> + enc_PKIFreeText(Val, [<<48>>]). + +enc_PKIFreeText(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_PKIFreeText_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_PKIFreeText_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_PKIFreeText_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = encode_UTF8_string(H, [<<12>>]), + 'enc_PKIFreeText_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_PKIFreeText(Tlv) -> + dec_PKIFreeText(Tlv, [16]). + +dec_PKIFreeText(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +[decode_UTF8_string(V1, [12]) || V1 <- Tlv1]. + + + + +%%================================ +%% PKIBody +%%================================ +enc_PKIBody(Val) -> + enc_PKIBody(Val, []). + +enc_PKIBody(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + ir -> + 'PKIXCRMF-2009':'enc_CertReqMessages'(element(2,Val), [<<48>>,<<160>>]); + ip -> + 'enc_CertRepMessage'(element(2,Val), [<<48>>,<<161>>]); + cr -> + 'PKIXCRMF-2009':'enc_CertReqMessages'(element(2,Val), [<<48>>,<<162>>]); + cp -> + 'enc_CertRepMessage'(element(2,Val), [<<48>>,<<163>>]); + p10cr -> + 'PKCS-10':'enc_CertificationRequest'(element(2,Val), [<<48>>,<<164>>]); + popdecc -> + 'enc_POPODecKeyChallContent'(element(2,Val), [<<48>>,<<165>>]); + popdecr -> + 'enc_POPODecKeyRespContent'(element(2,Val), [<<48>>,<<166>>]); + kur -> + 'PKIXCRMF-2009':'enc_CertReqMessages'(element(2,Val), [<<48>>,<<167>>]); + kup -> + 'enc_CertRepMessage'(element(2,Val), [<<48>>,<<168>>]); + krr -> + 'PKIXCRMF-2009':'enc_CertReqMessages'(element(2,Val), [<<48>>,<<169>>]); + krp -> + 'enc_KeyRecRepContent'(element(2,Val), [<<48>>,<<170>>]); + rr -> + 'enc_RevReqContent'(element(2,Val), [<<48>>,<<171>>]); + rp -> + 'enc_RevRepContent'(element(2,Val), [<<48>>,<<172>>]); + ccr -> + 'PKIXCRMF-2009':'enc_CertReqMessages'(element(2,Val), [<<48>>,<<173>>]); + ccp -> + 'enc_CertRepMessage'(element(2,Val), [<<48>>,<<174>>]); + ckuann -> + 'enc_CAKeyUpdAnnContent'(element(2,Val), [<<48>>,<<175>>]); + cann -> + 'enc_CertAnnContent'(element(2,Val), [<<176>>]); + rann -> + 'enc_RevAnnContent'(element(2,Val), [<<48>>,<<177>>]); + crlann -> + 'enc_CRLAnnContent'(element(2,Val), [<<48>>,<<178>>]); + pkiconf -> + encode_null(element(2,Val), [<<5>>,<<179>>]); + nested -> + 'enc_NestedMessageContent'(element(2,Val), [<<48>>,<<180>>]); + genm -> + 'enc_GenMsgContent'(element(2,Val), [<<48>>,<<181>>]); + genp -> + 'enc_GenRepContent'(element(2,Val), [<<48>>,<<182>>]); + error -> + 'enc_ErrorMsgContent'(element(2,Val), [<<48>>,<<183>>]); + certConf -> + 'enc_CertConfirmContent'(element(2,Val), [<<48>>,<<184>>]); + pollReq -> + 'enc_PollReqContent'(element(2,Val), [<<48>>,<<185>>]); + pollRep -> + 'enc_PollRepContent'(element(2,Val), [<<48>>,<<186>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_PKIBody(Tlv) -> + dec_PKIBody(Tlv, []). + +dec_PKIBody(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'ir' + {131072, V1} -> + {ir, 'PKIXCRMF-2009':'dec_CertReqMessages'(V1, [16])}; + + +%% 'ip' + {131073, V1} -> + {ip, 'dec_CertRepMessage'(V1, [16])}; + + +%% 'cr' + {131074, V1} -> + {cr, 'PKIXCRMF-2009':'dec_CertReqMessages'(V1, [16])}; + + +%% 'cp' + {131075, V1} -> + {cp, 'dec_CertRepMessage'(V1, [16])}; + + +%% 'p10cr' + {131076, V1} -> + {p10cr, 'PKCS-10':'dec_CertificationRequest'(V1, [16])}; + + +%% 'popdecc' + {131077, V1} -> + {popdecc, 'dec_POPODecKeyChallContent'(V1, [16])}; + + +%% 'popdecr' + {131078, V1} -> + {popdecr, 'dec_POPODecKeyRespContent'(V1, [16])}; + + +%% 'kur' + {131079, V1} -> + {kur, 'PKIXCRMF-2009':'dec_CertReqMessages'(V1, [16])}; + + +%% 'kup' + {131080, V1} -> + {kup, 'dec_CertRepMessage'(V1, [16])}; + + +%% 'krr' + {131081, V1} -> + {krr, 'PKIXCRMF-2009':'dec_CertReqMessages'(V1, [16])}; + + +%% 'krp' + {131082, V1} -> + {krp, 'dec_KeyRecRepContent'(V1, [16])}; + + +%% 'rr' + {131083, V1} -> + {rr, 'dec_RevReqContent'(V1, [16])}; + + +%% 'rp' + {131084, V1} -> + {rp, 'dec_RevRepContent'(V1, [16])}; + + +%% 'ccr' + {131085, V1} -> + {ccr, 'PKIXCRMF-2009':'dec_CertReqMessages'(V1, [16])}; + + +%% 'ccp' + {131086, V1} -> + {ccp, 'dec_CertRepMessage'(V1, [16])}; + + +%% 'ckuann' + {131087, V1} -> + {ckuann, 'dec_CAKeyUpdAnnContent'(V1, [16])}; + + +%% 'cann' + {131088, V1} -> + {cann, 'dec_CertAnnContent'(V1, [])}; + + +%% 'rann' + {131089, V1} -> + {rann, 'dec_RevAnnContent'(V1, [16])}; + + +%% 'crlann' + {131090, V1} -> + {crlann, 'dec_CRLAnnContent'(V1, [16])}; + + +%% 'pkiconf' + {131091, V1} -> + {pkiconf, decode_null(V1, [5])}; + + +%% 'nested' + {131092, V1} -> + {nested, 'dec_NestedMessageContent'(V1, [16])}; + + +%% 'genm' + {131093, V1} -> + {genm, 'dec_GenMsgContent'(V1, [16])}; + + +%% 'genp' + {131094, V1} -> + {genp, 'dec_GenRepContent'(V1, [16])}; + + +%% 'error' + {131095, V1} -> + {error, 'dec_ErrorMsgContent'(V1, [16])}; + + +%% 'certConf' + {131096, V1} -> + {certConf, 'dec_CertConfirmContent'(V1, [16])}; + + +%% 'pollReq' + {131097, V1} -> + {pollReq, 'dec_PollReqContent'(V1, [16])}; + + +%% 'pollRep' + {131098, V1} -> + {pollRep, 'dec_PollRepContent'(V1, [16])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% PKIProtection +%%================================ +enc_PKIProtection(Val) -> + enc_PKIProtection(Val, [<<3>>]). + +enc_PKIProtection(Val, TagIn) -> +encode_unnamed_bit_string(Val, TagIn). + + +dec_PKIProtection(Tlv) -> + dec_PKIProtection(Tlv, [3]). + +dec_PKIProtection(Tlv, TagIn) -> +decode_native_bit_string(Tlv, TagIn). + + + +%%================================ +%% ProtectedPart +%%================================ +enc_ProtectedPart(Val) -> + enc_ProtectedPart(Val, [<<48>>]). + +enc_ProtectedPart(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute header(1) External PKIXCMP-2009:PKIHeader +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_PKIHeader'(Cindex1, [<<48>>]), + +%%------------------------------------------------- +%% attribute body(2) External PKIXCMP-2009:PKIBody +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_PKIBody'(Cindex2, []), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_ProtectedPart(Tlv) -> + dec_ProtectedPart(Tlv, [16]). + +dec_ProtectedPart(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute header(1) External PKIXCMP-2009:PKIHeader +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_PKIHeader'(V1, [16]), + +%%------------------------------------------------- +%% attribute body(2) External PKIXCMP-2009:PKIBody +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_PKIBody'(V2, []), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'ProtectedPart',Term1,Term2}, +Res1. + + +%%================================ +%% PBMParameter +%%================================ +enc_PBMParameter(Val) -> + enc_PBMParameter(Val, [<<48>>]). + +enc_PBMParameter(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4} = Val, + +%%------------------------------------------------- +%% attribute salt(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute owf(2) with type SEQUENCE +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_PBMParameter_owf'(Cindex2, [<<48>>]), + +%%------------------------------------------------- +%% attribute iterationCount(3) with type INTEGER +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_integer(Cindex3, [<<2>>]), + +%%------------------------------------------------- +%% attribute mac(4) with type SEQUENCE +%%------------------------------------------------- + {EncBytes4,EncLen4} = 'enc_PBMParameter_mac'(Cindex4, [<<48>>]), + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% PBMParameter_owf +%%================================ +enc_PBMParameter_owf(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCMP-2009':'getenc_internal_object_set_argument_79'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% PBMParameter_mac +%%================================ +enc_PBMParameter_mac(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCMP-2009':'getenc_internal_object_set_argument_81'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_PBMParameter(Tlv) -> + dec_PBMParameter(Tlv, [16]). + +dec_PBMParameter(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute salt(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute owf(2) with type SEQUENCE +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_PBMParameter_owf'(V2, [16]), + +%%------------------------------------------------- +%% attribute iterationCount(3) with type INTEGER +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_integer(V3, [2]), + +%%------------------------------------------------- +%% attribute mac(4) with type SEQUENCE +%%------------------------------------------------- +[V4|Tlv5] = Tlv4, +Term4 = 'dec_PBMParameter_mac'(V4, [16]), + +case Tlv5 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed +end, +Res1 = {'PBMParameter',Term1,Term2,Term3,Term4}, +Res1. +'dec_PBMParameter_owf'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCMP-2009':'getdec_internal_object_set_argument_79'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PBMParameter_owf',Term1,Term2}, +Res1. +'dec_PBMParameter_mac'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCMP-2009':'getdec_internal_object_set_argument_81'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PBMParameter_mac',Term1,Term2}, +Res1. + + +%%================================ +%% DHBMParameter +%%================================ +enc_DHBMParameter(Val) -> + enc_DHBMParameter(Val, [<<48>>]). + +enc_DHBMParameter(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute owf(1) with type SEQUENCE +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_DHBMParameter_owf'(Cindex1, [<<48>>]), + +%%------------------------------------------------- +%% attribute mac(2) with type SEQUENCE +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_DHBMParameter_mac'(Cindex2, [<<48>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% DHBMParameter_owf +%%================================ +enc_DHBMParameter_owf(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCMP-2009':'getenc_internal_object_set_argument_83'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% DHBMParameter_mac +%%================================ +enc_DHBMParameter_mac(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCMP-2009':'getenc_internal_object_set_argument_85'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_DHBMParameter(Tlv) -> + dec_DHBMParameter(Tlv, [16]). + +dec_DHBMParameter(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute owf(1) with type SEQUENCE +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_DHBMParameter_owf'(V1, [16]), + +%%------------------------------------------------- +%% attribute mac(2) with type SEQUENCE +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_DHBMParameter_mac'(V2, [16]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'DHBMParameter',Term1,Term2}, +Res1. +'dec_DHBMParameter_owf'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCMP-2009':'getdec_internal_object_set_argument_83'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'DHBMParameter_owf',Term1,Term2}, +Res1. +'dec_DHBMParameter_mac'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCMP-2009':'getdec_internal_object_set_argument_85'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'DHBMParameter_mac',Term1,Term2}, +Res1. + + +%%================================ +%% PKIStatus +%%================================ +enc_PKIStatus(Val) -> + enc_PKIStatus(Val, [<<2>>]). + +enc_PKIStatus(Val, TagIn) -> +encode_integer(Val, [{accepted,0},{grantedWithMods,1},{rejection,2},{waiting,3},{revocationWarning,4},{revocationNotification,5},{keyUpdateWarning,6}], TagIn). + + +dec_PKIStatus(Tlv) -> + dec_PKIStatus(Tlv, [2]). + +dec_PKIStatus(Tlv, TagIn) -> +begin +Val1 = decode_integer(Tlv, TagIn), +number2name(Val1, [{accepted,0},{grantedWithMods,1},{rejection,2},{waiting,3},{revocationWarning,4},{revocationNotification,5},{keyUpdateWarning,6}]) +end +. + + + +%%================================ +%% PKIFailureInfo +%%================================ +enc_PKIFailureInfo(Val) -> + enc_PKIFailureInfo(Val, [<<3>>]). + +enc_PKIFailureInfo(Val, TagIn) -> +encode_named_bit_string(Val, [{badAlg,0},{badMessageCheck,1},{badRequest,2},{badTime,3},{badCertId,4},{badDataFormat,5},{wrongAuthority,6},{incorrectData,7},{missingTimeStamp,8},{badPOP,9},{certRevoked,10},{certConfirmed,11},{wrongIntegrity,12},{badRecipientNonce,13},{timeNotAvailable,14},{unacceptedPolicy,15},{unacceptedExtension,16},{addInfoNotAvailable,17},{badSenderNonce,18},{badCertTemplate,19},{signerNotTrusted,20},{transactionIdInUse,21},{unsupportedVersion,22},{notAuthorized,23},{systemUnavail,24},{systemFailure,25},{duplicateCertReq,26}], TagIn). + + +dec_PKIFailureInfo(Tlv) -> + dec_PKIFailureInfo(Tlv, [3]). + +dec_PKIFailureInfo(Tlv, TagIn) -> +decode_named_bit_string(Tlv, [{badAlg,0},{badMessageCheck,1},{badRequest,2},{badTime,3},{badCertId,4},{badDataFormat,5},{wrongAuthority,6},{incorrectData,7},{missingTimeStamp,8},{badPOP,9},{certRevoked,10},{certConfirmed,11},{wrongIntegrity,12},{badRecipientNonce,13},{timeNotAvailable,14},{unacceptedPolicy,15},{unacceptedExtension,16},{addInfoNotAvailable,17},{badSenderNonce,18},{badCertTemplate,19},{signerNotTrusted,20},{transactionIdInUse,21},{unsupportedVersion,22},{notAuthorized,23},{systemUnavail,24},{systemFailure,25},{duplicateCertReq,26}], TagIn). + + + +%%================================ +%% PKIStatusInfo +%%================================ +enc_PKIStatusInfo(Val) -> + enc_PKIStatusInfo(Val, [<<48>>]). + +enc_PKIStatusInfo(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute status(1) with type INTEGER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_integer(Cindex1, [{accepted,0},{grantedWithMods,1},{rejection,2},{waiting,3},{revocationWarning,4},{revocationNotification,5},{keyUpdateWarning,6}], [<<2>>]), + +%%------------------------------------------------- +%% attribute statusString(2) External PKIXCMP-2009:PKIFreeText OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_PKIFreeText'(Cindex2, [<<48>>]) + end, + +%%------------------------------------------------- +%% attribute failInfo(3) with type BIT STRING OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_named_bit_string(Cindex3, [{badAlg,0},{badMessageCheck,1},{badRequest,2},{badTime,3},{badCertId,4},{badDataFormat,5},{wrongAuthority,6},{incorrectData,7},{missingTimeStamp,8},{badPOP,9},{certRevoked,10},{certConfirmed,11},{wrongIntegrity,12},{badRecipientNonce,13},{timeNotAvailable,14},{unacceptedPolicy,15},{unacceptedExtension,16},{addInfoNotAvailable,17},{badSenderNonce,18},{badCertTemplate,19},{signerNotTrusted,20},{transactionIdInUse,21},{unsupportedVersion,22},{notAuthorized,23},{systemUnavail,24},{systemFailure,25},{duplicateCertReq,26}], [<<3>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_PKIStatusInfo(Tlv) -> + dec_PKIStatusInfo(Tlv, [16]). + +dec_PKIStatusInfo(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute status(1) with type INTEGER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = begin +Val1 = decode_integer(V1, [2]), +number2name(Val1, [{accepted,0},{grantedWithMods,1},{rejection,2},{waiting,3},{revocationWarning,4},{revocationNotification,5},{keyUpdateWarning,6}]) +end +, + +%%------------------------------------------------- +%% attribute statusString(2) External PKIXCMP-2009:PKIFreeText OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{16,V2}|TempTlv3] -> + {'dec_PKIFreeText'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +%%------------------------------------------------- +%% attribute failInfo(3) with type BIT STRING OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{3,V3}|TempTlv4] -> + {decode_named_bit_string(V3, [{badAlg,0},{badMessageCheck,1},{badRequest,2},{badTime,3},{badCertId,4},{badDataFormat,5},{wrongAuthority,6},{incorrectData,7},{missingTimeStamp,8},{badPOP,9},{certRevoked,10},{certConfirmed,11},{wrongIntegrity,12},{badRecipientNonce,13},{timeNotAvailable,14},{unacceptedPolicy,15},{unacceptedExtension,16},{addInfoNotAvailable,17},{badSenderNonce,18},{badCertTemplate,19},{signerNotTrusted,20},{transactionIdInUse,21},{unsupportedVersion,22},{notAuthorized,23},{systemUnavail,24},{systemFailure,25},{duplicateCertReq,26}], []), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'PKIStatusInfo',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% OOBCert +%%================================ +enc_OOBCert(Val) -> + enc_OOBCert(Val, []). + +enc_OOBCert(Val, TagIn) -> + enc_CMPCertificate(Val, TagIn). + + +dec_OOBCert(Tlv) -> + dec_OOBCert(Tlv, []). + +dec_OOBCert(Tlv, TagIn) -> +'dec_CMPCertificate'(Tlv, TagIn). + + + +%%================================ +%% OOBCertHash +%%================================ +enc_OOBCertHash(Val) -> + enc_OOBCertHash(Val, [<<48>>]). + +enc_OOBCertHash(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute hashAlg(1) with type SEQUENCE OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_OOBCertHash_hashAlg'(Cindex1, [<<48>>,<<160>>]) + end, + +%%------------------------------------------------- +%% attribute certId(2) External PKIXCRMF-2009:CertId OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'PKIXCRMF-2009':'enc_CertId'(Cindex2, [<<48>>,<<161>>]) + end, + +%%------------------------------------------------- +%% attribute hashVal(3) with type BIT STRING +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_unnamed_bit_string(Cindex3, [<<3>>]), + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% OOBCertHash_hashAlg +%%================================ +enc_OOBCertHash_hashAlg(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCMP-2009':'getenc_internal_object_set_argument_87'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_OOBCertHash(Tlv) -> + dec_OOBCertHash(Tlv, [16]). + +dec_OOBCertHash(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute hashAlg(1) with type SEQUENCE OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {'dec_OOBCertHash_hashAlg'(V1, [16]), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute certId(2) External PKIXCRMF-2009:CertId OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131073,V2}|TempTlv3] -> + {'PKIXCRMF-2009':'dec_CertId'(V2, [16]), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +%%------------------------------------------------- +%% attribute hashVal(3) with type BIT STRING +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_native_bit_string(V3, [3]), + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'OOBCertHash',Term1,Term2,Term3}, +Res1. +'dec_OOBCertHash_hashAlg'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCMP-2009':'getdec_internal_object_set_argument_87'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'OOBCertHash_hashAlg',Term1,Term2}, +Res1. + + +%%================================ +%% POPODecKeyChallContent +%%================================ +enc_POPODecKeyChallContent(Val) -> + enc_POPODecKeyChallContent(Val, [<<48>>]). + +enc_POPODecKeyChallContent(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_POPODecKeyChallContent_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_POPODecKeyChallContent_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_POPODecKeyChallContent_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_Challenge'(H, [<<48>>]), + 'enc_POPODecKeyChallContent_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_POPODecKeyChallContent(Tlv) -> + dec_POPODecKeyChallContent(Tlv, [16]). + +dec_POPODecKeyChallContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_Challenge'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% Challenge +%%================================ +enc_Challenge(Val) -> + enc_Challenge(Val, [<<48>>]). + +enc_Challenge(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute owf(1) with type SEQUENCE OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_Challenge_owf'(Cindex1, [<<48>>]) + end, + +%%------------------------------------------------- +%% attribute witness(2) with type OCTET STRING +%%------------------------------------------------- + {EncBytes2,EncLen2} = encode_restricted_string(Cindex2, [<<4>>]), + +%%------------------------------------------------- +%% attribute challenge(3) with type OCTET STRING +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_restricted_string(Cindex3, [<<4>>]), + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% Challenge_owf +%%================================ +enc_Challenge_owf(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCMP-2009':'getenc_internal_object_set_argument_73'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_Challenge(Tlv) -> + dec_Challenge(Tlv, [16]). + +dec_Challenge(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute owf(1) with type SEQUENCE OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{16,V1}|TempTlv2] -> + {'dec_Challenge_owf'(V1, []), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute witness(2) with type OCTET STRING +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = decode_octet_string(V2, [4]), + +%%------------------------------------------------- +%% attribute challenge(3) with type OCTET STRING +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_octet_string(V3, [4]), + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'Challenge',Term1,Term2,Term3}, +Res1. +'dec_Challenge_owf'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCMP-2009':'getdec_internal_object_set_argument_73'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'Challenge_owf',Term1,Term2}, +Res1. + + +%%================================ +%% POPODecKeyRespContent +%%================================ +enc_POPODecKeyRespContent(Val) -> + enc_POPODecKeyRespContent(Val, [<<48>>]). + +enc_POPODecKeyRespContent(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_POPODecKeyRespContent_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_POPODecKeyRespContent_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_POPODecKeyRespContent_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = encode_integer(H, [<<2>>]), + 'enc_POPODecKeyRespContent_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_POPODecKeyRespContent(Tlv) -> + dec_POPODecKeyRespContent(Tlv, [16]). + +dec_POPODecKeyRespContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +[decode_integer(V1, [2]) || V1 <- Tlv1]. + + + + +%%================================ +%% CertRepMessage +%%================================ +enc_CertRepMessage(Val) -> + enc_CertRepMessage(Val, [<<48>>]). + +enc_CertRepMessage(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute caPubs(1) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_CertRepMessage_caPubs'(Cindex1, [<<48>>,<<161>>]) + end, + +%%------------------------------------------------- +%% attribute response(2) with type SEQUENCE OF +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_CertRepMessage_response'(Cindex2, [<<48>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% CertRepMessage_caPubs +%%================================ +enc_CertRepMessage_caPubs(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_CertRepMessage_caPubs_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_CertRepMessage_caPubs_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_CertRepMessage_caPubs_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_CMPCertificate'(H, []), + 'enc_CertRepMessage_caPubs_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% CertRepMessage_response +%%================================ +enc_CertRepMessage_response(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_CertRepMessage_response_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_CertRepMessage_response_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_CertRepMessage_response_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_CertResponse'(H, [<<48>>]), + 'enc_CertRepMessage_response_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_CertRepMessage(Tlv) -> + dec_CertRepMessage(Tlv, [16]). + +dec_CertRepMessage(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute caPubs(1) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131073,V1}|TempTlv2] -> + {'dec_CertRepMessage_caPubs'(V1, [16]), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute response(2) with type SEQUENCE OF +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_CertRepMessage_response'(V2, [16]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'CertRepMessage',Term1,Term2}, +Res1. +'dec_CertRepMessage_caPubs'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_CMPCertificate'(V1, []) || V1 <- Tlv1]. + + +'dec_CertRepMessage_response'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_CertResponse'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% CertResponse +%%================================ +enc_CertResponse(Val) -> + enc_CertResponse(Val, [<<48>>]). + +enc_CertResponse(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4} = Val, + +%%------------------------------------------------- +%% attribute certReqId(1) with type INTEGER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_integer(Cindex1, [<<2>>]), + +%%------------------------------------------------- +%% attribute status(2) External PKIXCMP-2009:PKIStatusInfo +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_PKIStatusInfo'(Cindex2, [<<48>>]), + +%%------------------------------------------------- +%% attribute certifiedKeyPair(3) External PKIXCMP-2009:CertifiedKeyPair OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_CertifiedKeyPair'(Cindex3, [<<48>>]) + end, + +%%------------------------------------------------- +%% attribute rspInfo(4) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes4,EncLen4} = case Cindex4 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex4, [<<4>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_CertResponse(Tlv) -> + dec_CertResponse(Tlv, [16]). + +dec_CertResponse(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute certReqId(1) with type INTEGER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_integer(V1, [2]), + +%%------------------------------------------------- +%% attribute status(2) External PKIXCMP-2009:PKIStatusInfo +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_PKIStatusInfo'(V2, [16]), + +%%------------------------------------------------- +%% attribute certifiedKeyPair(3) External PKIXCMP-2009:CertifiedKeyPair OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{16,V3}|TempTlv4] -> + {'dec_CertifiedKeyPair'(V3, []), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +%%------------------------------------------------- +%% attribute rspInfo(4) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[{4,V4}|TempTlv5] -> + {decode_octet_string(V4, []), TempTlv5}; + _ -> + { asn1_NOVALUE, Tlv4} +end, + +case Tlv5 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed +end, +Res1 = {'CertResponse',Term1,Term2,Term3,Term4}, +Res1. + + +%%================================ +%% CertifiedKeyPair +%%================================ +enc_CertifiedKeyPair(Val) -> + enc_CertifiedKeyPair(Val, [<<48>>]). + +enc_CertifiedKeyPair(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute certOrEncCert(1) External PKIXCMP-2009:CertOrEncCert +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_CertOrEncCert'(Cindex1, []), + +%%------------------------------------------------- +%% attribute privateKey(2) External PKIXCRMF-2009:EncryptedValue OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'PKIXCRMF-2009':'enc_EncryptedValue'(Cindex2, [<<48>>,<<160>>]) + end, + +%%------------------------------------------------- +%% attribute publicationInfo(3) External PKIXCRMF-2009:PKIPublicationInfo OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'PKIXCRMF-2009':'enc_PKIPublicationInfo'(Cindex3, [<<48>>,<<161>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_CertifiedKeyPair(Tlv) -> + dec_CertifiedKeyPair(Tlv, [16]). + +dec_CertifiedKeyPair(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute certOrEncCert(1) External PKIXCMP-2009:CertOrEncCert +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_CertOrEncCert'(V1, []), + +%%------------------------------------------------- +%% attribute privateKey(2) External PKIXCRMF-2009:EncryptedValue OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131072,V2}|TempTlv3] -> + {'PKIXCRMF-2009':'dec_EncryptedValue'(V2, [16]), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +%%------------------------------------------------- +%% attribute publicationInfo(3) External PKIXCRMF-2009:PKIPublicationInfo OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{131073,V3}|TempTlv4] -> + {'PKIXCRMF-2009':'dec_PKIPublicationInfo'(V3, [16]), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'CertifiedKeyPair',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% CertOrEncCert +%%================================ +enc_CertOrEncCert(Val) -> + enc_CertOrEncCert(Val, []). + +enc_CertOrEncCert(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + certificate -> + 'enc_CMPCertificate'(element(2,Val), [<<160>>]); + encryptedCert -> + 'PKIXCRMF-2009':'enc_EncryptedValue'(element(2,Val), [<<48>>,<<161>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_CertOrEncCert(Tlv) -> + dec_CertOrEncCert(Tlv, []). + +dec_CertOrEncCert(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'certificate' + {131072, V1} -> + {certificate, 'dec_CMPCertificate'(V1, [])}; + + +%% 'encryptedCert' + {131073, V1} -> + {encryptedCert, 'PKIXCRMF-2009':'dec_EncryptedValue'(V1, [16])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% KeyRecRepContent +%%================================ +enc_KeyRecRepContent(Val) -> + enc_KeyRecRepContent(Val, [<<48>>]). + +enc_KeyRecRepContent(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4} = Val, + +%%------------------------------------------------- +%% attribute status(1) External PKIXCMP-2009:PKIStatusInfo +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_PKIStatusInfo'(Cindex1, [<<48>>]), + +%%------------------------------------------------- +%% attribute newSigCert(2) External PKIXCMP-2009:CMPCertificate OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_CMPCertificate'(Cindex2, [<<160>>]) + end, + +%%------------------------------------------------- +%% attribute caCerts(3) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_KeyRecRepContent_caCerts'(Cindex3, [<<48>>,<<161>>]) + end, + +%%------------------------------------------------- +%% attribute keyPairHist(4) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- + {EncBytes4,EncLen4} = case Cindex4 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_KeyRecRepContent_keyPairHist'(Cindex4, [<<48>>,<<162>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% KeyRecRepContent_caCerts +%%================================ +enc_KeyRecRepContent_caCerts(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_KeyRecRepContent_caCerts_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_KeyRecRepContent_caCerts_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_KeyRecRepContent_caCerts_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_CMPCertificate'(H, []), + 'enc_KeyRecRepContent_caCerts_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% KeyRecRepContent_keyPairHist +%%================================ +enc_KeyRecRepContent_keyPairHist(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_KeyRecRepContent_keyPairHist_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_KeyRecRepContent_keyPairHist_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_KeyRecRepContent_keyPairHist_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_CertifiedKeyPair'(H, [<<48>>]), + 'enc_KeyRecRepContent_keyPairHist_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_KeyRecRepContent(Tlv) -> + dec_KeyRecRepContent(Tlv, [16]). + +dec_KeyRecRepContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute status(1) External PKIXCMP-2009:PKIStatusInfo +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_PKIStatusInfo'(V1, [16]), + +%%------------------------------------------------- +%% attribute newSigCert(2) External PKIXCMP-2009:CMPCertificate OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131072,V2}|TempTlv3] -> + {'dec_CMPCertificate'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +%%------------------------------------------------- +%% attribute caCerts(3) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{131073,V3}|TempTlv4] -> + {'dec_KeyRecRepContent_caCerts'(V3, [16]), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +%%------------------------------------------------- +%% attribute keyPairHist(4) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[{131074,V4}|TempTlv5] -> + {'dec_KeyRecRepContent_keyPairHist'(V4, [16]), TempTlv5}; + _ -> + { asn1_NOVALUE, Tlv4} +end, + +case Tlv5 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed +end, +Res1 = {'KeyRecRepContent',Term1,Term2,Term3,Term4}, +Res1. +'dec_KeyRecRepContent_caCerts'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_CMPCertificate'(V1, []) || V1 <- Tlv1]. + + +'dec_KeyRecRepContent_keyPairHist'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_CertifiedKeyPair'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% RevReqContent +%%================================ +enc_RevReqContent(Val) -> + enc_RevReqContent(Val, [<<48>>]). + +enc_RevReqContent(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_RevReqContent_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_RevReqContent_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_RevReqContent_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_RevDetails'(H, [<<48>>]), + 'enc_RevReqContent_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_RevReqContent(Tlv) -> + dec_RevReqContent(Tlv, [16]). + +dec_RevReqContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_RevDetails'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% RevDetails +%%================================ +enc_RevDetails(Val) -> + enc_RevDetails(Val, [<<48>>]). + +enc_RevDetails(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute certDetails(1) External PKIXCRMF-2009:CertTemplate +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'PKIXCRMF-2009':'enc_CertTemplate'(Cindex1, [<<48>>]), + +%%------------------------------------------------- +%% attribute crlEntryDetails(2) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_RevDetails_crlEntryDetails'(Cindex2, [<<48>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% RevDetails_crlEntryDetails +%%================================ +enc_RevDetails_crlEntryDetails(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_RevDetails_crlEntryDetails_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_RevDetails_crlEntryDetails_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_RevDetails_crlEntryDetails_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_RevDetails_crlEntryDetails_Extension'(H, [<<48>>]), + 'enc_RevDetails_crlEntryDetails_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% RevDetails_crlEntryDetails_Extension +%%================================ +enc_RevDetails_crlEntryDetails_Extension(Val, TagIn) -> + {_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute extnID(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute critical(2) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_DEFAULT -> + {<<>>,0}; + _ when Cindex2 =:= false -> + {<<>>,0}; + _ -> + encode_boolean(Cindex2, [<<1>>]) + end, + +%%------------------------------------------------- +%% attribute extnValue(3) with type OCTET STRING +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_restricted_string(Cindex3, [<<4>>]), + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_RevDetails(Tlv) -> + dec_RevDetails(Tlv, [16]). + +dec_RevDetails(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute certDetails(1) External PKIXCRMF-2009:CertTemplate +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'PKIXCRMF-2009':'dec_CertTemplate'(V1, [16]), + +%%------------------------------------------------- +%% attribute crlEntryDetails(2) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{16,V2}|TempTlv3] -> + {'dec_RevDetails_crlEntryDetails'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'RevDetails',Term1,Term2}, +Res1. +'dec_RevDetails_crlEntryDetails'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_RevDetails_crlEntryDetails_Extension'(V1, [16]) || V1 <- Tlv1]. + + +'dec_RevDetails_crlEntryDetails_Extension'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute extnID(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute critical(2) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{1,V2}|TempTlv3] -> + {decode_boolean(V2, []), TempTlv3}; + _ -> + {false,Tlv2} +end, + +%%------------------------------------------------- +%% attribute extnValue(3) with type OCTET STRING +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_octet_string(V3, [4]), + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'Extension',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% RevRepContent +%%================================ +enc_RevRepContent(Val) -> + enc_RevRepContent(Val, [<<48>>]). + +enc_RevRepContent(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute status(1) with type SEQUENCE OF +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_RevRepContent_status'(Cindex1, [<<48>>]), + +%%------------------------------------------------- +%% attribute revCerts(2) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_RevRepContent_revCerts'(Cindex2, [<<48>>,<<160>>]) + end, + +%%------------------------------------------------- +%% attribute crls(3) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_RevRepContent_crls'(Cindex3, [<<48>>,<<161>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% RevRepContent_status +%%================================ +enc_RevRepContent_status(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_RevRepContent_status_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_RevRepContent_status_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_RevRepContent_status_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_PKIStatusInfo'(H, [<<48>>]), + 'enc_RevRepContent_status_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% RevRepContent_revCerts +%%================================ +enc_RevRepContent_revCerts(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_RevRepContent_revCerts_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_RevRepContent_revCerts_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_RevRepContent_revCerts_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'PKIXCRMF-2009':'enc_CertId'(H, [<<48>>]), + 'enc_RevRepContent_revCerts_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% RevRepContent_crls +%%================================ +enc_RevRepContent_crls(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_RevRepContent_crls_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_RevRepContent_crls_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_RevRepContent_crls_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'PKIX1Explicit-2009':'enc_CertificateList'(H, [<<48>>]), + 'enc_RevRepContent_crls_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_RevRepContent(Tlv) -> + dec_RevRepContent(Tlv, [16]). + +dec_RevRepContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute status(1) with type SEQUENCE OF +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_RevRepContent_status'(V1, [16]), + +%%------------------------------------------------- +%% attribute revCerts(2) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131072,V2}|TempTlv3] -> + {'dec_RevRepContent_revCerts'(V2, [16]), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +%%------------------------------------------------- +%% attribute crls(3) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{131073,V3}|TempTlv4] -> + {'dec_RevRepContent_crls'(V3, [16]), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'RevRepContent',Term1,Term2,Term3}, +Res1. +'dec_RevRepContent_status'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_PKIStatusInfo'(V1, [16]) || V1 <- Tlv1]. + + +'dec_RevRepContent_revCerts'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['PKIXCRMF-2009':'dec_CertId'(V1, [16]) || V1 <- Tlv1]. + + +'dec_RevRepContent_crls'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['PKIX1Explicit-2009':'dec_CertificateList'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% CAKeyUpdAnnContent +%%================================ +enc_CAKeyUpdAnnContent(Val) -> + enc_CAKeyUpdAnnContent(Val, [<<48>>]). + +enc_CAKeyUpdAnnContent(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute oldWithNew(1) External PKIXCMP-2009:CMPCertificate +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_CMPCertificate'(Cindex1, []), + +%%------------------------------------------------- +%% attribute newWithOld(2) External PKIXCMP-2009:CMPCertificate +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_CMPCertificate'(Cindex2, []), + +%%------------------------------------------------- +%% attribute newWithNew(3) External PKIXCMP-2009:CMPCertificate +%%------------------------------------------------- + {EncBytes3,EncLen3} = 'enc_CMPCertificate'(Cindex3, []), + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_CAKeyUpdAnnContent(Tlv) -> + dec_CAKeyUpdAnnContent(Tlv, [16]). + +dec_CAKeyUpdAnnContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute oldWithNew(1) External PKIXCMP-2009:CMPCertificate +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_CMPCertificate'(V1, []), + +%%------------------------------------------------- +%% attribute newWithOld(2) External PKIXCMP-2009:CMPCertificate +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_CMPCertificate'(V2, []), + +%%------------------------------------------------- +%% attribute newWithNew(3) External PKIXCMP-2009:CMPCertificate +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = 'dec_CMPCertificate'(V3, []), + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'CAKeyUpdAnnContent',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% CertAnnContent +%%================================ +enc_CertAnnContent(Val) -> + enc_CertAnnContent(Val, []). + +enc_CertAnnContent(Val, TagIn) -> + enc_CMPCertificate(Val, TagIn). + + +dec_CertAnnContent(Tlv) -> + dec_CertAnnContent(Tlv, []). + +dec_CertAnnContent(Tlv, TagIn) -> +'dec_CMPCertificate'(Tlv, TagIn). + + + +%%================================ +%% RevAnnContent +%%================================ +enc_RevAnnContent(Val) -> + enc_RevAnnContent(Val, [<<48>>]). + +enc_RevAnnContent(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4,Cindex5} = Val, + +%%------------------------------------------------- +%% attribute status(1) with type INTEGER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_integer(Cindex1, [{accepted,0},{grantedWithMods,1},{rejection,2},{waiting,3},{revocationWarning,4},{revocationNotification,5},{keyUpdateWarning,6}], [<<2>>]), + +%%------------------------------------------------- +%% attribute certId(2) External PKIXCRMF-2009:CertId +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'PKIXCRMF-2009':'enc_CertId'(Cindex2, [<<48>>]), + +%%------------------------------------------------- +%% attribute willBeRevokedAt(3) with type GeneralizedTime +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_restricted_string(Cindex3, [<<24>>]), + +%%------------------------------------------------- +%% attribute badSinceDate(4) with type GeneralizedTime +%%------------------------------------------------- + {EncBytes4,EncLen4} = encode_restricted_string(Cindex4, [<<24>>]), + +%%------------------------------------------------- +%% attribute crlDetails(5) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- + {EncBytes5,EncLen5} = case Cindex5 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_RevAnnContent_crlDetails'(Cindex5, [<<48>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4, EncBytes5], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4 + EncLen5, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% RevAnnContent_crlDetails +%%================================ +enc_RevAnnContent_crlDetails(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_RevAnnContent_crlDetails_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_RevAnnContent_crlDetails_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_RevAnnContent_crlDetails_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_RevAnnContent_crlDetails_Extension'(H, [<<48>>]), + 'enc_RevAnnContent_crlDetails_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% RevAnnContent_crlDetails_Extension +%%================================ +enc_RevAnnContent_crlDetails_Extension(Val, TagIn) -> + {_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute extnID(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute critical(2) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_DEFAULT -> + {<<>>,0}; + _ when Cindex2 =:= false -> + {<<>>,0}; + _ -> + encode_boolean(Cindex2, [<<1>>]) + end, + +%%------------------------------------------------- +%% attribute extnValue(3) with type OCTET STRING +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_restricted_string(Cindex3, [<<4>>]), + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_RevAnnContent(Tlv) -> + dec_RevAnnContent(Tlv, [16]). + +dec_RevAnnContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute status(1) with type INTEGER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = begin +Val1 = decode_integer(V1, [2]), +number2name(Val1, [{accepted,0},{grantedWithMods,1},{rejection,2},{waiting,3},{revocationWarning,4},{revocationNotification,5},{keyUpdateWarning,6}]) +end +, + +%%------------------------------------------------- +%% attribute certId(2) External PKIXCRMF-2009:CertId +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'PKIXCRMF-2009':'dec_CertId'(V2, [16]), + +%%------------------------------------------------- +%% attribute willBeRevokedAt(3) with type GeneralizedTime +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = begin +binary_to_list(decode_restricted_string(V3, [24])) +end +, + +%%------------------------------------------------- +%% attribute badSinceDate(4) with type GeneralizedTime +%%------------------------------------------------- +[V4|Tlv5] = Tlv4, +Term4 = begin +binary_to_list(decode_restricted_string(V4, [24])) +end +, + +%%------------------------------------------------- +%% attribute crlDetails(5) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- +{Term5,Tlv6} = case Tlv5 of +[{16,V5}|TempTlv6] -> + {'dec_RevAnnContent_crlDetails'(V5, []), TempTlv6}; + _ -> + { asn1_NOVALUE, Tlv5} +end, + +case Tlv6 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv6}}}) % extra fields not allowed +end, +Res1 = {'RevAnnContent',Term1,Term2,Term3,Term4,Term5}, +Res1. +'dec_RevAnnContent_crlDetails'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_RevAnnContent_crlDetails_Extension'(V1, [16]) || V1 <- Tlv1]. + + +'dec_RevAnnContent_crlDetails_Extension'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute extnID(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute critical(2) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{1,V2}|TempTlv3] -> + {decode_boolean(V2, []), TempTlv3}; + _ -> + {false,Tlv2} +end, + +%%------------------------------------------------- +%% attribute extnValue(3) with type OCTET STRING +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_octet_string(V3, [4]), + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'Extension',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% CRLAnnContent +%%================================ +enc_CRLAnnContent(Val) -> + enc_CRLAnnContent(Val, [<<48>>]). + +enc_CRLAnnContent(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_CRLAnnContent_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_CRLAnnContent_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_CRLAnnContent_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'PKIX1Explicit-2009':'enc_CertificateList'(H, [<<48>>]), + 'enc_CRLAnnContent_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_CRLAnnContent(Tlv) -> + dec_CRLAnnContent(Tlv, [16]). + +dec_CRLAnnContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['PKIX1Explicit-2009':'dec_CertificateList'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% PKIConfirmContent +%%================================ +enc_PKIConfirmContent(Val) -> + enc_PKIConfirmContent(Val, [<<5>>]). + +enc_PKIConfirmContent(Val, TagIn) -> +encode_null(Val, TagIn). + + +dec_PKIConfirmContent(Tlv) -> + dec_PKIConfirmContent(Tlv, [5]). + +dec_PKIConfirmContent(Tlv, TagIn) -> +decode_null(Tlv, TagIn). + + + +%%================================ +%% NestedMessageContent +%%================================ +enc_NestedMessageContent(Val) -> + enc_NestedMessageContent(Val, [<<48>>]). + +enc_NestedMessageContent(Val, TagIn) -> + enc_PKIMessages(Val, TagIn). + + +dec_NestedMessageContent(Tlv) -> + dec_NestedMessageContent(Tlv, [16]). + +dec_NestedMessageContent(Tlv, TagIn) -> +'dec_PKIMessages'(Tlv, TagIn). + + + +%%================================ +%% InfoTypeAndValue +%%================================ +enc_InfoTypeAndValue(Val) -> + enc_InfoTypeAndValue(Val, [<<48>>]). + +enc_InfoTypeAndValue(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, +ObjinfoType = + 'PKIXCMP-2009':'getenc_SupportedInfoSet'( Cindex1), + +%%------------------------------------------------- +%% attribute infoType(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute infoValue(2) with type typefieldType +%%------------------------------------------------- + {TmpBytes2,_} = ObjinfoType('Type', Cindex2, []), + {EncBytes2,EncLen2} = encode_open_type(TmpBytes2, []) +, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_InfoTypeAndValue(Tlv) -> + dec_InfoTypeAndValue(Tlv, [16]). + +dec_InfoTypeAndValue(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute infoType(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute infoValue(2) with type typefieldType +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, + + Tmpterm1 = decode_open_type(V2, []), + +DecObjinfoTypeTerm1 = + 'PKIXCMP-2009':'getdec_SupportedInfoSet'(Term1), +Term2 = + case (catch DecObjinfoTypeTerm1('Type', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'InfoTypeAndValue',Term1,Term2}, +Res1. + + +%%================================ +%% GenMsgContent +%%================================ +enc_GenMsgContent(Val) -> + enc_GenMsgContent(Val, [<<48>>]). + +enc_GenMsgContent(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_GenMsgContent_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_GenMsgContent_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_GenMsgContent_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_InfoTypeAndValue'(H, [<<48>>]), + 'enc_GenMsgContent_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_GenMsgContent(Tlv) -> + dec_GenMsgContent(Tlv, [16]). + +dec_GenMsgContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_InfoTypeAndValue'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% GenRepContent +%%================================ +enc_GenRepContent(Val) -> + enc_GenRepContent(Val, [<<48>>]). + +enc_GenRepContent(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_GenRepContent_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_GenRepContent_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_GenRepContent_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_InfoTypeAndValue'(H, [<<48>>]), + 'enc_GenRepContent_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_GenRepContent(Tlv) -> + dec_GenRepContent(Tlv, [16]). + +dec_GenRepContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_InfoTypeAndValue'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% ErrorMsgContent +%%================================ +enc_ErrorMsgContent(Val) -> + enc_ErrorMsgContent(Val, [<<48>>]). + +enc_ErrorMsgContent(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute pKIStatusInfo(1) External PKIXCMP-2009:PKIStatusInfo +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_PKIStatusInfo'(Cindex1, [<<48>>]), + +%%------------------------------------------------- +%% attribute errorCode(2) with type INTEGER OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_integer(Cindex2, [<<2>>]) + end, + +%%------------------------------------------------- +%% attribute errorDetails(3) External PKIXCMP-2009:PKIFreeText OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_PKIFreeText'(Cindex3, [<<48>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_ErrorMsgContent(Tlv) -> + dec_ErrorMsgContent(Tlv, [16]). + +dec_ErrorMsgContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute pKIStatusInfo(1) External PKIXCMP-2009:PKIStatusInfo +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_PKIStatusInfo'(V1, [16]), + +%%------------------------------------------------- +%% attribute errorCode(2) with type INTEGER OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{2,V2}|TempTlv3] -> + {decode_integer(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +%%------------------------------------------------- +%% attribute errorDetails(3) External PKIXCMP-2009:PKIFreeText OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{16,V3}|TempTlv4] -> + {'dec_PKIFreeText'(V3, []), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'ErrorMsgContent',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% CertConfirmContent +%%================================ +enc_CertConfirmContent(Val) -> + enc_CertConfirmContent(Val, [<<48>>]). + +enc_CertConfirmContent(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_CertConfirmContent_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_CertConfirmContent_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_CertConfirmContent_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_CertStatus'(H, [<<48>>]), + 'enc_CertConfirmContent_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_CertConfirmContent(Tlv) -> + dec_CertConfirmContent(Tlv, [16]). + +dec_CertConfirmContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_CertStatus'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% CertStatus +%%================================ +enc_CertStatus(Val) -> + enc_CertStatus(Val, [<<48>>]). + +enc_CertStatus(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute certHash(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute certReqId(2) with type INTEGER +%%------------------------------------------------- + {EncBytes2,EncLen2} = encode_integer(Cindex2, [<<2>>]), + +%%------------------------------------------------- +%% attribute statusInfo(3) External PKIXCMP-2009:PKIStatusInfo OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_PKIStatusInfo'(Cindex3, [<<48>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_CertStatus(Tlv) -> + dec_CertStatus(Tlv, [16]). + +dec_CertStatus(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute certHash(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute certReqId(2) with type INTEGER +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = decode_integer(V2, [2]), + +%%------------------------------------------------- +%% attribute statusInfo(3) External PKIXCMP-2009:PKIStatusInfo OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{16,V3}|TempTlv4] -> + {'dec_PKIStatusInfo'(V3, []), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'CertStatus',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% PollReqContent +%%================================ +enc_PollReqContent(Val) -> + enc_PollReqContent(Val, [<<48>>]). + +enc_PollReqContent(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_PollReqContent_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_PollReqContent_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_PollReqContent_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_PollReqContent_SEQOF'(H, [<<48>>]), + 'enc_PollReqContent_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% PollReqContent_SEQOF +%%================================ +enc_PollReqContent_SEQOF(Val, TagIn) -> + {_,Cindex1} = Val, + +%%------------------------------------------------- +%% attribute certReqId(1) with type INTEGER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_integer(Cindex1, [<<2>>]), + + BytesSoFar = [EncBytes1], +LenSoFar = EncLen1, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_PollReqContent(Tlv) -> + dec_PollReqContent(Tlv, [16]). + +dec_PollReqContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_PollReqContent_SEQOF'(V1, [16]) || V1 <- Tlv1]. + + +'dec_PollReqContent_SEQOF'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute certReqId(1) with type INTEGER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_integer(V1, [2]), + +case Tlv2 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv2}}}) % extra fields not allowed +end, +Res1 = {'PollReqContent_SEQOF',Term1}, +Res1. + + +%%================================ +%% PollRepContent +%%================================ +enc_PollRepContent(Val) -> + enc_PollRepContent(Val, [<<48>>]). + +enc_PollRepContent(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_PollRepContent_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_PollRepContent_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_PollRepContent_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_PollRepContent_SEQOF'(H, [<<48>>]), + 'enc_PollRepContent_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% PollRepContent_SEQOF +%%================================ +enc_PollRepContent_SEQOF(Val, TagIn) -> + {_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute certReqId(1) with type INTEGER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_integer(Cindex1, [<<2>>]), + +%%------------------------------------------------- +%% attribute checkAfter(2) with type INTEGER +%%------------------------------------------------- + {EncBytes2,EncLen2} = encode_integer(Cindex2, [<<2>>]), + +%%------------------------------------------------- +%% attribute reason(3) External PKIXCMP-2009:PKIFreeText OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_PKIFreeText'(Cindex3, [<<48>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_PollRepContent(Tlv) -> + dec_PollRepContent(Tlv, [16]). + +dec_PollRepContent(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_PollRepContent_SEQOF'(V1, [16]) || V1 <- Tlv1]. + + +'dec_PollRepContent_SEQOF'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute certReqId(1) with type INTEGER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_integer(V1, [2]), + +%%------------------------------------------------- +%% attribute checkAfter(2) with type INTEGER +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = decode_integer(V2, [2]), + +%%------------------------------------------------- +%% attribute reason(3) External PKIXCMP-2009:PKIFreeText OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{16,V3}|TempTlv4] -> + {'dec_PKIFreeText'(V3, []), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'PollRepContent_SEQOF',Term1,Term2,Term3}, +Res1. +'id-PasswordBasedMac'() -> +{1,2,840,113533,7,66,13}. + +'id-DHBasedMac'() -> +{1,2,840,113533,7,66,30}. + + + + +%%================================ +%% SupportedInfoSet +%%================================ +getenc_SupportedInfoSet(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_SupportedInfoSet(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_79 +%%================================ +getenc_internal_object_set_argument_79(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_79(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_77 +%%================================ +getenc_internal_object_set_argument_77(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_77(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_76 +%%================================ +getenc_internal_object_set_argument_76(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_76(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_75 +%%================================ +getenc_internal_object_set_argument_75(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_75(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_74 +%%================================ +getenc_internal_object_set_argument_74(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_74(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_73 +%%================================ +getenc_internal_object_set_argument_73(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_73(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_87 +%%================================ +getenc_internal_object_set_argument_87(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_87(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_85 +%%================================ +getenc_internal_object_set_argument_85(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_85(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_83 +%%================================ +getenc_internal_object_set_argument_83(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_83(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_81 +%%================================ +getenc_internal_object_set_argument_81(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_81(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_10 +%%================================ +getenc_internal_object_set_argument_10(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_10(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + +%%% +%%% Run-time functions. +%%% + +'dialyzer-suppressions'(Arg) -> + ok. + +ber_decode_nif(B) -> + asn1rt_nif:decode_ber_tlv(B). + +ber_encode([Tlv]) -> + ber_encode(Tlv); +ber_encode(Tlv) when is_binary(Tlv) -> + Tlv; +ber_encode(Tlv) -> + asn1rt_nif:encode_ber_tlv(Tlv). + +collect_parts(TlvList) -> + collect_parts(TlvList, []). + +collect_parts([{_, L} | Rest], Acc) when is_list(L) -> + collect_parts(Rest, [collect_parts(L) | Acc]); +collect_parts([{3, <>} | Rest], _Acc) -> + collect_parts_bit(Rest, [Bits], Unused); +collect_parts([{_T, V} | Rest], Acc) -> + collect_parts(Rest, [V | Acc]); +collect_parts([], Acc) -> + list_to_binary(lists:reverse(Acc)). + +collect_parts_bit([{3, <>} | Rest], Acc, Uacc) -> + collect_parts_bit(Rest, [Bits | Acc], Unused + Uacc); +collect_parts_bit([], Acc, Uacc) -> + list_to_binary([Uacc | lists:reverse(Acc)]). + +dec_subidentifiers(<<>>, _Av, Al) -> + lists:reverse(Al); +dec_subidentifiers(<<1:1,H:7,T/binary>>, Av, Al) -> + dec_subidentifiers(T, Av bsl 7 + H, Al); +dec_subidentifiers(<>, Av, Al) -> + dec_subidentifiers(T, 0, [Av bsl 7 + H | Al]). + +decode_UTF8_string(Tlv, TagsIn) -> + Val = match_tags(Tlv, TagsIn), + case Val of + [_ | _] = PartList -> + collect_parts(PartList); + Bin -> + Bin + end. + +decode_bitstring2(1, Unused, + <>) -> + lists:sublist([B7, B6, B5, B4, B3, B2, B1, B0], 8 - Unused); +decode_bitstring2(Len, Unused, + <>) -> + [B7, B6, B5, B4, B3, B2, B1, B0 | + decode_bitstring2(Len - 1, Unused, Buffer)]. + +decode_bitstring_NNL(BitList, NamedNumberList) -> + decode_bitstring_NNL(BitList, NamedNumberList, 0, []). + +decode_bitstring_NNL([], _, _No, Result) -> + lists:reverse(Result); +decode_bitstring_NNL([B | BitList], + [{Name, No} | NamedNumberList], + No, Result) -> + if + B =:= 0 -> + decode_bitstring_NNL(BitList, NamedNumberList, + No + 1, + Result); + true -> + decode_bitstring_NNL(BitList, NamedNumberList, + No + 1, + [Name | Result]) + end; +decode_bitstring_NNL([1 | BitList], NamedNumberList, No, Result) -> + decode_bitstring_NNL(BitList, NamedNumberList, + No + 1, + [{bit, No} | Result]); +decode_bitstring_NNL([0 | BitList], NamedNumberList, No, Result) -> + decode_bitstring_NNL(BitList, NamedNumberList, No + 1, Result). + +decode_boolean(Tlv, TagIn) -> + Val = match_tags(Tlv, TagIn), + case Val of + <<0:8>> -> + false; + <<_:8>> -> + true; + _ -> + exit({error, {asn1, {decode_boolean, Val}}}) + end. + +decode_integer(Tlv, TagIn) -> + Bin = match_tags(Tlv, TagIn), + Len = byte_size(Bin), + <> = Bin, + Int. + +decode_named_bit_string(Buffer, NamedNumberList, Tags) -> + case match_and_collect(Buffer, Tags) of + <<0>> -> + []; + <> -> + BitString = decode_bitstring2(byte_size(Bits), Unused, Bits), + decode_bitstring_NNL(BitString, NamedNumberList) + end. + +decode_native_bit_string(Buffer, Tags) -> + case match_and_collect(Buffer, Tags) of + <<0>> -> + <<>>; + <> -> + Size = bit_size(Bits) - Unused, + <> = Bits, + Val + end. + +decode_null(Tlv, Tags) -> + Val = match_tags(Tlv, Tags), + case Val of + <<>> -> + 'NULL'; + _ -> + exit({error, {asn1, {decode_null, Val}}}) + end. + +decode_object_identifier(Tlv, Tags) -> + Val = match_tags(Tlv, Tags), + [AddedObjVal | ObjVals] = dec_subidentifiers(Val, 0, []), + {Val1, Val2} = + if + AddedObjVal < 40 -> + {0, AddedObjVal}; + AddedObjVal < 80 -> + {1, AddedObjVal - 40}; + true -> + {2, AddedObjVal - 80} + end, + list_to_tuple([Val1, Val2 | ObjVals]). + +decode_octet_string(Tlv, TagsIn) -> + Bin = match_and_collect(Tlv, TagsIn), + binary:copy(Bin). + +decode_open_type(Tlv, TagIn) -> + case match_tags(Tlv, TagIn) of + Bin when is_binary(Bin) -> + {InnerTlv, _} = ber_decode_nif(Bin), + InnerTlv; + TlvBytes -> + TlvBytes + end. + +decode_restricted_string(Tlv, TagsIn) -> + match_and_collect(Tlv, TagsIn). + +do_encode_named_bit_string([FirstVal | RestVal], NamedBitList, TagIn) -> + ToSetPos = get_all_bitposes([FirstVal | RestVal], NamedBitList, []), + Size = lists:max(ToSetPos) + 1, + BitList = make_and_set_list(Size, ToSetPos, 0), + {Len, Unused, OctetList} = encode_bitstring(BitList), + encode_tags(TagIn, [Unused | OctetList], Len + 1). + +e_object_identifier({'OBJECT IDENTIFIER', V}) -> + e_object_identifier(V); +e_object_identifier(V) when is_tuple(V) -> + e_object_identifier(tuple_to_list(V)); +e_object_identifier([E1, E2 | Tail]) -> + Head = 40 * E1 + E2, + {H, Lh} = mk_object_val(Head), + {R, Lr} = lists:mapfoldl(fun enc_obj_id_tail/2, 0, Tail), + {[H | R], Lh + Lr}. + +enc_obj_id_tail(H, Len) -> + {B, L} = mk_object_val(H), + {B, Len + L}. + +encode_UTF8_string(UTF8String, TagIn) when is_binary(UTF8String) -> + encode_tags(TagIn, UTF8String, byte_size(UTF8String)); +encode_UTF8_string(UTF8String, TagIn) -> + encode_tags(TagIn, UTF8String, length(UTF8String)). + +encode_bitstring([B8, B7, B6, B5, B4, B3, B2, B1 | Rest]) -> + Val = + B8 bsl 7 bor (B7 bsl 6) bor (B6 bsl 5) bor (B5 bsl 4) + bor + (B4 bsl 3) + bor + (B3 bsl 2) + bor + (B2 bsl 1) + bor + B1, + encode_bitstring(Rest, [Val], 1); +encode_bitstring(Val) -> + {Unused, Octet} = unused_bitlist(Val, 7, 0), + {1, Unused, [Octet]}. + +encode_bitstring([B8, B7, B6, B5, B4, B3, B2, B1 | Rest], Ack, Len) -> + Val = + B8 bsl 7 bor (B7 bsl 6) bor (B6 bsl 5) bor (B5 bsl 4) + bor + (B4 bsl 3) + bor + (B3 bsl 2) + bor + (B2 bsl 1) + bor + B1, + encode_bitstring(Rest, [Ack, Val], Len + 1); +encode_bitstring([], Ack, Len) -> + {Len, 0, Ack}; +encode_bitstring(Rest, Ack, Len) -> + {Unused, Val} = unused_bitlist(Rest, 7, 0), + {Len + 1, Unused, [Ack, Val]}. + +encode_boolean(true, TagIn) -> + encode_tags(TagIn, [255], 1); +encode_boolean(false, TagIn) -> + encode_tags(TagIn, [0], 1); +encode_boolean(X, _) -> + exit({error, {asn1, {encode_boolean, X}}}). + +encode_integer(Val) -> + Bytes = + if + Val >= 0 -> + encode_integer_pos(Val, []); + true -> + encode_integer_neg(Val, []) + end, + {Bytes, length(Bytes)}. + +encode_integer(Val, NamedNumberList, Tag) when is_atom(Val) -> + case lists:keyfind(Val, 1, NamedNumberList) of + {_, NewVal} -> + encode_tags(Tag, encode_integer(NewVal)); + _ -> + exit({error, {asn1, {encode_integer_namednumber, Val}}}) + end; +encode_integer(Val, _NamedNumberList, Tag) -> + encode_tags(Tag, encode_integer(Val)). + +encode_integer(Val, Tag) when is_integer(Val) -> + encode_tags(Tag, encode_integer(Val)); +encode_integer(Val, _Tag) -> + exit({error, {asn1, {encode_integer, Val}}}). + +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]). + +encode_integer_pos(0, [B | _Acc] = L) when B < 128 -> + L; +encode_integer_pos(N, Acc) -> + encode_integer_pos(N bsr 8, [N band 255 | Acc]). + +encode_length(L) when L =< 127 -> + {[L], 1}; +encode_length(L) -> + Oct = minimum_octets(L), + Len = length(Oct), + if + Len =< 126 -> + {[128 bor Len | Oct], Len + 1}; + true -> + exit({error, {asn1, too_long_length_oct, Len}}) + end. + +encode_named_bit_string([H | _] = Bits, NamedBitList, TagIn) + when is_atom(H) -> + do_encode_named_bit_string(Bits, NamedBitList, TagIn); +encode_named_bit_string([{bit, _} | _] = Bits, NamedBitList, TagIn) -> + do_encode_named_bit_string(Bits, NamedBitList, TagIn); +encode_named_bit_string([], _NamedBitList, TagIn) -> + encode_unnamed_bit_string(<<>>, TagIn); +encode_named_bit_string(Bits, _NamedBitList, TagIn) + when is_bitstring(Bits) -> + encode_unnamed_bit_string(Bits, TagIn). + +encode_null(_Val, TagIn) -> + encode_tags(TagIn, [], 0). + +encode_object_identifier(Val, TagIn) -> + encode_tags(TagIn, e_object_identifier(Val)). + +encode_open_type(Val, T) when is_list(Val) -> + encode_open_type(list_to_binary(Val), T); +encode_open_type(Val, Tag) -> + encode_tags(Tag, Val, byte_size(Val)). + +encode_restricted_string(OctetList, TagIn) when is_binary(OctetList) -> + encode_tags(TagIn, OctetList, byte_size(OctetList)); +encode_restricted_string(OctetList, TagIn) when is_list(OctetList) -> + encode_tags(TagIn, OctetList, length(OctetList)). + +encode_tags(TagIn, {BytesSoFar, LenSoFar}) -> + encode_tags(TagIn, BytesSoFar, LenSoFar). + +encode_tags([Tag | Trest], BytesSoFar, LenSoFar) -> + {Bytes2, L2} = encode_length(LenSoFar), + encode_tags(Trest, + [Tag, Bytes2 | BytesSoFar], + LenSoFar + byte_size(Tag) + L2); +encode_tags([], BytesSoFar, LenSoFar) -> + {BytesSoFar, LenSoFar}. + +encode_unnamed_bit_string(Bits, TagIn) -> + Unused = (8 - bit_size(Bits) band 7) band 7, + Bin = <>, + encode_tags(TagIn, Bin, byte_size(Bin)). + +get_all_bitposes([{bit, ValPos} | Rest], NamedBitList, Ack) -> + get_all_bitposes(Rest, NamedBitList, [ValPos | Ack]); +get_all_bitposes([Val | Rest], NamedBitList, Ack) when is_atom(Val) -> + case lists:keyfind(Val, 1, NamedBitList) of + {_ValName, ValPos} -> + get_all_bitposes(Rest, NamedBitList, [ValPos | Ack]); + _ -> + exit({error, {asn1, {bitstring_namedbit, Val}}}) + end; +get_all_bitposes([], _NamedBitList, Ack) -> + lists:sort(Ack). + +make_and_set_list(0, [], _) -> + []; +make_and_set_list(0, _, _) -> + exit({error, {asn1, bitstring_sizeconstraint}}); +make_and_set_list(Len, [XPos | SetPos], XPos) -> + [1 | make_and_set_list(Len - 1, SetPos, XPos + 1)]; +make_and_set_list(Len, [Pos | SetPos], XPos) -> + [0 | make_and_set_list(Len - 1, [Pos | SetPos], XPos + 1)]; +make_and_set_list(Len, [], XPos) -> + [0 | make_and_set_list(Len - 1, [], XPos + 1)]. + +match_and_collect(Tlv, TagsIn) -> + Val = match_tags(Tlv, TagsIn), + case Val of + [_ | _] = PartList -> + collect_parts(PartList); + Bin when is_binary(Bin) -> + Bin + end. + +match_tags({T, V}, [T]) -> + V; +match_tags({T, V}, [T | Tt]) -> + match_tags(V, Tt); +match_tags([{T, V}], [T | Tt]) -> + match_tags(V, Tt); +match_tags([{T, _V} | _] = Vlist, [T]) -> + Vlist; +match_tags(Tlv, []) -> + Tlv; +match_tags({Tag, _V} = Tlv, [T | _Tt]) -> + exit({error, {asn1, {wrong_tag, {{expected, T}, {got, Tag, Tlv}}}}}). + +minimum_octets(0, Acc) -> + Acc; +minimum_octets(Val, Acc) -> + minimum_octets(Val bsr 8, [Val band 255 | Acc]). + +minimum_octets(Val) -> + minimum_octets(Val, []). + +mk_object_val(0, Ack, Len) -> + {Ack, Len}; +mk_object_val(Val, Ack, Len) -> + mk_object_val(Val bsr 7, [Val band 127 bor 128 | Ack], Len + 1). + +mk_object_val(Val) when Val =< 127 -> + {[255 band Val], 1}; +mk_object_val(Val) -> + mk_object_val(Val bsr 7, [Val band 127], 1). + +number2name(Int, NamedNumberList) -> + case lists:keyfind(Int, 2, NamedNumberList) of + {NamedVal, _} -> + NamedVal; + _ -> + Int + end. + +unused_bitlist([], Trail, Ack) -> + {Trail + 1, Ack}; +unused_bitlist([Bit | Rest], Trail, Ack) -> + unused_bitlist(Rest, Trail - 1, Bit bsl Trail bor Ack). diff --git a/src/PKIXCMP-2009.hrl b/src/PKIXCMP-2009.hrl new file mode 100644 index 0000000..39b7018 --- /dev/null +++ b/src/PKIXCMP-2009.hrl @@ -0,0 +1,192 @@ +%% 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 PKIXCMP-2009. + +-ifndef(_PKIXCMP_2009_HRL_). +-define(_PKIXCMP_2009_HRL_, true). + +-record('PKIMessage', { + header, + body, + protection = asn1_NOVALUE, + extraCerts = asn1_NOVALUE +}). + +-record('PKIHeader', { + pvno, + sender, + recipient, + messageTime = asn1_NOVALUE, + protectionAlg = asn1_NOVALUE, + senderKID = asn1_NOVALUE, + recipKID = asn1_NOVALUE, + transactionID = asn1_NOVALUE, + senderNonce = asn1_NOVALUE, + recipNonce = asn1_NOVALUE, + freeText = asn1_NOVALUE, + generalInfo = asn1_NOVALUE +}). + +-record('PKIHeader_protectionAlg', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('ProtectedPart', { + header, + body +}). + +-record('PBMParameter', { + salt, + owf, + iterationCount, + mac +}). + +-record('PBMParameter_owf', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('PBMParameter_mac', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('DHBMParameter', { + owf, + mac +}). + +-record('DHBMParameter_owf', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('DHBMParameter_mac', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('PKIStatusInfo', { + status, + statusString = asn1_NOVALUE, + failInfo = asn1_NOVALUE +}). + +-record('OOBCertHash', { + hashAlg = asn1_NOVALUE, + certId = asn1_NOVALUE, + hashVal +}). + +-record('OOBCertHash_hashAlg', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('Challenge', { + owf = asn1_NOVALUE, + witness, + challenge +}). + +-record('Challenge_owf', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('CertRepMessage', { + caPubs = asn1_NOVALUE, + response +}). + +-record('CertResponse', { + certReqId, + status, + certifiedKeyPair = asn1_NOVALUE, + rspInfo = asn1_NOVALUE +}). + +-record('CertifiedKeyPair', { + certOrEncCert, + privateKey = asn1_NOVALUE, + publicationInfo = asn1_NOVALUE +}). + +-record('KeyRecRepContent', { + status, + newSigCert = asn1_NOVALUE, + caCerts = asn1_NOVALUE, + keyPairHist = asn1_NOVALUE +}). + +-record('RevDetails', { + certDetails, + crlEntryDetails = asn1_NOVALUE +}). + +-record('RevDetails_crlEntryDetails_SEQOF', { + extnID, + critical = asn1_DEFAULT, + extnValue +}). + +-record('RevRepContent', { + status, + revCerts = asn1_NOVALUE, + crls = asn1_NOVALUE +}). + +-record('CAKeyUpdAnnContent', { + oldWithNew, + newWithOld, + newWithNew +}). + +-record('RevAnnContent', { + status, + certId, + willBeRevokedAt, + badSinceDate, + crlDetails = asn1_NOVALUE +}). + +-record('RevAnnContent_crlDetails_SEQOF', { + extnID, + critical = asn1_DEFAULT, + extnValue +}). + +-record('InfoTypeAndValue', { + infoType, + infoValue +}). + +-record('ErrorMsgContent', { + pKIStatusInfo, + errorCode = asn1_NOVALUE, + errorDetails = asn1_NOVALUE +}). + +-record('CertStatus', { + certHash, + certReqId, + statusInfo = asn1_NOVALUE +}). + +-record('PollReqContent_SEQOF', { + certReqId +}). + +-record('PollRepContent_SEQOF', { + certReqId, + checkAfter, + reason = asn1_NOVALUE +}). + +-define('id-PasswordBasedMac', {1,2,840,113533,7,66,13}). +-define('id-DHBasedMac', {1,2,840,113533,7,66,30}). +-endif. %% _PKIXCMP_2009_HRL_ diff --git a/src/PKIXCRMF-2009.erl b/src/PKIXCRMF-2009.erl new file mode 100644 index 0000000..93a1b1c --- /dev/null +++ b/src/PKIXCRMF-2009.erl @@ -0,0 +1,4309 @@ +%% Generated by the Erlang ASN.1 BER compiler. Version: 5.0.21 +%% Purpose: Encoding and decoding of the types in PKIXCRMF-2009. + +-module('PKIXCRMF-2009'). +-compile(nowarn_unused_vars). +-dialyzer(no_improper_lists). +-dialyzer(no_match). +-include("PKIXCRMF-2009.hrl"). +-asn1_info([{vsn,'5.0.21'}, + {module,'PKIXCRMF-2009'}, + {options,[warnings,ber,errors, + {cwd,"/Users/maxim/depot/synrc/ca/priv/cms"}, + {outdir,"/Users/maxim/depot/synrc/ca/priv/cms"}, + {i,"."}, + {i,"/Users/maxim/depot/synrc/ca/priv/cms"}]}]). + +-export([encoding_rule/0,maps/0,bit_string_format/0, + legacy_erlang_types/0]). +-export(['dialyzer-suppressions'/1]). +-export([ +enc_CertReqMessages/2, +enc_CertReqMsg/2, +enc_CertRequest/2, +enc_CertTemplate/2, +enc_OptionalValidity/2, +enc_Controls/2, +enc_ProofOfPossession/2, +enc_POPOSigningKey/2, +enc_POPOSigningKeyInput/2, +enc_PKMACValue/2, +enc_PBMParameter/2, +enc_POPOPrivKey/2, +enc_SubsequentMessage/2, +enc_EncKeyWithID/2, +enc_PrivateKeyInfo/2, +enc_Attributes/2, +enc_RegToken/2, +enc_Authenticator/2, +enc_PKIPublicationInfo/2, +enc_SinglePubInfo/2, +enc_PKIArchiveOptions/2, +enc_EncryptedKey/2, +enc_EncryptedValue/2, +enc_KeyGenParameters/2, +enc_OldCertId/2, +enc_CertId/2, +enc_ProtocolEncrKey/2, +enc_UTF8Pairs/2, +enc_CertReq/2 +]). + +-export([ +dec_CertReqMessages/2, +dec_CertReqMsg/2, +dec_CertRequest/2, +dec_CertTemplate/2, +dec_OptionalValidity/2, +dec_Controls/2, +dec_ProofOfPossession/2, +dec_POPOSigningKey/2, +dec_POPOSigningKeyInput/2, +dec_PKMACValue/2, +dec_PBMParameter/2, +dec_POPOPrivKey/2, +dec_SubsequentMessage/2, +dec_EncKeyWithID/2, +dec_PrivateKeyInfo/2, +dec_Attributes/2, +dec_RegToken/2, +dec_Authenticator/2, +dec_PKIPublicationInfo/2, +dec_SinglePubInfo/2, +dec_PKIArchiveOptions/2, +dec_EncryptedKey/2, +dec_EncryptedValue/2, +dec_KeyGenParameters/2, +dec_OldCertId/2, +dec_CertId/2, +dec_ProtocolEncrKey/2, +dec_UTF8Pairs/2, +dec_CertReq/2 +]). + +-export([ +'enc_ct-encKeyWithID'/3, +'enc_regCtrl-regToken'/3, +'enc_regCtrl-authenticator'/3, +'enc_regCtrl-pkiPublicationInfo'/3, +'enc_regCtrl-pkiArchiveOptions'/3, +'enc_regCtrl-oldCertID'/3, +'enc_regCtrl-protocolEncrKey'/3, +'enc_regInfo-utf8Pairs'/3, +'enc_regInfo-certReq'/3 +]). + +-export([ +'dec_ct-encKeyWithID'/3, +'dec_regCtrl-regToken'/3, +'dec_regCtrl-authenticator'/3, +'dec_regCtrl-pkiPublicationInfo'/3, +'dec_regCtrl-pkiArchiveOptions'/3, +'dec_regCtrl-oldCertID'/3, +'dec_regCtrl-protocolEncrKey'/3, +'dec_regInfo-utf8Pairs'/3, +'dec_regInfo-certReq'/3 +]). + +-export([ +'getenc_Password-MACAlgorithms'/1, +getenc_DigestAlgorithms/1, +getenc_MACAlgorithms/1, +getenc_PrivateKeyAttributes/1, +getenc_RegControlSet/1, +getenc_RegInfoSet/1, +getenc_internal_object_set_argument_58/1, +getenc_internal_object_set_argument_56/1, +getenc_internal_object_set_argument_69/1, +getenc_internal_object_set_argument_67/1, +getenc_internal_object_set_argument_65/1, +getenc_internal_object_set_argument_63/1, +getenc_internal_object_set_argument_62/1, +getenc_internal_object_set_argument_60/1, +getenc_internal_object_set_argument_8/1, +getenc_internal_object_set_argument_7/1, +getenc_internal_object_set_argument_6/1, +getenc_internal_object_set_argument_2/1, +getenc_internal_object_set_argument_12/1, +getenc_internal_object_set_argument_10/1 +]). + +-export([ +'getdec_Password-MACAlgorithms'/1, +getdec_DigestAlgorithms/1, +getdec_MACAlgorithms/1, +getdec_PrivateKeyAttributes/1, +getdec_RegControlSet/1, +getdec_RegInfoSet/1, +getdec_internal_object_set_argument_58/1, +getdec_internal_object_set_argument_56/1, +getdec_internal_object_set_argument_69/1, +getdec_internal_object_set_argument_67/1, +getdec_internal_object_set_argument_65/1, +getdec_internal_object_set_argument_63/1, +getdec_internal_object_set_argument_62/1, +getdec_internal_object_set_argument_60/1, +getdec_internal_object_set_argument_8/1, +getdec_internal_object_set_argument_7/1, +getdec_internal_object_set_argument_6/1, +getdec_internal_object_set_argument_2/1, +getdec_internal_object_set_argument_12/1, +getdec_internal_object_set_argument_10/1 +]). + +-export([ +'id-pkip'/0, +'id-smime'/0, +'id-ct'/0, +'id-PasswordBasedMac'/0, +'id-ct-encKeyWithID'/0, +'id-regCtrl'/0, +'id-regCtrl-regToken'/0, +'id-regCtrl-authenticator'/0, +'id-regCtrl-pkiPublicationInfo'/0, +'id-regCtrl-pkiArchiveOptions'/0, +'id-regCtrl-oldCertID'/0, +'id-regCtrl-protocolEncrKey'/0, +'id-regInfo'/0, +'id-regInfo-utf8Pairs'/0, +'id-regInfo-certReq'/0 +]). + +-export([info/0]). + +-export([encode/2,decode/2]). + +encoding_rule() -> ber. + +maps() -> false. + +bit_string_format() -> bitstring. + +legacy_erlang_types() -> false. + +encode(Type, Data) -> +try iolist_to_binary(element(1, encode_disp(Type, Data))) of + Bytes -> + {ok,Bytes} + catch + Class:Exception:Stk when Class =:= error; Class =:= exit -> + case Exception of + {error,{asn1,Reason}} -> + {error,{asn1,{Reason,Stk}}}; + Reason -> + {error,{asn1,{Reason,Stk}}} + end +end. + +decode(Type, Data) -> +try + Result = decode_disp(Type, element(1, ber_decode_nif(Data))), + {ok,Result} + catch + Class:Exception:Stk when Class =:= error; Class =:= exit -> + case Exception of + {error,{asn1,Reason}} -> + {error,{asn1,{Reason,Stk}}}; + Reason -> + {error,{asn1,{Reason,Stk}}} + end +end. + +encode_disp('CertReqMessages', Data) -> enc_CertReqMessages(Data); +encode_disp('CertReqMsg', Data) -> enc_CertReqMsg(Data); +encode_disp('CertRequest', Data) -> enc_CertRequest(Data); +encode_disp('CertTemplate', Data) -> enc_CertTemplate(Data); +encode_disp('OptionalValidity', Data) -> enc_OptionalValidity(Data); +encode_disp('Controls', Data) -> enc_Controls(Data); +encode_disp('ProofOfPossession', Data) -> enc_ProofOfPossession(Data); +encode_disp('POPOSigningKey', Data) -> enc_POPOSigningKey(Data); +encode_disp('POPOSigningKeyInput', Data) -> enc_POPOSigningKeyInput(Data); +encode_disp('PKMACValue', Data) -> enc_PKMACValue(Data); +encode_disp('PBMParameter', Data) -> enc_PBMParameter(Data); +encode_disp('POPOPrivKey', Data) -> enc_POPOPrivKey(Data); +encode_disp('SubsequentMessage', Data) -> enc_SubsequentMessage(Data); +encode_disp('EncKeyWithID', Data) -> enc_EncKeyWithID(Data); +encode_disp('PrivateKeyInfo', Data) -> enc_PrivateKeyInfo(Data); +encode_disp('Attributes', Data) -> enc_Attributes(Data); +encode_disp('RegToken', Data) -> enc_RegToken(Data); +encode_disp('Authenticator', Data) -> enc_Authenticator(Data); +encode_disp('PKIPublicationInfo', Data) -> enc_PKIPublicationInfo(Data); +encode_disp('SinglePubInfo', Data) -> enc_SinglePubInfo(Data); +encode_disp('PKIArchiveOptions', Data) -> enc_PKIArchiveOptions(Data); +encode_disp('EncryptedKey', Data) -> enc_EncryptedKey(Data); +encode_disp('EncryptedValue', Data) -> enc_EncryptedValue(Data); +encode_disp('KeyGenParameters', Data) -> enc_KeyGenParameters(Data); +encode_disp('OldCertId', Data) -> enc_OldCertId(Data); +encode_disp('CertId', Data) -> enc_CertId(Data); +encode_disp('ProtocolEncrKey', Data) -> enc_ProtocolEncrKey(Data); +encode_disp('UTF8Pairs', Data) -> enc_UTF8Pairs(Data); +encode_disp('CertReq', Data) -> enc_CertReq(Data); +encode_disp(Type, _Data) -> exit({error,{asn1,{undefined_type,Type}}}). + +decode_disp('CertReqMessages', Data) -> dec_CertReqMessages(Data); +decode_disp('CertReqMsg', Data) -> dec_CertReqMsg(Data); +decode_disp('CertRequest', Data) -> dec_CertRequest(Data); +decode_disp('CertTemplate', Data) -> dec_CertTemplate(Data); +decode_disp('OptionalValidity', Data) -> dec_OptionalValidity(Data); +decode_disp('Controls', Data) -> dec_Controls(Data); +decode_disp('ProofOfPossession', Data) -> dec_ProofOfPossession(Data); +decode_disp('POPOSigningKey', Data) -> dec_POPOSigningKey(Data); +decode_disp('POPOSigningKeyInput', Data) -> dec_POPOSigningKeyInput(Data); +decode_disp('PKMACValue', Data) -> dec_PKMACValue(Data); +decode_disp('PBMParameter', Data) -> dec_PBMParameter(Data); +decode_disp('POPOPrivKey', Data) -> dec_POPOPrivKey(Data); +decode_disp('SubsequentMessage', Data) -> dec_SubsequentMessage(Data); +decode_disp('EncKeyWithID', Data) -> dec_EncKeyWithID(Data); +decode_disp('PrivateKeyInfo', Data) -> dec_PrivateKeyInfo(Data); +decode_disp('Attributes', Data) -> dec_Attributes(Data); +decode_disp('RegToken', Data) -> dec_RegToken(Data); +decode_disp('Authenticator', Data) -> dec_Authenticator(Data); +decode_disp('PKIPublicationInfo', Data) -> dec_PKIPublicationInfo(Data); +decode_disp('SinglePubInfo', Data) -> dec_SinglePubInfo(Data); +decode_disp('PKIArchiveOptions', Data) -> dec_PKIArchiveOptions(Data); +decode_disp('EncryptedKey', Data) -> dec_EncryptedKey(Data); +decode_disp('EncryptedValue', Data) -> dec_EncryptedValue(Data); +decode_disp('KeyGenParameters', Data) -> dec_KeyGenParameters(Data); +decode_disp('OldCertId', Data) -> dec_OldCertId(Data); +decode_disp('CertId', Data) -> dec_CertId(Data); +decode_disp('ProtocolEncrKey', Data) -> dec_ProtocolEncrKey(Data); +decode_disp('UTF8Pairs', Data) -> dec_UTF8Pairs(Data); +decode_disp('CertReq', Data) -> dec_CertReq(Data); +decode_disp(Type, _Data) -> exit({error,{asn1,{undefined_type,Type}}}). + +info() -> + case ?MODULE:module_info(attributes) of + Attributes when is_list(Attributes) -> + case lists:keyfind(asn1_info, 1, Attributes) of + {_,Info} when is_list(Info) -> + Info; + _ -> + [] + end; + _ -> + [] + end. + + +%%================================ +%% CertReqMessages +%%================================ +enc_CertReqMessages(Val) -> + enc_CertReqMessages(Val, [<<48>>]). + +enc_CertReqMessages(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_CertReqMessages_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_CertReqMessages_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_CertReqMessages_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_CertReqMsg'(H, [<<48>>]), + 'enc_CertReqMessages_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_CertReqMessages(Tlv) -> + dec_CertReqMessages(Tlv, [16]). + +dec_CertReqMessages(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_CertReqMsg'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% CertReqMsg +%%================================ +enc_CertReqMsg(Val) -> + enc_CertReqMsg(Val, [<<48>>]). + +enc_CertReqMsg(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute certReq(1) External PKIXCRMF-2009:CertRequest +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_CertRequest'(Cindex1, [<<48>>]), + +%%------------------------------------------------- +%% attribute popo(2) External PKIXCRMF-2009:ProofOfPossession OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_ProofOfPossession'(Cindex2, []) + end, + +%%------------------------------------------------- +%% attribute regInfo(3) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_CertReqMsg_regInfo'(Cindex3, [<<48>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% CertReqMsg_regInfo +%%================================ +enc_CertReqMsg_regInfo(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_CertReqMsg_regInfo_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_CertReqMsg_regInfo_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_CertReqMsg_regInfo_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_CertReqMsg_regInfo_SingleAttribute'(H, [<<48>>]), + 'enc_CertReqMsg_regInfo_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% CertReqMsg_regInfo_SingleAttribute +%%================================ +enc_CertReqMsg_regInfo_SingleAttribute(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objtype = + 'PKIXCRMF-2009':'getenc_internal_object_set_argument_56'( Cindex1), + +%%------------------------------------------------- +%% attribute type(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute value(2) with type typefieldType +%%------------------------------------------------- + {TmpBytes2,_} = Objtype('Type', Cindex2, []), + {EncBytes2,EncLen2} = encode_open_type(TmpBytes2, []) +, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_CertReqMsg(Tlv) -> + dec_CertReqMsg(Tlv, [16]). + +dec_CertReqMsg(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute certReq(1) External PKIXCRMF-2009:CertRequest +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_CertRequest'(V1, [16]), + +%%------------------------------------------------- +%% attribute popo(2) External PKIXCRMF-2009:ProofOfPossession OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[V2 = {131072,_}|TempTlv3] -> + {'dec_ProofOfPossession'(V2, []), TempTlv3}; +[V2 = {131073,_}|TempTlv3] -> + {'dec_ProofOfPossession'(V2, []), TempTlv3}; +[V2 = {131074,_}|TempTlv3] -> + {'dec_ProofOfPossession'(V2, []), TempTlv3}; +[V2 = {131075,_}|TempTlv3] -> + {'dec_ProofOfPossession'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +%%------------------------------------------------- +%% attribute regInfo(3) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{16,V3}|TempTlv4] -> + {'dec_CertReqMsg_regInfo'(V3, []), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'CertReqMsg',Term1,Term2,Term3}, +Res1. +'dec_CertReqMsg_regInfo'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_CertReqMsg_regInfo_SingleAttribute'(V1, [16]) || V1 <- Tlv1]. + + +'dec_CertReqMsg_regInfo_SingleAttribute'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute type(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute value(2) with type typefieldType +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, + + Tmpterm1 = decode_open_type(V2, []), + +DecObjtypeTerm1 = + 'PKIXCRMF-2009':'getdec_internal_object_set_argument_56'(Term1), +Term2 = + case (catch DecObjtypeTerm1('Type', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'SingleAttribute',Term1,Term2}, +Res1. + + +%%================================ +%% CertRequest +%%================================ +enc_CertRequest(Val) -> + enc_CertRequest(Val, [<<48>>]). + +enc_CertRequest(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute certReqId(1) with type INTEGER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_integer(Cindex1, [<<2>>]), + +%%------------------------------------------------- +%% attribute certTemplate(2) External PKIXCRMF-2009:CertTemplate +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_CertTemplate'(Cindex2, [<<48>>]), + +%%------------------------------------------------- +%% attribute controls(3) External PKIXCRMF-2009:Controls OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_Controls'(Cindex3, [<<48>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_CertRequest(Tlv) -> + dec_CertRequest(Tlv, [16]). + +dec_CertRequest(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute certReqId(1) with type INTEGER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_integer(V1, [2]), + +%%------------------------------------------------- +%% attribute certTemplate(2) External PKIXCRMF-2009:CertTemplate +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_CertTemplate'(V2, [16]), + +%%------------------------------------------------- +%% attribute controls(3) External PKIXCRMF-2009:Controls OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{16,V3}|TempTlv4] -> + {'dec_Controls'(V3, []), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'CertRequest',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% CertTemplate +%%================================ +enc_CertTemplate(Val) -> + enc_CertTemplate(Val, [<<48>>]). + +enc_CertTemplate(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4,Cindex5,Cindex6,Cindex7,Cindex8,Cindex9,Cindex10} = Val, + +%%------------------------------------------------- +%% attribute version(1) with type INTEGER OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_integer(Cindex1, [{v1,0},{v2,1},{v3,2}], [<<128>>]) + end, + +%%------------------------------------------------- +%% attribute serialNumber(2) with type INTEGER OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_integer(Cindex2, [<<129>>]) + end, + +%%------------------------------------------------- +%% attribute signingAlg(3) with type SEQUENCE OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_CertTemplate_signingAlg'(Cindex3, [<<162>>]) + end, + +%%------------------------------------------------- +%% attribute issuer(4) External PKIX1Explicit-2009:Name OPTIONAL +%%------------------------------------------------- + {EncBytes4,EncLen4} = case Cindex4 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'PKIX1Explicit-2009':'enc_Name'(Cindex4, [<<163>>]) + end, + +%%------------------------------------------------- +%% attribute validity(5) External PKIXCRMF-2009:OptionalValidity OPTIONAL +%%------------------------------------------------- + {EncBytes5,EncLen5} = case Cindex5 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_OptionalValidity'(Cindex5, [<<164>>]) + end, + +%%------------------------------------------------- +%% attribute subject(6) External PKIX1Explicit-2009:Name OPTIONAL +%%------------------------------------------------- + {EncBytes6,EncLen6} = case Cindex6 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'PKIX1Explicit-2009':'enc_Name'(Cindex6, [<<165>>]) + end, + +%%------------------------------------------------- +%% attribute publicKey(7) External PKIX1Explicit-2009:SubjectPublicKeyInfo OPTIONAL +%%------------------------------------------------- + {EncBytes7,EncLen7} = case Cindex7 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'PKIX1Explicit-2009':'enc_SubjectPublicKeyInfo'(Cindex7, [<<166>>]) + end, + +%%------------------------------------------------- +%% attribute issuerUID(8) with type BIT STRING OPTIONAL +%%------------------------------------------------- + {EncBytes8,EncLen8} = case Cindex8 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_unnamed_bit_string(Cindex8, [<<135>>]) + end, + +%%------------------------------------------------- +%% attribute subjectUID(9) with type BIT STRING OPTIONAL +%%------------------------------------------------- + {EncBytes9,EncLen9} = case Cindex9 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_unnamed_bit_string(Cindex9, [<<136>>]) + end, + +%%------------------------------------------------- +%% attribute extensions(10) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- + {EncBytes10,EncLen10} = case Cindex10 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_CertTemplate_extensions'(Cindex10, [<<169>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4, EncBytes5, EncBytes6, EncBytes7, EncBytes8, EncBytes9, EncBytes10], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4 + EncLen5 + EncLen6 + EncLen7 + EncLen8 + EncLen9 + EncLen10, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% CertTemplate_signingAlg +%%================================ +enc_CertTemplate_signingAlg(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCRMF-2009':'getenc_internal_object_set_argument_2'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% CertTemplate_extensions +%%================================ +enc_CertTemplate_extensions(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_CertTemplate_extensions_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_CertTemplate_extensions_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_CertTemplate_extensions_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_CertTemplate_extensions_Extension'(H, [<<48>>]), + 'enc_CertTemplate_extensions_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% CertTemplate_extensions_Extension +%%================================ +enc_CertTemplate_extensions_Extension(Val, TagIn) -> + {_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute extnID(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute critical(2) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_DEFAULT -> + {<<>>,0}; + _ when Cindex2 =:= false -> + {<<>>,0}; + _ -> + encode_boolean(Cindex2, [<<1>>]) + end, + +%%------------------------------------------------- +%% attribute extnValue(3) with type OCTET STRING +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_restricted_string(Cindex3, [<<4>>]), + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_CertTemplate(Tlv) -> + dec_CertTemplate(Tlv, [16]). + +dec_CertTemplate(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute version(1) with type INTEGER OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {begin +Val1 = decode_integer(V1, []), +number2name(Val1, [{v1,0},{v2,1},{v3,2}]) +end +, TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute serialNumber(2) with type INTEGER OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131073,V2}|TempTlv3] -> + {decode_integer(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +%%------------------------------------------------- +%% attribute signingAlg(3) with type SEQUENCE OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{131074,V3}|TempTlv4] -> + {'dec_CertTemplate_signingAlg'(V3, []), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +%%------------------------------------------------- +%% attribute issuer(4) External PKIX1Explicit-2009:Name OPTIONAL +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[{131075,V4}|TempTlv5] -> + {'PKIX1Explicit-2009':'dec_Name'(V4, []), TempTlv5}; + _ -> + { asn1_NOVALUE, Tlv4} +end, + +%%------------------------------------------------- +%% attribute validity(5) External PKIXCRMF-2009:OptionalValidity OPTIONAL +%%------------------------------------------------- +{Term5,Tlv6} = case Tlv5 of +[{131076,V5}|TempTlv6] -> + {'dec_OptionalValidity'(V5, []), TempTlv6}; + _ -> + { asn1_NOVALUE, Tlv5} +end, + +%%------------------------------------------------- +%% attribute subject(6) External PKIX1Explicit-2009:Name OPTIONAL +%%------------------------------------------------- +{Term6,Tlv7} = case Tlv6 of +[{131077,V6}|TempTlv7] -> + {'PKIX1Explicit-2009':'dec_Name'(V6, []), TempTlv7}; + _ -> + { asn1_NOVALUE, Tlv6} +end, + +%%------------------------------------------------- +%% attribute publicKey(7) External PKIX1Explicit-2009:SubjectPublicKeyInfo OPTIONAL +%%------------------------------------------------- +{Term7,Tlv8} = case Tlv7 of +[{131078,V7}|TempTlv8] -> + {'PKIX1Explicit-2009':'dec_SubjectPublicKeyInfo'(V7, []), TempTlv8}; + _ -> + { asn1_NOVALUE, Tlv7} +end, + +%%------------------------------------------------- +%% attribute issuerUID(8) with type BIT STRING OPTIONAL +%%------------------------------------------------- +{Term8,Tlv9} = case Tlv8 of +[{131079,V8}|TempTlv9] -> + {decode_native_bit_string(V8, []), TempTlv9}; + _ -> + { asn1_NOVALUE, Tlv8} +end, + +%%------------------------------------------------- +%% attribute subjectUID(9) with type BIT STRING OPTIONAL +%%------------------------------------------------- +{Term9,Tlv10} = case Tlv9 of +[{131080,V9}|TempTlv10] -> + {decode_native_bit_string(V9, []), TempTlv10}; + _ -> + { asn1_NOVALUE, Tlv9} +end, + +%%------------------------------------------------- +%% attribute extensions(10) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- +{Term10,Tlv11} = case Tlv10 of +[{131081,V10}|TempTlv11] -> + {'dec_CertTemplate_extensions'(V10, []), TempTlv11}; + _ -> + { asn1_NOVALUE, Tlv10} +end, + +case Tlv11 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv11}}}) % extra fields not allowed +end, +Res1 = {'CertTemplate',Term1,Term2,Term3,Term4,Term5,Term6,Term7,Term8,Term9,Term10}, +Res1. +'dec_CertTemplate_signingAlg'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCRMF-2009':'getdec_internal_object_set_argument_2'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'CertTemplate_signingAlg',Term1,Term2}, +Res1. +'dec_CertTemplate_extensions'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_CertTemplate_extensions_Extension'(V1, [16]) || V1 <- Tlv1]. + + +'dec_CertTemplate_extensions_Extension'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute extnID(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute critical(2) with type BOOLEAN DEFAULT = false +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{1,V2}|TempTlv3] -> + {decode_boolean(V2, []), TempTlv3}; + _ -> + {false,Tlv2} +end, + +%%------------------------------------------------- +%% attribute extnValue(3) with type OCTET STRING +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_octet_string(V3, [4]), + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'Extension',Term1,Term2,Term3}, +Res1. + + +%%================================ +%% OptionalValidity +%%================================ +enc_OptionalValidity(Val) -> + enc_OptionalValidity(Val, [<<48>>]). + +enc_OptionalValidity(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute notBefore(1) External PKIX1Explicit-2009:Time OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'PKIX1Explicit-2009':'enc_Time'(Cindex1, [<<160>>]) + end, + +%%------------------------------------------------- +%% attribute notAfter(2) External PKIX1Explicit-2009:Time OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'PKIX1Explicit-2009':'enc_Time'(Cindex2, [<<161>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_OptionalValidity(Tlv) -> + dec_OptionalValidity(Tlv, [16]). + +dec_OptionalValidity(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute notBefore(1) External PKIX1Explicit-2009:Time OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {'PKIX1Explicit-2009':'dec_Time'(V1, []), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute notAfter(2) External PKIX1Explicit-2009:Time OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131073,V2}|TempTlv3] -> + {'PKIX1Explicit-2009':'dec_Time'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'OptionalValidity',Term1,Term2}, +Res1. + + +%%================================ +%% Controls +%%================================ +enc_Controls(Val) -> + enc_Controls(Val, [<<48>>]). + +enc_Controls(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_Controls_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_Controls_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_Controls_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_Controls_SingleAttribute'(H, [<<48>>]), + 'enc_Controls_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% Controls_SingleAttribute +%%================================ +enc_Controls_SingleAttribute(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objtype = + 'PKIXCRMF-2009':'getenc_internal_object_set_argument_8'( Cindex1), + +%%------------------------------------------------- +%% attribute type(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute value(2) with type typefieldType +%%------------------------------------------------- + {TmpBytes2,_} = Objtype('Type', Cindex2, []), + {EncBytes2,EncLen2} = encode_open_type(TmpBytes2, []) +, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_Controls(Tlv) -> + dec_Controls(Tlv, [16]). + +dec_Controls(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_Controls_SingleAttribute'(V1, [16]) || V1 <- Tlv1]. + + +'dec_Controls_SingleAttribute'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute type(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute value(2) with type typefieldType +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, + + Tmpterm1 = decode_open_type(V2, []), + +DecObjtypeTerm1 = + 'PKIXCRMF-2009':'getdec_internal_object_set_argument_8'(Term1), +Term2 = + case (catch DecObjtypeTerm1('Type', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'SingleAttribute',Term1,Term2}, +Res1. + + +%%================================ +%% ProofOfPossession +%%================================ +enc_ProofOfPossession(Val) -> + enc_ProofOfPossession(Val, []). + +enc_ProofOfPossession(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + raVerified -> + encode_null(element(2,Val), [<<128>>]); + signature -> + 'enc_POPOSigningKey'(element(2,Val), [<<161>>]); + keyEncipherment -> + 'enc_POPOPrivKey'(element(2,Val), [<<162>>]); + keyAgreement -> + 'enc_POPOPrivKey'(element(2,Val), [<<163>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_ProofOfPossession(Tlv) -> + dec_ProofOfPossession(Tlv, []). + +dec_ProofOfPossession(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'raVerified' + {131072, V1} -> + {raVerified, decode_null(V1, [])}; + + +%% 'signature' + {131073, V1} -> + {signature, 'dec_POPOSigningKey'(V1, [])}; + + +%% 'keyEncipherment' + {131074, V1} -> + {keyEncipherment, 'dec_POPOPrivKey'(V1, [])}; + + +%% 'keyAgreement' + {131075, V1} -> + {keyAgreement, 'dec_POPOPrivKey'(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% POPOSigningKey +%%================================ +enc_POPOSigningKey(Val) -> + enc_POPOSigningKey(Val, [<<48>>]). + +enc_POPOSigningKey(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3} = Val, + +%%------------------------------------------------- +%% attribute poposkInput(1) External PKIXCRMF-2009:POPOSigningKeyInput OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_POPOSigningKeyInput'(Cindex1, [<<160>>]) + end, + +%%------------------------------------------------- +%% attribute algorithmIdentifier(2) with type SEQUENCE +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_POPOSigningKey_algorithmIdentifier'(Cindex2, [<<48>>]), + +%%------------------------------------------------- +%% attribute signature(3) with type BIT STRING +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_unnamed_bit_string(Cindex3, [<<3>>]), + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% POPOSigningKey_algorithmIdentifier +%%================================ +enc_POPOSigningKey_algorithmIdentifier(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCRMF-2009':'getenc_internal_object_set_argument_12'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_POPOSigningKey(Tlv) -> + dec_POPOSigningKey(Tlv, [16]). + +dec_POPOSigningKey(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute poposkInput(1) External PKIXCRMF-2009:POPOSigningKeyInput OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {'dec_POPOSigningKeyInput'(V1, []), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute algorithmIdentifier(2) with type SEQUENCE +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_POPOSigningKey_algorithmIdentifier'(V2, [16]), + +%%------------------------------------------------- +%% attribute signature(3) with type BIT STRING +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_native_bit_string(V3, [3]), + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, +Res1 = {'POPOSigningKey',Term1,Term2,Term3}, +Res1. +'dec_POPOSigningKey_algorithmIdentifier'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCRMF-2009':'getdec_internal_object_set_argument_12'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'POPOSigningKey_algorithmIdentifier',Term1,Term2}, +Res1. + + +%%================================ +%% POPOSigningKeyInput +%%================================ +enc_POPOSigningKeyInput(Val) -> + enc_POPOSigningKeyInput(Val, [<<48>>]). + +enc_POPOSigningKeyInput(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute authInfo(1) with type CHOICE +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_POPOSigningKeyInput_authInfo'(Cindex1, []), + +%%------------------------------------------------- +%% attribute publicKey(2) External PKIX1Explicit-2009:SubjectPublicKeyInfo +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'PKIX1Explicit-2009':'enc_SubjectPublicKeyInfo'(Cindex2, [<<48>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% POPOSigningKeyInput_authInfo +%%================================ +enc_POPOSigningKeyInput_authInfo(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + sender -> + 'PKIX1Implicit-2009':'enc_GeneralName'(element(2,Val), [<<160>>]); + publicKeyMAC -> + 'enc_PKMACValue'(element(2,Val), [<<48>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_POPOSigningKeyInput(Tlv) -> + dec_POPOSigningKeyInput(Tlv, [16]). + +dec_POPOSigningKeyInput(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute authInfo(1) with type CHOICE +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_POPOSigningKeyInput_authInfo'(V1, []), + +%%------------------------------------------------- +%% attribute publicKey(2) External PKIX1Explicit-2009:SubjectPublicKeyInfo +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'PKIX1Explicit-2009':'dec_SubjectPublicKeyInfo'(V2, [16]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'POPOSigningKeyInput',Term1,Term2}, +Res1. +'dec_POPOSigningKeyInput_authInfo'(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'sender' + {131072, V1} -> + {sender, 'PKIX1Implicit-2009':'dec_GeneralName'(V1, [])}; + + +%% 'publicKeyMAC' + {16, V1} -> + {publicKeyMAC, 'dec_PKMACValue'(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% PKMACValue +%%================================ +enc_PKMACValue(Val) -> + enc_PKMACValue(Val, [<<48>>]). + +enc_PKMACValue(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute algId(1) with type SEQUENCE +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_PKMACValue_algId'(Cindex1, [<<48>>]), + +%%------------------------------------------------- +%% attribute value(2) with type BIT STRING +%%------------------------------------------------- + {EncBytes2,EncLen2} = encode_unnamed_bit_string(Cindex2, [<<3>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% PKMACValue_algId +%%================================ +enc_PKMACValue_algId(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCRMF-2009':'getenc_internal_object_set_argument_10'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_PKMACValue(Tlv) -> + dec_PKMACValue(Tlv, [16]). + +dec_PKMACValue(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algId(1) with type SEQUENCE +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_PKMACValue_algId'(V1, [16]), + +%%------------------------------------------------- +%% attribute value(2) with type BIT STRING +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = decode_native_bit_string(V2, [3]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PKMACValue',Term1,Term2}, +Res1. +'dec_PKMACValue_algId'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCRMF-2009':'getdec_internal_object_set_argument_10'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PKMACValue_algId',Term1,Term2}, +Res1. + + +%%================================ +%% PBMParameter +%%================================ +enc_PBMParameter(Val) -> + enc_PBMParameter(Val, [<<48>>]). + +enc_PBMParameter(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4} = Val, + +%%------------------------------------------------- +%% attribute salt(1) with type OCTET STRING +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_restricted_string(Cindex1, [<<4>>]), + +%%------------------------------------------------- +%% attribute owf(2) with type SEQUENCE +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_PBMParameter_owf'(Cindex2, [<<48>>]), + +%%------------------------------------------------- +%% attribute iterationCount(3) with type INTEGER +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_integer(Cindex3, [<<2>>]), + +%%------------------------------------------------- +%% attribute mac(4) with type SEQUENCE +%%------------------------------------------------- + {EncBytes4,EncLen4} = 'enc_PBMParameter_mac'(Cindex4, [<<48>>]), + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% PBMParameter_owf +%%================================ +enc_PBMParameter_owf(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCRMF-2009':'getenc_internal_object_set_argument_58'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% PBMParameter_mac +%%================================ +enc_PBMParameter_mac(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCRMF-2009':'getenc_internal_object_set_argument_60'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_PBMParameter(Tlv) -> + dec_PBMParameter(Tlv, [16]). + +dec_PBMParameter(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute salt(1) with type OCTET STRING +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_octet_string(V1, [4]), + +%%------------------------------------------------- +%% attribute owf(2) with type SEQUENCE +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_PBMParameter_owf'(V2, [16]), + +%%------------------------------------------------- +%% attribute iterationCount(3) with type INTEGER +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_integer(V3, [2]), + +%%------------------------------------------------- +%% attribute mac(4) with type SEQUENCE +%%------------------------------------------------- +[V4|Tlv5] = Tlv4, +Term4 = 'dec_PBMParameter_mac'(V4, [16]), + +case Tlv5 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed +end, +Res1 = {'PBMParameter',Term1,Term2,Term3,Term4}, +Res1. +'dec_PBMParameter_owf'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCRMF-2009':'getdec_internal_object_set_argument_58'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PBMParameter_owf',Term1,Term2}, +Res1. +'dec_PBMParameter_mac'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCRMF-2009':'getdec_internal_object_set_argument_60'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PBMParameter_mac',Term1,Term2}, +Res1. + + +%%================================ +%% POPOPrivKey +%%================================ +enc_POPOPrivKey(Val) -> + enc_POPOPrivKey(Val, []). + +enc_POPOPrivKey(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + thisMessage -> + encode_unnamed_bit_string(element(2,Val), [<<128>>]); + subsequentMessage -> + encode_integer(element(2,Val), [{encrCert,0},{challengeResp,1}], [<<129>>]); + dhMAC -> + encode_unnamed_bit_string(element(2,Val), [<<130>>]); + agreeMAC -> + 'enc_PKMACValue'(element(2,Val), [<<163>>]); + encryptedKey -> + 'CryptographicMessageSyntax-2009':'enc_EnvelopedData'(element(2,Val), [<<164>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_POPOPrivKey(Tlv) -> + dec_POPOPrivKey(Tlv, []). + +dec_POPOPrivKey(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'thisMessage' + {131072, V1} -> + {thisMessage, decode_native_bit_string(V1, [])}; + + +%% 'subsequentMessage' + {131073, V1} -> + {subsequentMessage, begin +Val1 = decode_integer(V1, []), +number2name(Val1, [{encrCert,0},{challengeResp,1}]) +end +}; + + +%% 'dhMAC' + {131074, V1} -> + {dhMAC, decode_native_bit_string(V1, [])}; + + +%% 'agreeMAC' + {131075, V1} -> + {agreeMAC, 'dec_PKMACValue'(V1, [])}; + + +%% 'encryptedKey' + {131076, V1} -> + {encryptedKey, 'CryptographicMessageSyntax-2009':'dec_EnvelopedData'(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% SubsequentMessage +%%================================ +enc_SubsequentMessage(Val) -> + enc_SubsequentMessage(Val, [<<2>>]). + +enc_SubsequentMessage(Val, TagIn) -> +encode_integer(Val, [{encrCert,0},{challengeResp,1}], TagIn). + + +dec_SubsequentMessage(Tlv) -> + dec_SubsequentMessage(Tlv, [2]). + +dec_SubsequentMessage(Tlv, TagIn) -> +begin +Val1 = decode_integer(Tlv, TagIn), +number2name(Val1, [{encrCert,0},{challengeResp,1}]) +end +. + + + +%%================================ +%% EncKeyWithID +%%================================ +enc_EncKeyWithID(Val) -> + enc_EncKeyWithID(Val, [<<48>>]). + +enc_EncKeyWithID(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute privateKey(1) External PKIXCRMF-2009:PrivateKeyInfo +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'enc_PrivateKeyInfo'(Cindex1, [<<48>>]), + +%%------------------------------------------------- +%% attribute identifier(2) with type CHOICE OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_EncKeyWithID_identifier'(Cindex2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% EncKeyWithID_identifier +%%================================ +enc_EncKeyWithID_identifier(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + string -> + encode_UTF8_string(element(2,Val), [<<12>>]); + generalName -> + 'PKIX1Implicit-2009':'enc_GeneralName'(element(2,Val), []); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_EncKeyWithID(Tlv) -> + dec_EncKeyWithID(Tlv, [16]). + +dec_EncKeyWithID(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute privateKey(1) External PKIXCRMF-2009:PrivateKeyInfo +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'dec_PrivateKeyInfo'(V1, [16]), + +%%------------------------------------------------- +%% attribute identifier(2) with type CHOICE OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[V2 = {12,_}|TempTlv3] -> + {'dec_EncKeyWithID_identifier'(V2, []), TempTlv3}; +[V2 = {131072,_}|TempTlv3] -> + {'dec_EncKeyWithID_identifier'(V2, []), TempTlv3}; +[V2 = {131073,_}|TempTlv3] -> + {'dec_EncKeyWithID_identifier'(V2, []), TempTlv3}; +[V2 = {131074,_}|TempTlv3] -> + {'dec_EncKeyWithID_identifier'(V2, []), TempTlv3}; +[V2 = {131075,_}|TempTlv3] -> + {'dec_EncKeyWithID_identifier'(V2, []), TempTlv3}; +[V2 = {131076,_}|TempTlv3] -> + {'dec_EncKeyWithID_identifier'(V2, []), TempTlv3}; +[V2 = {131077,_}|TempTlv3] -> + {'dec_EncKeyWithID_identifier'(V2, []), TempTlv3}; +[V2 = {131078,_}|TempTlv3] -> + {'dec_EncKeyWithID_identifier'(V2, []), TempTlv3}; +[V2 = {131079,_}|TempTlv3] -> + {'dec_EncKeyWithID_identifier'(V2, []), TempTlv3}; +[V2 = {131080,_}|TempTlv3] -> + {'dec_EncKeyWithID_identifier'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'EncKeyWithID',Term1,Term2}, +Res1. +'dec_EncKeyWithID_identifier'(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'string' + {12, V1} -> + {string, decode_UTF8_string(V1, [])}; + + +%% 'generalName' + V1 = {131072,_} -> + {generalName, 'PKIX1Implicit-2009':'dec_GeneralName'(V1, [])}; + + V1 = {131073,_} -> + {generalName, 'PKIX1Implicit-2009':'dec_GeneralName'(V1, [])}; + + V1 = {131074,_} -> + {generalName, 'PKIX1Implicit-2009':'dec_GeneralName'(V1, [])}; + + V1 = {131075,_} -> + {generalName, 'PKIX1Implicit-2009':'dec_GeneralName'(V1, [])}; + + V1 = {131076,_} -> + {generalName, 'PKIX1Implicit-2009':'dec_GeneralName'(V1, [])}; + + V1 = {131077,_} -> + {generalName, 'PKIX1Implicit-2009':'dec_GeneralName'(V1, [])}; + + V1 = {131078,_} -> + {generalName, 'PKIX1Implicit-2009':'dec_GeneralName'(V1, [])}; + + V1 = {131079,_} -> + {generalName, 'PKIX1Implicit-2009':'dec_GeneralName'(V1, [])}; + + V1 = {131080,_} -> + {generalName, 'PKIX1Implicit-2009':'dec_GeneralName'(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% PrivateKeyInfo +%%================================ +enc_PrivateKeyInfo(Val) -> + enc_PrivateKeyInfo(Val, [<<48>>]). + +enc_PrivateKeyInfo(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4} = Val, + +%%------------------------------------------------- +%% attribute version(1) with type INTEGER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_integer(Cindex1, [<<2>>]), + +%%------------------------------------------------- +%% attribute privateKeyAlgorithm(2) with type SEQUENCE +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_PrivateKeyInfo_privateKeyAlgorithm'(Cindex2, [<<48>>]), + +%%------------------------------------------------- +%% attribute privateKey(3) with type OCTET STRING +%%------------------------------------------------- + {EncBytes3,EncLen3} = encode_restricted_string(Cindex3, [<<4>>]), + +%%------------------------------------------------- +%% attribute attributes(4) External PKIXCRMF-2009:Attributes OPTIONAL +%%------------------------------------------------- + {EncBytes4,EncLen4} = case Cindex4 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_Attributes'(Cindex4, [<<160>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% PrivateKeyInfo_privateKeyAlgorithm +%%================================ +enc_PrivateKeyInfo_privateKeyAlgorithm(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCRMF-2009':'getenc_internal_object_set_argument_62'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_PrivateKeyInfo(Tlv) -> + dec_PrivateKeyInfo(Tlv, [16]). + +dec_PrivateKeyInfo(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute version(1) with type INTEGER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_integer(V1, [2]), + +%%------------------------------------------------- +%% attribute privateKeyAlgorithm(2) with type SEQUENCE +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_PrivateKeyInfo_privateKeyAlgorithm'(V2, [16]), + +%%------------------------------------------------- +%% attribute privateKey(3) with type OCTET STRING +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = decode_octet_string(V3, [4]), + +%%------------------------------------------------- +%% attribute attributes(4) External PKIXCRMF-2009:Attributes OPTIONAL +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[{131072,V4}|TempTlv5] -> + {'dec_Attributes'(V4, []), TempTlv5}; + _ -> + { asn1_NOVALUE, Tlv4} +end, + +case Tlv5 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowed +end, +Res1 = {'PrivateKeyInfo',Term1,Term2,Term3,Term4}, +Res1. +'dec_PrivateKeyInfo_privateKeyAlgorithm'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCRMF-2009':'getdec_internal_object_set_argument_62'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PrivateKeyInfo_privateKeyAlgorithm',Term1,Term2}, +Res1. + + +%%================================ +%% Attributes +%%================================ +enc_Attributes(Val) -> + enc_Attributes(Val, [<<49>>]). + +enc_Attributes(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_Attributes_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_Attributes_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_Attributes_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_Attributes_AttributeSet'(H, [<<48>>]), + 'enc_Attributes_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + + +%%================================ +%% Attributes_AttributeSet +%%================================ +enc_Attributes_AttributeSet(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objtype = + 'PKIXCRMF-2009':'getenc_internal_object_set_argument_63'( Cindex1), + +%%------------------------------------------------- +%% attribute type(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute values(2) with type SET OF +%%------------------------------------------------- + {EncBytes2,EncLen2} = 'enc_Attributes_AttributeSet_values'(Cindex2, [<<49>>], Objtype), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% Attributes_AttributeSet_values +%%================================ +enc_Attributes_AttributeSet_values(Val, TagIn, ObjFun) -> + {EncBytes,EncLen} = 'enc_Attributes_AttributeSet_values_components'(Val, ObjFun,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_Attributes_AttributeSet_values_components'([], _, AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_Attributes_AttributeSet_values_components'([H|T], ObjFun,AccBytes, AccLen) -> + {TmpBytes,_} = ObjFun('Type', H, []), + {EncBytes,EncLen} = encode_open_type(TmpBytes, []) +, + 'enc_Attributes_AttributeSet_values_components'(T, ObjFun,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_Attributes(Tlv) -> + dec_Attributes(Tlv, [17]). + +dec_Attributes(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_Attributes_AttributeSet'(V1, [16]) || V1 <- Tlv1]. + + +'dec_Attributes_AttributeSet'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute type(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), +ObjFun = 'PKIXCRMF-2009':'getdec_internal_object_set_argument_63'(Term1), + +%%------------------------------------------------- +%% attribute values(2) with type SET OF +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = 'dec_Attributes_AttributeSet_values'(V2, [17], ObjFun), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'AttributeSet',Term1,Term2}, +Res1. +'dec_Attributes_AttributeSet_values'(Tlv, TagIn, ObjFun) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +[ + begin + Tmptlv1 = decode_open_type(V1, []), + case (catch ObjFun('Type', Tmptlv1, [])) of + {'EXIT',Reason1} -> + exit({'Type not compatible with table constraint', Reason1}); + Tmpterm1 -> + Tmpterm1 + end + end + || V1 <- Tlv1]. + + + + +%%================================ +%% RegToken +%%================================ +enc_RegToken(Val) -> + enc_RegToken(Val, [<<12>>]). + +enc_RegToken(Val, TagIn) -> +encode_UTF8_string(Val, TagIn). + + +dec_RegToken(Tlv) -> + dec_RegToken(Tlv, [12]). + +dec_RegToken(Tlv, TagIn) -> +decode_UTF8_string(Tlv, TagIn). + + + +%%================================ +%% Authenticator +%%================================ +enc_Authenticator(Val) -> + enc_Authenticator(Val, [<<12>>]). + +enc_Authenticator(Val, TagIn) -> +encode_UTF8_string(Val, TagIn). + + +dec_Authenticator(Tlv) -> + dec_Authenticator(Tlv, [12]). + +dec_Authenticator(Tlv, TagIn) -> +decode_UTF8_string(Tlv, TagIn). + + + +%%================================ +%% PKIPublicationInfo +%%================================ +enc_PKIPublicationInfo(Val) -> + enc_PKIPublicationInfo(Val, [<<48>>]). + +enc_PKIPublicationInfo(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute action(1) with type INTEGER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_integer(Cindex1, [{dontPublish,0},{pleasePublish,1}], [<<2>>]), + +%%------------------------------------------------- +%% attribute pubInfos(2) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_PKIPublicationInfo_pubInfos'(Cindex2, [<<48>>]) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% PKIPublicationInfo_pubInfos +%%================================ +enc_PKIPublicationInfo_pubInfos(Val, TagIn) -> + {EncBytes,EncLen} = 'enc_PKIPublicationInfo_pubInfos_components'(Val,[],0), + encode_tags(TagIn, EncBytes, EncLen). + +'enc_PKIPublicationInfo_pubInfos_components'([], AccBytes, AccLen) -> + {lists:reverse(AccBytes),AccLen}; + +'enc_PKIPublicationInfo_pubInfos_components'([H|T],AccBytes, AccLen) -> + {EncBytes,EncLen} = 'enc_SinglePubInfo'(H, [<<48>>]), + 'enc_PKIPublicationInfo_pubInfos_components'(T,[EncBytes|AccBytes], AccLen + EncLen). + + + +dec_PKIPublicationInfo(Tlv) -> + dec_PKIPublicationInfo(Tlv, [16]). + +dec_PKIPublicationInfo(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute action(1) with type INTEGER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = begin +Val1 = decode_integer(V1, [2]), +number2name(Val1, [{dontPublish,0},{pleasePublish,1}]) +end +, + +%%------------------------------------------------- +%% attribute pubInfos(2) with type SEQUENCE OF OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{16,V2}|TempTlv3] -> + {'dec_PKIPublicationInfo_pubInfos'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'PKIPublicationInfo',Term1,Term2}, +Res1. +'dec_PKIPublicationInfo_pubInfos'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), +['dec_SinglePubInfo'(V1, [16]) || V1 <- Tlv1]. + + + + +%%================================ +%% SinglePubInfo +%%================================ +enc_SinglePubInfo(Val) -> + enc_SinglePubInfo(Val, [<<48>>]). + +enc_SinglePubInfo(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute pubMethod(1) with type INTEGER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_integer(Cindex1, [{dontCare,0},{x500,1},{web,2},{ldap,3}], [<<2>>]), + +%%------------------------------------------------- +%% attribute pubLocation(2) External PKIX1Implicit-2009:GeneralName OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'PKIX1Implicit-2009':'enc_GeneralName'(Cindex2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_SinglePubInfo(Tlv) -> + dec_SinglePubInfo(Tlv, [16]). + +dec_SinglePubInfo(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute pubMethod(1) with type INTEGER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = begin +Val1 = decode_integer(V1, [2]), +number2name(Val1, [{dontCare,0},{x500,1},{web,2},{ldap,3}]) +end +, + +%%------------------------------------------------- +%% attribute pubLocation(2) External PKIX1Implicit-2009:GeneralName OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[V2 = {131072,_}|TempTlv3] -> + {'PKIX1Implicit-2009':'dec_GeneralName'(V2, []), TempTlv3}; +[V2 = {131073,_}|TempTlv3] -> + {'PKIX1Implicit-2009':'dec_GeneralName'(V2, []), TempTlv3}; +[V2 = {131074,_}|TempTlv3] -> + {'PKIX1Implicit-2009':'dec_GeneralName'(V2, []), TempTlv3}; +[V2 = {131075,_}|TempTlv3] -> + {'PKIX1Implicit-2009':'dec_GeneralName'(V2, []), TempTlv3}; +[V2 = {131076,_}|TempTlv3] -> + {'PKIX1Implicit-2009':'dec_GeneralName'(V2, []), TempTlv3}; +[V2 = {131077,_}|TempTlv3] -> + {'PKIX1Implicit-2009':'dec_GeneralName'(V2, []), TempTlv3}; +[V2 = {131078,_}|TempTlv3] -> + {'PKIX1Implicit-2009':'dec_GeneralName'(V2, []), TempTlv3}; +[V2 = {131079,_}|TempTlv3] -> + {'PKIX1Implicit-2009':'dec_GeneralName'(V2, []), TempTlv3}; +[V2 = {131080,_}|TempTlv3] -> + {'PKIX1Implicit-2009':'dec_GeneralName'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'SinglePubInfo',Term1,Term2}, +Res1. + + +%%================================ +%% PKIArchiveOptions +%%================================ +enc_PKIArchiveOptions(Val) -> + enc_PKIArchiveOptions(Val, []). + +enc_PKIArchiveOptions(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + encryptedPrivKey -> + 'enc_EncryptedKey'(element(2,Val), [<<160>>]); + keyGenParameters -> + encode_restricted_string(element(2,Val), [<<129>>]); + archiveRemGenPrivKey -> + encode_boolean(element(2,Val), [<<130>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_PKIArchiveOptions(Tlv) -> + dec_PKIArchiveOptions(Tlv, []). + +dec_PKIArchiveOptions(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'encryptedPrivKey' + {131072, V1} -> + {encryptedPrivKey, 'dec_EncryptedKey'(V1, [])}; + + +%% 'keyGenParameters' + {131073, V1} -> + {keyGenParameters, decode_octet_string(V1, [])}; + + +%% 'archiveRemGenPrivKey' + {131074, V1} -> + {archiveRemGenPrivKey, decode_boolean(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% EncryptedKey +%%================================ +enc_EncryptedKey(Val) -> + enc_EncryptedKey(Val, []). + +enc_EncryptedKey(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + encryptedValue -> + 'enc_EncryptedValue'(element(2,Val), [<<48>>]); + envelopedData -> + 'CryptographicMessageSyntax-2009':'enc_EnvelopedData'(element(2,Val), [<<160>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +dec_EncryptedKey(Tlv) -> + dec_EncryptedKey(Tlv, []). + +dec_EncryptedKey(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'encryptedValue' + {16, V1} -> + {encryptedValue, 'dec_EncryptedValue'(V1, [])}; + + +%% 'envelopedData' + {131072, V1} -> + {envelopedData, 'CryptographicMessageSyntax-2009':'dec_EnvelopedData'(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% EncryptedValue +%%================================ +enc_EncryptedValue(Val) -> + enc_EncryptedValue(Val, [<<48>>]). + +enc_EncryptedValue(Val, TagIn) -> +{_,Cindex1,Cindex2,Cindex3,Cindex4,Cindex5,Cindex6} = Val, + +%%------------------------------------------------- +%% attribute intendedAlg(1) with type SEQUENCE OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_EncryptedValue_intendedAlg'(Cindex1, [<<160>>]) + end, + +%%------------------------------------------------- +%% attribute symmAlg(2) with type SEQUENCE OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_EncryptedValue_symmAlg'(Cindex2, [<<161>>]) + end, + +%%------------------------------------------------- +%% attribute encSymmKey(3) with type BIT STRING OPTIONAL +%%------------------------------------------------- + {EncBytes3,EncLen3} = case Cindex3 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_unnamed_bit_string(Cindex3, [<<130>>]) + end, + +%%------------------------------------------------- +%% attribute keyAlg(4) with type SEQUENCE OPTIONAL +%%------------------------------------------------- + {EncBytes4,EncLen4} = case Cindex4 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'enc_EncryptedValue_keyAlg'(Cindex4, [<<163>>]) + end, + +%%------------------------------------------------- +%% attribute valueHint(5) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes5,EncLen5} = case Cindex5 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex5, [<<132>>]) + end, + +%%------------------------------------------------- +%% attribute encValue(6) with type BIT STRING +%%------------------------------------------------- + {EncBytes6,EncLen6} = encode_unnamed_bit_string(Cindex6, [<<3>>]), + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4, EncBytes5, EncBytes6], +LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4 + EncLen5 + EncLen6, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% EncryptedValue_intendedAlg +%%================================ +enc_EncryptedValue_intendedAlg(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCRMF-2009':'getenc_internal_object_set_argument_65'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% EncryptedValue_symmAlg +%%================================ +enc_EncryptedValue_symmAlg(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCRMF-2009':'getenc_internal_object_set_argument_67'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + + +%%================================ +%% EncryptedValue_keyAlg +%%================================ +enc_EncryptedValue_keyAlg(Val, TagIn) -> + {_,Cindex1,Cindex2} = Val, +Objalgorithm = + 'PKIXCRMF-2009':'getenc_internal_object_set_argument_69'( Cindex1), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- + {EncBytes1,EncLen1} = encode_object_identifier(Cindex1, [<<6>>]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + {TmpBytes2,_ } = Objalgorithm('Params', Cindex2, []), + encode_open_type(TmpBytes2, []) + end, + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_EncryptedValue(Tlv) -> + dec_EncryptedValue(Tlv, [16]). + +dec_EncryptedValue(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute intendedAlg(1) with type SEQUENCE OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {'dec_EncryptedValue_intendedAlg'(V1, []), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute symmAlg(2) with type SEQUENCE OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{131073,V2}|TempTlv3] -> + {'dec_EncryptedValue_symmAlg'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +%%------------------------------------------------- +%% attribute encSymmKey(3) with type BIT STRING OPTIONAL +%%------------------------------------------------- +{Term3,Tlv4} = case Tlv3 of +[{131074,V3}|TempTlv4] -> + {decode_native_bit_string(V3, []), TempTlv4}; + _ -> + { asn1_NOVALUE, Tlv3} +end, + +%%------------------------------------------------- +%% attribute keyAlg(4) with type SEQUENCE OPTIONAL +%%------------------------------------------------- +{Term4,Tlv5} = case Tlv4 of +[{131075,V4}|TempTlv5] -> + {'dec_EncryptedValue_keyAlg'(V4, []), TempTlv5}; + _ -> + { asn1_NOVALUE, Tlv4} +end, + +%%------------------------------------------------- +%% attribute valueHint(5) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term5,Tlv6} = case Tlv5 of +[{131076,V5}|TempTlv6] -> + {decode_octet_string(V5, []), TempTlv6}; + _ -> + { asn1_NOVALUE, Tlv5} +end, + +%%------------------------------------------------- +%% attribute encValue(6) with type BIT STRING +%%------------------------------------------------- +[V6|Tlv7] = Tlv6, +Term6 = decode_native_bit_string(V6, [3]), + +case Tlv7 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv7}}}) % extra fields not allowed +end, +Res1 = {'EncryptedValue',Term1,Term2,Term3,Term4,Term5,Term6}, +Res1. +'dec_EncryptedValue_intendedAlg'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCRMF-2009':'getdec_internal_object_set_argument_65'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'EncryptedValue_intendedAlg',Term1,Term2}, +Res1. +'dec_EncryptedValue_symmAlg'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCRMF-2009':'getdec_internal_object_set_argument_67'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'EncryptedValue_symmAlg',Term1,Term2}, +Res1. +'dec_EncryptedValue_keyAlg'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute algorithm(1) with type OBJECT IDENTIFIER +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = decode_object_identifier(V1, [6]), + +%%------------------------------------------------- +%% attribute parameters(2) with type typefieldParams OPTIONAL +%%------------------------------------------------- +{Tmpterm1,Tlv3} = case Tlv2 of +[V2|TempTlv3] -> + {decode_open_type(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +DecObjalgorithmTerm1 = + 'PKIXCRMF-2009':'getdec_internal_object_set_argument_69'(Term1), +Term2 = + case Tmpterm1 of + asn1_NOVALUE ->asn1_NOVALUE; + _ -> + case (catch DecObjalgorithmTerm1('Params', Tmpterm1, [])) of + {'EXIT', Reason1} -> + exit({'Type not compatible with table constraint',Reason1}); + Tmpterm2 -> + Tmpterm2 + end + end, + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'EncryptedValue_keyAlg',Term1,Term2}, +Res1. + + +%%================================ +%% KeyGenParameters +%%================================ +enc_KeyGenParameters(Val) -> + enc_KeyGenParameters(Val, [<<4>>]). + +enc_KeyGenParameters(Val, TagIn) -> +encode_restricted_string(Val, TagIn). + + +dec_KeyGenParameters(Tlv) -> + dec_KeyGenParameters(Tlv, [4]). + +dec_KeyGenParameters(Tlv, TagIn) -> +decode_octet_string(Tlv, TagIn). + + + +%%================================ +%% OldCertId +%%================================ +enc_OldCertId(Val) -> + enc_OldCertId(Val, [<<48>>]). + +enc_OldCertId(Val, TagIn) -> + enc_CertId(Val, TagIn). + + +dec_OldCertId(Tlv) -> + dec_OldCertId(Tlv, [16]). + +dec_OldCertId(Tlv, TagIn) -> +'dec_CertId'(Tlv, TagIn). + + + +%%================================ +%% CertId +%%================================ +enc_CertId(Val) -> + enc_CertId(Val, [<<48>>]). + +enc_CertId(Val, TagIn) -> +{_,Cindex1,Cindex2} = Val, + +%%------------------------------------------------- +%% attribute issuer(1) External PKIX1Implicit-2009:GeneralName +%%------------------------------------------------- + {EncBytes1,EncLen1} = 'PKIX1Implicit-2009':'enc_GeneralName'(Cindex1, []), + +%%------------------------------------------------- +%% attribute serialNumber(2) with type INTEGER +%%------------------------------------------------- + {EncBytes2,EncLen2} = encode_integer(Cindex2, [<<2>>]), + + BytesSoFar = [EncBytes1, EncBytes2], +LenSoFar = EncLen1 + EncLen2, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +dec_CertId(Tlv) -> + dec_CertId(Tlv, [16]). + +dec_CertId(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute issuer(1) External PKIX1Implicit-2009:GeneralName +%%------------------------------------------------- +[V1|Tlv2] = Tlv1, +Term1 = 'PKIX1Implicit-2009':'dec_GeneralName'(V1, []), + +%%------------------------------------------------- +%% attribute serialNumber(2) with type INTEGER +%%------------------------------------------------- +[V2|Tlv3] = Tlv2, +Term2 = decode_integer(V2, [2]), + +case Tlv3 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowed +end, +Res1 = {'CertId',Term1,Term2}, +Res1. + + +%%================================ +%% ProtocolEncrKey +%%================================ +enc_ProtocolEncrKey(Val) -> + enc_ProtocolEncrKey(Val, [<<48>>]). + +enc_ProtocolEncrKey(Val, TagIn) -> + 'PKIX1Explicit-2009':enc_SubjectPublicKeyInfo(Val, TagIn). + + +dec_ProtocolEncrKey(Tlv) -> + dec_ProtocolEncrKey(Tlv, [16]). + +dec_ProtocolEncrKey(Tlv, TagIn) -> +'PKIX1Explicit-2009':'dec_SubjectPublicKeyInfo'(Tlv, TagIn). + + + +%%================================ +%% UTF8Pairs +%%================================ +enc_UTF8Pairs(Val) -> + enc_UTF8Pairs(Val, [<<12>>]). + +enc_UTF8Pairs(Val, TagIn) -> +encode_UTF8_string(Val, TagIn). + + +dec_UTF8Pairs(Tlv) -> + dec_UTF8Pairs(Tlv, [12]). + +dec_UTF8Pairs(Tlv, TagIn) -> +decode_UTF8_string(Tlv, TagIn). + + + +%%================================ +%% CertReq +%%================================ +enc_CertReq(Val) -> + enc_CertReq(Val, [<<48>>]). + +enc_CertReq(Val, TagIn) -> + enc_CertRequest(Val, TagIn). + + +dec_CertReq(Tlv) -> + dec_CertReq(Tlv, [16]). + +dec_CertReq(Tlv, TagIn) -> +'dec_CertRequest'(Tlv, TagIn). + +'id-pkip'() -> +{1,3,6,1,5,5,7,5}. + +'id-smime'() -> +{1,2,840,113549,1,9,16}. + +'id-ct'() -> +{1,2,840,113549,1,9,16,1}. + +'id-PasswordBasedMac'() -> +{1,2,840,113533,7,66,13}. + +'id-ct-encKeyWithID'() -> +{1,2,840,113549,1,9,16,1,21}. + +'id-regCtrl'() -> +{1,3,6,1,5,5,7,5,1}. + +'id-regCtrl-regToken'() -> +{1,3,6,1,5,5,7,5,1,1}. + +'id-regCtrl-authenticator'() -> +{1,3,6,1,5,5,7,5,1,2}. + +'id-regCtrl-pkiPublicationInfo'() -> +{1,3,6,1,5,5,7,5,1,3}. + +'id-regCtrl-pkiArchiveOptions'() -> +{1,3,6,1,5,5,7,5,1,4}. + +'id-regCtrl-oldCertID'() -> +{1,3,6,1,5,5,7,5,1,5}. + +'id-regCtrl-protocolEncrKey'() -> +{1,3,6,1,5,5,7,5,1,6}. + +'id-regInfo'() -> +{1,3,6,1,5,5,7,5,2}. + +'id-regInfo-utf8Pairs'() -> +{1,3,6,1,5,5,7,5,2,1}. + +'id-regInfo-certReq'() -> +{1,3,6,1,5,5,7,5,2,2}. + + + + +%%================================ +%% ct-encKeyWithID +%%================================ +'enc_ct-encKeyWithID'('Type', Val, _RestPrimFieldName) -> + enc_EncKeyWithID(Val, [<<48>>]). + + +'dec_ct-encKeyWithID'('Type', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_EncKeyWithID(Tlv, [16]). + +tlv_format(Bytes) when is_binary(Bytes) -> + {Tlv,_} = ber_decode_nif(Bytes), + Tlv; +tlv_format(Bytes) -> + Bytes. + + + +%%================================ +%% regCtrl-regToken +%%================================ +'enc_regCtrl-regToken'('Type', Val, _RestPrimFieldName) -> + enc_RegToken(Val, [<<12>>]); +'enc_regCtrl-regToken'('equality-match', _,_) -> + exit({error,{'use of missing field in object', 'equality-match'}}). + + +'dec_regCtrl-regToken'('Type', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_RegToken(Tlv, [12]); +'dec_regCtrl-regToken'('equality-match', _,_) -> + exit({error,{'illegal use of missing field in object', 'equality-match'}}). + + + + +%%================================ +%% regCtrl-authenticator +%%================================ +'enc_regCtrl-authenticator'('Type', Val, _RestPrimFieldName) -> + enc_Authenticator(Val, [<<12>>]); +'enc_regCtrl-authenticator'('equality-match', _,_) -> + exit({error,{'use of missing field in object', 'equality-match'}}). + + +'dec_regCtrl-authenticator'('Type', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_Authenticator(Tlv, [12]); +'dec_regCtrl-authenticator'('equality-match', _,_) -> + exit({error,{'illegal use of missing field in object', 'equality-match'}}). + + + + +%%================================ +%% regCtrl-pkiPublicationInfo +%%================================ +'enc_regCtrl-pkiPublicationInfo'('Type', Val, _RestPrimFieldName) -> + enc_PKIPublicationInfo(Val, [<<48>>]); +'enc_regCtrl-pkiPublicationInfo'('equality-match', _,_) -> + exit({error,{'use of missing field in object', 'equality-match'}}). + + +'dec_regCtrl-pkiPublicationInfo'('Type', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_PKIPublicationInfo(Tlv, [16]); +'dec_regCtrl-pkiPublicationInfo'('equality-match', _,_) -> + exit({error,{'illegal use of missing field in object', 'equality-match'}}). + + + + +%%================================ +%% regCtrl-pkiArchiveOptions +%%================================ +'enc_regCtrl-pkiArchiveOptions'('Type', Val, _RestPrimFieldName) -> + enc_PKIArchiveOptions(Val, []); +'enc_regCtrl-pkiArchiveOptions'('equality-match', _,_) -> + exit({error,{'use of missing field in object', 'equality-match'}}). + + +'dec_regCtrl-pkiArchiveOptions'('Type', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_PKIArchiveOptions(Tlv, []); +'dec_regCtrl-pkiArchiveOptions'('equality-match', _,_) -> + exit({error,{'illegal use of missing field in object', 'equality-match'}}). + + + + +%%================================ +%% regCtrl-oldCertID +%%================================ +'enc_regCtrl-oldCertID'('Type', Val, _RestPrimFieldName) -> + enc_OldCertId(Val, [<<48>>]); +'enc_regCtrl-oldCertID'('equality-match', _,_) -> + exit({error,{'use of missing field in object', 'equality-match'}}). + + +'dec_regCtrl-oldCertID'('Type', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_OldCertId(Tlv, [16]); +'dec_regCtrl-oldCertID'('equality-match', _,_) -> + exit({error,{'illegal use of missing field in object', 'equality-match'}}). + + + + +%%================================ +%% regCtrl-protocolEncrKey +%%================================ +'enc_regCtrl-protocolEncrKey'('Type', Val, _RestPrimFieldName) -> + enc_ProtocolEncrKey(Val, [<<48>>]); +'enc_regCtrl-protocolEncrKey'('equality-match', _,_) -> + exit({error,{'use of missing field in object', 'equality-match'}}). + + +'dec_regCtrl-protocolEncrKey'('Type', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_ProtocolEncrKey(Tlv, [16]); +'dec_regCtrl-protocolEncrKey'('equality-match', _,_) -> + exit({error,{'illegal use of missing field in object', 'equality-match'}}). + + + + +%%================================ +%% regInfo-utf8Pairs +%%================================ +'enc_regInfo-utf8Pairs'('Type', Val, _RestPrimFieldName) -> + enc_UTF8Pairs(Val, [<<12>>]); +'enc_regInfo-utf8Pairs'('equality-match', _,_) -> + exit({error,{'use of missing field in object', 'equality-match'}}). + + +'dec_regInfo-utf8Pairs'('Type', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_UTF8Pairs(Tlv, [12]); +'dec_regInfo-utf8Pairs'('equality-match', _,_) -> + exit({error,{'illegal use of missing field in object', 'equality-match'}}). + + + + +%%================================ +%% regInfo-certReq +%%================================ +'enc_regInfo-certReq'('Type', Val, _RestPrimFieldName) -> + enc_CertReq(Val, [<<48>>]); +'enc_regInfo-certReq'('equality-match', _,_) -> + exit({error,{'use of missing field in object', 'equality-match'}}). + + +'dec_regInfo-certReq'('Type', Bytes,_) -> + Tlv = tlv_format(Bytes), + dec_CertReq(Tlv, [16]); +'dec_regInfo-certReq'('equality-match', _,_) -> + exit({error,{'illegal use of missing field in object', 'equality-match'}}). + + + + +%%================================ +%% Password-MACAlgorithms +%%================================ +'getenc_Password-MACAlgorithms'({1,2,840,113533,7,66,13}) -> + fun(Type, Val, _RestPrimFieldName) -> + case Type of + 'Params' -> + 'enc_PBMParameter'(Val) + end + end; +'getenc_Password-MACAlgorithms'(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +'getdec_Password-MACAlgorithms'({1,2,840,113533,7,66,13}) -> + fun(Type, Bytes, _RestPrimFieldName) -> + case Type of + 'Params' -> + 'dec_PBMParameter'(Bytes) + end + end; +'getdec_Password-MACAlgorithms'(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% DigestAlgorithms +%%================================ +getenc_DigestAlgorithms(Id) when Id =:= {1,3,14,3,2,26} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_mda-sha1'(T,V,O) end; +getenc_DigestAlgorithms(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_DigestAlgorithms(Id) when Id =:= {1,3,14,3,2,26} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_mda-sha1'(T,V,O) end; +getdec_DigestAlgorithms(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% MACAlgorithms +%%================================ +getenc_MACAlgorithms(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_MACAlgorithms(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_MACAlgorithms(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_MACAlgorithms(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% PrivateKeyAttributes +%%================================ +getenc_PrivateKeyAttributes(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_PrivateKeyAttributes(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% RegControlSet +%%================================ +getenc_RegControlSet(Id) when Id =:= {1,3,6,1,5,5,7,5,1,1} -> + fun 'enc_regCtrl-regToken'/3; +getenc_RegControlSet(Id) when Id =:= {1,3,6,1,5,5,7,5,1,2} -> + fun 'enc_regCtrl-authenticator'/3; +getenc_RegControlSet(Id) when Id =:= {1,3,6,1,5,5,7,5,1,3} -> + fun 'enc_regCtrl-pkiPublicationInfo'/3; +getenc_RegControlSet(Id) when Id =:= {1,3,6,1,5,5,7,5,1,4} -> + fun 'enc_regCtrl-pkiArchiveOptions'/3; +getenc_RegControlSet(Id) when Id =:= {1,3,6,1,5,5,7,5,1,5} -> + fun 'enc_regCtrl-oldCertID'/3; +getenc_RegControlSet(Id) when Id =:= {1,3,6,1,5,5,7,5,1,6} -> + fun 'enc_regCtrl-protocolEncrKey'/3; +getenc_RegControlSet(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_RegControlSet(Id) when Id =:= {1,3,6,1,5,5,7,5,1,1} -> + fun 'dec_regCtrl-regToken'/3; +getdec_RegControlSet(Id) when Id =:= {1,3,6,1,5,5,7,5,1,2} -> + fun 'dec_regCtrl-authenticator'/3; +getdec_RegControlSet(Id) when Id =:= {1,3,6,1,5,5,7,5,1,3} -> + fun 'dec_regCtrl-pkiPublicationInfo'/3; +getdec_RegControlSet(Id) when Id =:= {1,3,6,1,5,5,7,5,1,4} -> + fun 'dec_regCtrl-pkiArchiveOptions'/3; +getdec_RegControlSet(Id) when Id =:= {1,3,6,1,5,5,7,5,1,5} -> + fun 'dec_regCtrl-oldCertID'/3; +getdec_RegControlSet(Id) when Id =:= {1,3,6,1,5,5,7,5,1,6} -> + fun 'dec_regCtrl-protocolEncrKey'/3; +getdec_RegControlSet(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% RegInfoSet +%%================================ +getenc_RegInfoSet(Id) when Id =:= {1,3,6,1,5,5,7,5,2,1} -> + fun 'enc_regInfo-utf8Pairs'/3; +getenc_RegInfoSet(Id) when Id =:= {1,3,6,1,5,5,7,5,2,2} -> + fun 'enc_regInfo-certReq'/3; +getenc_RegInfoSet(ErrV) -> + fun(C,V,_) -> +exit({'Type not compatible with table constraint',{component,C},{value,V}, {unique_name_and_value,id, ErrV}}) end. + +getdec_RegInfoSet(Id) when Id =:= {1,3,6,1,5,5,7,5,2,1} -> + fun 'dec_regInfo-utf8Pairs'/3; +getdec_RegInfoSet(Id) when Id =:= {1,3,6,1,5,5,7,5,2,2} -> + fun 'dec_regInfo-certReq'/3; +'getdec_RegInfoSet'(ErrV) -> + fun(C,V,_) -> exit({{component,C},{value,V},{unique_name_and_value,id, ErrV}}) end. + + + + + +%%================================ +%% internal_object_set_argument_58 +%%================================ +getenc_internal_object_set_argument_58(Id) when Id =:= {1,3,14,3,2,26} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_mda-sha1'(T,V,O) end; +getenc_internal_object_set_argument_58(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_58(Id) when Id =:= {1,3,14,3,2,26} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_mda-sha1'(T,V,O) end; +getdec_internal_object_set_argument_58(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_56 +%%================================ +getenc_internal_object_set_argument_56(Id) when Id =:= {1,3,6,1,5,5,7,5,2,1} -> + fun 'enc_regInfo-utf8Pairs'/3; +getenc_internal_object_set_argument_56(Id) when Id =:= {1,3,6,1,5,5,7,5,2,2} -> + fun 'enc_regInfo-certReq'/3; +getenc_internal_object_set_argument_56(ErrV) -> + fun(C,V,_) -> +exit({'Type not compatible with table constraint',{component,C},{value,V}, {unique_name_and_value,id, ErrV}}) end. + +getdec_internal_object_set_argument_56(Id) when Id =:= {1,3,6,1,5,5,7,5,2,1} -> + fun 'dec_regInfo-utf8Pairs'/3; +getdec_internal_object_set_argument_56(Id) when Id =:= {1,3,6,1,5,5,7,5,2,2} -> + fun 'dec_regInfo-certReq'/3; +'getdec_internal_object_set_argument_56'(ErrV) -> + fun(C,V,_) -> exit({{component,C},{value,V},{unique_name_and_value,id, ErrV}}) end. + + + + + +%%================================ +%% internal_object_set_argument_69 +%%================================ +getenc_internal_object_set_argument_69(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_69(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_67 +%%================================ +getenc_internal_object_set_argument_67(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_67(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_65 +%%================================ +getenc_internal_object_set_argument_65(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_65(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_63 +%%================================ +getenc_internal_object_set_argument_63(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_63(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_62 +%%================================ +getenc_internal_object_set_argument_62(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_62(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_60 +%%================================ +getenc_internal_object_set_argument_60(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_60(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_60(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_60(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_8 +%%================================ +getenc_internal_object_set_argument_8(Id) when Id =:= {1,3,6,1,5,5,7,5,1,1} -> + fun 'enc_regCtrl-regToken'/3; +getenc_internal_object_set_argument_8(Id) when Id =:= {1,3,6,1,5,5,7,5,1,2} -> + fun 'enc_regCtrl-authenticator'/3; +getenc_internal_object_set_argument_8(Id) when Id =:= {1,3,6,1,5,5,7,5,1,3} -> + fun 'enc_regCtrl-pkiPublicationInfo'/3; +getenc_internal_object_set_argument_8(Id) when Id =:= {1,3,6,1,5,5,7,5,1,4} -> + fun 'enc_regCtrl-pkiArchiveOptions'/3; +getenc_internal_object_set_argument_8(Id) when Id =:= {1,3,6,1,5,5,7,5,1,5} -> + fun 'enc_regCtrl-oldCertID'/3; +getenc_internal_object_set_argument_8(Id) when Id =:= {1,3,6,1,5,5,7,5,1,6} -> + fun 'enc_regCtrl-protocolEncrKey'/3; +getenc_internal_object_set_argument_8(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_8(Id) when Id =:= {1,3,6,1,5,5,7,5,1,1} -> + fun 'dec_regCtrl-regToken'/3; +getdec_internal_object_set_argument_8(Id) when Id =:= {1,3,6,1,5,5,7,5,1,2} -> + fun 'dec_regCtrl-authenticator'/3; +getdec_internal_object_set_argument_8(Id) when Id =:= {1,3,6,1,5,5,7,5,1,3} -> + fun 'dec_regCtrl-pkiPublicationInfo'/3; +getdec_internal_object_set_argument_8(Id) when Id =:= {1,3,6,1,5,5,7,5,1,4} -> + fun 'dec_regCtrl-pkiArchiveOptions'/3; +getdec_internal_object_set_argument_8(Id) when Id =:= {1,3,6,1,5,5,7,5,1,5} -> + fun 'dec_regCtrl-oldCertID'/3; +getdec_internal_object_set_argument_8(Id) when Id =:= {1,3,6,1,5,5,7,5,1,6} -> + fun 'dec_regCtrl-protocolEncrKey'/3; +getdec_internal_object_set_argument_8(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_7 +%%================================ +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,9} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-SubjectDirectoryAttributes'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,14} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-SubjectKeyIdentifier'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,15} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-KeyUsage'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,16} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-PrivateKeyUsagePeriod'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,17} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-SubjectAltName'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,18} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-IssuerAltName'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,19} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-BasicConstraints'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,30} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-NameConstraints'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,31} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-CRLDistributionPoints'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,32} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-CertificatePolicies'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,33} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-PolicyMappings'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,35} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-AuthorityKeyIdentifier'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,36} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-PolicyConstraints'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,37} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-ExtKeyUsage'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,46} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-FreshestCRL'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {2,5,29,54} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-InhibitAnyPolicy'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {1,3,6,1,5,5,7,1,1} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-AuthorityInfoAccess'(T,V,O) end; +getenc_internal_object_set_argument_7(Id) when Id =:= {1,3,6,1,5,5,7,1,11} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-SubjectInfoAccessSyntax'(T,V,O) end; +getenc_internal_object_set_argument_7(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,9} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-SubjectDirectoryAttributes'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,14} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-SubjectKeyIdentifier'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,15} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-KeyUsage'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,16} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-PrivateKeyUsagePeriod'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,17} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-SubjectAltName'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,18} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-IssuerAltName'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,19} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-BasicConstraints'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,30} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-NameConstraints'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,31} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-CRLDistributionPoints'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,32} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-CertificatePolicies'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,33} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-PolicyMappings'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,35} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-AuthorityKeyIdentifier'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,36} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-PolicyConstraints'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,37} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-ExtKeyUsage'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,46} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-FreshestCRL'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {2,5,29,54} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-InhibitAnyPolicy'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {1,3,6,1,5,5,7,1,1} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-AuthorityInfoAccess'(T,V,O) end; +getdec_internal_object_set_argument_7(Id) when Id =:= {1,3,6,1,5,5,7,1,11} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-SubjectInfoAccessSyntax'(T,V,O) end; +getdec_internal_object_set_argument_7(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_6 +%%================================ +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,9} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-SubjectDirectoryAttributes'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,14} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-SubjectKeyIdentifier'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,15} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-KeyUsage'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,16} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-PrivateKeyUsagePeriod'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,17} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-SubjectAltName'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,18} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-IssuerAltName'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,19} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-BasicConstraints'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,30} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-NameConstraints'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,31} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-CRLDistributionPoints'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,32} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-CertificatePolicies'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,33} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-PolicyMappings'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,35} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-AuthorityKeyIdentifier'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,36} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-PolicyConstraints'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,37} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-ExtKeyUsage'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,46} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-FreshestCRL'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {2,5,29,54} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-InhibitAnyPolicy'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {1,3,6,1,5,5,7,1,1} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-AuthorityInfoAccess'(T,V,O) end; +getenc_internal_object_set_argument_6(Id) when Id =:= {1,3,6,1,5,5,7,1,11} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'enc_ext-SubjectInfoAccessSyntax'(T,V,O) end; +getenc_internal_object_set_argument_6(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,9} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-SubjectDirectoryAttributes'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,14} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-SubjectKeyIdentifier'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,15} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-KeyUsage'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,16} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-PrivateKeyUsagePeriod'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,17} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-SubjectAltName'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,18} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-IssuerAltName'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,19} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-BasicConstraints'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,30} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-NameConstraints'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,31} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-CRLDistributionPoints'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,32} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-CertificatePolicies'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,33} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-PolicyMappings'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,35} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-AuthorityKeyIdentifier'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,36} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-PolicyConstraints'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,37} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-ExtKeyUsage'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,46} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-FreshestCRL'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {2,5,29,54} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-InhibitAnyPolicy'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {1,3,6,1,5,5,7,1,1} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-AuthorityInfoAccess'(T,V,O) end; +getdec_internal_object_set_argument_6(Id) when Id =:= {1,3,6,1,5,5,7,1,11} -> + fun(T,V,O) -> 'PKIX1Implicit-2009':'dec_ext-SubjectInfoAccessSyntax'(T,V,O) end; +getdec_internal_object_set_argument_6(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_2 +%%================================ +getenc_internal_object_set_argument_2(Id) when Id =:= {1,2,840,10040,4,3} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-dsaWithSHA1'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {1,2,840,10045,4,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-ecdsaWithSHA1'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {1,2,840,10045,4,3,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-ecdsaWithSHA224'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {1,2,840,10045,4,3,2} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-ecdsaWithSHA256'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {1,2,840,10045,4,3,3} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-ecdsaWithSHA384'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {1,2,840,10045,4,3,4} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-ecdsaWithSHA512'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {1,2,840,113549,1,1,2} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-rsaWithMD2'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {1,2,840,113549,1,1,4} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-rsaWithMD5'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {1,2,840,113549,1,1,5} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-rsaWithSHA1'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {1,2,840,113549,1,1,10} -> + fun(T,V,O) -> 'PKIX1-PSS-OAEP-Algorithms-2009':'enc_sa-rsaSSA-PSS'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,16,840,1,101,3,4,3,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-dsaWithSHA224'(T,V,O) end; +getenc_internal_object_set_argument_2(Id) when Id =:= {2,16,840,1,101,3,4,3,2} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-dsaWithSHA256'(T,V,O) end; +getenc_internal_object_set_argument_2(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_2(Id) when Id =:= {1,2,840,10040,4,3} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-dsaWithSHA1'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {1,2,840,10045,4,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-ecdsaWithSHA1'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {1,2,840,10045,4,3,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-ecdsaWithSHA224'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {1,2,840,10045,4,3,2} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-ecdsaWithSHA256'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {1,2,840,10045,4,3,3} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-ecdsaWithSHA384'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {1,2,840,10045,4,3,4} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-ecdsaWithSHA512'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {1,2,840,113549,1,1,2} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-rsaWithMD2'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {1,2,840,113549,1,1,4} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-rsaWithMD5'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {1,2,840,113549,1,1,5} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-rsaWithSHA1'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {1,2,840,113549,1,1,10} -> + fun(T,V,O) -> 'PKIX1-PSS-OAEP-Algorithms-2009':'dec_sa-rsaSSA-PSS'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,16,840,1,101,3,4,3,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-dsaWithSHA224'(T,V,O) end; +getdec_internal_object_set_argument_2(Id) when Id =:= {2,16,840,1,101,3,4,3,2} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-dsaWithSHA256'(T,V,O) end; +getdec_internal_object_set_argument_2(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_12 +%%================================ +getenc_internal_object_set_argument_12(Id) when Id =:= {1,2,840,10040,4,3} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-dsaWithSHA1'(T,V,O) end; +getenc_internal_object_set_argument_12(Id) when Id =:= {1,2,840,10045,4,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-ecdsaWithSHA1'(T,V,O) end; +getenc_internal_object_set_argument_12(Id) when Id =:= {1,2,840,10045,4,3,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-ecdsaWithSHA224'(T,V,O) end; +getenc_internal_object_set_argument_12(Id) when Id =:= {1,2,840,10045,4,3,2} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-ecdsaWithSHA256'(T,V,O) end; +getenc_internal_object_set_argument_12(Id) when Id =:= {1,2,840,10045,4,3,3} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-ecdsaWithSHA384'(T,V,O) end; +getenc_internal_object_set_argument_12(Id) when Id =:= {1,2,840,10045,4,3,4} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-ecdsaWithSHA512'(T,V,O) end; +getenc_internal_object_set_argument_12(Id) when Id =:= {1,2,840,113549,1,1,2} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-rsaWithMD2'(T,V,O) end; +getenc_internal_object_set_argument_12(Id) when Id =:= {1,2,840,113549,1,1,4} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-rsaWithMD5'(T,V,O) end; +getenc_internal_object_set_argument_12(Id) when Id =:= {1,2,840,113549,1,1,5} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-rsaWithSHA1'(T,V,O) end; +getenc_internal_object_set_argument_12(Id) when Id =:= {1,2,840,113549,1,1,10} -> + fun(T,V,O) -> 'PKIX1-PSS-OAEP-Algorithms-2009':'enc_sa-rsaSSA-PSS'(T,V,O) end; +getenc_internal_object_set_argument_12(Id) when Id =:= {2,16,840,1,101,3,4,3,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-dsaWithSHA224'(T,V,O) end; +getenc_internal_object_set_argument_12(Id) when Id =:= {2,16,840,1,101,3,4,3,2} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'enc_sa-dsaWithSHA256'(T,V,O) end; +getenc_internal_object_set_argument_12(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +getdec_internal_object_set_argument_12(Id) when Id =:= {1,2,840,10040,4,3} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-dsaWithSHA1'(T,V,O) end; +getdec_internal_object_set_argument_12(Id) when Id =:= {1,2,840,10045,4,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-ecdsaWithSHA1'(T,V,O) end; +getdec_internal_object_set_argument_12(Id) when Id =:= {1,2,840,10045,4,3,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-ecdsaWithSHA224'(T,V,O) end; +getdec_internal_object_set_argument_12(Id) when Id =:= {1,2,840,10045,4,3,2} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-ecdsaWithSHA256'(T,V,O) end; +getdec_internal_object_set_argument_12(Id) when Id =:= {1,2,840,10045,4,3,3} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-ecdsaWithSHA384'(T,V,O) end; +getdec_internal_object_set_argument_12(Id) when Id =:= {1,2,840,10045,4,3,4} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-ecdsaWithSHA512'(T,V,O) end; +getdec_internal_object_set_argument_12(Id) when Id =:= {1,2,840,113549,1,1,2} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-rsaWithMD2'(T,V,O) end; +getdec_internal_object_set_argument_12(Id) when Id =:= {1,2,840,113549,1,1,4} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-rsaWithMD5'(T,V,O) end; +getdec_internal_object_set_argument_12(Id) when Id =:= {1,2,840,113549,1,1,5} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-rsaWithSHA1'(T,V,O) end; +getdec_internal_object_set_argument_12(Id) when Id =:= {1,2,840,113549,1,1,10} -> + fun(T,V,O) -> 'PKIX1-PSS-OAEP-Algorithms-2009':'dec_sa-rsaSSA-PSS'(T,V,O) end; +getdec_internal_object_set_argument_12(Id) when Id =:= {2,16,840,1,101,3,4,3,1} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-dsaWithSHA224'(T,V,O) end; +getdec_internal_object_set_argument_12(Id) when Id =:= {2,16,840,1,101,3,4,3,2} -> + fun(T,V,O) -> 'PKIXAlgs-2009':'dec_sa-dsaWithSHA256'(T,V,O) end; +getdec_internal_object_set_argument_12(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + + + +%%================================ +%% internal_object_set_argument_10 +%%================================ +getenc_internal_object_set_argument_10({1,2,840,113533,7,66,13}) -> + fun(Type, Val, _RestPrimFieldName) -> + case Type of + 'Params' -> + 'enc_PBMParameter'(Val) + end + end; +getenc_internal_object_set_argument_10(_) -> + fun(_, Val, _RestPrimFieldName) -> + case Val of + {asn1_OPENTYPE,Bin} when is_binary(Bin) -> + {Bin,byte_size(Bin)} + end + end. + +'getdec_internal_object_set_argument_10'({1,2,840,113533,7,66,13}) -> + fun(Type, Bytes, _RestPrimFieldName) -> + case Type of + 'Params' -> + 'dec_PBMParameter'(Bytes) + end + end; +getdec_internal_object_set_argument_10(_) -> + fun(_,Bytes, _RestPrimFieldName) -> + case Bytes of + Bin when is_binary(Bin) -> + {asn1_OPENTYPE,Bin}; + _ -> + {asn1_OPENTYPE,ber_encode(Bytes)} + end + end. + + + +%%% +%%% Run-time functions. +%%% + +'dialyzer-suppressions'(Arg) -> + ok. + +ber_decode_nif(B) -> + asn1rt_nif:decode_ber_tlv(B). + +ber_encode([Tlv]) -> + ber_encode(Tlv); +ber_encode(Tlv) when is_binary(Tlv) -> + Tlv; +ber_encode(Tlv) -> + asn1rt_nif:encode_ber_tlv(Tlv). + +collect_parts(TlvList) -> + collect_parts(TlvList, []). + +collect_parts([{_, L} | Rest], Acc) when is_list(L) -> + collect_parts(Rest, [collect_parts(L) | Acc]); +collect_parts([{3, <>} | Rest], _Acc) -> + collect_parts_bit(Rest, [Bits], Unused); +collect_parts([{_T, V} | Rest], Acc) -> + collect_parts(Rest, [V | Acc]); +collect_parts([], Acc) -> + list_to_binary(lists:reverse(Acc)). + +collect_parts_bit([{3, <>} | Rest], Acc, Uacc) -> + collect_parts_bit(Rest, [Bits | Acc], Unused + Uacc); +collect_parts_bit([], Acc, Uacc) -> + list_to_binary([Uacc | lists:reverse(Acc)]). + +dec_subidentifiers(<<>>, _Av, Al) -> + lists:reverse(Al); +dec_subidentifiers(<<1:1,H:7,T/binary>>, Av, Al) -> + dec_subidentifiers(T, Av bsl 7 + H, Al); +dec_subidentifiers(<>, Av, Al) -> + dec_subidentifiers(T, 0, [Av bsl 7 + H | Al]). + +decode_UTF8_string(Tlv, TagsIn) -> + Val = match_tags(Tlv, TagsIn), + case Val of + [_ | _] = PartList -> + collect_parts(PartList); + Bin -> + Bin + end. + +decode_boolean(Tlv, TagIn) -> + Val = match_tags(Tlv, TagIn), + case Val of + <<0:8>> -> + false; + <<_:8>> -> + true; + _ -> + exit({error, {asn1, {decode_boolean, Val}}}) + end. + +decode_integer(Tlv, TagIn) -> + Bin = match_tags(Tlv, TagIn), + Len = byte_size(Bin), + <> = Bin, + Int. + +decode_native_bit_string(Buffer, Tags) -> + case match_and_collect(Buffer, Tags) of + <<0>> -> + <<>>; + <> -> + Size = bit_size(Bits) - Unused, + <> = Bits, + Val + end. + +decode_null(Tlv, Tags) -> + Val = match_tags(Tlv, Tags), + case Val of + <<>> -> + 'NULL'; + _ -> + exit({error, {asn1, {decode_null, Val}}}) + end. + +decode_object_identifier(Tlv, Tags) -> + Val = match_tags(Tlv, Tags), + [AddedObjVal | ObjVals] = dec_subidentifiers(Val, 0, []), + {Val1, Val2} = + if + AddedObjVal < 40 -> + {0, AddedObjVal}; + AddedObjVal < 80 -> + {1, AddedObjVal - 40}; + true -> + {2, AddedObjVal - 80} + end, + list_to_tuple([Val1, Val2 | ObjVals]). + +decode_octet_string(Tlv, TagsIn) -> + Bin = match_and_collect(Tlv, TagsIn), + binary:copy(Bin). + +decode_open_type(Tlv, TagIn) -> + case match_tags(Tlv, TagIn) of + Bin when is_binary(Bin) -> + {InnerTlv, _} = ber_decode_nif(Bin), + InnerTlv; + TlvBytes -> + TlvBytes + end. + +e_object_identifier({'OBJECT IDENTIFIER', V}) -> + e_object_identifier(V); +e_object_identifier(V) when is_tuple(V) -> + e_object_identifier(tuple_to_list(V)); +e_object_identifier([E1, E2 | Tail]) -> + Head = 40 * E1 + E2, + {H, Lh} = mk_object_val(Head), + {R, Lr} = lists:mapfoldl(fun enc_obj_id_tail/2, 0, Tail), + {[H | R], Lh + Lr}. + +enc_obj_id_tail(H, Len) -> + {B, L} = mk_object_val(H), + {B, Len + L}. + +encode_UTF8_string(UTF8String, TagIn) when is_binary(UTF8String) -> + encode_tags(TagIn, UTF8String, byte_size(UTF8String)); +encode_UTF8_string(UTF8String, TagIn) -> + encode_tags(TagIn, UTF8String, length(UTF8String)). + +encode_boolean(true, TagIn) -> + encode_tags(TagIn, [255], 1); +encode_boolean(false, TagIn) -> + encode_tags(TagIn, [0], 1); +encode_boolean(X, _) -> + exit({error, {asn1, {encode_boolean, X}}}). + +encode_integer(Val) -> + Bytes = + if + Val >= 0 -> + encode_integer_pos(Val, []); + true -> + encode_integer_neg(Val, []) + end, + {Bytes, length(Bytes)}. + +encode_integer(Val, NamedNumberList, Tag) when is_atom(Val) -> + case lists:keyfind(Val, 1, NamedNumberList) of + {_, NewVal} -> + encode_tags(Tag, encode_integer(NewVal)); + _ -> + exit({error, {asn1, {encode_integer_namednumber, Val}}}) + end; +encode_integer(Val, _NamedNumberList, Tag) -> + encode_tags(Tag, encode_integer(Val)). + +encode_integer(Val, Tag) when is_integer(Val) -> + encode_tags(Tag, encode_integer(Val)); +encode_integer(Val, _Tag) -> + exit({error, {asn1, {encode_integer, Val}}}). + +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]). + +encode_integer_pos(0, [B | _Acc] = L) when B < 128 -> + L; +encode_integer_pos(N, Acc) -> + encode_integer_pos(N bsr 8, [N band 255 | Acc]). + +encode_length(L) when L =< 127 -> + {[L], 1}; +encode_length(L) -> + Oct = minimum_octets(L), + Len = length(Oct), + if + Len =< 126 -> + {[128 bor Len | Oct], Len + 1}; + true -> + exit({error, {asn1, too_long_length_oct, Len}}) + end. + +encode_null(_Val, TagIn) -> + encode_tags(TagIn, [], 0). + +encode_object_identifier(Val, TagIn) -> + encode_tags(TagIn, e_object_identifier(Val)). + +encode_open_type(Val, T) when is_list(Val) -> + encode_open_type(list_to_binary(Val), T); +encode_open_type(Val, Tag) -> + encode_tags(Tag, Val, byte_size(Val)). + +encode_restricted_string(OctetList, TagIn) when is_binary(OctetList) -> + encode_tags(TagIn, OctetList, byte_size(OctetList)); +encode_restricted_string(OctetList, TagIn) when is_list(OctetList) -> + encode_tags(TagIn, OctetList, length(OctetList)). + +encode_tags(TagIn, {BytesSoFar, LenSoFar}) -> + encode_tags(TagIn, BytesSoFar, LenSoFar). + +encode_tags([Tag | Trest], BytesSoFar, LenSoFar) -> + {Bytes2, L2} = encode_length(LenSoFar), + encode_tags(Trest, + [Tag, Bytes2 | BytesSoFar], + LenSoFar + byte_size(Tag) + L2); +encode_tags([], BytesSoFar, LenSoFar) -> + {BytesSoFar, LenSoFar}. + +encode_unnamed_bit_string(Bits, TagIn) -> + Unused = (8 - bit_size(Bits) band 7) band 7, + Bin = <>, + encode_tags(TagIn, Bin, byte_size(Bin)). + +match_and_collect(Tlv, TagsIn) -> + Val = match_tags(Tlv, TagsIn), + case Val of + [_ | _] = PartList -> + collect_parts(PartList); + Bin when is_binary(Bin) -> + Bin + end. + +match_tags({T, V}, [T]) -> + V; +match_tags({T, V}, [T | Tt]) -> + match_tags(V, Tt); +match_tags([{T, V}], [T | Tt]) -> + match_tags(V, Tt); +match_tags([{T, _V} | _] = Vlist, [T]) -> + Vlist; +match_tags(Tlv, []) -> + Tlv; +match_tags({Tag, _V} = Tlv, [T | _Tt]) -> + exit({error, {asn1, {wrong_tag, {{expected, T}, {got, Tag, Tlv}}}}}). + +minimum_octets(0, Acc) -> + Acc; +minimum_octets(Val, Acc) -> + minimum_octets(Val bsr 8, [Val band 255 | Acc]). + +minimum_octets(Val) -> + minimum_octets(Val, []). + +mk_object_val(0, Ack, Len) -> + {Ack, Len}; +mk_object_val(Val, Ack, Len) -> + mk_object_val(Val bsr 7, [Val band 127 bor 128 | Ack], Len + 1). + +mk_object_val(Val) when Val =< 127 -> + {[255 band Val], 1}; +mk_object_val(Val) -> + mk_object_val(Val bsr 7, [Val band 127], 1). + +number2name(Int, NamedNumberList) -> + case lists:keyfind(Int, 2, NamedNumberList) of + {NamedVal, _} -> + NamedVal; + _ -> + Int + end. diff --git a/src/PKIXCRMF-2009.hrl b/src/PKIXCRMF-2009.hrl new file mode 100644 index 0000000..8057eb7 --- /dev/null +++ b/src/PKIXCRMF-2009.hrl @@ -0,0 +1,179 @@ +%% 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 PKIXCRMF-2009. + +-ifndef(_PKIXCRMF_2009_HRL_). +-define(_PKIXCRMF_2009_HRL_, true). + +-record('CertReqMsg', { + certReq, + popo = asn1_NOVALUE, + regInfo = asn1_NOVALUE +}). + +-record('CertReqMsg_regInfo_SEQOF', { + type, + value +}). + +-record('CertRequest', { + certReqId, + certTemplate, + controls = asn1_NOVALUE +}). + +-record('CertTemplate', { + version = asn1_NOVALUE, + serialNumber = asn1_NOVALUE, + signingAlg = asn1_NOVALUE, + issuer = asn1_NOVALUE, + validity = asn1_NOVALUE, + subject = asn1_NOVALUE, + publicKey = asn1_NOVALUE, + issuerUID = asn1_NOVALUE, + subjectUID = asn1_NOVALUE, + extensions = asn1_NOVALUE +}). + +-record('CertTemplate_signingAlg', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('CertTemplate_extensions_SEQOF', { + extnID, + critical = asn1_DEFAULT, + extnValue +}). + +-record('OptionalValidity', { + notBefore = asn1_NOVALUE, + notAfter = asn1_NOVALUE +}). + +-record('Controls_SEQOF', { + type, + value +}). + +-record('POPOSigningKey', { + poposkInput = asn1_NOVALUE, + algorithmIdentifier, + signature +}). + +-record('POPOSigningKey_algorithmIdentifier', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('POPOSigningKeyInput', { + authInfo, + publicKey +}). + +-record('PKMACValue', { + algId, + value +}). + +-record('PKMACValue_algId', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('PBMParameter', { + salt, + owf, + iterationCount, + mac +}). + +-record('PBMParameter_owf', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('PBMParameter_mac', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('EncKeyWithID', { + privateKey, + identifier = asn1_NOVALUE +}). + +-record('PrivateKeyInfo', { + version, + privateKeyAlgorithm, + privateKey, + attributes = asn1_NOVALUE +}). + +-record('PrivateKeyInfo_privateKeyAlgorithm', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('Attributes_SETOF', { + type, + values +}). + +-record('PKIPublicationInfo', { + action, + pubInfos = asn1_NOVALUE +}). + +-record('SinglePubInfo', { + pubMethod, + pubLocation = asn1_NOVALUE +}). + +-record('EncryptedValue', { + intendedAlg = asn1_NOVALUE, + symmAlg = asn1_NOVALUE, + encSymmKey = asn1_NOVALUE, + keyAlg = asn1_NOVALUE, + valueHint = asn1_NOVALUE, + encValue +}). + +-record('EncryptedValue_intendedAlg', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('EncryptedValue_symmAlg', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('EncryptedValue_keyAlg', { + algorithm, + parameters = asn1_NOVALUE +}). + +-record('CertId', { + issuer, + serialNumber +}). + +-define('id-pkip', {1,3,6,1,5,5,7,5}). +-define('id-smime', {1,2,840,113549,1,9,16}). +-define('id-ct', {1,2,840,113549,1,9,16,1}). +-define('id-PasswordBasedMac', {1,2,840,113533,7,66,13}). +-define('id-ct-encKeyWithID', {1,2,840,113549,1,9,16,1,21}). +-define('id-regCtrl', {1,3,6,1,5,5,7,5,1}). +-define('id-regCtrl-regToken', {1,3,6,1,5,5,7,5,1,1}). +-define('id-regCtrl-authenticator', {1,3,6,1,5,5,7,5,1,2}). +-define('id-regCtrl-pkiPublicationInfo', {1,3,6,1,5,5,7,5,1,3}). +-define('id-regCtrl-pkiArchiveOptions', {1,3,6,1,5,5,7,5,1,4}). +-define('id-regCtrl-oldCertID', {1,3,6,1,5,5,7,5,1,5}). +-define('id-regCtrl-protocolEncrKey', {1,3,6,1,5,5,7,5,1,6}). +-define('id-regInfo', {1,3,6,1,5,5,7,5,2}). +-define('id-regInfo-utf8Pairs', {1,3,6,1,5,5,7,5,2,1}). +-define('id-regInfo-certReq', {1,3,6,1,5,5,7,5,2,2}). +-endif. %% _PKIXCRMF_2009_HRL_