pkix1explicit88.erl

来自「OTP是开放电信平台的简称」· ERL 代码 · 共 2,056 行 · 第 1/5 页

ERL
2,056
字号
decode_disp('Extension',Data) -> 'dec_Extension'(Data);decode_disp('CertificateList',Data) -> 'dec_CertificateList'(Data);decode_disp('TBSCertList',Data) -> 'dec_TBSCertList'(Data);decode_disp('AlgorithmIdentifier',Data) -> 'dec_AlgorithmIdentifier'(Data);decode_disp('ORAddress',Data) -> 'dec_ORAddress'(Data);decode_disp('BuiltInStandardAttributes',Data) -> 'dec_BuiltInStandardAttributes'(Data);decode_disp('CountryName',Data) -> 'dec_CountryName'(Data);decode_disp('AdministrationDomainName',Data) -> 'dec_AdministrationDomainName'(Data);decode_disp('NetworkAddress',Data) -> 'dec_NetworkAddress'(Data);decode_disp('X121Address',Data) -> 'dec_X121Address'(Data);decode_disp('TerminalIdentifier',Data) -> 'dec_TerminalIdentifier'(Data);decode_disp('PrivateDomainName',Data) -> 'dec_PrivateDomainName'(Data);decode_disp('OrganizationName',Data) -> 'dec_OrganizationName'(Data);decode_disp('NumericUserIdentifier',Data) -> 'dec_NumericUserIdentifier'(Data);decode_disp('PersonalName',Data) -> 'dec_PersonalName'(Data);decode_disp('OrganizationalUnitNames',Data) -> 'dec_OrganizationalUnitNames'(Data);decode_disp('OrganizationalUnitName',Data) -> 'dec_OrganizationalUnitName'(Data);decode_disp('BuiltInDomainDefinedAttributes',Data) -> 'dec_BuiltInDomainDefinedAttributes'(Data);decode_disp('BuiltInDomainDefinedAttribute',Data) -> 'dec_BuiltInDomainDefinedAttribute'(Data);decode_disp('ExtensionAttributes',Data) -> 'dec_ExtensionAttributes'(Data);decode_disp('ExtensionAttribute',Data) -> 'dec_ExtensionAttribute'(Data);decode_disp('CommonName',Data) -> 'dec_CommonName'(Data);decode_disp('TeletexCommonName',Data) -> 'dec_TeletexCommonName'(Data);decode_disp('TeletexOrganizationName',Data) -> 'dec_TeletexOrganizationName'(Data);decode_disp('TeletexPersonalName',Data) -> 'dec_TeletexPersonalName'(Data);decode_disp('TeletexOrganizationalUnitNames',Data) -> 'dec_TeletexOrganizationalUnitNames'(Data);decode_disp('TeletexOrganizationalUnitName',Data) -> 'dec_TeletexOrganizationalUnitName'(Data);decode_disp('PDSName',Data) -> 'dec_PDSName'(Data);decode_disp('PhysicalDeliveryCountryName',Data) -> 'dec_PhysicalDeliveryCountryName'(Data);decode_disp('PostalCode',Data) -> 'dec_PostalCode'(Data);decode_disp('PhysicalDeliveryOfficeName',Data) -> 'dec_PhysicalDeliveryOfficeName'(Data);decode_disp('PhysicalDeliveryOfficeNumber',Data) -> 'dec_PhysicalDeliveryOfficeNumber'(Data);decode_disp('ExtensionORAddressComponents',Data) -> 'dec_ExtensionORAddressComponents'(Data);decode_disp('PhysicalDeliveryPersonalName',Data) -> 'dec_PhysicalDeliveryPersonalName'(Data);decode_disp('PhysicalDeliveryOrganizationName',Data) -> 'dec_PhysicalDeliveryOrganizationName'(Data);decode_disp('ExtensionPhysicalDeliveryAddressComponents',Data) -> 'dec_ExtensionPhysicalDeliveryAddressComponents'(Data);decode_disp('UnformattedPostalAddress',Data) -> 'dec_UnformattedPostalAddress'(Data);decode_disp('StreetAddress',Data) -> 'dec_StreetAddress'(Data);decode_disp('PostOfficeBoxAddress',Data) -> 'dec_PostOfficeBoxAddress'(Data);decode_disp('PosteRestanteAddress',Data) -> 'dec_PosteRestanteAddress'(Data);decode_disp('UniquePostalName',Data) -> 'dec_UniquePostalName'(Data);decode_disp('LocalPostalAttributes',Data) -> 'dec_LocalPostalAttributes'(Data);decode_disp('PDSParameter',Data) -> 'dec_PDSParameter'(Data);decode_disp('ExtendedNetworkAddress',Data) -> 'dec_ExtendedNetworkAddress'(Data);decode_disp('PresentationAddress',Data) -> 'dec_PresentationAddress'(Data);decode_disp('TerminalType',Data) -> 'dec_TerminalType'(Data);decode_disp('TeletexDomainDefinedAttributes',Data) -> 'dec_TeletexDomainDefinedAttributes'(Data);decode_disp('TeletexDomainDefinedAttribute',Data) -> 'dec_TeletexDomainDefinedAttribute'(Data);decode_disp(Type,_Data) -> exit({error,{asn1,{undefined_type,Type}}}).info() ->   case ?MODULE:module_info() of      MI when is_list(MI) ->         case lists:keysearch(attributes,1,MI) of            {value,{_,Attributes}} when is_list(Attributes) ->               case lists:keysearch(asn1_info,1,Attributes) of                  {value,{_,Info}} when is_list(Info) ->                     Info;                  _ ->                     []               end;            _ ->               []         end   end.%%================================%%  Attribute%%================================'enc_Attribute'(Val) ->    'enc_Attribute'(Val, [<<48>>]).'enc_Attribute'(Val, TagIn) ->{_,Cindex1, Cindex2} = Val,%%-------------------------------------------------%% attribute type(1) with type OBJECT IDENTIFIER%%-------------------------------------------------   {EncBytes1,EncLen1} = ?RT_BER:encode_object_identifier(Cindex1, [<<6>>]),%%-------------------------------------------------%% attribute values(2) with type SET OF%%-------------------------------------------------   {EncBytes2,EncLen2} = 'enc_Attribute_values'(Cindex2, [<<49>>]),   BytesSoFar = [EncBytes1, EncBytes2],LenSoFar = EncLen1 + EncLen2,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).%%================================%%  Attribute_values%%================================'enc_Attribute_values'({'Attribute_values',Val}, TagIn) ->   'enc_Attribute_values'(Val, TagIn);'enc_Attribute_values'(Val, TagIn) ->      {EncBytes,EncLen} = 'enc_Attribute_values_components'(Val,[],0),   ?RT_BER:encode_tags(TagIn, EncBytes, EncLen).'enc_Attribute_values_components'([], AccBytes, AccLen) ->    {asn1rt_check:dynamicsort_SETOF(AccBytes),AccLen};'enc_Attribute_values_components'([H|T],AccBytes, AccLen) ->   {EncBytes,EncLen} = 'enc_AttributeValue'(H, []),   'enc_Attribute_values_components'(T,[EncBytes|AccBytes], AccLen + EncLen).'dec_Attribute_values'(Tlv, TagIn) ->   %%-------------------------------------------------   %% decode tag and length    %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), ['dec_AttributeValue'(V1, []) || V1 <- Tlv1].'dec_Attribute'(Tlv) ->   'dec_Attribute'(Tlv, [16]).'dec_Attribute'(Tlv, TagIn) ->   %%-------------------------------------------------   %% decode tag and length    %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute type(1) with type OBJECT IDENTIFIER%%-------------------------------------------------[V1|Tlv2] = Tlv1, Term1 = ?RT_BER:decode_object_identifier(V1,[6]),%%-------------------------------------------------%% attribute values(2) with type SET OF%%-------------------------------------------------[V2|Tlv3] = Tlv2, Term2 = 'dec_Attribute_values'(V2, [17]),case Tlv3 of[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowedend,   {'Attribute', Term1, Term2}.%%================================%%  AttributeType%%================================'enc_AttributeType'(Val) ->    'enc_AttributeType'(Val, [<<6>>]).'enc_AttributeType'({'AttributeType',Val}, TagIn) ->   'enc_AttributeType'(Val, TagIn);'enc_AttributeType'(Val, TagIn) ->?RT_BER:encode_object_identifier(Val, TagIn).'dec_AttributeType'(Tlv) ->   'dec_AttributeType'(Tlv, [6]).'dec_AttributeType'(Tlv, TagIn) ->?RT_BER:decode_object_identifier(Tlv,TagIn).%%================================%%  AttributeValue%%================================'enc_AttributeValue'(Val) ->    'enc_AttributeValue'(Val, []).'enc_AttributeValue'({'AttributeValue',Val}, TagIn) ->   'enc_AttributeValue'(Val, TagIn);'enc_AttributeValue'(Val, TagIn) ->%% OPEN TYPE?RT_BER:encode_open_type(Val, TagIn).'dec_AttributeValue'(Tlv) ->   'dec_AttributeValue'(Tlv, []).'dec_AttributeValue'(Tlv, TagIn) ->?RT_BER:decode_open_type_as_binary(Tlv,TagIn).%%================================%%  AttributeTypeAndValue%%================================'enc_AttributeTypeAndValue'(Val) ->    'enc_AttributeTypeAndValue'(Val, [<<48>>]).'enc_AttributeTypeAndValue'(Val, TagIn) ->{_,Cindex1, Cindex2} = Val,%%-------------------------------------------------%% attribute type(1) with type OBJECT IDENTIFIER%%-------------------------------------------------   {EncBytes1,EncLen1} = ?RT_BER:encode_object_identifier(Cindex1, [<<6>>]),%%-------------------------------------------------%% attribute value(2)   External PKIX1Explicit88:AttributeValue%%-------------------------------------------------   {EncBytes2,EncLen2} = 'enc_AttributeValue'(Cindex2, []),   BytesSoFar = [EncBytes1, EncBytes2],LenSoFar = EncLen1 + EncLen2,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).'dec_AttributeTypeAndValue'(Tlv) ->   'dec_AttributeTypeAndValue'(Tlv, [16]).'dec_AttributeTypeAndValue'(Tlv, TagIn) ->   %%-------------------------------------------------   %% decode tag and length    %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute type(1) with type OBJECT IDENTIFIER%%-------------------------------------------------[V1|Tlv2] = Tlv1, Term1 = ?RT_BER:decode_object_identifier(V1,[6]),%%-------------------------------------------------%% attribute value(2)   External PKIX1Explicit88:AttributeValue%%-------------------------------------------------[V2|Tlv3] = Tlv2, Term2 = 'dec_AttributeValue'(V2, []),case Tlv3 of[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowedend,   {'AttributeTypeAndValue', Term1, Term2}.%%================================%%  X520name%%================================'enc_X520name'(Val) ->    'enc_X520name'(Val, []).'enc_X520name'({'X520name',Val}, TagIn) ->   'enc_X520name'(Val, TagIn);'enc_X520name'(Val, TagIn) ->   {EncBytes,EncLen} = case element(1,Val) of      teletexString ->         ?RT_BER:encode_restricted_string([], element(2,Val), 20, [<<20>>]);      printableString ->         ?RT_BER:encode_restricted_string([], element(2,Val), 19, [<<19>>]);      universalString ->         ?RT_BER:encode_universal_string([], element(2,Val), [<<28>>]);      utf8String ->         ?RT_BER:encode_UTF8_string([], element(2,Val), [<<12>>]);      bmpString ->         ?RT_BER:encode_BMP_string([], element(2,Val), [<<30>>]);      Else ->          exit({error,{asn1,{invalid_choice_type,Else}}})   end,?RT_BER:encode_tags(TagIn, EncBytes, EncLen).'dec_X520name'(Tlv) ->   'dec_X520name'(Tlv, []).'dec_X520name'(Tlv, TagIn) ->Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of%% 'teletexString'    {20, V1} ->         {teletexString, ?RT_BER:decode_restricted_string(V1,{1,32768},20,[])};%% 'printableString'    {19, V1} ->         {printableString, ?RT_BER:decode_restricted_string(V1,{1,32768},19,[])};%% 'universalString'    {28, V1} ->         {universalString, ?RT_BER:decode_universal_string(V1,{1,32768},[])};%% 'utf8String'    {12, V1} ->         {utf8String, ?RT_BER:decode_UTF8_string(V1,[])};%% 'bmpString'    {30, V1} ->         {bmpString, ?RT_BER:decode_BMP_string(V1,{1,32768},[])};      Else ->          exit({error,{asn1,{invalid_choice_tag,Else}}})   end.%%================================%%  X520CommonName%%================================'enc_X520CommonName'(Val) ->    'enc_X520CommonName'(Val, []).'enc_X520CommonName'({'X520CommonName',Val}, TagIn) ->   'enc_X520CommonName'(Val, TagIn);'enc_X520CommonName'(Val, TagIn) ->   {EncBytes,EncLen} = case element(1,Val) of      teletexString ->         ?RT_BER:encode_restricted_string([], element(2,Val), 20, [<<20>>]);      printableString ->         ?RT_BER:encode_restricted_string([], element(2,Val), 19, [<<19>>]);      universalString ->         ?RT_BER:encode_universal_string([], element(2,Val), [<<28>>]);      utf8String ->         ?RT_BER:encode_UTF8_string([], element(2,Val), [<<12>>]);      bmpString ->         ?RT_BER:encode_BMP_string([], element(2,Val), [<<30>>]);      Else ->          exit({error,{asn1,{invalid_choice_type,Else}}})   end,?RT_BER:encode_tags(TagIn, EncBytes, EncLen).'dec_X520CommonName'(Tlv) ->   'dec_X520CommonName'(Tlv, []).'dec_X520CommonName'(Tlv, TagIn) ->Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of%% 'teletexString'    {20, V1} ->         {teletexString, ?RT_BER:decode_restricted_string(V1,{1,64},20,[])};%% 'printableString'    {19, V1} ->         {printableString, ?RT_BER:decode_restricted_string(V1,{1,64},19,[])};%% 'universalString'    {28, V1} ->         {universalString, ?RT_BER:decode_universal_string(V1,{1,64},[])};%% 'utf8String'    {12, V1} ->         {utf8String, ?RT_BER:decode_UTF8_string(V1,[])};%% 'bmpString'    {30, V1} ->         {bmpString, ?RT_BER:decode_BMP_string(V1,{1,64},[])};      Else ->          exit({error,{asn1,{invalid_choice_tag,Else}}})   end.%%================================%%  X520LocalityName%%================================'enc_X520LocalityName'(Val) ->    'enc_X520LocalityName'(Val, []).'enc_X520LocalityName'({'X520LocalityName',Val}, TagIn) ->   'enc_X520LocalityName'(Val, TagIn);'enc_X520LocalityName'(Val, TagIn) ->   {EncBytes,EncLen} = case element(1,Val) of      teletexString ->         ?RT_BER:encode_restricted_string([], element(2,Val), 20, [<<20>>]);      printableString ->         ?RT_BER:encode_restricted_string([], element(2,Val), 19, [<<19>>]);      universalString ->         ?RT_BER:encode_universal_string([], element(2,Val), [<<28>>]);      utf8String ->         ?RT_BER:encode_UTF8_string([], element(2,Val), [<<12>>]);      bmpString ->         ?RT_BER:encode_BMP_string([], element(2,Val), [<<30>>]);      Else ->          exit({error,{asn1,{invalid_choice_type,Else}}})   end,?RT_BER:encode_tags(TagIn, EncBytes, EncLen).

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?