pkixattributecertificate.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 1,806 行 · 第 1/4 页
ERL
1,806 行
end,%%-------------------------------------------------%% attribute entityName(2) External PKIX1Implicit88:GeneralNames OPTIONAL%%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> 'PKIX1Implicit88':'enc_GeneralNames'(Cindex2, [<<161>>]) end,%%-------------------------------------------------%% attribute objectDigestInfo(3) External PKIXAttributeCertificate:ObjectDigestInfo OPTIONAL%%------------------------------------------------- {EncBytes3,EncLen3} = case Cindex3 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_ObjectDigestInfo'(Cindex3, [<<162>>]) end, BytesSoFar = [EncBytes1, EncBytes2, EncBytes3],LenSoFar = EncLen1 + EncLen2 + EncLen3,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).'dec_Holder'(Tlv) -> 'dec_Holder'(Tlv, [16]).'dec_Holder'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute baseCertificateID(1) External PKIXAttributeCertificate:IssuerSerial OPTIONAL%%-------------------------------------------------{Term1,Tlv2} = case Tlv1 of[{131072,V1}|TempTlv2] -> {'dec_IssuerSerial'(V1, []), TempTlv2}; _ -> { asn1_NOVALUE, Tlv1}end,%%-------------------------------------------------%% attribute entityName(2) External PKIX1Implicit88:GeneralNames OPTIONAL%%-------------------------------------------------{Term2,Tlv3} = case Tlv2 of[{131073,V2}|TempTlv3] -> {'PKIX1Implicit88':'dec_GeneralNames'(V2, []), TempTlv3}; _ -> { asn1_NOVALUE, Tlv2}end,%%-------------------------------------------------%% attribute objectDigestInfo(3) External PKIXAttributeCertificate:ObjectDigestInfo OPTIONAL%%-------------------------------------------------{Term3,Tlv4} = case Tlv3 of[{131074,V3}|TempTlv4] -> {'dec_ObjectDigestInfo'(V3, []), TempTlv4}; _ -> { asn1_NOVALUE, Tlv3}end,case Tlv4 of[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowedend, {'Holder', Term1, Term2, Term3}.%%================================%% ObjectDigestInfo%%================================'enc_ObjectDigestInfo'(Val) -> 'enc_ObjectDigestInfo'(Val, [<<48>>]).'enc_ObjectDigestInfo'(Val, TagIn) ->{_,Cindex1, Cindex2, Cindex3, Cindex4} = Val,%%-------------------------------------------------%% attribute digestedObjectType(1) with type ENUMERATED%%------------------------------------------------- {EncBytes1,EncLen1} = case (case Cindex1 of {_,_}->element(2,Cindex1);_->Cindex1 end) ofpublicKey -> ?RT_BER:encode_enumerated(0,[<<10>>]);publicKeyCert -> ?RT_BER:encode_enumerated(1,[<<10>>]);otherObjectTypes -> ?RT_BER:encode_enumerated(2,[<<10>>]);Enumval1 -> exit({error,{asn1, {enumerated_not_in_range,Enumval1}}})end,%%-------------------------------------------------%% attribute otherObjectTypeID(2) with type OBJECT IDENTIFIER OPTIONAL%%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> ?RT_BER:encode_object_identifier(Cindex2, [<<6>>]) end,%%-------------------------------------------------%% attribute digestAlgorithm(3) External PKIX1Explicit88:AlgorithmIdentifier%%------------------------------------------------- {EncBytes3,EncLen3} = 'PKIX1Explicit88':'enc_AlgorithmIdentifier'(Cindex3, [<<48>>]),%%-------------------------------------------------%% attribute objectDigest(4) with type BIT STRING%%------------------------------------------------- {EncBytes4,EncLen4} = ?RT_BER:encode_bit_string([], Cindex4, [], [<<3>>]), BytesSoFar = [EncBytes1, EncBytes2, EncBytes3, EncBytes4],LenSoFar = EncLen1 + EncLen2 + EncLen3 + EncLen4,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).'dec_ObjectDigestInfo'(Tlv) -> 'dec_ObjectDigestInfo'(Tlv, [16]).'dec_ObjectDigestInfo'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute digestedObjectType(1) with type ENUMERATED%%-------------------------------------------------[V1|Tlv2] = Tlv1, Term1 = ?RT_BER:decode_enumerated(V1,[],[{publicKey,0},{publicKeyCert,1},{otherObjectTypes,2}],[10]),%%-------------------------------------------------%% attribute otherObjectTypeID(2) with type OBJECT IDENTIFIER OPTIONAL%%-------------------------------------------------{Term2,Tlv3} = case Tlv2 of[{6,V2}|TempTlv3] -> {?RT_BER:decode_object_identifier(V2,[]), TempTlv3}; _ -> { asn1_NOVALUE, Tlv2}end,%%-------------------------------------------------%% attribute digestAlgorithm(3) External PKIX1Explicit88:AlgorithmIdentifier%%-------------------------------------------------[V3|Tlv4] = Tlv3, Term3 = 'PKIX1Explicit88':'dec_AlgorithmIdentifier'(V3, [16]),%%-------------------------------------------------%% attribute objectDigest(4) with type BIT STRING%%-------------------------------------------------[V4|Tlv5] = Tlv4, Term4 = ?RT_BER:decode_compact_bit_string(V4,[],[],[3]),case Tlv5 of[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv5}}}) % extra fields not allowedend, {'ObjectDigestInfo', Term1, Term2, Term3, Term4}.%%================================%% AttCertIssuer%%================================'enc_AttCertIssuer'(Val) -> 'enc_AttCertIssuer'(Val, []).'enc_AttCertIssuer'({'AttCertIssuer',Val}, TagIn) -> 'enc_AttCertIssuer'(Val, TagIn);'enc_AttCertIssuer'(Val, TagIn) -> {EncBytes,EncLen} = case element(1,Val) of v1Form -> 'PKIX1Implicit88':'enc_GeneralNames'(element(2,Val), [<<48>>]); v2Form -> 'enc_V2Form'(element(2,Val), [<<160>>]); Else -> exit({error,{asn1,{invalid_choice_type,Else}}}) end,?RT_BER:encode_tags(TagIn, EncBytes, EncLen).'dec_AttCertIssuer'(Tlv) -> 'dec_AttCertIssuer'(Tlv, []).'dec_AttCertIssuer'(Tlv, TagIn) ->Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of%% 'v1Form' {16, V1} -> {v1Form, 'PKIX1Implicit88':'dec_GeneralNames'(V1, [])};%% 'v2Form' {131072, V1} -> {v2Form, 'dec_V2Form'(V1, [])}; Else -> exit({error,{asn1,{invalid_choice_tag,Else}}}) end.%%================================%% V2Form%%================================'enc_V2Form'(Val) -> 'enc_V2Form'(Val, [<<48>>]).'enc_V2Form'(Val, TagIn) ->{_,Cindex1, Cindex2, Cindex3} = Val,%%-------------------------------------------------%% attribute issuerName(1) External PKIX1Implicit88:GeneralNames OPTIONAL%%------------------------------------------------- {EncBytes1,EncLen1} = case Cindex1 of asn1_NOVALUE -> {<<>>,0}; _ -> 'PKIX1Implicit88':'enc_GeneralNames'(Cindex1, [<<48>>]) end,%%-------------------------------------------------%% attribute baseCertificateID(2) External PKIXAttributeCertificate:IssuerSerial OPTIONAL%%------------------------------------------------- {EncBytes2,EncLen2} = case Cindex2 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_IssuerSerial'(Cindex2, [<<160>>]) end,%%-------------------------------------------------%% attribute objectDigestInfo(3) External PKIXAttributeCertificate:ObjectDigestInfo OPTIONAL%%------------------------------------------------- {EncBytes3,EncLen3} = case Cindex3 of asn1_NOVALUE -> {<<>>,0}; _ -> 'enc_ObjectDigestInfo'(Cindex3, [<<161>>]) end, BytesSoFar = [EncBytes1, EncBytes2, EncBytes3],LenSoFar = EncLen1 + EncLen2 + EncLen3,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).'dec_V2Form'(Tlv) -> 'dec_V2Form'(Tlv, [16]).'dec_V2Form'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute issuerName(1) External PKIX1Implicit88:GeneralNames OPTIONAL%%-------------------------------------------------{Term1,Tlv2} = case Tlv1 of[{16,V1}|TempTlv2] -> {'PKIX1Implicit88':'dec_GeneralNames'(V1, []), TempTlv2}; _ -> { asn1_NOVALUE, Tlv1}end,%%-------------------------------------------------%% attribute baseCertificateID(2) External PKIXAttributeCertificate:IssuerSerial OPTIONAL%%-------------------------------------------------{Term2,Tlv3} = case Tlv2 of[{131072,V2}|TempTlv3] -> {'dec_IssuerSerial'(V2, []), TempTlv3}; _ -> { asn1_NOVALUE, Tlv2}end,%%-------------------------------------------------%% attribute objectDigestInfo(3) External PKIXAttributeCertificate:ObjectDigestInfo OPTIONAL%%-------------------------------------------------{Term3,Tlv4} = case Tlv3 of[{131073,V3}|TempTlv4] -> {'dec_ObjectDigestInfo'(V3, []), TempTlv4}; _ -> { asn1_NOVALUE, Tlv3}end,case Tlv4 of[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowedend, {'V2Form', Term1, Term2, Term3}.%%================================%% IssuerSerial%%================================'enc_IssuerSerial'(Val) -> 'enc_IssuerSerial'(Val, [<<48>>]).'enc_IssuerSerial'(Val, TagIn) ->{_,Cindex1, Cindex2, Cindex3} = Val,%%-------------------------------------------------%% attribute issuer(1) External PKIX1Implicit88:GeneralNames%%------------------------------------------------- {EncBytes1,EncLen1} = 'PKIX1Implicit88':'enc_GeneralNames'(Cindex1, [<<48>>]),%%-------------------------------------------------%% attribute serial(2) with type INTEGER%%------------------------------------------------- {EncBytes2,EncLen2} = ?RT_BER:encode_integer([], Cindex2, [<<2>>]),%%-------------------------------------------------%% attribute issuerUID(3) with type BIT STRING OPTIONAL%%------------------------------------------------- {EncBytes3,EncLen3} = case Cindex3 of asn1_NOVALUE -> {<<>>,0}; _ -> ?RT_BER:encode_bit_string([], Cindex3, [], [<<3>>]) end, BytesSoFar = [EncBytes1, EncBytes2, EncBytes3],LenSoFar = EncLen1 + EncLen2 + EncLen3,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).'dec_IssuerSerial'(Tlv) -> 'dec_IssuerSerial'(Tlv, [16]).'dec_IssuerSerial'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute issuer(1) External PKIX1Implicit88:GeneralNames%%-------------------------------------------------[V1|Tlv2] = Tlv1, Term1 = 'PKIX1Implicit88':'dec_GeneralNames'(V1, [16]),%%-------------------------------------------------%% attribute serial(2) with type INTEGER%%-------------------------------------------------[V2|Tlv3] = Tlv2, Term2 = ?RT_BER:decode_integer(V2,[],[2]),%%-------------------------------------------------%% attribute issuerUID(3) with type BIT STRING OPTIONAL%%-------------------------------------------------{Term3,Tlv4} = case Tlv3 of[{3,V3}|TempTlv4] -> {?RT_BER:decode_compact_bit_string(V3,[],[],[]), TempTlv4}; _ -> { asn1_NOVALUE, Tlv3}end,case Tlv4 of[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowedend, {'IssuerSerial', Term1, Term2, Term3}.%%================================%% AttCertValidityPeriod%%================================'enc_AttCertValidityPeriod'(Val) -> 'enc_AttCertValidityPeriod'(Val, [<<48>>]).'enc_AttCertValidityPeriod'(Val, TagIn) ->{_,Cindex1, Cindex2} = Val,%%-------------------------------------------------%% attribute notBeforeTime(1) with type GeneralizedTime%%------------------------------------------------- {EncBytes1,EncLen1} = ?RT_BER:encode_generalized_time([], Cindex1, [<<24>>]),%%-------------------------------------------------%% attribute notAfterTime(2) with type GeneralizedTime%%------------------------------------------------- {EncBytes2,EncLen2} = ?RT_BER:encode_generalized_time([], Cindex2, [<<24>>]), BytesSoFar = [EncBytes1, EncBytes2],LenSoFar = EncLen1 + EncLen2,?RT_BER:encode_tags(TagIn, BytesSoFar, LenSoFar).'dec_AttCertValidityPeriod'(Tlv) -> 'dec_AttCertValidityPeriod'(Tlv, [16]).'dec_AttCertValidityPeriod'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), %%-------------------------------------------------%% attribute notBeforeTime(1) with type GeneralizedTime%%-------------------------------------------------[V1|Tlv2] = Tlv1, Term1 = ?RT_BER:decode_generalized_time(V1,[],[24]),%%-------------------------------------------------%% attribute notAfterTime(2) with type GeneralizedTime%%-------------------------------------------------[V2|Tlv3] = Tlv2, Term2 = ?RT_BER:decode_generalized_time(V2,[],[24]),case Tlv3 of[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv3}}}) % extra fields not allowedend, {'AttCertValidityPeriod', Term1, Term2}.%%================================%% Targets%%================================'enc_Targets'(Val) -> 'enc_Targets'(Val, [<<48>>]).'enc_Targets'({'Targets',Val}, TagIn) -> 'enc_Targets'(Val, TagIn);'enc_Targets'(Val, TagIn) -> {EncBytes,EncLen} = 'enc_Targets_components'(Val,[],0), ?RT_BER:encode_tags(TagIn, EncBytes, EncLen).'enc_Targets_components'([], AccBytes, AccLen) -> {lists:reverse(AccBytes),AccLen};'enc_Targets_components'([H|T],AccBytes, AccLen) -> {EncBytes,EncLen} = 'enc_Target'(H, []), 'enc_Targets_components'(T,[EncBytes|AccBytes], AccLen + EncLen).'dec_Targets'(Tlv) -> 'dec_Targets'(Tlv, [16]).'dec_Targets'(Tlv, TagIn) -> %%------------------------------------------------- %% decode tag and length %%-------------------------------------------------Tlv1 = ?RT_BER:match_tags(Tlv,TagIn), ['dec_Target'(V1, []) || V1 <- Tlv1].%%================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?