PyDERASN: рдореА рд╕реНрд▓реЙрдЯ рдЖрдгрд┐ рдмреНрд▓реЙрдмрд╕рд╣ ASN.1 рд▓рд╛рдпрдмреНрд░рд░реА рдХрд╢реА рд▓рд┐рд╣рд┐рд▓реА

ASN.1 рд╣реЗ рд╕рдВрд░рдЪрд┐рдд рдорд╛рд╣рд┐рддреАрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рднрд╛рд╖реЗрдЪреЗ рдорд╛рдирдХ (ISO, ITU-T, GOST) рдЖрд╣реЗ, рддрд╕реЗрдЪ рд╣реА рдорд╛рд╣рд┐рддреА рдПрдиреНрдХреЛрдб рдХрд░рдгреНрдпрд╛рдЪреЗ рдирд┐рдпрдо рдЖрд╣реЗ. рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдореНрд╣рдгреВрди, рдЬреЗрдПрд╕рдУрдПрди, рдПрдХреНрд╕рдПрдордПрд▓, рдПрдХреНрд╕рдбреАрдЖрд░ рдЖрдгрд┐ рдЗрддрд░рд╛рдВрд╕рд╣ рдбреЗрдЯрд╛ рдХреНрд░рдордмрджреНрдз рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╕рд╛рджрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рджреБрд╕рд░реЗ рд╕реНрд╡рд░реВрдк рдЖрд╣реЗ. рдЖрдкрд▓реНрдпрд╛ рджреИрдирдВрджрд┐рди рдЬреАрд╡рдирд╛рдд рд╣реЗ рдЕрддреНрдпрдВрдд рд╕рд╛рдорд╛рдиреНрдп рдЖрд╣реЗ рдЖрдгрд┐ рдЕрдиреЗрдХрд╛рдВрдирд╛ рдпрд╛рдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ: рд╕реЗрд▓реНрдпреБрд▓рд░, рдЯреЗрд▓рд┐рдлреЛрди, VoIP рдХрдореНрдпреБрдирд┐рдХреЗрд╢рдиреНрд╕ (UMTS, LTE, WiMAX, SS7, H.323), рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдордзреНрдпреЗ (LDAP, SNMP, Kerberos), рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯреАрдд рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА (X.509, CMS, PKCS рдорд╛рдирдХреЗ), рдмрдБрдХ рдХрд╛рд░реНрдб рдЖрдгрд┐ рдмрд╛рдпреЛрдореЗрдЯреНрд░рд┐рдХ рдкрд╛рд╕рдкреЛрд░реНрдЯрдордзреНрдпреЗ рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА.

рд╣рд╛ рд▓реЗрдЦ рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ PyDERASN: Python ASN.1 рд▓рд╛рдпрдмреНрд░рд░реА рдордзреАрд▓ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреАрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд▓реНрдкрд╛рдВрдордзреНрдпреЗ рд╕рдХреНрд░рд┐рдпрдкрдгреЗ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ рдирдХрд╛рд╢рд╛рдВрдЪреЗ рдкреБрд╕реНрддрдХ.

PyDERASN: рдореА рд╕реНрд▓реЙрдЯ рдЖрдгрд┐ рдмреНрд▓реЙрдмрд╕рд╣ ASN.1 рд▓рд╛рдпрдмреНрд░рд░реА рдХрд╢реА рд▓рд┐рд╣рд┐рд▓реА
рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА ASN.1 рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рдгреЗ рдпреЛрдЧреНрдп рдирд╛рд╣реА: ASN.1 рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдХреЛрдбреЗрдХреНрд╕ рдЬрдЯрд┐рд▓ рдЖрд╣реЗрдд. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдХреЛрдб рд╕рд╛рдзрд╛ рдирд╕реЗрд▓ рдЖрдгрд┐ рд╣рд╛ рдиреЗрд╣рдореАрдЪ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣рд▓реНрд▓рд╛ рд╡реЗрдХреНрдЯрд░ рдЕрд╕рддреЛ. рдЬрд░рд╛ рдмрдШрд╛ рдпрд╛рджреАрдд ASN.1 рд▓рд╛рдпрдмреНрд░рд░реАрдордзреАрд▓ рднреЗрджреНрдпрддрд╛. рддреНрдпрд╛рдЪреНрдпрд╛ рдордзреНрдпреЗ рдмреНрд░реВрд╕ Schneier рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдЕрднрд┐рдпрд╛рдВрддреНрд░рд┐рдХреА рд╣реЗ рдорд╛рдирдХ рддреНрдпрд╛рдЪреНрдпрд╛ рдЬрдЯрд┐рд▓рддреЗрдореБрд│реЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╡рд┐рд░реБрджреНрдз рд╕рд▓реНрд▓рд╛ рджреЗрддреЗ: "рд╕рд░реНрд╡реЛрддреНрддрдо рдЬреНрдЮрд╛рдд TLV рдПрдиреНрдХреЛрдбрд┐рдВрдЧ ASN.1 рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ рдЖрд╢реНрдЪрд░реНрдпрдХрд╛рд░рдХрдкрдгреЗ рдЬрдЯрд┐рд▓ рдЖрд╣реЗ рдЖрдгрд┐ рдЖрдореНрд╣реА рддреНрдпрд╛рдкрд╛рд╕реВрди рджреВрд░ рдЬрд╛рддреЛ." рдкрдг, рджреБрд░реНрджреИрд╡рд╛рдиреЗ рдЖрдЬ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдЖрд╣реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреА рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рддреЗ рд╕рдХреНрд░рд┐рдпрдкрдгреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд X.509 рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ, CRL, OCSP, TSP, CMP рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдкреНрд░рддрд┐рд╕реНрдкрдзреАрд░реН, рд╕рдВрджреЗрд╢ CMS, рдЖрдгрд┐ рдмрд░реЗрдЪ рдорд╛рдирдХ PKCS. рдореНрд╣рдгреВрди, рдЬрд░ рддреБрдореНрд╣реА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреАрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд╣реАрд╣реА рдХрд░рдд рдЕрд╕рд╛рд▓ рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ ASN.1 рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

ASN.1 рд╡рд┐рд╡рд┐рдз рдкреНрд░рдХрд╛рд░реЗ/рдХреЛрдбреЗрдХреНрд╕рдордзреНрдпреЗ рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:

  • рдмреАрдИрдЖрд░ (рдореВрд▓рднреВрдд рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)
  • рд╕реАрдИрдЖрд░ (рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)
  • DER (рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)
  • рдЬреАрдПрд╕рдИрдЖрд░ (рдЬреЗрдиреЗрд░рд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)
  • рдЬреЗрдИрдЖрд░ (JSON рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)
  • LWER (рд╣рд▓рдХреЗ рд╡рдЬрди рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)
  • REO (рдСрдХреНрдЯреЗрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)
  • PER (рдкреЕрдХ рдХреЗрд▓реЗрд▓реЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)
  • SER (рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдорд╛рдВрдЪреЗ рд╕рдВрдХреЗрдд)
  • рд╢рд┐рд╖реНрдп (XML рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)

рдЖрдгрд┐ рдЗрддрд░ рдЕрдиреЗрдХ. рдкрд░рдВрддреБ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдХрд╛рд░реНрдпрд╛рдВрдордзреНрдпреЗ, рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд, рджреЛрди рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд: BER рдЖрдгрд┐ DER. рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХреЗрд▓реЗрд▓реНрдпрд╛ XML рджрд╕реНрддрдРрд╡рдЬрд╛рдВрдордзреНрдпреЗ рджреЗрдЦреАрд▓ (XMLDSig, XAdES) рдЕрдЬреВрдирд╣реА рдмреЗрд╕64-рдПрдирдХреЛрдб рдХреЗрд▓реЗрд▓реЗ ASN.1 DER рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЕрд╕рддреАрд▓, рдЬрд╕реЗ рдХреА JSON-рднрд┐рдореБрдЦ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдордзреНрдпреЗ рдПрд╕реАрдПрдордИ рдЪрд▓рд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реВ. рддреБрдореНрд╣реА рд▓реЗрдЦ рдЖрдгрд┐ рдкреБрд╕реНрддрдХрд╛рдВрдордзреАрд▓ рд╣реЗ рд╕рд░реНрд╡ рдХреЛрдбреЗрдХреНрд╕ рдЖрдгрд┐ BER/CER/DER рдХреЛрдбрд┐рдВрдЧ рддрддреНрддреНрд╡реЗ рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕рдордЬреВрди рдШреЗрдК рд╢рдХрддрд╛: ASN.1 рд╕реЛрдкреНрдпрд╛ рд╢рдмреНрджрд╛рдд, ASN.1 тАФ рдСрд▓рд┐рд╡реНрд╣рд┐рдпрд░ рдбреБрдмреНрдпреБрд╕рди рджреНрд╡рд╛рд░реЗ рд╡рд┐рд╖рдо рдкреНрд░рдгрд╛рд▓реАрдВрдордзреАрд▓ рд╕рдВрдкреНрд░реЗрд╖рдг, ASN.1 рдкреНрд░реЛрдлреЗрд╕рд░ рдЬреЙрди рд▓рд╛рд░реНрдорд╛рдЙрде рджреНрд╡рд╛рд░реЗ рдкреВрд░реНрдг.

BER рд╣реЗ рдмрд╛рдпрдирд░реА рдмрд╛рдЗрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдЖрд╣реЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде PER, рд╕реЗрд▓реНрдпреБрд▓рд░ рдХрдореНрдпреБрдирд┐рдХреЗрд╢рдиреНрд╕рдордзреНрдпреЗ рд▓реЛрдХрдкреНрд░рд┐рдп - рдмрд┐рдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб) TLV рдлреЙрд░рдореЕрдЯ. рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдпрд╛рдкреНрд░рдорд╛рдгреЗ рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗрд▓рд╛ рдЖрд╣реЗ: рдЯреЕрдЧ (TрдПрдЬреА), рдПрдиреНрдХреЛрдб рдХрд░рд╛рд╡рдпрд╛рдЪреНрдпрд╛ рдШрдЯрдХрд╛рдЪрд╛ рдкреНрд░рдХрд╛рд░ рдУрд│рдЦрдгреЗ (рдкреВрд░реНрдгрд╛рдВрдХ, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рддрд╛рд░реАрдЦ рдЗ.), рд▓рд╛рдВрдмреА (Length) рд╕рд╛рдордЧреНрд░реА рдЖрдгрд┐ рд╕рд╛рдордЧреНрд░реА рд╕реНрд╡рддрдГ (Value). BER рд╡реИрдХрд▓реНрдкрд┐рдХрд░рд┐рддреНрдпрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд▓рд╛рдВрдмреАрдЪреЗ рдореВрд▓реНрдп рд╕реЗрдЯ рдХрд░реВрди рдЖрдгрд┐ рдПрдВрдб-рдСрдл-рдСрдХреНрдЯреЗрдЯреНрд╕ рд╕рдВрджреЗрд╢рд╛рд▓рд╛ рдПрдВрдб-рдСрдл-рдСрдХреНрдЯреЗрдЯреНрд╕ рдЪрд┐рдиреНрд╣рд╛рд╕рд╣ рд╕рдорд╛рдкреНрдд рдХрд░реВрди рд▓рд╛рдВрдмреАрдЪреЗ рдореВрд▓реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, BER рдордзреНрдпреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдПрдиреНрдХреЛрдб рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреАрдордзреНрдпреЗ рдмрд░реАрдЪ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдЖрд╣реЗ, рдЬрд╕реЗ рдХреА:

  • рдкреВрд░реНрдгрд╛рдВрдХ, рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдпрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░, BIT рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрдгрд┐ рдШрдЯрдХрд╛рдВрдЪреА рд▓рд╛рдВрдмреА рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА (рдХрд┐рдорд╛рди рд╕реНрд╡рд░реВрдкрд╛рдд рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗрд▓реА рдирд╛рд╣реА);
  • BOOLEAN рдХреЛрдгрддреНрдпрд╛рд╣реА рд╢реВрдиреНрдп рдирд╕рд▓реЗрд▓реНрдпрд╛ рд╕рд╛рдордЧреНрд░реАрд╕рд╛рдареА рд╕рддреНрдп рдЖрд╣реЗ;
  • BIT STRING рдордзреНрдпреЗ "рдЕрддрд┐рд░рд┐рдХреНрдд" рд╢реВрдиреНрдп рдмрд┐рдЯреНрд╕ рдЕрд╕реВ рд╢рдХрддрд╛рдд;
  • BIT STRING, OCTET STRING рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рд╕рд░реНрд╡ рд╡реНрдпреБрддреНрдкрдиреНрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░, рддрд╛рд░реАрдЦ/рд╡реЗрд│реЗрд╕рд╣, рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓-рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рдореЛрдбрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд, рдЬреНрдпрд╛рдЪреА рд▓рд╛рдВрдмреА (рдбреА)рдПрдирдХреЛрдбрд┐рдВрдЧрдЪреНрдпрд╛ рд╡реЗрд│реА рдЖрдзреАрдЪ рдорд╛рд╣рд┐рдд рдирд╕рддреЗ;
  • UTCTtime/GeneralizedTime рдордзреНрдпреЗ рдЯрд╛рдЗрдо рдЭреЛрди рдСрдлрд╕реЗрдЯ рдЖрдгрд┐ рд╕реЗрдХрдВрджрд╛рдВрдЪреЗ "рдЕрддрд┐рд░рд┐рдХреНрдд" рд╢реВрдиреНрдп рдЕрдкреВрд░реНрдгрд╛рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдЪреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рдорд╛рд░реНрдЧ рдЕрд╕реВ рд╢рдХрддрд╛рдд;
  • рдбреАрдлреЙрд▓реНрдЯ рдЕрдиреБрдХреНрд░рдо рдореВрд▓реНрдпреЗ рдПрдиреНрдХреЛрдб рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд рдХрд┐рдВрд╡рд╛ рдирд╕реВ рд╢рдХрддрд╛рдд;
  • BIT STRING рдордзреАрд▓ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдмрд┐рдЯреНрд╕рдЪреА рдирд╛рдорд┐рдд рдореВрд▓реНрдпреЗ рд╡реИрдХрд▓реНрдкрд┐рдХрд░рд┐рддреНрдпрд╛ рдЕрдирдХреЛрдб рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд;
  • SEQUENCE (OF)/SET (OF) рдордзреНрдпреЗ рдШрдЯрдХрд╛рдВрдЪрд╛ рдХреЛрдгрддрд╛рд╣реА рдХреНрд░рдо рдЕрд╕реВ рд╢рдХрддреЛ.

рд╡рд░реАрд▓ рд╕рд░реНрд╡ рдЧреЛрд╖реНрдЯреАрдВрдореБрд│реЗ, рдбреЗрдЯрд╛ рдПрдиреНрдХреЛрдб рдХрд░рдгреЗ рдЬреЗрдгреЗрдХрд░реБрди рддреЗ рдореВрд│ рд╕реНрд╡рд░реВрдкрд╛рд╕рд╛рд░рдЦреЗрдЪ рдЕрд╕реЗрд▓ рдЕрд╕реЗ рдиреЗрд╣рдореАрдЪ рд╢рдХреНрдп рдирд╕рддреЗ. рдореНрд╣рдгреВрди, рдирд┐рдпрдорд╛рдВрдЪрд╛ рдПрдХ рдЙрдкрд╕рдВрдЪ рд╢реЛрдзрд▓рд╛ рдЧреЗрд▓рд╛: DER - рдлрдХреНрдд рдПрдХ рд╡реИрдз рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкрджреНрдзрддреАрдЪреЗ рдХрд╛рдЯреЗрдХреЛрд░рдкрдгреЗ рдирд┐рдпрдорди рдХрд░рдгреЗ, рдЬреА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЖрд╣реЗ рдЬреЗрдереЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдПрдХ рдмрд┐рдЯ рдмрджрд▓рд▓реНрдпрд╛рдиреЗ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХрд┐рдВрд╡рд╛ рдЪреЗрдХрд╕рдо рдЕрд╡реИрдз рд╣реЛрдИрд▓. DER рдЪрд╛ рдПрдХ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рддреЛрдЯрд╛ рдЖрд╣реЗ: рд╕рд░реНрд╡ рдШрдЯрдХрд╛рдВрдЪреА рд▓рд╛рдВрдмреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧрдЪреНрдпрд╛ рд╡реЗрд│реА рдЖрдзреАрдЪ рдУрд│рдЦрд▓реА рдЬрд╛рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреЗ рдбреЗрдЯрд╛рдЪреНрдпрд╛ рдкреНрд░рд╡рд╛рд╣рд╛рдЪреНрдпрд╛ рдХреНрд░рдорд╡рд╛рд░реАрд▓рд╛ рдкрд░рд╡рд╛рдирдЧреА рджреЗрдд тАЛтАЛтАЛтАЛрдирд╛рд╣реА. CER рдХреЛрдбреЗрдХрдордзреНрдпреЗ рд╣реА рдХрдорддрд░рддрд╛ рдирд╛рд╣реА, рддреНрдпрд╛рдЪрдкреНрд░рдорд╛рдгреЗ рдбреЗрдЯрд╛рдЪреНрдпрд╛ рдЕрд╕реНрдкрд╖реНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдЪреА рд╣рдореА рджреЗрддреЗ. рджреБрд░реНрджреИрд╡рд╛рдиреЗ (рдХрд┐рдВрд╡рд╛ рд╣реЗ рднрд╛рдЧреНрдпрд╡рд╛рди рдЖрд╣реЗ рдХреА рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЖрдгрдЦреА рдЬрдЯрд┐рд▓ рдбреАрдХреЛрдбрд░ рдирд╛рд╣реАрдд?), рддреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЭрд╛рд▓реЗ рдирд╛рд╣реА. рдореНрд╣рдгреВрди, рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рдЖрдореНрд╣рд╛рд▓рд╛ BER рдЖрдгрд┐ DER рдПрдиреНрдХреЛрдбреЗрдб рдбреЗрдЯрд╛рдЪрд╛ "рдорд┐рд╢реНрд░" рд╡рд╛рдкрд░ рдЖрдврд│рддреЛ. CER рдЖрдгрд┐ DER рджреЛрдиреНрд╣реА BER рдЪреЗ рдЙрдкрд╕рдВрдЪ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдХреЛрдгрддрд╛рд╣реА BER рдбрд┐рдХреЛрдбрд░ рддреНрдпрд╛рдВрдирд╛ рд╣рд╛рддрд╛рд│реВ рд╢рдХрддреЛ.

pyasn1 рд╕рд╣ рд╕рдорд╕реНрдпрд╛

рдХрд╛рдорд╛рд╡рд░ рдЖрдореНрд╣реА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреАрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдмрд░реЗрдЪ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рд╣рд┐рддреЛ. рдЖрдгрд┐ рдХрд╛рд╣реА рд╡рд░реНрд╖рд╛рдВрдкреВрд░реНрд╡реА рд╡рд┐рдирд╛рдореВрд▓реНрдп рд▓рд╛рдпрдмреНрд░рд░реАрдВрдЪрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛ рдХреЛрдгрддрд╛рд╣реА рдкрд░реНрдпрд╛рдп рдирд╡реНрд╣рддрд╛: рдПрдХрддрд░ рд╣реА рдЕрддреНрдпрдВрдд рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд▓рд╛рдпрдмреНрд░рд░реА рдЖрд╣реЗрдд рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдПрдиреНрдХреЛрдб/рдбреАрдХреЛрдб рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреВрд░реНрдгрд╛рдВрдХ рдЖрдгрд┐ рд░рдЪрдирд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХрд┐рдВрд╡рд╛ рд╣реА рд▓рд╛рдпрдмреНрд░рд░реА pyasn1. рдЖрдореНрд╣реА рддреНрдпрд╛рд╡рд░ рдЕрдиреЗрдХ рд╡рд░реНрд╖реЗ рдЬрдЧрд▓реЛ рдЖрдгрд┐ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдЦреВрдк рдЖрдирдВрдж рдЭрд╛рд▓рд╛, рдХрд╛рд░рдг рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд╕реНрддреВрдВрдкреНрд░рдорд╛рдгреЗ ASN.1 рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ: рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдбреАрдХреЛрдб рдХреЗрд▓реЗрд▓реЗ X.509 рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдлреАрд▓реНрдбрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рд╢рдмреНрджрдХреЛрд╢ рдЗрдВрдЯрд░рдлреЗрд╕: рдкреНрд░рдорд╛рдгрдкрддреНрд░[тАЬtbsCertificateтАЭ] ["serialNumber"] рдЖрдореНрд╣рд╛рд▓рд╛ рдпрд╛ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдЪрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдВрдХ рджрд╛рдЦрд╡реЗрд▓. рддреНрдпрд╛рдЪрдкреНрд░рдорд╛рдгреЗ, рддреБрдореНрд╣реА рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреВ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕реЛрдмрдд рд╕реВрдЪреА, рд╢рдмреНрджрдХреЛрд╖ рдореНрд╣рдгреВрди рдХрд╛рдо рдХрд░реВрди "рдПрдХрддреНрд░рд┐рдд" рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдирдВрддрд░ рдлрдХреНрдд pyasn1.codec.der.encoder.encode рдлрдВрдХреНрд╢рдирд▓рд╛ рдХреЙрд▓ рдХрд░рд╛ рдЖрдгрд┐ рджрд╕реНрддрдРрд╡рдЬрд╛рдЪреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдорд┐рд│рд╡рд╛.

рдорд╛рддреНрд░, рдЙрдгрд┐рд╡рд╛, рд╕рдорд╕реНрдпрд╛ рдЖрдгрд┐ рдорд░реНрдпрд╛рджрд╛ рдЙрдШрдб рдЭрд╛рд▓реНрдпрд╛. pyasn1 рдордзреНрдпреЗ рддреНрд░реБрдЯреА рд╣реЛрддреНрдпрд╛ рдЖрдгрд┐ рджреБрд░реНрджреИрд╡рд╛рдиреЗ рдЕрдЬреВрдирд╣реА рдЖрд╣реЗрдд: рд▓реЗрдЦрдирд╛рдЪреНрдпрд╛ рд╡реЗрд│реА, pyasn1 рдордзреАрд▓ рдореВрд▓рднреВрдд рдкреНрд░рдХрд╛рд░рд╛рдВрдкреИрдХреА рдПрдХ рдореНрд╣рдгрдЬреЗ GeneralizedTime, рдЪреБрдХреАрдЪреЗ рдбреАрдХреЛрдб рдХреЗрд▓реЗрд▓реЗ рдЖрдгрд┐ рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗрд▓реЗ.

рдЖрдордЪреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдВрдордзреНрдпреЗ, рдЬрд╛рдЧрд╛ рд╡рд╛рдЪрд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЕрдиреЗрдХрджрд╛ рдлрдХреНрдд рдлрд╛рдИрд▓ рдкрде, рдСрдлрд╕реЗрдЯ рдЖрдгрд┐ рд▓рд╛рдВрдмреА рдЬреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рд╕рдВрджрд░реНрдн рдШреЗрдК рдЗрдЪреНрдЫрд┐рддреЛ рддреНрдпрд╛ рдмрд╛рдЗрдЯреНрд╕рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЛ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХреЗрд▓реЗрд▓реА рдлрд╛рдЗрд▓ рдмрд╣реБрдзрд╛ CMS SignedData ASN.1 рд╕рдВрд░рдЪрдиреЗрдд рд╕реНрдерд┐рдд рдЕрд╕реЗрд▓:

  0     [1,3,1018]  ContentInfo SEQUENCE
  4     [1,1,   9]   . contentType: ContentType OBJECT IDENTIFIER 1.2.840.113549.1.7.2 (id_signedData)
 19-4   [0,0,1003]   . content: [0] EXPLICIT [UNIV 16] ANY
 19     [1,3, 999]   . . DEFINED BY id_signedData: SignedData SEQUENCE
 23     [1,1,   1]   . . . version: CMSVersion INTEGER v3 (03)
 26     [1,1,  19]   . . . digestAlgorithms: DigestAlgorithmIdentifiers SET OF
                           [...]
 47     [1,3, 769]   . . . encapContentInfo: EncapsulatedContentInfo SEQUENCE
 51     [1,1,   8]   . . . . eContentType: ContentType OBJECT IDENTIFIER 1.3.6.1.5.5.7.12.2 (id_cct_PKIData)
 65-4   [1,3, 751]   . . . . eContent: [0] EXPLICIT OCTET STRING 751 bytes OPTIONAL

                 ╨в╨г╨в ╨б╨Ю╨Ф╨Х╨а╨Ц╨Ш╨Ь╨Ю╨Х ╨Я╨Ю╨Ф╨Я╨Ш╨б╨л╨Т╨Р╨Х╨Ь╨Ю╨У╨Ю ╨д╨Р╨Щ╨Ы╨Р ╨а╨Р╨Ч╨Ь╨Х╨а╨Ю╨Ь 751 ╨▒╨░╨╣╤В

820     [1,2, 199]   . . . signerInfos: SignerInfos SET OF
823     [1,2, 196]   . . . . 0: SignerInfo SEQUENCE
826     [1,1,   1]   . . . . . version: CMSVersion INTEGER v3 (03)
829     [0,0,  22]   . . . . . sid: SignerIdentifier CHOICE subjectKeyIdentifier
                               [...]
956     [1,1,  64]   . . . . . signature: SignatureValue OCTET STRING 64 bytes
                     . . . . . . C1:B3:88:BA:F8:92:1C:E6:3E:41:9B:E0:D3:E9:AF:D8
                     . . . . . . 47:4A:8A:9D:94:5D:56:6B:F0:C1:20:38:D2:72:22:12
                     . . . . . . 9F:76:46:F6:51:5F:9A:8D:BF:D7:A6:9B:FD:C5:DA:D2
                     . . . . . . F3:6B:00:14:A4:9D:D7:B5:E1:A6:86:44:86:A7:E8:C9

рдЖрдгрд┐ рдЖрдореНрд╣реА рдореВрд│ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХреЗрд▓реЗрд▓реА рдлрд╛рдИрд▓ рдСрдлрд╕реЗрдЯ 65 рдмрд╛рдЗрдЯреНрд╕, 751 рдмрд╛рдЗрдЯреНрд╕ рд▓рд╛рдВрдм рдорд┐рд│рд╡реВ рд╢рдХрддреЛ. pyasn1 рд╣реА рдорд╛рд╣рд┐рддреА рддреНрдпрд╛рдЪреНрдпрд╛ рдбреАрдХреЛрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд╕реНрддреВрдВрдордзреНрдпреЗ рд╕рд╛рдард╡рдд рдирд╛рд╣реА. рддрдерд╛рдХрдерд┐рдд TLVSeeker рд▓рд┐рд╣рд┐рд▓реЗ рд╣реЛрддреЗ - рдПрдХ рд▓рд╣рд╛рди рд▓рд╛рдпрдмреНрд░рд░реА рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рдЯреЕрдЧ рдЖрдгрд┐ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреА рд▓рд╛рдВрдмреА рдбреАрдХреЛрдб рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ, рдЬреНрдпрд╛рдЪреНрдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕рдордзреНрдпреЗ рдЖрдореНрд╣реА "рдкреБрдвреАрд▓ рдЯреЕрдЧрд╡рд░ рдЬрд╛", "рдЯреЕрдЧрдЪреНрдпрд╛ рдЖрдд рдЬрд╛" (SEQUENCE рдСрдмреНрдЬреЗрдХреНрдЯрдЪреНрдпрд╛ рдЖрдд рдЬрд╛) рдЕрд╕рд╛ рдЖрджреЗрд╢ рджрд┐рд▓рд╛. "рдкреБрдвреАрд▓ рдЯреЕрдЧрд╡рд░ рдЬрд╛", "рддреБрдордЪрд╛ рдСрдлрд╕реЗрдЯ рдЖрдгрд┐ рдЖрдореНрд╣реА рдЬрд┐рдереЗ рдЖрд╣реЛрдд рддреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреА рд▓рд╛рдВрдмреА рд╕рд╛рдВрдЧрд╛." рд╣реЗ ASN.1 DER-рд╕рд┐рд░рд┐рдЕрд▓рд╛рдЗрдЬреНрдб рдбреЗрдЯрд╛рджреНрд╡рд╛рд░реЗ "рдореЕрдиреНрдпреБрдЕрд▓" рдЪрд╛рд▓рд▓реЗ рд╣реЛрддреЗ. рдкрд░рдВрддреБ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ BER-рд╕рд┐рд░рд┐рдпрд▓рд╛рдЗрдЬреНрдб рдбреЗрдЯрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЕрд╢рдХреНрдп рд╣реЛрддреЗ, рдХрд╛рд░рдг, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, OCTET STRING рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдиреЗрдХ рднрд╛рдЧрд╛рдВрдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рдПрдиреНрдХреЛрдб рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ.

рдЖрдордЪреНрдпрд╛ pyasn1 рдХрд╛рд░реНрдпрд╛рдВрдЪрд╛ рдЖрдгрдЦреА рдПрдХ рджреЛрд╖ рдореНрд╣рдгрдЬреЗ рдбреАрдХреЛрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд╕реНрддреВрдВрдордзреВрди рдПрдЦрд╛рджреЗ рдлреАрд▓реНрдб SEQUENCE рдордзреНрдпреЗ рдЙрдкрд╕реНрдерд┐рдд рд╣реЛрддреЗ рдХреА рдирд╛рд╣реА рд╣реЗ рд╕рдордЬрдгреНрдпрд╛рд╕ рдЕрд╕рдорд░реНрдерддрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬрд░ рд╕реНрдЯреНрд░рдХреНрдЪрд░рдордзреНрдпреЗ Smth OPTIONAL рдлреАрд▓реНрдбрдЪрд╛ рдлреАрд▓реНрдб SEQUENCE рдЕрд╕реЗрд▓, рддрд░ рддреЛ рдЗрдирдХрдорд┐рдВрдЧ рдбреЗрдЯрд╛рдордзреВрди рдкреВрд░реНрдгрдкрдгреЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рдЕрд╕реВ рд╢рдХрддреЛ (OPTIONAL), рдХрд┐рдВрд╡рд╛ рддреЛ рдЙрдкрд╕реНрдерд┐рдд рдЕрд╕реВ рд╢рдХрддреЛ, рдкрд░рдВрддреБ рд╢реВрдиреНрдп рд▓рд╛рдВрдмреАрдЪрд╛ рдЕрд╕реВ рд╢рдХрддреЛ (рд░рд┐рдХрд╛рдореА рд╕реВрдЪреА). рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рд╣реЗ рдирд┐рд╢реНрдЪрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА. рдЖрдгрд┐ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛рдЪреНрдпрд╛ рд╡реИрдзрддреЗрдЪреНрдпрд╛ рдХрдареЛрд░ рд╕рддреНрдпрд╛рдкрдирд╛рд╕рд╛рдареА рд╣реЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдХрд▓реНрдкрдирд╛ рдХрд░рд╛ рдХреА рдХрд╛рд╣реА рдкреНрд░рдорд╛рдгрди рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдбреЗрдЯрд╛рд╕рд╣ рдПрдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЬрд╛рд░реА рдХрд░реЗрд▓ рдЬреЗ ASN.1 рдпреЛрдЬрдирд╛рдВрдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди "рд╕рдВрдкреВрд░реНрдгрдкрдгреЗ" рд╡реИрдз рдирд╛рд╣реА! рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреНрд░рдорд╛рдгрди рдкреНрд░рд╛рдзрд┐рдХрд░рдг тАЬT├ЬRKTRUST Elektronik Sertifika Hizmet Sa─Яlay─▒c─▒s─▒тАЭ рдиреЗ рддреНрдпрд╛рдЪреНрдпрд╛ рдореВрд│ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдд рдЕрдиреБрдЬреНрдЮреЗрдп рдорд░реНрдпрд╛рджрд╛ рдУрд▓рд╛рдВрдбрд▓реНрдпрд╛ рдЖрд╣реЗрдд рдЖрд░рдПрдлрд╕реА 5280 рд╡рд┐рд╖рдп рдШрдЯрдХрд╛рдЪреНрдпрд╛ рд▓рд╛рдВрдмреАрд╡рд░ рдорд░реНрдпрд╛рджрд╛ - рддреЗ рдпреЛрдЬрдиреЗрдиреБрд╕рд╛рд░ рдкреНрд░рд╛рдорд╛рдгрд┐рдХрдкрдгреЗ рдбреАрдХреЛрдб рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА. рдбреАрдИрдЖрд░ рдХреЛрдбреЗрдХрд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХреА рдЬреНрдпрд╛ рдлреАрд▓реНрдбрдЪреЗ рдореВрд▓реНрдп рдбреАрдлреЙрд▓реНрдЯрдЪреНрдпрд╛ рдмрд░реЛрдмрд░реАрдЪреЗ рдЖрд╣реЗ рддреЗ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рджрд░рдореНрдпрд╛рди рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реА - рдЕрд╕реЗ рджрд╕реНрддрдРрд╡рдЬ рдЖрдпреБрд╖реНрдпрд╛рдд рдШрдбрддрд╛рдд рдЖрдгрд┐ PyDERASN рдЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рдЖрд╡реГрддреНрддреАрдиреЗ рдЬрд╛рдгреВрдирдмреБрдЬреВрди рдЕрд╢рд╛ рдЕрд╡реИрдз (рдбреАрдЖрд░рдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди) рд╡рд░реНрддрдирд╛рд╕ рдкрд░рд╡рд╛рдирдЧреА рджрд┐рд▓реА рдЖрд╣реЗ. рдорд╛рдЧрд╛рд╕ рд╕рд╣рддреНрд╡рддрд╛.

рджреБрд╕рд░реА рдорд░реНрдпрд╛рджрд╛ рдореНрд╣рдгрдЬреЗ рд╕рдВрд░рдЪрдиреЗрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛрдгрддреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд (BER/DER) рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗ рдЖрд╣реЗ рд╣реЗ рд╕рд╣рдЬрдкрдгреЗ рд╢реЛрдзрдгреНрдпрд╛рдд рдЕрдХреНрд╖рдорддрд╛ рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, CMS рдорд╛рдирдХ рдореНрд╣рдгрддреЗ рдХреА рд╕рдВрджреЗрд╢ BER-рдПрдирдХреЛрдб рдХреЗрд▓реЗрд▓рд╛ рдЖрд╣реЗ, рдкрд░рдВрддреБ signedAttrs рдлреАрд▓реНрдб, рдЬреНрдпрд╛рд╡рд░ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддреЗ, DER рдордзреНрдпреЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЖрдореНрд╣реА DER рд╕рд╣ рдбреАрдХреЛрдб рдХреЗрд▓реНрдпрд╛рд╕, рдЖрдореНрд╣реА CMS рдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрддрдЪ рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрдК; рдЖрдореНрд╣реА BER рд╕рд╣ рдбреАрдХреЛрдб рдХреЗрд▓реНрдпрд╛рд╕, рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХреЗрд▓реЗрд▓реЗAttrs рдХреЛрдгрддреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рд╣реЛрддреЗ рд╣реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдХрд│рдгрд╛рд░ рдирд╛рд╣реА. рдкрд░рд┐рдгрд╛рдореА, TLVSeeker (рдЬреНрдпрд╛рд▓рд╛ pyasn1 рдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА analogue рдирд╛рд╣реА) рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХреЗрд▓реЗрд▓реНрдпрд╛Attrs рдлреАрд▓реНрдбрдЪреЗ рд╕реНрдерд╛рди рд╢реЛрдзрд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓, рдЖрдгрд┐ рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ, рддреЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рддреВрди рдмрд╛рд╣реЗрд░ рдХрд╛рдвреВрди, DER рд╕рд╣ рдбреАрдХреЛрдб рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓.

рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлреАрд▓реНрдбреНрд╕рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛, рдЬреЗ рдмрд░реНрдпрд╛рдЪрджрд╛ рдШрдбрддреЗ, рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдЦреВрдк рдЗрд╖реНрдЯ рд╣реЛрддреЗ. ASN.1 рд░рдЪрдирд╛ рдбреАрдХреЛрдб рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЕрдиреЗрдХ рдлреАрд▓реНрдб рд╢рд┐рд▓реНрд▓рдХ рд░рд╛рд╣реВ рд╢рдХрддрд╛рдд рдЬреНрдпрд╛рд╡рд░ рд╕рдВрд░рдЪрдирд╛ рдлреАрд▓реНрдбрдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдпрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдирд┐рд╡рдбрд▓реЗрд▓реНрдпрд╛ рдпреЛрдЬрдиреЗрдиреБрд╕рд╛рд░ рдкреБрдвреАрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдкрд╛рдпрдерди рдХреЛрдбрдордзреНрдпреЗ, рдпрд╛рдЪрд╛ рдЕрд░реНрде рдХреЛрдгрддреНрдпрд╛рд╣реА рдлреАрд▓реНрдбрд╕рд╛рдареА рдбреАрдХреЛрдбрд░рд▓рд╛ рдЗрдл рдЖрдгрд┐ рдирдВрддрд░ рдХреЙрд▓ рдХрд░рдгреЗ рдЕрд╕рд╛ рдЕрд░реНрде рдЖрд╣реЗ.

PyDERASN рдЪрд╛ рдЙрджрдп

рдЕреЕрдЯрд▓рд╕рдордзреНрдпреЗ, рдЬреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реА рд╕рдорд╕реНрдпрд╛ рдЖрдврд│рддрд╛рдд рдХрд┐рдВрд╡рд╛ рдЖрдореНрд╣реА рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд┐рдирд╛рдореВрд▓реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреНрдпреЗ рд╕реБрдзрд╛рд░рдгрд╛ рдХрд░рддреЛ рддреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рдирд┐рдпрдорд┐рддрдкрдгреЗ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рдкреЕрдЪ рдкрд╛рдард╡рддреЛ. рдЖрдореНрд╣реА pyasn1 рдордзреНрдпреЗ рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рд╕реБрдзрд╛рд░рдгрд╛ рд╕рдмрдорд┐рдЯ рдХреЗрд▓реНрдпрд╛, рдкрд░рдВрддреБ pyasn1 рдЪрд╛ рдХреЛрдб рд╕рдордЬрдгреНрдпрд╛рд╕ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдирд╛рд╣реА рдЖрдгрд┐ рдХрд╛рд╣реАрд╡реЗрд│рд╛ рд╡рд┐рд╕рдВрдЧрдд API рдмрджрд▓ рд╣реЛрддреЗ рдЬреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рд╣рд░рд╡рд▓реЗ. рд╢рд┐рд╡рд╛рдп, рдЖрдореНрд╣рд╛рд▓рд╛ рдЬрдирд░реЗрдЯрд┐рд╡реНрд╣ рдЪрд╛рдЪрдгреАрд╕рд╣ рдЪрд╛рдЪрдгреНрдпрд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рд╕рд╡рдп рдЖрд╣реЗ, рдЬреА pyasn1 рдордзреНрдпреЗ рдирд╡реНрд╣рддреА.

рдПрдХрд╛ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рджрд┐рд╡рд╢реА рдореА рдард░рд╡рд▓реЗ рдХреА рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рддреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдорд╛рдЭреА рд╕реНрд╡рддрдГрдЪреА рд▓рд╛рдпрдмреНрд░рд░реА __slot__s, рдСрдлрд╕реЗрдЯ рдЖрдгрд┐ рд╕реБрдВрджрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмреНрд▓реЙрдмрд╕рд╣ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ! рдлрдХреНрдд рдПрдХ ASN.1 рдХреЛрдбреЗрдХ рддрдпрд╛рд░ рдХрд░рдгреЗ рдкреБрд░реЗрд╕реЗ рдирд╛рд╣реА - рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреЗ рд╕рд░реНрд╡ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рд▓реЗрд▓реЗ рдкреНрд░рдХрд▓реНрдк рддреНрдпрд╛рд╡рд░ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдпрд╛ рдХреЛрдбрдЪреНрдпрд╛ рд╢реЗрдХрдбреЛ рд╣рдЬрд╛рд░реЛ рдУрд│реА рдЖрд╣реЗрдд рдЬреНрдпрд╛ ASN.1 рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕рд╕рд╣ рдкреВрд░реНрдг рдЖрд╣реЗрдд. рдореНрд╣рдгрдЬреЗрдЪ, рддреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реА рдПрдХ: рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ pyasn1 рдХреЛрдбрдЪреЗ рднрд╛рд╖рд╛рдВрддрд░ рд╕реБрд▓рдн рдХрд░рдгреЗ. рдорд╛рдЭреА рд╕рд░реНрд╡ рд╕реБрдЯреНрдЯреА рдШрд╛рд▓рд╡рд▓реНрдпрд╛рдирдВрддрд░, рдореА рд╣реА рд▓рд╛рдпрдмреНрд░рд░реА рд▓рд┐рд╣рд┐рд▓реА рдЖрдгрд┐ рд╕рд░реНрд╡ рдкреНрд░рдХрд▓реНрдк рддреНрдпрд╛рдд рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ. рддреНрдпрд╛рдВрдЪреНрдпрд╛рдХрдбреЗ рдЪрд╛рдЪрдгреНрдпрд╛рдВрд╕рд╣ рдЬрд╡рд│рдЬрд╡рд│ 100% рдХрд╡реНрд╣рд░реЗрдЬ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдпрд╛рдЪрд╛ рдЕрд░реНрде рд▓рд╛рдпрдмреНрд░рд░реА рдкреВрд░реНрдгрдкрдгреЗ рдХрд╛рд░реНрдпрд░рдд рдЖрд╣реЗ.

PyDERASN, рддреНрдпрд╛рдЪрдкреНрд░рдорд╛рдгреЗ, рдЬрд╡рд│рдЬрд╡рд│ 100% рдЪрд╛рдЪрдгреА рдХрд╡реНрд╣рд░реЗрдЬ рдЖрд╣реЗ. рдЙрддреНрдХреГрд╖реНрдЯ рд▓рд╛рдпрдмреНрд░рд░реАрд╕рд╣ рдЬрдирд░реЗрдЯрд┐рд╡реНрд╣ рдЪрд╛рдЪрдгреА рд╡рд╛рдкрд░рддреЗ рдЧреГрд╣рд┐рдд рдХрд▓реНрдкрдирд╛. рддреАрд╣реА рдкрд╛рд░ рдкрдбрд▓реА рдЕрд╕реНрдкрд╖реНрдЯ py-afl- рдореА 32 рдЖрдгреНрд╡рд┐рдХ рдорд╢реАрдирд╡рд░ рдЦрд╛рддреЛ. рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛ рдХреЛрдгрддрд╛рд╣реА Python2 рдХреЛрдб рд╢рд┐рд▓реНрд▓рдХ рдирд╕рд▓рд╛ рддрд░реАрд╣реА, PyDERASN рдЕрдЬреВрдирд╣реА рддреНрдпрд╛рдЪреНрдпрд╛рд╢реА рд╕реБрд╕рдВрдЧрддрддрд╛ рд░рд╛рдЦрддреЛ рдЖрдгрд┐ рдпрд╛рдореБрд│реЗ рдлрдХреНрдд рд╕рд╣рд╛ рд╡реНрдпрд╕рди рд╢рд┐рд╡рд╛рдп, рддреНрдпрд╛рдЪреА рдЪрд╛рдЪрдгреА рдХреЗрд▓реА рдЬрд╛рддреЗ ASN.1:2008 рдЕрдиреБрдкрд╛рд▓рди рдЪрд╛рдЪрдгреА рд╕рдВрдЪ.

рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреЗ рд╕рд┐рджреНрдзрд╛рдВрдд pyasn1 рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ - рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ. ASN.1 рдпреЛрдЬрдирд╛рдВрдЪреЗ рд╡рд░реНрдгрди рд╕рдорд╛рди рдЖрд╣реЗ.

class TBSCertificate(Sequence):
    schema = (
        ("version", Version(expl=tag_ctxc(0), default="v1")),
        ("serialNumber", CertificateSerialNumber()),
        ("signature", AlgorithmIdentifier()),
        ("issuer", Name()),
        ("validity", Validity()),
        ("subject", Name()),
        ("subjectPublicKeyInfo", SubjectPublicKeyInfo()),
        ("issuerUniqueID", UniqueIdentifier(impl=tag_ctxp(1), optional=True)),
        ("subjectUniqueID", UniqueIdentifier(impl=tag_ctxp(2), optional=True)),
        ("extensions", Extensions(expl=tag_ctxc(3), optional=True)),
    )

рддрдерд╛рдкрд┐, PyDERASN рдордзреНрдпреЗ рдордЬрдмреВрдд рдЯрд╛рдпрдкрд┐рдВрдЧрдЪреЗ рдХрд╛рд╣реА рд╕рд╛рдореНрдп рдЖрд╣реЗ. pyasn1 рдордзреНрдпреЗ, рдЬрд░ рдлреАрд▓реНрдб CMSVersion(INTEGER) рдкреНрд░рдХрд╛рд░рдЪреЗ рдЕрд╕реЗрд▓, рддрд░ рддреЗ int рдХрд┐рдВрд╡рд╛ INTEGER рдЕрд╕рд╛рдЗрди рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. PyDERASN рд▓рд╛ рдХрд╛рдЯреЗрдХреЛрд░рдкрдгреЗ рдирд┐рдпреБрдХреНрдд рдХреЗрд▓реЗрд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ CMSVersion рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. Python3 рдХреЛрдб рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдореНрд╣реА рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░рддреЛ рдЯрд╛рдпрдкрд┐рдВрдЧ рднрд╛рд╖реНрдп, рддреНрдпрд╛рдореБрд│реЗ рдЖрдордЪреНрдпрд╛ рдлрдВрдХреНрд╢рдиреНрд╕рдордзреНрдпреЗ def func(рд╕рд┐рд░рд┐рдпрд▓, рдХрдВрдЯреЗрдВрдЯ) рд╕рд╛рд░рдЦреЗ рдЕрд╕реНрдкрд╖реНрдЯ рд╡рд┐рддрд░реНрдХ рдирд╕рддреАрд▓, рдкрд░рдВрддреБ def func(рд╕рд┐рд░рд┐рдпрд▓: CertificateSerialNumber, рд╕рд╛рдордЧреНрд░реА: EncapsulatedContentInfo), рдЖрдгрд┐ PyDERASN рдЕрд╕рд╛ рдХреЛрдб рд░рд╛рдЦрдгреНрдпрд╛рдд рдорджрдд рдХрд░рддреЗ.

рддреНрдпрд╛рдЪ рд╡реЗрд│реА, PyDERASN рд▓рд╛ рдпрд╛ рдЯрд╛рдпрдкрд┐рдВрдЧрд╕рд╛рдареА рдЕрддреНрдпрдВрдд рд╕реЛрдпреАрд╕реНрдХрд░ рд╕рд╡рд▓рддреА рдЖрд╣реЗрдд. pyasn1 рдиреЗ SubjectKeyIdentifier().subtype(implicitTag=Tag(...)) рдлреАрд▓реНрдбрд▓рд╛ SubjectKeyIdentifier() (рдЖрд╡рд╢реНрдпрдХ IMPLICIT TAG рд╢рд┐рд╡рд╛рдп) рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рдпреБрдХреНрдд рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджрд┐рд▓реА рдирд╛рд╣реА рдЖрдгрд┐ рдХреЗрд╡рд│ рдХрд╛рд░рдгрд╛рдВрдореБрд│реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЙрдкреА рдХрд░рдгреЗ рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ. рдмрджрд▓рд▓реЗрд▓реЗ IMPLICIT/EXPLICIT рдЯреЕрдЧ. PyDERASN рдХрд╛рдЯреЗрдХреЛрд░рдкрдгреЗ рдлрдХреНрдд рдмреЗрд╕ рдкреНрд░рдХрд╛рд░рд╛рдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ - рддреЗ рд╕реНрдЯреНрд░рдХреНрдЪрд░рдЪреНрдпрд╛ рдЖрдзреАрдкрд╛рд╕реВрди рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ ASN.1 рд╕реНрдХреАрдорд╛рдордзреВрди рдЯреЕрдЧ рдЖрдкреЛрдЖрдк рдмрджрд▓реЗрд▓. рд╣реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдб рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд╕реБрд▓рдн рдХрд░рддреЗ.

рдбреАрдХреЛрдбрд┐рдВрдЧ рджрд░рдореНрдпрд╛рди рддреНрд░реБрдЯреА рдЖрдврд│рд▓реНрдпрд╛рд╕, pyasn1 рдордзреНрдпреЗ рддреА рдиреЗрдордХреА рдХреБрдареЗ рдЖрд▓реА рд╣реЗ рд╕рдордЬрдгреЗ рд╕реЛрдкреЗ рдирд╛рд╣реА. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╡рд░ рдирдореВрдж рдХреЗрд▓реЗрд▓реНрдпрд╛ рддреБрд░реНрдХреА рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдордзреНрдпреЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓ рддреНрд░реБрдЯреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдИрд▓: UTF8String (tbsCertificate:issuer:rdnSequence:3:0:value:DEFINED BY 2.5.4.10:utf8String) (138 рд╡рд░) рдЕрд╕рдорд╛рдзрд╛рдиреА рд╕реАрдорд╛: 1 тЗР 77 тЗР 64 ASN .1 рд░рдЪрдирд╛ рд▓рд┐рд╣рд┐рддрд╛рдирд╛ рд▓реЛрдХ рдЪреБрдХрд╛ рдХрд░реВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рдпрд╛рдореБрд│реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдбреАрдмрдЧ рдХрд░рдгреЗ рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдкрдХреНрд╖рд╛рдЪреНрдпрд╛ рдХреЛрдбреЗрдб рджрд╕реНрддрдРрд╡рдЬрд╛рдВрд╕рд╣ рд╕рдорд╕реНрдпрд╛ рд╢реЛрдзрдгреЗ рд╕реЛрдкреЗ рд╣реЛрддреЗ.

PyDERASN рдЪреА рдкрд╣рд┐рд▓реА рдЖрд╡реГрддреНрддреА BER рдПрдиреНрдХреЛрдбрд┐рдВрдЧрд▓рд╛ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реА. рд╣реЗ рдЦреВрдк рдирдВрддрд░ рджрд┐рд╕рд▓реЗ рдЖрдгрд┐ рддрд░реАрд╣реА рд╡реЗрд│ рдХреНрд╖реЗрддреНрд░рд╛рдВрд╕рд╣ UTCTtime/GeneralizedTime рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реА. рд╣реЗ рднрд╡рд┐рд╖реНрдпрд╛рдд рдпреЗрдИрд▓, рдХрд╛рд░рдг рдкреНрд░рдХрд▓реНрдк рдореБрдЦреНрдпрддрдГ рдорд╛рдЭреНрдпрд╛ рдореЛрдХрд│реНрдпрд╛ рд╡реЗрд│реЗрдд рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ.

рддрд╕реЗрдЪ, рдкрд╣рд┐рд▓реНрдпрд╛ рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ DEFINED BY рдлреАрд▓реНрдбрд╕рд╣ рдХреЛрдгрддреЗрд╣реА рдХрд╛рдо рдирд╡реНрд╣рддреЗ. рдХрд╛рд╣реА рдорд╣рд┐рдиреНрдпрд╛рдВрдиреА рд╣реЗ рд╕рдВрдзреА рдирд┐рд░реНрдорд╛рдг рдЭрд╛рд▓реА рдЖрдгрд┐ рд╕рдХреНрд░рд┐рдпрдкрдгреЗ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд▓рд╛рдЧрд▓рд╛, рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХрдореА рдХреЗрд▓рд╛ - рдПрдХрд╛ рдбреАрдХреЛрдбрд┐рдВрдЧ рдСрдкрд░реЗрд╢рдирдордзреНрдпреЗ рд╕рдВрдкреВрд░реНрдг рд░рдЪрдирд╛ рдЕрдЧрджреА рдЦреЛрд▓реАрдкрд░реНрдпрдВрдд рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓ рдХрд░рдгреЗ рд╢рдХреНрдп рдЭрд╛рд▓реЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╕реНрдХреАрдорд╛ рдХреЛрдгрддреА рдлреАрд▓реНрдб "рдкрд░рд┐рднрд╛рд╖рд┐рдд" рдХрд░рддреЗ рддреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, CMS рдпреЛрдЬрдиреЗрдЪреЗ рд╡рд░реНрдгрди:

class ContentInfo(Sequence):
    schema = (
        ("contentType", ContentType(defines=((("content",), {
            id_authenticatedData: AuthenticatedData(),
            id_digestedData: DigestedData(),
            id_encryptedData: EncryptedData(),
            id_envelopedData: EnvelopedData(),
            id_signedData: SignedData(),
        }),))),
        ("content", Any(expl=tag_ctxc(0))),
    )

рдореНрд╣рдгрддреЗ рдХреА рдЬрд░ contentType рдордзреНрдпреЗ id_signedData рдореВрд▓реНрдпрд╛рд╕рд╣ OID рдЕрд╕реЗрд▓, рддрд░ рд╕рд╛рдордЧреНрд░реА рдлреАрд▓реНрдб (рддреНрдпрд╛рдЪ SEQUENCE рдордзреНрдпреЗ рд╕реНрдерд┐рдд) SignedData рдпреЛрдЬрдиреЗрдиреБрд╕рд╛рд░ рдбреАрдХреЛрдб рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЗрддрдХреЗ рдХрдВрд╕ рдХрд╛ рдЖрд╣реЗрдд? рдПрдЦрд╛рджреЗ рдлреАрд▓реНрдб рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЕрдиреЗрдХ рдлреАрд▓реНрдб "рдкрд░рд┐рднрд╛рд╖рд┐рдд" рдХрд░реВ рд╢рдХрддреЗ, рдЬрд╕реЗ EnvelopedData рд╕рдВрд░рдЪрдирд╛рдВрдордзреНрдпреЗ рдЖрд╣реЗ. рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлреАрд▓реНрдб рддрдерд╛рдХрдерд┐рдд рдбреАрдХреЛрдб рдорд╛рд░реНрдЧрд╛рдиреЗ рдУрд│рдЦрд▓реЗ рдЬрд╛рддрд╛рдд - рддреЗ рд╕рд░реНрд╡ рд╕рдВрд░рдЪрдирд╛рдВрдордзреАрд▓ рдХреЛрдгрддреНрдпрд╛рд╣реА рдШрдЯрдХрд╛рдЪреЗ рдЕрдЪреВрдХ рд╕реНрдерд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ.

рддреБрдореНрд╣рд╛рд▓рд╛ рдиреЗрд╣рдореА рдирдХреЛ рдЕрд╕рддреЗ рдХрд┐рдВрд╡рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдиреЗрд╣рдореА рдбрд╛рдпрдЧреНрд░рд╛рдордордзреНрдпреЗ рдпрд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЬреЛрдбрдгреНрдпрд╛рдЪреА рд╕рдВрдзреА рдирд╕рддреЗ. рдЕрдиреБрдкреНрд░рдпреЛрдЧ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд░рдгреЗ рдЕрд╕реВ рд╢рдХрддрд╛рдд рдЬреЗрд╡реНрд╣рд╛ OIDs рдЖрдгрд┐ рд╕рдВрд░рдЪрдирд╛ рдХреЗрд╡рд│ рддреГрддреАрдп-рдкрдХреНрд╖рд╛рдЪреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдордзреНрдпреЗ рдУрд│рдЦрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. PyDERASN рд░рдЪрдирд╛ рдбреАрдХреЛрдбрд┐рдВрдЧрдЪреНрдпрд╛ рд╡реЗрд│реА рдпрд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ:

ContentInfo().decode(data, ctx={"defines_by_path": ((
    (
        "content", DecodePathDefBy(id_signedData),
        "certificates", any, "certificate", "tbsCertificate",
        "extensions", any, "extnID",
    ),
    ((("extnValue",), {
        id_ce_authorityKeyIdentifier: AuthorityKeyIdentifier(),
        id_ce_basicConstraints: BasicConstraints(),
        [...]
        id_ru_subjectSignTool: SubjectSignTool(),
    }),),
),)})

рдпреЗрдереЗ рдЖрдореНрд╣реА рдореНрд╣рдгрддреЛ рдХреА рд╕рд░реНрд╡ рд╕рдВрд▓рдЧреНрди рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрд╕рд╛рдареА CMS SignedData рдордзреНрдпреЗ, рддреНрдпрд╛рдВрдЪреЗ рд╕рд░реНрд╡ рд╡рд┐рд╕реНрддрд╛рд░ рдбреАрдХреЛрдб рдХрд░рд╛ (AuthorityKeyIdentifier, BasicConstraints, SubjectSignTool, рдЗ.). рдЖрдореНрд╣реА рдбреАрдХреЛрдб рдорд╛рд░реНрдЧрд╛рджреНрд╡рд╛рд░реЗ рд╕реВрдЪрд┐рдд рдХрд░рддреЛ рдХреА рдХреЛрдгрддрд╛ рдШрдЯрдХ рдкрд░рд┐рднрд╛рд╖рд┐рддрд╛рдВрд╕рд╣ "рдмрджрд▓" рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬрд╕реЗ рдХреА рддреЗ рд╕реНрдХреАрдорд╛рдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ.

рд╢реЗрд╡рдЯреА, PyDERASN рдХрдбреВрди рдкрд│рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдЖрд╣реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди ASN.1 рдлрд╛рдпрд▓реА рдбреАрдХреЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╕рдореГрджреНрдз рдЖрд╣реЗ рд╕реБрдВрджрд░ рдЫрдкрд╛рдИ. рддреБрдореНрд╣реА рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд ASN.1 рдбреАрдХреЛрдб рдХрд░реВ рд╢рдХрддрд╛ рдХрд┐рдВрд╡рд╛ рддреБрдореНрд╣реА рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдпреЛрдЬрдирд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рдкрд╛рд╣реВ рд╢рдХрддрд╛:

PyDERASN: рдореА рд╕реНрд▓реЙрдЯ рдЖрдгрд┐ рдмреНрд▓реЙрдмрд╕рд╣ ASN.1 рд▓рд╛рдпрдмреНрд░рд░реА рдХрд╢реА рд▓рд┐рд╣рд┐рд▓реА

рдкреНрд░рджрд░реНрд╢рд┐рдд рдорд╛рд╣рд┐рддреА: рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдлрд╕реЗрдЯ, рдЯреЕрдЧрдЪреА рд▓рд╛рдВрдмреА, рд▓рд╛рдВрдмреАрдЪреА рд▓рд╛рдВрдмреА, рд╕рд╛рдордЧреНрд░реАрдЪреА рд▓рд╛рдВрдмреА, EOC рдЪреА рдЙрдкрд╕реНрдерд┐рддреА (рдСрдХреНрдЯреЗрдЯреНрд╕рдЪрд╛ рд╢реЗрд╡рдЯ), BER рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛, рдЕрдирд┐рд╢реНрдЪрд┐рдд-рд▓рд╛рдВрдмреАрдЪреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛, EXPLICIT рдЯреЕрдЧрдЪреА рд▓рд╛рдВрдмреА рдЖрдгрд┐ рдСрдлрд╕реЗрдЯ (рдЕрд╕рд▓реНрдпрд╛рд╕), рдСрдмреНрдЬреЗрдХреНрдЯ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдЦреЛрд▓реА рд░рдЪрдирд╛рдВрдордзреНрдпреЗ, IMPLICIT/EXPLICIT рдЯреЕрдЧ рдореВрд▓реНрдп, рдпреЛрдЬрдиреЗрдиреБрд╕рд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреЗ рдирд╛рд╡, рддреНрдпрд╛рдЪрд╛ рдЖрдзрд╛рд░ ASN.1 рдкреНрд░рдХрд╛рд░, SEQUENCE/SET OF рдордзреАрд▓ рдЕрдиреБрдХреНрд░рдо рдХреНрд░рдорд╛рдВрдХ, рдирд┐рд╡рдб рдореВрд▓реНрдп (рдЕрд╕рд▓реНрдпрд╛рд╕), рдорд╛рдирд╡реА рд╡рд╛рдЪрдиреАрдп рдирд╛рд╡ рдкреВрд░реНрдгрд╛рдВрдХ/рдЧрдгрд┐рдд/рдмрд┐рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреНрдпрд╛рдиреБрд╕рд╛рд░ рд╕реНрдХреАрдо, рдХреЛрдгрддреНрдпрд╛рд╣реА рдмреЗрд╕ рдкреНрд░рдХрд╛рд░рд╛рдЪреЗ рдореВрд▓реНрдп , рд╕реНрдХреАрдордордзреАрд▓ рдбреАрдлреЙрд▓реНрдЯ/рдРрдЪреНрдЫрд┐рдХ рдзреНрд╡рдЬ, рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдкреЛрдЖрдк рдкрд░рд┐рднрд╛рд╖рд┐рдд рджреНрд╡рд╛рд░реЗ рдбреАрдХреЛрдб рдХреЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рдЪрд┐рдиреНрд╣ рдЖрдгрд┐ рдЬреНрдпрд╛ OID рдореБрд│реЗ рд╣реЗ рдШрдбрд▓реЗ, рдорд╛рдирд╡реА рд╡рд╛рдЪрдиреАрдп OID.

рд╕реБрдВрджрд░ рдЫрдкрд╛рдИ рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрдГ рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реА рдЖрд╣реЗ рдЬреЗрдгреЗрдХрд░реВрди рддреА PP рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪрд╛ рдПрдХ рдХреНрд░рдо рддрдпрд╛рд░ рдХрд░рддреЗ рдЬреА рд╕реНрд╡рддрдВрддреНрд░ рдорд╛рдзреНрдпрдорд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рджреГрд╢реНрдпрдорд╛рди рдХреЗрд▓реА рдЬрд╛рддреЗ. рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╕рд╛рдзреНрдпрд╛ рд░рдВрдЧреАрдд рдордЬрдХреБрд░рд╛рдд рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рджрд░реНрд╢рд╡рд┐рддреЛ. JSON/HTML рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рд░реЗрдВрдбрд░рд░ рджреЗрдЦреАрд▓ рдЖрд╣реЗрдд, рдЬреЗрдгреЗрдХрд░реВрди рддреЗ ASN.1 рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рд╣рд╛рдпрд▓рд╛рдЗрдЯрд┐рдВрдЧрд╕рд╣ рдкрд╛рд╣рд┐рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдЬрд╕реЗ рдХреА asn1js рдкреНрд░рдХрд▓реНрдк

рдЗрддрд░ рд▓рд╛рдпрдмреНрд░рд░реА

рд╣реЗ рдзреНрдпреЗрдп рдирд╡реНрд╣рддреЗ, рдкрд░рдВрддреБ PyDERASN рд▓рдХреНрд╖рдгреАрдпрд░рд┐рддреНрдпрд╛ рдмрд╛рд╣реЗрд░ рдкрдбрд▓реЗ рдЬрд▓рдж pyasn1 рдкреЗрдХреНрд╖рд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ CRL рдлрд╛рдЗрд▓реНрд╕ рдбреАрдХреЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЗрддрдХрд╛ рд╡реЗрд│ рд▓рд╛рдЧреВ рд╢рдХрддреЛ рдХреА рддреБрдореНрд╣рд╛рд▓рд╛ рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдлреЙрд░рдореЕрдЯреНрд╕ (рдЬрд▓рдж) рдмрджреНрджрд▓ рд╡рд┐рдЪрд╛рд░ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓ рдЖрдгрд┐ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдмрджрд▓рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓. pyasn1 CRL рдбреАрдХреЛрдб рдХрд░рддреЗ CACert.org рдорд╛рдЭреНрдпрд╛ рд▓реЕрдкрдЯреЙрдкрд╡рд░ 20 рдорд┐рдирд┐рдЯрд╛рдВрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╡реЗрд│ рд▓рд╛рдЧрддреЛ, рддрд░ PyDERASN рд▓рд╛ рдлрдХреНрдд 28 рд╕реЗрдХрдВрдж рд▓рд╛рдЧрддрд╛рдд! рдПрдХ рдкреНрд░рдХрд▓реНрдк рдЖрд╣реЗ asn1crypto, рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕рд╕рд╣ рдЬрд▓рдж рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдиреЗ: рддреЗ 29 рд╕реЗрдХрдВрджрд╛рдд рд╕рдорд╛рди CRL рдбреАрдХреЛрдб рдХрд░рддреЗ (рдкреВрд░реНрдгрдкрдгреЗ, рдЖрд│рд╢реАрдкрдгреЗ рдирд╛рд╣реА), рдкрд░рдВрддреБ Python3 (983 MiB рд╡рд┐рд░реБрджреНрдз 498) рдЕрдВрддрд░реНрдЧрдд рдЪрд╛рд▓рдд рдЕрд╕рддрд╛рдирд╛ рдЬрд╡рд│рдЬрд╡рд│ рджреБрдкреНрдкрдЯ RAM рд╡рд╛рдкрд░рддреЗ рдЖрдгрд┐ Python3.5 (2) рдЕрдВрддрд░реНрдЧрдд 1677 рдкрдЯреАрдиреЗ рд╡рд╛рдкрд░рддреЗ. рд╡рд┐рд░реБрджреНрдз 488), рддрд░ pyasn1 4.3 рдкрдЯ рдЬрд╛рд╕реНрдд рд╡рд╛рдкрд░рддреЗ (2093 рд╡рд┐рд░реБрджреНрдз 488).

рдЖрдореНрд╣реА asn1crypto рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реЗ рдирд╛рд╣реА, рдЬреНрдпрд╛рдЪрд╛ рдореА рдЙрд▓реНрд▓реЗрдЦ рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдХрд╛рд░рдг рдкреНрд░рдХрд▓реНрдк рдЕрджреНрдпрд╛рдк рдмрд╛рд▓реНрдпрд╛рд╡рд╕реНрдереЗрдд рд╣реЛрддрд╛ рдЖрдгрд┐ рдЖрдореНрд╣реА рддреНрдпрд╛рдмрджреНрджрд▓ рдРрдХрд▓реЗ рдирд╡реНрд╣рддреЗ. рдЖрддрд╛ рдЖрдореНрд╣реА рддреНрдпрд╛рдЪреНрдпрд╛ рджрд┐рд╢реЗрдиреЗрд╣реА рдкрд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА, рдХрд╛рд░рдг рдорд▓рд╛ рд▓рдЧреЗрдЪ рдЖрдврд│рд▓реЗ рдХреА рд╕рдорд╛рди рдЬрдирд░рд▓рд╛рдЗрдЬреНрдб рдЯрд╛рдЗрдо рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдлреЙрд░реНрдо рдШреЗрдд рдирд╛рд╣реА рдЖрдгрд┐ рд╕реАрд░рд┐рдпрд▓рд╛рдпрдЭреЗрд╢рди рджрд░рдореНрдпрд╛рди рддреЗ рд╢рд╛рдВрддрдкрдгреЗ рд╕реЗрдХрдВрджрд╛рдЪрд╛ рдПрдХ рдЕрдВрд╢ рдХрд╛рдвреВрди рдЯрд╛рдХрддреЗ. рд╣реЗ X.509 рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рддреЗ рдХрд╛рд░реНрдп рдХрд░рдгрд╛рд░ рдирд╛рд╣реА.

рдпрд╛рдХреНрд╖рдгреА, PyDERASN рд╣рд╛ рдорд▓рд╛ рдорд╛рд╣реАрдд рдЕрд╕рд▓реЗрд▓рд╛ рд╕рд░реНрд╡рд╛рдд рдХрдареЛрд░ рдореЛрдлрдд Python/Go DER рдбреАрдХреЛрдбрд░ рдЖрд╣реЗ. рдорд╛рдЭреНрдпрд╛ рдкреНрд░рд┐рдп рдЧреЛ рдЪреНрдпрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ/asn1 рд▓рд╛рдпрдмреНрд░рд░реАрдордзреНрдпреЗ рдХрдареЛрд░ рддрдкрд╛рд╕рдгреА рдирд╛рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдпрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░ рдЖрдгрд┐ UTCTtime/GeneralizedTime рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕. рдХрд╛рд╣реАрд╡реЗрд│рд╛ рдХрд╛рдЯреЗрдХреЛрд░рдкрдгрд╛ рдорд╛рд░реНрдЧрд╛рдд рдпреЗрдК рд╢рдХрддреЛ (рдкреНрд░рд╛рдореБрдЦреНрдпрд╛рдиреЗ рдЬреБрдиреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдЪреНрдпрд╛ рдорд╛рдЧрд╛рд╕ рдЕрдиреБрдХреВрд▓рддреЗрдореБрд│реЗ рдЬреЗ рдХреЛрдгреАрд╣реА рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгрд╛рд░ рдирд╛рд╣реА), рддреНрдпрд╛рдореБрд│реЗ PyDERASN рдкрд╛рд╕ рд╣реЛрдК рд╢рдХрддреЗ рд╡рд┐рд╡рд┐рдз рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдХрдордХреБрд╡рдд рддрдкрд╛рд╕рдгреНрдпрд╛.

рдкреНрд░рдХрд▓реНрдк рдХреЛрдб рд╢рдХреНрдп рддрд┐рддрдХрд╛ рд╕реЛрдкрд╛ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддреЛ. рд╕рдВрдкреВрд░реНрдг рд▓рд╛рдпрдмреНрд░рд░реА рд╣реА рдПрдХ рдлрд╛рдИрд▓ рдЖрд╣реЗ. рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдЖрдгрд┐ DRY рдХреЛрдб рд╢рд┐рд╡рд╛рдп, рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рдЪреНрдпрд╛ рд╕реБрд▓рднрддреЗрд╡рд░ рднрд░ рджреЗрдКрди рдХреЛрдб рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ. рдореА рдЖрдзреАрдЪ рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рддреЗ UTCTime/GeneralizedTime рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕рдЪреНрдпрд╛ рдкреВрд░реНрдг BER тАЛтАЛрдбрд┐рдХреЛрдбрд┐рдВрдЧрд▓рд╛, рддрд╕реЗрдЪ REAL, RELATIVE OID, EXTERNAL, INSTANCE OF, рдПрдореНрдмреЗрдбреЗрдб PDV, рдХреЕрд░реЗрдХреНрдЯрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╛рдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реА. рдЗрддрд░ рд╕рд░реНрд╡ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рдорд▓рд╛ рд╡реИрдпрдХреНрддрд┐рдХрд░рд┐рддреНрдпрд╛ рдкрд╛рдпрдердирдордзреАрд▓ рдЗрддрд░ рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдореБрджреНрджрд╛ рджрд┐рд╕рдд рдирд╛рд╣реА.

рдорд╛рдЭреЗ рд╕рд░реНрд╡ рдкреНрд░рдХрд▓реНрдк рдЖрд╡рдбрд▓реЗ, рдЖрд╡рдбрд▓реЗ PyGOST, GoGOST, рдПрдирдПрдирд╕реАрдкреА, GoVPN, PyDERASN рдкреВрд░реНрдгрдкрдгреЗ рдЖрд╣реЗ рдореЛрдлрдд рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░, рдЕрдЯреА рдЕрдВрддрд░реНрдЧрдд рд╡рд┐рддрд░рд┐рдд LGPLv3+, рдЖрдгрд┐ рд╡рд┐рдирд╛рдореВрд▓реНрдп рдбрд╛рдЙрдирд▓реЛрдбрд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ. рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдЙрджрд╛рд╣рд░рдгреЗ рдЖрд╣реЗрдд рдпреЗрдереЗ рдЖрдгрд┐ рдордзреНрдпреЗ PyGOST рдЪрд╛рдЪрдгреНрдпрд╛.

рд╕реЗрд░реНрдЧреЗрдИ рдореЕрдЯрд╡реАрд╡, рд╕рд╛рдпрдлрд░рдкрдВрдХ, рд╕рджрд╕реНрдп SPO рдлрд╛рдЙрдВрдбреЗрд╢рди, рдкрд╛рдпрдерди/рдЧреЛ рдбреЗрд╡реНрд╣рд▓рдкрд░, рдореБрдЦреНрдп рддрдЬреНрдЮ FSUE "STC "рдНрдЯрд▓рд╕".

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛