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