pkix1explicit88.erl

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

ERL
2,056
字号
%%-------------------------------------------------   {EncBytes10,EncLen10} =  case Cindex10 of         asn1_NOVALUE -> {<<>>,0};         _ ->            'enc_Extensions'(Cindex10, [<<48>>,<<163>>])       end,   BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4, EncBytes5, EncBytes6, EncBytes7, EncBytes8, EncBytes9, EncBytes10],LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4 + EncLen5 + EncLen6 + EncLen7 + EncLen8 + EncLen9 + EncLen10,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).'dec_TBSCertificate'(Tlv) ->   'dec_TBSCertificate'(Tlv, [16]).'dec_TBSCertificate'(Tlv, TagIn) ->   %%-------------------------------------------------   %% decode tag and length    %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute version(1) with type INTEGER DEFAULT = 0%%-------------------------------------------------{Term1,Tlv2} = case Tlv1 of[{131072,V1}|TempTlv2] ->    {?RT_BER:decode_integer(V1,[],[{v1,0},{v2,1},{v3,2}],[2]), TempTlv2};    _ ->        {0,Tlv1}end,%%-------------------------------------------------%% attribute serialNumber(2) with type INTEGER%%-------------------------------------------------[V2|Tlv3] = Tlv2, Term2 = ?RT_BER:decode_integer(V2,[],[2]),%%-------------------------------------------------%% attribute signature(3)   External PKIX1Explicit88:AlgorithmIdentifier%%-------------------------------------------------[V3|Tlv4] = Tlv3, Term3 = 'dec_AlgorithmIdentifier'(V3, [16]),%%-------------------------------------------------%% attribute issuer(4)   External PKIX1Explicit88:Name%%-------------------------------------------------[V4|Tlv5] = Tlv4, Term4 = 'dec_Name'(V4, []),%%-------------------------------------------------%% attribute validity(5)   External PKIX1Explicit88:Validity%%-------------------------------------------------[V5|Tlv6] = Tlv5, Term5 = 'dec_Validity'(V5, [16]),%%-------------------------------------------------%% attribute subject(6)   External PKIX1Explicit88:Name%%-------------------------------------------------[V6|Tlv7] = Tlv6, Term6 = 'dec_Name'(V6, []),%%-------------------------------------------------%% attribute subjectPublicKeyInfo(7)   External PKIX1Explicit88:SubjectPublicKeyInfo%%-------------------------------------------------[V7|Tlv8] = Tlv7, Term7 = 'dec_SubjectPublicKeyInfo'(V7, [16]),%%-------------------------------------------------%% attribute issuerUniqueID(8) with type BIT STRING OPTIONAL%%-------------------------------------------------{Term8,Tlv9} = case Tlv8 of[{131073,V8}|TempTlv9] ->    {?RT_BER:decode_compact_bit_string(V8,[],[],[]), TempTlv9};    _ ->        { asn1_NOVALUE, Tlv8}end,%%-------------------------------------------------%% attribute subjectUniqueID(9) with type BIT STRING OPTIONAL%%-------------------------------------------------{Term9,Tlv10} = case Tlv9 of[{131074,V9}|TempTlv10] ->    {?RT_BER:decode_compact_bit_string(V9,[],[],[]), TempTlv10};    _ ->        { asn1_NOVALUE, Tlv9}end,%%-------------------------------------------------%% attribute extensions(10)   External PKIX1Explicit88:Extensions OPTIONAL%%-------------------------------------------------{Term10,Tlv11} = case Tlv10 of[{131075,V10}|TempTlv11] ->    {'dec_Extensions'(V10, [16]), TempTlv11};    _ ->        { asn1_NOVALUE, Tlv10}end,case Tlv11 of[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv11}}}) % extra fields not allowedend,   {'TBSCertificate', Term1, Term2, Term3, Term4, Term5, Term6, Term7, Term8, Term9, Term10}.%%================================%%  Version%%================================'enc_Version'(Val) ->    'enc_Version'(Val, [<<2>>]).'enc_Version'({'Version',Val}, TagIn) ->   'enc_Version'(Val, TagIn);'enc_Version'(Val, TagIn) ->?RT_BER:encode_integer([], Val, [{v1,0},{v2,1},{v3,2}], TagIn).'dec_Version'(Tlv) ->   'dec_Version'(Tlv, [2]).'dec_Version'(Tlv, TagIn) ->?RT_BER:decode_integer(Tlv,[],[{v1,0},{v2,1},{v3,2}],TagIn).%%================================%%  CertificateSerialNumber%%================================'enc_CertificateSerialNumber'(Val) ->    'enc_CertificateSerialNumber'(Val, [<<2>>]).'enc_CertificateSerialNumber'({'CertificateSerialNumber',Val}, TagIn) ->   'enc_CertificateSerialNumber'(Val, TagIn);'enc_CertificateSerialNumber'(Val, TagIn) ->?RT_BER:encode_integer([], Val, TagIn).'dec_CertificateSerialNumber'(Tlv) ->   'dec_CertificateSerialNumber'(Tlv, [2]).'dec_CertificateSerialNumber'(Tlv, TagIn) ->?RT_BER:decode_integer(Tlv,[],TagIn).%%================================%%  Validity%%================================'enc_Validity'(Val) ->    'enc_Validity'(Val, [<<48>>]).'enc_Validity'(Val, TagIn) ->{_,Cindex1, Cindex2} = Val,%%-------------------------------------------------%% attribute notBefore(1)   External PKIX1Explicit88:Time%%-------------------------------------------------   {EncBytes1,EncLen1} = 'enc_Time'(Cindex1, []),%%-------------------------------------------------%% attribute notAfter(2)   External PKIX1Explicit88:Time%%-------------------------------------------------   {EncBytes2,EncLen2} = 'enc_Time'(Cindex2, []),   BytesSoFar = [EncBytes1, EncBytes2],LenSoFar = EncLen1 + EncLen2,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).'dec_Validity'(Tlv) ->   'dec_Validity'(Tlv, [16]).'dec_Validity'(Tlv, TagIn) ->   %%-------------------------------------------------   %% decode tag and length    %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute notBefore(1)   External PKIX1Explicit88:Time%%-------------------------------------------------[V1|Tlv2] = Tlv1, Term1 = 'dec_Time'(V1, []),%%-------------------------------------------------%% attribute notAfter(2)   External PKIX1Explicit88:Time%%-------------------------------------------------[V2|Tlv3] = Tlv2, Term2 = 'dec_Time'(V2, []),case Tlv3 of[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowedend,   {'Validity', Term1, Term2}.%%================================%%  Time%%================================'enc_Time'(Val) ->    'enc_Time'(Val, []).'enc_Time'({'Time',Val}, TagIn) ->   'enc_Time'(Val, TagIn);'enc_Time'(Val, TagIn) ->   {EncBytes,EncLen} = case element(1,Val) of      utcTime ->         ?RT_BER:encode_utc_time([], element(2,Val), [<<23>>]);      generalTime ->         ?RT_BER:encode_generalized_time([], element(2,Val), [<<24>>]);      Else ->          exit({error,{asn1,{invalid_choice_type,Else}}})   end,?RT_BER:encode_tags(TagIn, EncBytes, EncLen).'dec_Time'(Tlv) ->   'dec_Time'(Tlv, []).'dec_Time'(Tlv, TagIn) ->Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of%% 'utcTime'    {23, V1} ->         {utcTime, ?RT_BER:decode_utc_time(V1,[],[])};%% 'generalTime'    {24, V1} ->         {generalTime, ?RT_BER:decode_generalized_time(V1,[],[])};      Else ->          exit({error,{asn1,{invalid_choice_tag,Else}}})   end.%%================================%%  UniqueIdentifier%%================================'enc_UniqueIdentifier'(Val) ->    'enc_UniqueIdentifier'(Val, [<<3>>]).'enc_UniqueIdentifier'({'UniqueIdentifier',Val}, TagIn) ->   'enc_UniqueIdentifier'(Val, TagIn);'enc_UniqueIdentifier'(Val, TagIn) ->?RT_BER:encode_bit_string([], Val, [], TagIn).'dec_UniqueIdentifier'(Tlv) ->   'dec_UniqueIdentifier'(Tlv, [3]).'dec_UniqueIdentifier'(Tlv, TagIn) ->?RT_BER:decode_compact_bit_string(Tlv,[],[],TagIn).%%================================%%  SubjectPublicKeyInfo%%================================'enc_SubjectPublicKeyInfo'(Val) ->    'enc_SubjectPublicKeyInfo'(Val, [<<48>>]).'enc_SubjectPublicKeyInfo'(Val, TagIn) ->{_,Cindex1, Cindex2} = Val,%%-------------------------------------------------%% attribute algorithm(1)   External PKIX1Explicit88:AlgorithmIdentifier%%-------------------------------------------------   {EncBytes1,EncLen1} = 'enc_AlgorithmIdentifier'(Cindex1, [<<48>>]),%%-------------------------------------------------%% attribute subjectPublicKey(2) with type BIT STRING%%-------------------------------------------------   {EncBytes2,EncLen2} = ?RT_BER:encode_bit_string([], Cindex2, [], [<<3>>]),   BytesSoFar = [EncBytes1, EncBytes2],LenSoFar = EncLen1 + EncLen2,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).'dec_SubjectPublicKeyInfo'(Tlv) ->   'dec_SubjectPublicKeyInfo'(Tlv, [16]).'dec_SubjectPublicKeyInfo'(Tlv, TagIn) ->   %%-------------------------------------------------   %% decode tag and length    %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute algorithm(1)   External PKIX1Explicit88:AlgorithmIdentifier%%-------------------------------------------------[V1|Tlv2] = Tlv1, Term1 = 'dec_AlgorithmIdentifier'(V1, [16]),%%-------------------------------------------------%% attribute subjectPublicKey(2) with type BIT STRING%%-------------------------------------------------[V2|Tlv3] = Tlv2, Term2 = ?RT_BER:decode_compact_bit_string(V2,[],[],[3]),case Tlv3 of[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowedend,   {'SubjectPublicKeyInfo', Term1, Term2}.%%================================%%  Extensions%%================================'enc_Extensions'(Val) ->    'enc_Extensions'(Val, [<<48>>]).'enc_Extensions'({'Extensions',Val}, TagIn) ->   'enc_Extensions'(Val, TagIn);'enc_Extensions'(Val, TagIn) ->   {EncBytes,EncLen} = 'enc_Extensions_components'(Val,[],0),   ?RT_BER:encode_tags(TagIn, EncBytes, EncLen).'enc_Extensions_components'([], AccBytes, AccLen) ->    {lists:reverse(AccBytes),AccLen};'enc_Extensions_components'([H|T],AccBytes, AccLen) ->   {EncBytes,EncLen} = 'enc_Extension'(H, [<<48>>]),   'enc_Extensions_components'(T,[EncBytes|AccBytes], AccLen + EncLen).'dec_Extensions'(Tlv) ->   'dec_Extensions'(Tlv, [16]).'dec_Extensions'(Tlv, TagIn) ->   %%-------------------------------------------------   %% decode tag and length    %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), ['dec_Extension'(V1, [16]) || V1 <- Tlv1].%%================================%%  Extension%%================================'enc_Extension'(Val) ->    'enc_Extension'(Val, [<<48>>]).'enc_Extension'(Val, TagIn) ->{_,Cindex1, Cindex2, Cindex3} = Val,%%-------------------------------------------------%% attribute extnID(1) with type OBJECT IDENTIFIER%%-------------------------------------------------   {EncBytes1,EncLen1} = ?RT_BER:encode_object_identifier(Cindex1, [<<6>>]),%%-------------------------------------------------%% attribute critical(2) with type BOOLEAN DEFAULT = false%%-------------------------------------------------   {EncBytes2,EncLen2} =  case catch asn1rt_check:check_bool(false, Cindex2) of            true -> {[],0};         _ ->            ?RT_BER:encode_boolean(Cindex2, [<<1>>])       end,%%-------------------------------------------------%% attribute extnValue(3) with type OCTET STRING%%-------------------------------------------------   {EncBytes3,EncLen3} = ?RT_BER:encode_octet_string([], Cindex3, [<<4>>]),   BytesSoFar = [EncBytes1, EncBytes2, EncBytes3],LenSoFar = EncLen1 + EncLen2 + EncLen3,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).'dec_Extension'(Tlv) ->   'dec_Extension'(Tlv, [16]).'dec_Extension'(Tlv, TagIn) ->   %%-------------------------------------------------   %% decode tag and length    %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute extnID(1) with type OBJECT IDENTIFIER%%-------------------------------------------------[V1|Tlv2] = Tlv1, Term1 = ?RT_BER:decode_object_identifier(V1,[6]),%%-------------------------------------------------%% attribute critical(2) with type BOOLEAN DEFAULT = false%%----------------------------------

⌨️ 快捷键说明

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