pkix1explicit88.erl

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

ERL
2,056
字号
'dec_X520Pseudonym'(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,128},20,[])};%% 'printableString'    {19, V1} ->         {printableString, ?RT_BER:decode_restricted_string(V1,{1,128},19,[])};%% 'universalString'    {28, V1} ->         {universalString, ?RT_BER:decode_universal_string(V1,{1,128},[])};%% 'utf8String'    {12, V1} ->         {utf8String, ?RT_BER:decode_UTF8_string(V1,[])};%% 'bmpString'    {30, V1} ->         {bmpString, ?RT_BER:decode_BMP_string(V1,{1,128},[])};      Else ->          exit({error,{asn1,{invalid_choice_tag,Else}}})   end.%%================================%%  DomainComponent%%================================'enc_DomainComponent'(Val) ->    'enc_DomainComponent'(Val, [<<22>>]).'enc_DomainComponent'({'DomainComponent',Val}, TagIn) ->   'enc_DomainComponent'(Val, TagIn);'enc_DomainComponent'(Val, TagIn) ->?RT_BER:encode_restricted_string([], Val, 22, TagIn).'dec_DomainComponent'(Tlv) ->   'dec_DomainComponent'(Tlv, [22]).'dec_DomainComponent'(Tlv, TagIn) ->?RT_BER:decode_restricted_string(Tlv,[],22,TagIn).%%================================%%  EmailAddress%%================================'enc_EmailAddress'(Val) ->    'enc_EmailAddress'(Val, [<<22>>]).'enc_EmailAddress'({'EmailAddress',Val}, TagIn) ->   'enc_EmailAddress'(Val, TagIn);'enc_EmailAddress'(Val, TagIn) ->?RT_BER:encode_restricted_string([], Val, 22, TagIn).'dec_EmailAddress'(Tlv) ->   'dec_EmailAddress'(Tlv, [22]).'dec_EmailAddress'(Tlv, TagIn) ->?RT_BER:decode_restricted_string(Tlv,{1,128},22,TagIn).%%================================%%  Name%%================================'enc_Name'(Val) ->    'enc_Name'(Val, []).'enc_Name'({'Name',Val}, TagIn) ->   'enc_Name'(Val, TagIn);'enc_Name'(Val, TagIn) ->   {EncBytes,EncLen} = case element(1,Val) of      rdnSequence ->         'enc_RDNSequence'(element(2,Val), [<<48>>]);      Else ->          exit({error,{asn1,{invalid_choice_type,Else}}})   end,?RT_BER:encode_tags(TagIn, EncBytes, EncLen).'dec_Name'(Tlv) ->   'dec_Name'(Tlv, []).'dec_Name'(Tlv, TagIn) ->Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of%% 'rdnSequence'    {16, V1} ->         {rdnSequence, 'dec_RDNSequence'(V1, [])};      Else ->          exit({error,{asn1,{invalid_choice_tag,Else}}})   end.%%================================%%  RDNSequence%%================================'enc_RDNSequence'(Val) ->    'enc_RDNSequence'(Val, [<<48>>]).'enc_RDNSequence'({'RDNSequence',Val}, TagIn) ->   'enc_RDNSequence'(Val, TagIn);'enc_RDNSequence'(Val, TagIn) ->   {EncBytes,EncLen} = 'enc_RDNSequence_components'(Val,[],0),   ?RT_BER:encode_tags(TagIn, EncBytes, EncLen).'enc_RDNSequence_components'([], AccBytes, AccLen) ->    {lists:reverse(AccBytes),AccLen};'enc_RDNSequence_components'([H|T],AccBytes, AccLen) ->   {EncBytes,EncLen} = 'enc_RelativeDistinguishedName'(H, [<<49>>]),   'enc_RDNSequence_components'(T,[EncBytes|AccBytes], AccLen + EncLen).'dec_RDNSequence'(Tlv) ->   'dec_RDNSequence'(Tlv, [16]).'dec_RDNSequence'(Tlv, TagIn) ->   %%-------------------------------------------------   %% decode tag and length    %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), ['dec_RelativeDistinguishedName'(V1, [17]) || V1 <- Tlv1].%%================================%%  DistinguishedName%%================================'enc_DistinguishedName'(Val) ->    'enc_DistinguishedName'(Val, [<<48>>]).'enc_DistinguishedName'({'DistinguishedName',Val}, TagIn) ->   'enc_DistinguishedName'(Val, TagIn);'enc_DistinguishedName'(Val, TagIn) ->   'enc_RDNSequence'(Val, TagIn).'dec_DistinguishedName'(Tlv) ->   'dec_DistinguishedName'(Tlv, [16]).'dec_DistinguishedName'(Tlv, TagIn) ->'dec_RDNSequence'(Tlv, TagIn).%%================================%%  RelativeDistinguishedName%%================================'enc_RelativeDistinguishedName'(Val) ->    'enc_RelativeDistinguishedName'(Val, [<<49>>]).'enc_RelativeDistinguishedName'({'RelativeDistinguishedName',Val}, TagIn) ->   'enc_RelativeDistinguishedName'(Val, TagIn);'enc_RelativeDistinguishedName'(Val, TagIn) ->   {EncBytes,EncLen} = 'enc_RelativeDistinguishedName_components'(Val,[],0),   ?RT_BER:encode_tags(TagIn, EncBytes, EncLen).'enc_RelativeDistinguishedName_components'([], AccBytes, AccLen) ->    {asn1rt_check:dynamicsort_SETOF(AccBytes),AccLen};'enc_RelativeDistinguishedName_components'([H|T],AccBytes, AccLen) ->   {EncBytes,EncLen} = 'enc_AttributeTypeAndValue'(H, [<<48>>]),   'enc_RelativeDistinguishedName_components'(T,[EncBytes|AccBytes], AccLen + EncLen).'dec_RelativeDistinguishedName'(Tlv) ->   'dec_RelativeDistinguishedName'(Tlv, [17]).'dec_RelativeDistinguishedName'(Tlv, TagIn) ->   %%-------------------------------------------------   %% decode tag and length    %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), ['dec_AttributeTypeAndValue'(V1, [16]) || V1 <- Tlv1].%%================================%%  DirectoryString%%================================'enc_DirectoryString'(Val) ->    'enc_DirectoryString'(Val, []).'enc_DirectoryString'({'DirectoryString',Val}, TagIn) ->   'enc_DirectoryString'(Val, TagIn);'enc_DirectoryString'(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_DirectoryString'(Tlv) ->   'dec_DirectoryString'(Tlv, []).'dec_DirectoryString'(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,'MAX'},20,[])};%% 'printableString'    {19, V1} ->         {printableString, ?RT_BER:decode_restricted_string(V1,{1,'MAX'},19,[])};%% 'universalString'    {28, V1} ->         {universalString, ?RT_BER:decode_universal_string(V1,{1,'MAX'},[])};%% 'utf8String'    {12, V1} ->         {utf8String, ?RT_BER:decode_UTF8_string(V1,[])};%% 'bmpString'    {30, V1} ->         {bmpString, ?RT_BER:decode_BMP_string(V1,{1,'MAX'},[])};      Else ->          exit({error,{asn1,{invalid_choice_tag,Else}}})   end.%%================================%%  Certificate%%================================'enc_Certificate'(Val) ->    'enc_Certificate'(Val, [<<48>>]).'enc_Certificate'(Val, TagIn) ->{_,Cindex1, Cindex2, Cindex3} = Val,%%-------------------------------------------------%% attribute tbsCertificate(1)   External PKIX1Explicit88:TBSCertificate%%-------------------------------------------------   {EncBytes1,EncLen1} = 'enc_TBSCertificate'(Cindex1, [<<48>>]),%%-------------------------------------------------%% attribute signatureAlgorithm(2)   External PKIX1Explicit88:AlgorithmIdentifier%%-------------------------------------------------   {EncBytes2,EncLen2} = 'enc_AlgorithmIdentifier'(Cindex2, [<<48>>]),%%-------------------------------------------------%% attribute signature(3) with type BIT STRING%%-------------------------------------------------   {EncBytes3,EncLen3} = ?RT_BER:encode_bit_string([], Cindex3, [], [<<3>>]),   BytesSoFar = [EncBytes1, EncBytes2, EncBytes3],LenSoFar = EncLen1 + EncLen2 + EncLen3,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).'dec_Certificate'(Tlv) ->   'dec_Certificate'(Tlv, [16]).'dec_Certificate'(Tlv, TagIn) ->   %%-------------------------------------------------   %% decode tag and length    %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute tbsCertificate(1)   External PKIX1Explicit88:TBSCertificate%%-------------------------------------------------[V1|Tlv2] = Tlv1, Term1 = 'dec_TBSCertificate'(V1, [16]),%%-------------------------------------------------%% attribute signatureAlgorithm(2)   External PKIX1Explicit88:AlgorithmIdentifier%%-------------------------------------------------[V2|Tlv3] = Tlv2, Term2 = 'dec_AlgorithmIdentifier'(V2, [16]),%%-------------------------------------------------%% attribute signature(3) with type BIT STRING%%-------------------------------------------------[V3|Tlv4] = Tlv3, Term3 = ?RT_BER:decode_compact_bit_string(V3,[],[],[3]),case Tlv4 of[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowedend,   {'Certificate', Term1, Term2, Term3}.%%================================%%  TBSCertificate%%================================'enc_TBSCertificate'(Val) ->    'enc_TBSCertificate'(Val, [<<48>>]).'enc_TBSCertificate'(Val, TagIn) ->{_,Cindex1, Cindex2, Cindex3, Cindex4, Cindex5, Cindex6, Cindex7, Cindex8, Cindex9, Cindex10} = Val,%%-------------------------------------------------%% attribute version(1) with type INTEGER DEFAULT = 0%%-------------------------------------------------   {EncBytes1,EncLen1} =  case catch asn1rt_check:check_int(0, Cindex1, [{v1,0},{v2,1},{v3,2}]) of            true -> {[],0};         _ ->            ?RT_BER:encode_integer([], Cindex1, [{v1,0},{v2,1},{v3,2}], [<<2>>,<<160>>])       end,%%-------------------------------------------------%% attribute serialNumber(2) with type INTEGER%%-------------------------------------------------   {EncBytes2,EncLen2} = ?RT_BER:encode_integer([], Cindex2, [<<2>>]),%%-------------------------------------------------%% attribute signature(3)   External PKIX1Explicit88:AlgorithmIdentifier%%-------------------------------------------------   {EncBytes3,EncLen3} = 'enc_AlgorithmIdentifier'(Cindex3, [<<48>>]),%%-------------------------------------------------%% attribute issuer(4)   External PKIX1Explicit88:Name%%-------------------------------------------------   {EncBytes4,EncLen4} = 'enc_Name'(Cindex4, []),%%-------------------------------------------------%% attribute validity(5)   External PKIX1Explicit88:Validity%%-------------------------------------------------   {EncBytes5,EncLen5} = 'enc_Validity'(Cindex5, [<<48>>]),%%-------------------------------------------------%% attribute subject(6)   External PKIX1Explicit88:Name%%-------------------------------------------------   {EncBytes6,EncLen6} = 'enc_Name'(Cindex6, []),%%-------------------------------------------------%% attribute subjectPublicKeyInfo(7)   External PKIX1Explicit88:SubjectPublicKeyInfo%%-------------------------------------------------   {EncBytes7,EncLen7} = 'enc_SubjectPublicKeyInfo'(Cindex7, [<<48>>]),%%-------------------------------------------------%% attribute issuerUniqueID(8) with type BIT STRING OPTIONAL%%-------------------------------------------------   {EncBytes8,EncLen8} =  case Cindex8 of         asn1_NOVALUE -> {<<>>,0};         _ ->            ?RT_BER:encode_bit_string([], Cindex8, [], [<<129>>])       end,%%-------------------------------------------------%% attribute subjectUniqueID(9) with type BIT STRING OPTIONAL%%-------------------------------------------------   {EncBytes9,EncLen9} =  case Cindex9 of         asn1_NOVALUE -> {<<>>,0};         _ ->            ?RT_BER:encode_bit_string([], Cindex9, [], [<<130>>])       end,%%-------------------------------------------------%% attribute extensions(10)   External PKIX1Explicit88:Extensions OPTIONAL

⌨️ 快捷键说明

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