рд╣рд╛ рд▓реЗрдЦ рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ
рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА ASN.1 рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рдгреЗ рдпреЛрдЧреНрдп рдирд╛рд╣реА: ASN.1 рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдХреЛрдбреЗрдХреНрд╕ рдЬрдЯрд┐рд▓ рдЖрд╣реЗрдд. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдХреЛрдб рд╕рд╛рдзрд╛ рдирд╕реЗрд▓ рдЖрдгрд┐ рд╣рд╛ рдиреЗрд╣рдореАрдЪ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣рд▓реНрд▓рд╛ рд╡реЗрдХреНрдЯрд░ рдЕрд╕рддреЛ. рдЬрд░рд╛ рдмрдШрд╛
ASN.1 рд╡рд┐рд╡рд┐рдз рдкреНрд░рдХрд╛рд░реЗ/рдХреЛрдбреЗрдХреНрд╕рдордзреНрдпреЗ рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:
рдмреАрдИрдЖрд░ (рдореВрд▓рднреВрдд рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)рд╕реАрдИрдЖрд░ (рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)DER (рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)рдЬреАрдПрд╕рдИрдЖрд░ (рдЬреЗрдиреЗрд░рд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)рдЬреЗрдИрдЖрд░ (JSON рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)- LWER (рд╣рд▓рдХреЗ рд╡рдЬрди рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)
REO (рдСрдХреНрдЯреЗрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)PER (рдкреЕрдХ рдХреЗрд▓реЗрд▓реЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)- SER (рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдорд╛рдВрдЪреЗ рд╕рдВрдХреЗрдд)
рд╢рд┐рд╖реНрдп (XML рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо)
рдЖрдгрд┐ рдЗрддрд░ рдЕрдиреЗрдХ. рдкрд░рдВрддреБ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдХрд╛рд░реНрдпрд╛рдВрдордзреНрдпреЗ, рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд, рджреЛрди рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд: BER рдЖрдгрд┐ DER. рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХреЗрд▓реЗрд▓реНрдпрд╛ XML рджрд╕реНрддрдРрд╡рдЬрд╛рдВрдордзреНрдпреЗ рджреЗрдЦреАрд▓ (
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 рдордзреНрдпреЗ рддреНрд░реБрдЯреА рд╣реЛрддреНрдпрд╛ рдЖрдгрд┐ рджреБрд░реНрджреИрд╡рд╛рдиреЗ рдЕрдЬреВрдирд╣реА рдЖрд╣реЗрдд: рд▓реЗрдЦрдирд╛рдЪреНрдпрд╛ рд╡реЗрд│реА, 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─▒тАЭ рдиреЗ рддреНрдпрд╛рдЪреНрдпрд╛ рдореВрд│ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдд рдЕрдиреБрдЬреНрдЮреЗрдп рдорд░реНрдпрд╛рджрд╛ рдУрд▓рд╛рдВрдбрд▓реНрдпрд╛ рдЖрд╣реЗрдд
рджреБрд╕рд░реА рдорд░реНрдпрд╛рджрд╛ рдореНрд╣рдгрдЬреЗ рд╕рдВрд░рдЪрдиреЗрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛрдгрддреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд (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% рдЪрд╛рдЪрдгреА рдХрд╡реНрд╣рд░реЗрдЬ рдЖрд╣реЗ. рдЙрддреНрдХреГрд╖реНрдЯ рд▓рд╛рдпрдмреНрд░рд░реАрд╕рд╣ рдЬрдирд░реЗрдЯрд┐рд╡реНрд╣ рдЪрд╛рдЪрдгреА рд╡рд╛рдкрд░рддреЗ
рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреЗ рд╕рд┐рджреНрдзрд╛рдВрдд 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 рдХреЛрдб рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдореНрд╣реА рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░рддреЛ
рддреНрдпрд╛рдЪ рд╡реЗрд│реА, 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 рдлреАрд▓реНрдбрд╕рд╣ рдХреЛрдгрддреЗрд╣реА рдХрд╛рдо рдирд╡реНрд╣рддреЗ. рдХрд╛рд╣реА рдорд╣рд┐рдиреНрдпрд╛рдВрдиреА рд╣реЗ
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 рдХрдбреВрди рдкрд│рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдЖрд╣реЗ
рдкреНрд░рджрд░реНрд╢рд┐рдд рдорд╛рд╣рд┐рддреА: рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдлрд╕реЗрдЯ, рдЯреЕрдЧрдЪреА рд▓рд╛рдВрдмреА, рд▓рд╛рдВрдмреАрдЪреА рд▓рд╛рдВрдмреА, рд╕рд╛рдордЧреНрд░реАрдЪреА рд▓рд╛рдВрдмреА, EOC рдЪреА рдЙрдкрд╕реНрдерд┐рддреА (рдСрдХреНрдЯреЗрдЯреНрд╕рдЪрд╛ рд╢реЗрд╡рдЯ), BER рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛, рдЕрдирд┐рд╢реНрдЪрд┐рдд-рд▓рд╛рдВрдмреАрдЪреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛, EXPLICIT рдЯреЕрдЧрдЪреА рд▓рд╛рдВрдмреА рдЖрдгрд┐ рдСрдлрд╕реЗрдЯ (рдЕрд╕рд▓реНрдпрд╛рд╕), рдСрдмреНрдЬреЗрдХреНрдЯ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдЦреЛрд▓реА рд░рдЪрдирд╛рдВрдордзреНрдпреЗ, IMPLICIT/EXPLICIT рдЯреЕрдЧ рдореВрд▓реНрдп, рдпреЛрдЬрдиреЗрдиреБрд╕рд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреЗ рдирд╛рд╡, рддреНрдпрд╛рдЪрд╛ рдЖрдзрд╛рд░ ASN.1 рдкреНрд░рдХрд╛рд░, SEQUENCE/SET OF рдордзреАрд▓ рдЕрдиреБрдХреНрд░рдо рдХреНрд░рдорд╛рдВрдХ, рдирд┐рд╡рдб рдореВрд▓реНрдп (рдЕрд╕рд▓реНрдпрд╛рд╕), рдорд╛рдирд╡реА рд╡рд╛рдЪрдиреАрдп рдирд╛рд╡ рдкреВрд░реНрдгрд╛рдВрдХ/рдЧрдгрд┐рдд/рдмрд┐рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреНрдпрд╛рдиреБрд╕рд╛рд░ рд╕реНрдХреАрдо, рдХреЛрдгрддреНрдпрд╛рд╣реА рдмреЗрд╕ рдкреНрд░рдХрд╛рд░рд╛рдЪреЗ рдореВрд▓реНрдп , рд╕реНрдХреАрдордордзреАрд▓ рдбреАрдлреЙрд▓реНрдЯ/рдРрдЪреНрдЫрд┐рдХ рдзреНрд╡рдЬ, рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдкреЛрдЖрдк рдкрд░рд┐рднрд╛рд╖рд┐рдд рджреНрд╡рд╛рд░реЗ рдбреАрдХреЛрдб рдХреЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рдЪрд┐рдиреНрд╣ рдЖрдгрд┐ рдЬреНрдпрд╛ OID рдореБрд│реЗ рд╣реЗ рдШрдбрд▓реЗ, рдорд╛рдирд╡реА рд╡рд╛рдЪрдиреАрдп OID.
рд╕реБрдВрджрд░ рдЫрдкрд╛рдИ рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрдГ рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реА рдЖрд╣реЗ рдЬреЗрдгреЗрдХрд░реВрди рддреА PP рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪрд╛ рдПрдХ рдХреНрд░рдо рддрдпрд╛рд░ рдХрд░рддреЗ рдЬреА рд╕реНрд╡рддрдВрддреНрд░ рдорд╛рдзреНрдпрдорд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рджреГрд╢реНрдпрдорд╛рди рдХреЗрд▓реА рдЬрд╛рддреЗ. рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╕рд╛рдзреНрдпрд╛ рд░рдВрдЧреАрдд рдордЬрдХреБрд░рд╛рдд рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рджрд░реНрд╢рд╡рд┐рддреЛ. JSON/HTML рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рд░реЗрдВрдбрд░рд░ рджреЗрдЦреАрд▓ рдЖрд╣реЗрдд, рдЬреЗрдгреЗрдХрд░реВрди рддреЗ ASN.1 рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рд╣рд╛рдпрд▓рд╛рдЗрдЯрд┐рдВрдЧрд╕рд╣ рдкрд╛рд╣рд┐рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдЬрд╕реЗ рдХреА
рдЗрддрд░ рд▓рд╛рдпрдмреНрд░рд░реА
рд╣реЗ рдзреНрдпреЗрдп рдирд╡реНрд╣рддреЗ, рдкрд░рдВрддреБ PyDERASN рд▓рдХреНрд╖рдгреАрдпрд░рд┐рддреНрдпрд╛ рдмрд╛рд╣реЗрд░ рдкрдбрд▓реЗ
рдЖрдореНрд╣реА asn1crypto рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реЗ рдирд╛рд╣реА, рдЬреНрдпрд╛рдЪрд╛ рдореА рдЙрд▓реНрд▓реЗрдЦ рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдХрд╛рд░рдг рдкреНрд░рдХрд▓реНрдк рдЕрджреНрдпрд╛рдк рдмрд╛рд▓реНрдпрд╛рд╡рд╕реНрдереЗрдд рд╣реЛрддрд╛ рдЖрдгрд┐ рдЖрдореНрд╣реА рддреНрдпрд╛рдмрджреНрджрд▓ рдРрдХрд▓реЗ рдирд╡реНрд╣рддреЗ. рдЖрддрд╛ рдЖрдореНрд╣реА рддреНрдпрд╛рдЪреНрдпрд╛ рджрд┐рд╢реЗрдиреЗрд╣реА рдкрд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА, рдХрд╛рд░рдг рдорд▓рд╛ рд▓рдЧреЗрдЪ рдЖрдврд│рд▓реЗ рдХреА рд╕рдорд╛рди рдЬрдирд░рд▓рд╛рдЗрдЬреНрдб рдЯрд╛рдЗрдо рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдлреЙрд░реНрдо рдШреЗрдд рдирд╛рд╣реА рдЖрдгрд┐ рд╕реАрд░рд┐рдпрд▓рд╛рдпрдЭреЗрд╢рди рджрд░рдореНрдпрд╛рди рддреЗ рд╢рд╛рдВрддрдкрдгреЗ рд╕реЗрдХрдВрджрд╛рдЪрд╛ рдПрдХ рдЕрдВрд╢ рдХрд╛рдвреВрди рдЯрд╛рдХрддреЗ. рд╣реЗ X.509 рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рддреЗ рдХрд╛рд░реНрдп рдХрд░рдгрд╛рд░ рдирд╛рд╣реА.
рдпрд╛рдХреНрд╖рдгреА, PyDERASN рд╣рд╛ рдорд▓рд╛ рдорд╛рд╣реАрдд рдЕрд╕рд▓реЗрд▓рд╛ рд╕рд░реНрд╡рд╛рдд рдХрдареЛрд░ рдореЛрдлрдд Python/Go DER рдбреАрдХреЛрдбрд░ рдЖрд╣реЗ. рдорд╛рдЭреНрдпрд╛ рдкреНрд░рд┐рдп рдЧреЛ рдЪреНрдпрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ/asn1 рд▓рд╛рдпрдмреНрд░рд░реАрдордзреНрдпреЗ
рдкреНрд░рдХрд▓реНрдк рдХреЛрдб рд╢рдХреНрдп рддрд┐рддрдХрд╛ рд╕реЛрдкрд╛ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддреЛ. рд╕рдВрдкреВрд░реНрдг рд▓рд╛рдпрдмреНрд░рд░реА рд╣реА рдПрдХ рдлрд╛рдИрд▓ рдЖрд╣реЗ. рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдЖрдгрд┐ DRY рдХреЛрдб рд╢рд┐рд╡рд╛рдп, рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рдЪреНрдпрд╛ рд╕реБрд▓рднрддреЗрд╡рд░ рднрд░ рджреЗрдКрди рдХреЛрдб рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ. рдореА рдЖрдзреАрдЪ рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рддреЗ UTCTime/GeneralizedTime рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕рдЪреНрдпрд╛ рдкреВрд░реНрдг BER тАЛтАЛрдбрд┐рдХреЛрдбрд┐рдВрдЧрд▓рд╛, рддрд╕реЗрдЪ REAL, RELATIVE OID, EXTERNAL, INSTANCE OF, рдПрдореНрдмреЗрдбреЗрдб PDV, рдХреЕрд░реЗрдХреНрдЯрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╛рдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реА. рдЗрддрд░ рд╕рд░реНрд╡ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рдорд▓рд╛ рд╡реИрдпрдХреНрддрд┐рдХрд░рд┐рддреНрдпрд╛ рдкрд╛рдпрдердирдордзреАрд▓ рдЗрддрд░ рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдореБрджреНрджрд╛ рджрд┐рд╕рдд рдирд╛рд╣реА.
рдорд╛рдЭреЗ рд╕рд░реНрд╡ рдкреНрд░рдХрд▓реНрдк рдЖрд╡рдбрд▓реЗ, рдЖрд╡рдбрд▓реЗ
рд╕реНрддреНрд░реЛрдд: www.habr.com