pkix1implicit88.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 2,076 行 · 第 1/5 页
ERL
2,076 行
end,case Tlv3 of[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowedend, {'UserNotice', Term1, Term2}.%%================================%% NoticeReference%%================================'enc_NoticeReference'(Val) -> 'enc_NoticeReference'(Val, [<<48>>]).'enc_NoticeReference'(Val, TagIn) ->{_,Cindex1, Cindex2} = Val,%%-------------------------------------------------%% attribute organization(1) External PKIX1Implicit88: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,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).%%================================%% NoticeReference_noticeNumbers%%================================'enc_NoticeReference_noticeNumbers'({'NoticeReference_noticeNumbers',Val}, TagIn) -> 'enc_NoticeReference_noticeNumbers'(Val, TagIn);'enc_NoticeReference_noticeNumbers'(Val, TagIn) -> {EncBytes,EncLen} = 'enc_NoticeReference_noticeNumbers_components'(Val,[],0), ?RT_BER: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} = ?RT_BER:encode_integer([], H, [<<2>>]), 'enc_NoticeReference_noticeNumbers_components'(T,[EncBytes|AccBytes], AccLen + EncLen).'dec_NoticeReference_noticeNumbers'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), [?RT_BER:decode_integer(V1,[],[2]) || V1 <- Tlv1].'dec_NoticeReference'(Tlv) -> 'dec_NoticeReference'(Tlv, [16]).'dec_NoticeReference'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute organization(1) External PKIX1Implicit88: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 allowedend, {'NoticeReference', Term1, Term2}.%%================================%% DisplayText%%================================'enc_DisplayText'(Val) -> 'enc_DisplayText'(Val, []).'enc_DisplayText'({'DisplayText',Val}, TagIn) -> 'enc_DisplayText'(Val, TagIn);'enc_DisplayText'(Val, TagIn) -> {EncBytes,EncLen} = case element(1,Val) of ia5String -> ?RT_BER:encode_restricted_string([], element(2,Val), 22, [<<22>>]); visibleString -> ?RT_BER:encode_restricted_string([], element(2,Val), 26, [<<26>>]); bmpString -> ?RT_BER:encode_BMP_string([], element(2,Val), [<<30>>]); utf8String -> ?RT_BER:encode_UTF8_string([], element(2,Val), [<<12>>]); Else -> exit({error,{asn1,{invalid_choice_type,Else}}}) end,?RT_BER:encode_tags(TagIn, EncBytes, EncLen).'dec_DisplayText'(Tlv) -> 'dec_DisplayText'(Tlv, []).'dec_DisplayText'(Tlv, TagIn) ->Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of%% 'ia5String' {22, V1} -> {ia5String, ?RT_BER:decode_restricted_string(V1,{1,200},22,[])};%% 'visibleString' {26, V1} -> {visibleString, ?RT_BER:decode_restricted_string(V1,{1,200},26,[])};%% 'bmpString' {30, V1} -> {bmpString, ?RT_BER:decode_BMP_string(V1,{1,200},[])};%% 'utf8String' {12, V1} -> {utf8String, ?RT_BER:decode_UTF8_string(V1,[])}; Else -> exit({error,{asn1,{invalid_choice_tag,Else}}}) end.%%================================%% PolicyMappings%%================================'enc_PolicyMappings'(Val) -> 'enc_PolicyMappings'(Val, [<<48>>]).'enc_PolicyMappings'({'PolicyMappings',Val}, TagIn) -> 'enc_PolicyMappings'(Val, TagIn);'enc_PolicyMappings'(Val, TagIn) -> {EncBytes,EncLen} = 'enc_PolicyMappings_components'(Val,[],0), ?RT_BER: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} = ?RT_BER:encode_object_identifier(Cindex1, [<<6>>]),%%-------------------------------------------------%% attribute subjectDomainPolicy(2) with type OBJECT IDENTIFIER%%------------------------------------------------- {EncBytes2,EncLen2} = ?RT_BER:encode_object_identifier(Cindex2, [<<6>>]), BytesSoFar = [EncBytes1, EncBytes2],LenSoFar = EncLen1 + EncLen2,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).'dec_PolicyMappings_SEQOF'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute issuerDomainPolicy(1) with type OBJECT IDENTIFIER%%-------------------------------------------------[V1|Tlv2] = Tlv1, Term1 = ?RT_BER:decode_object_identifier(V1,[6]),%%-------------------------------------------------%% attribute subjectDomainPolicy(2) with type OBJECT IDENTIFIER%%-------------------------------------------------[V2|Tlv3] = Tlv2, Term2 = ?RT_BER:decode_object_identifier(V2,[6]),case Tlv3 of[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowedend, {'PolicyMappings_SEQOF', Term1, Term2}.'dec_PolicyMappings'(Tlv) -> 'dec_PolicyMappings'(Tlv, [16]).'dec_PolicyMappings'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), ['dec_PolicyMappings_SEQOF'(V1, [16]) || V1 <- Tlv1].%%================================%% SubjectAltName%%================================'enc_SubjectAltName'(Val) -> 'enc_SubjectAltName'(Val, [<<48>>]).'enc_SubjectAltName'({'SubjectAltName',Val}, TagIn) -> 'enc_SubjectAltName'(Val, TagIn);'enc_SubjectAltName'(Val, TagIn) -> 'enc_GeneralNames'(Val, TagIn).'dec_SubjectAltName'(Tlv) -> 'dec_SubjectAltName'(Tlv, [16]).'dec_SubjectAltName'(Tlv, TagIn) ->'dec_GeneralNames'(Tlv, TagIn).%%================================%% GeneralNames%%================================'enc_GeneralNames'(Val) -> 'enc_GeneralNames'(Val, [<<48>>]).'enc_GeneralNames'({'GeneralNames',Val}, TagIn) -> 'enc_GeneralNames'(Val, TagIn);'enc_GeneralNames'(Val, TagIn) -> {EncBytes,EncLen} = 'enc_GeneralNames_components'(Val,[],0), ?RT_BER: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 = ?RT_BER:match_tags(Tlv,TagIn), ['dec_GeneralName'(V1, []) || V1 <- Tlv1].%%================================%% GeneralName%%================================'enc_GeneralName'(Val) -> 'enc_GeneralName'(Val, []).'enc_GeneralName'({'GeneralName',Val}, TagIn) -> 'enc_GeneralName'(Val, TagIn);'enc_GeneralName'(Val, TagIn) -> {EncBytes,EncLen} = case element(1,Val) of otherName -> 'enc_AnotherName'(element(2,Val), [<<160>>]); rfc822Name -> ?RT_BER:encode_restricted_string([], element(2,Val), 22, [<<129>>]); dNSName -> ?RT_BER:encode_restricted_string([], element(2,Val), 22, [<<130>>]); x400Address -> 'PKIX1Explicit88':'enc_ORAddress'(element(2,Val), [<<163>>]); directoryName -> 'PKIX1Explicit88':'enc_Name'(element(2,Val), [<<164>>]); ediPartyName -> 'enc_EDIPartyName'(element(2,Val), [<<165>>]); uniformResourceIdentifier -> ?RT_BER:encode_restricted_string([], element(2,Val), 22, [<<134>>]); iPAddress -> ?RT_BER:encode_octet_string([], element(2,Val), [<<135>>]); registeredID -> ?RT_BER:encode_object_identifier(element(2,Val), [<<136>>]); Else -> exit({error,{asn1,{invalid_choice_type,Else}}}) end,?RT_BER:encode_tags(TagIn, EncBytes, EncLen).'dec_GeneralName'(Tlv) -> 'dec_GeneralName'(Tlv, []).'dec_GeneralName'(Tlv, TagIn) ->Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of%% 'otherName' {131072, V1} -> {otherName, 'dec_AnotherName'(V1, [])};%% 'rfc822Name' {131073, V1} -> {rfc822Name, ?RT_BER:decode_restricted_string(V1,[],22,[])};%% 'dNSName' {131074, V1} -> {dNSName, ?RT_BER:decode_restricted_string(V1,[],22,[])};%% 'x400Address' {131075, V1} -> {x400Address, 'PKIX1Explicit88':'dec_ORAddress'(V1, [])};%% 'directoryName' {131076, V1} -> {directoryName, 'PKIX1Explicit88':'dec_Name'(V1, [])};%% 'ediPartyName' {131077, V1} -> {ediPartyName, 'dec_EDIPartyName'(V1, [])};%% 'uniformResourceIdentifier' {131078, V1} -> {uniformResourceIdentifier, ?RT_BER:decode_restricted_string(V1,[],22,[])};%% 'iPAddress' {131079, V1} -> {iPAddress, ?RT_BER:decode_octet_string(V1,[],[])};%% 'registeredID' {131080, V1} -> {registeredID, ?RT_BER:decode_object_identifier(V1,[])}; Else -> exit({error,{asn1,{invalid_choice_tag,Else}}}) end.%%================================%% AnotherName%%================================'enc_AnotherName'(Val) -> 'enc_AnotherName'(Val, [<<48>>]).'enc_AnotherName'(Val, TagIn) ->{_,Cindex1, Cindex2} = Val,%%-------------------------------------------------%% attribute type-id(1) with type OBJECT IDENTIFIER%%------------------------------------------------- {EncBytes1,EncLen1} = ?RT_BER:encode_object_identifier(Cindex1, [<<6>>]),%%-------------------------------------------------%% attribute value(2) with type ASN1_OPEN_TYPE%%------------------------------------------------- {EncBytes2,EncLen2} = ?RT_BER:encode_open_type(Cindex2, [<<160>>]), BytesSoFar = [EncBytes1, EncBytes2],LenSoFar = EncLen1 + EncLen2,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).'dec_AnotherName'(Tlv) -> 'dec_AnotherName'(Tlv, [16]).'dec_AnotherName'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?