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 + -
显示快捷键?