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