PyDERASN: рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдмрдбрд╝рд╛-рдбреЗрдЯрд╛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рд╣реИ

рдореИрдВ PyDERASN рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдВрддрд┐рдо рд▓реЗрдЦ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВ - Python рдореЗрдВ рдореБрдлреНрдд ASN.1 DER / CER / BER рдХреЛрдбреЗрдХред рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕рд╛рд▓ рдореЗрдВ, рдЗрд╕рдХреЗ рд▓реЗрдЦрди рдХреЗ рдмрд╛рдж рд╕реЗ, рд╕рднреА рдЫреЛрдЯреА рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЫреЛрдЯреЗ рд╕реБрдзрд╛рд░ рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдХрдареЛрд░ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЬреНрдЮрд╛рдд рдореБрдлреНрдд рдХреЛрдбреЗрдХреНрд╕ рдХрд╛ рд╕рдмрд╕реЗ рдХрдареЛрд░ рдерд╛), рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рджрд┐рдЦрд╛рдИ рджреА рд╣реИ - рдирд╣реАрдВ рд░реИрдо рдореЗрдВ рд░реЗрдВрдЧрдирд╛ред рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

ASN.1 рдмреНрд░рд╛рдЙрдЬрд╝рд░

рд╕рдорд╕реНрдпрд╛рдПрдВ / рдХрд╛рд░реНрдп


  • CRL:
    , (CA) X.509 . , CRL (certificate revocation list). CRL CACert.org, 8.72 MiB, PyDERASN- Python 3.6 ( asn1crypto pyasn1 ). 416 . . , . .
  • CMS:
    CMS (Cryptographic Message Syntax)
    // . ,
    SignedData , ,
    , - EnvelopedData
    .

    CMS. , CMS detached data, - , . 10 GiB 20 GiB : 10 GiB . .


рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ ASN.1 рд╡рд╕реНрддреБрдПрдВ рд╕рдВрд╕рд╛рдзрди рдЧрд╣рди рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореЗрдореЛрд░реА рд╕реНрдкреЗрд╕ рд▓реЗ рд╕рдХрддреА рд╣реИрдВ? рдХреЗрд╡рд▓ рдХреЗ рдЕрдиреБрдХреНрд░рдо / рдХреЗ рд╕реЗрдЯ рдХрдИ рддрд░рд╣ рдХреА рдЪреАрдЬ (CACert.org рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рд╛рдЦреЛрдВ) рдпреБрдХреНрдд, рдФрд░ рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ * рддрд╛рд░ (рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ)ред рдЪреВрдВрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЖрд▓рд╕реНрдп (рд▓реИрд░реА рд╡реЙрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рд╣реИ, рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рдореЗрдВ рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрди рдЦрдкрдд рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

* STRING рдХреА рд╡рд╕реНрддреБрдПрдВ, рдХреЛрдбреЗрдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд▓рдЧрднрдЧ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИрдВред DER рдореЗрдВ OCTET STRING рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИ ?

return tag + len_encode(len(value)) + value

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рд╕рдордп рд╡реИрд▓реНрдпреВ рд░реИрдо рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрд╣ рдПрдХ рдмрд╛рдЗрдЯреНрд╕ рдЬреИрд╕реА рд╡рд╕реНрддреБ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдк рд▓рдВрдмрд╛рдИ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдореЗрдореЛрд░реАрд╡реНрдпреВ рдЗрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рднреА memoryview рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ mmap рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 20 рдЫрдорд╛рд╣реА рдореЗрдВ рд╕реАрдПрдордПрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рддрд┐рдпрд╛рдВ рдХреЗ рд▓рд┐рдП GiB 10 GiB рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐рд╕реА рднреА рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдкрд░: рдпрд╣ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ OCTET STRING рд░реЛрдВ (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп * STRING рд░реЛрдВ) рдореЗрдореЛрд░реАрд╡реНрдпреВ рдХреЗ рд╕рдорд╛рди ред рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, PyDERASN рдХрд╛ рдПрдХ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рд╣реИ:

from pyderasn import file_mmaped
with open("dump.sql.zst", "rb") as fd:
    ... = OctetString(file_mmaped(fd))

рдпрджрд┐ рд╣рдо рднрд╛рд░реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдбреАрдХреЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореЗрдореЛрд░реАрд╡реНрдпреВ рдХреЛ рдбрд┐рдХреЛрдб рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

from pyderasn import file_mmaped
with open("dump.sql.zst", "rb") as fd:
    obj = Schema.decode(file_mmaped(fd))

рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ * STRING рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдПрдХ рд╡рд┐рд╢рд╛рд▓ CRL рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ред рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреНрдпрд╛ рд╣реИ?

CertificateList SEQUENCE
. tbsCertList: TBSCertList SEQUENCE
. . version: Version INTEGER v2 (01) OPTIONAL
. . signature: AlgorithmIdentifier SEQUENCE
. . issuer: Name CHOICE rdnSequence
. . thisUpdate: Time CHOICE utcTime
. . nextUpdate: Time CHOICE utcTime OPTIONAL
. . revokedCertificates: RevokedCertificates SEQUENCE OF OPTIONAL
. . . 0: RevokedCertificate SEQUENCE
. . . . userCertificate: CertificateSerialNumber INTEGER 17 (11)
. . . . revocationDate: Time CHOICE utcTime UTCTime 2003-04-01T14:25:08
. . . 1: RevokedCertificate SEQUENCE
. . . . userCertificate: CertificateSerialNumber INTEGER 20 (14)
. . . . revocationDate: Time CHOICE utcTime UTCTime 2002-10-01T02:18:01

                                 [...]

. . . 415753: RevokedCertificate SEQUENCE
. . . . userCertificate: CertificateSerialNumber INTEGER 1341859 (14:79:A3)
. . . . revocationDate: Time CHOICE utcTime UTCTime 2020-02-08T06:51:56
. . . 415754: RevokedCertificate SEQUENCE
. . . . userCertificate: CertificateSerialNumber INTEGER 1341860 (14:79:A4)
. . . . revocationDate: Time CHOICE utcTime UTCTime 2020-02-08T06:53:01
. . . 415755: RevokedCertificate SEQUENCE
. . . . userCertificate: CertificateSerialNumber INTEGER 1341861 (14:79:A5)
. . . . revocationDate: Time CHOICE utcTime UTCTime 2020-02-08T07:25:06
. signatureAlgorithm: AlgorithmIdentifier SEQUENCE
. signatureValue: BIT STRING 4096 bits

рдЫреЛрдЯреЗ RevchedCertificate рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдПрдХ рд▓рдВрдмреА рд╕реВрдЪреА ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХрд╛ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд░рд╕рди рдХрд╛ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдбреАрдИрдЖрд░ рдХреЛрдбрд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИ?

value = b"".join(revCert.encode() for revCert in revCerts)
return tag + len_encode(len(value)) + value

рдЗрд╕ рд╕реВрдЪреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрддреНрд╡ рдХреЗ рдбреАрдИрдЖрд░ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХрд╛ рд╕рд┐рд░реНрдл рдирд┐рд╖реНрдХрд░реНрд╖ред рдХреНрдпрд╛ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдбреАрдИрдЖрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ 15 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдХреНрд░рдордмрджреНрдз рд╣реЛрдиреЗ рдХреЗ рджреМрд░рд╛рди рдЗрди рд╕рднреА рд╕реИрдХрдбрд╝реЛрдВ рд╣рдЬрд╛рд░реЛрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдмреЗрд╢рдХ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ / рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, CRL рдХрд╛ рдирд┐рд░реНрдорд╛рдг DBMS рдХреЗ рдбреЗрдЯрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧрд╛:

def revCertsGenerator(...):
    for row in db.cursor:
        yield RevokedCertificate((
            ("userCertificate", CertificateSerialNumber(row.serial)),
            ("revocationDate", Time(("utcTime", UTCTime(row.revdate)))),
        ))

crl["tbsCertList"]["revokedCertificates"] = revCertsGenerator()

рдЕрдм рдЗрд╕ рддрд░рд╣ рдХреА CRL рдмрдирд╛рддреЗ рд╕рдордп рд╣рдо рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдбреАрдИрдЖрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЧрд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рджрд╕рд┐рдпреЛрдВ рдореЗрдЧрд╛рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ RevCCertificate рд╡рд╕реНрддреБрдУрдВ рдХреА рдЖрдзреА-рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд╕реВрдЪреА рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ)ред рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЕрдВрддрд░ рд╣реЛрддрд╛ рд╣реИ: рдХреЗ рдЕрдиреБрдХреНрд░рдо / рдХреЗ рд╕реЗрдЯ рдЖрдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдПрдХ рдореВрд▓реНрдп рдмрддрд╛рдП рдХреЗ рдкрд▓ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдХреЗ рдмрд╛рдж рд╣реА рдЗрдЯрд░реЗрдЯрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдирд╣реАрдВред

DER рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЛрдбрд┐рдВрдЧ


рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдбреАрдИрдЖрд░ рд╣реИ - рд╕рднреА рдЯреАрдПрд▓рд╡реА (рдЯреИрдЧ + рд▓рдВрдмрд╛рдИ + рдореВрд▓реНрдп) рддрддреНрд╡реЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП!

рд▓реЗрдХрд┐рди рдореИрдВ рдЗрддрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛! рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдореЗрдВ рдЕрднреА рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХреЗ рдбреАрдИрдЖрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 10 рдЬреАрдИрдмреА рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдХрдЪреНрдЪрд╛ = рд╕реЗрдореА.рдПрдирдХреЛрдб () ! рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдореИрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓реЗрдЦрдХ рдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рд▓рдВрдмрд╛рдИ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЦреЛрдЬ рдХрд░ рднрд░реЗрдВ? рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд▓рдВрдмрд╛рдИ рдХреА рд▓рдВрдмрд╛рдИ (рдХреНрд░рдорд╢рдГ рдФрд░ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░) рднреА рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИред

PyDERASN рдХреЛ рджреЛ-рдкрд╛рд╕ рдбреАрдИрдЖрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдорд┐рд▓реА рд╣реИред рдкрд╣рд▓реЗ рдкрд╛рд╕ рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕реНрдерд┐рддрд┐ рдмрдирддреА рд╣реИред рджреВрд╕рд░рд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╣реИрдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓реЗрдЦрдХ рдореЗрдВ рдбреАрдИрдЖрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ , рд▓рдВрдмрд╛рдИ рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ рдХрд╛рд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИред рдЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рд▓ рдирд┐рдХрд▓рд╛, рдмрд╕ ASN.1 рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рджреЛ-рдкрд╛рд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рд╛ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЪреВрдВрдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЯреНрд░рд╛рд╡реЗрд▓рд░ рдХрдбрд╝рд╛рдИ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдбреА - рдкреНрд░рддрд┐рд╖реНрдард┐рдд!), рдлрд┐рд░, рдЖрд╡рд╢реНрдпрдХ рд▓рдВрдмрд╛рдИ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд░рд▓ рд╕реВрдЪреА рдмрдирд╛рдП рд░рдЦреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреВрд░реЗ рдкреЗрдбрд╝ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓рдВрдмрд╛рдИ рдорд╛рди рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдХреБрдЫ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рд▓рдВрдмрд╛рдИ рддрдп рдХреА рдЧрдИ рд╣реИред рдХреБрдЫ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЙрдЪреНрдЪ рдХрдВрдЯреЗрдирд░ ( SEQUENCE / SET , SEQUENCE OF / SET OF , EXPLICIT TAG ) рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЛ рдирд┐рд░рд╕реНрдд рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рд▓рдВрдмрд╛рдИ рдХреА рд╕реНрдерд┐рддрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

revCert = RevokedCertificate((
    ("userCertificate", CertificateSerialNumber(123)),
    ("revocationDate", Time(("utcTime", UTCTime(datetime.utcnow())))),
))
revs = RevokedCertificates([revCert, revCert])

(42, [40, 18, 18])

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд░реАрд╡реЙрдХреНрдб рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдФрд░ рд╕рдВрдкреВрд░реНрдг рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдорд╛рди рдХреА рд▓рдВрдмрд╛рдИ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рд░рд╛рдЬреНрдп рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░ рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЧрдП рд╕рдордп рдХреА рд▓рдВрдмрд╛рдИ (рдбреАрдИрдЖрд░ рдореЗрдВ рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рд╣реИ) рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ CACert.org CRL рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреА рд╕реВрдЪреА рдореЗрдВ 3.5 MiB рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢рд╛рд▓ рд╕реАрдПрдордПрд╕ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рд╡рдЬрди рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХрд▓ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдкрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рд▓рдЧрднрдЧ 0.5 KiB рд▓рдЧрддрд╛ рд╣реИред

рджреЛ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рджреЛ-рдкрд╛рд╕ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

fulllen, state = obj.encode1st()
with open("result", "wb") as fd:
    obj.encode2nd(fd.write, iter(state))

рдкрд╣рд▓рд╛ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдХреА рдкреВрд░реА рд▓рдВрдмрд╛рдИ рдХреА рднреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдХреНрдд рд╕реНрдерд╛рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдпрд╛ рдЗрд╕реЗ рдХреБрдЫ рдкреЙрдЬрд╝рд┐рдХреНрд╕_рдлреНрд▓реЛрдХреЗрдЯ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд╣реЗрд▓реНрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдПрдиреНрдХреЛрдб 2рдкрд╛рд╕ (obj) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ , рдЖрдк рдореЗрдореЛрд░реА рдореЗрдВ рджреЛ-рдкрд╛рд╕ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд┐рд╕ рд▓рд┐рдП? рдпрд╣ рдореЗрдореЛрд░реА рдЦрдкрдд рдореЗрдВ рдХрд╛рдлреА рдЕрдзрд┐рдХ рдХрд┐рдлрд╛рдпрддреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ CACert.org CRL рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 416k + рдЫреЛрдЯреА рдмрд╛рдЗрдирд░реА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ b "" рд╕реЗ рдЬреЛрдбрд╝рдХрд░ рд╕реНрдЯреЛрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рджреЛ рдмрд╛рд░ рдЪрд▓рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдм рд╣рдо рдбреАрдИрдЖрд░ рдореЗрдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдмрдбрд╝реЗ CMS рдХреЛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдмрд┐рдирд╛ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд┐рдПред рд▓реЗрдХрд┐рди рд╕реАрдЖрд░рдПрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдирд┐рд░рд╕реНрддреАрдХрд░рдг рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдкрд╣рд▓реЗ рдкрд╛рд╕ рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╛рдж рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛ред рдХреНрдпрд╛ рдХрд░реЗрдВ? рдмрд╕ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкреБрдирд░реНрдирд┐рдорд┐рдд рдХрд░реЗрдВ!

_, state = crl.encode1st()
crl["tbsCertList"]["revokedCertificates"] = revCertsGenerator()
crl.encode2nd(writer, iter(state))

рдмреЗрд╢рдХ, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИрдВ рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рд╣рдореЗрдВ рдПрдХ рдЯреВрдЯрд╛ рд╣реБрдЖ рдбреАрдИрдЖрд░ рдорд┐рд▓реЗрдЧрд╛ред рдпрджрд┐ рдбреЗрдЯрд╛ DBMS рдХрд░реНрд╕рд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ REPEATABLE READ рд▓реЗрди-рджреЗрди рдЕрд▓рдЧрд╛рд╡ рд╕реНрддрд░ рдФрд░ рдЫрдБрдЯрд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ ред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдЯреНрд░реАрдо рдПрдиреНрдХреЛрдбрд┐рдВрдЧ: CER


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдбреАрдИрдЖрд░ (рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо) рдмреАрдИрдЖрд░ (рдмреБрдирд┐рдпрд╛рджреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ) рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯ рд╣реИ рдЬреЛ рдПрдХ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕рдЦреНрддреА рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕реЗ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмреАрдИрдЖрд░: рд╕реАрдИрдЖрд░ (рдХреИрдиреЛрдирд┐рдХрд▓ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо) рдХрд╛ рдПрдХ рдФрд░ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЙрдкрд╕рдореБрдЪреНрдЪрдп рд╣реИред рдбреАрдИрдЖрд░ рдХреА рддрд░рд╣, рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИред рд╕реАрдИрдЖрд░ рдХрдИ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдбреАрдИрдЖрд░ рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕реАрдИрдЖрд░ рдбреАрдИрдЖрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рд╣реБрдЖред

рдЗрддрдиреЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдЕрдВрддрд░ (рдЬреИрд╕реЗ SET рдореЗрдВ рдЯреИрдЧ рдХреЛ рдЫрд╛рдБрдЯрдирд╛) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, CER рдХреЗ DER рд╕реЗ рджреЛ рдореВрд▓рднреВрдд рдЕрдВрддрд░ рд╣реИрдВ:

  • (constructed, ) indefinite (LENINDEF PyDERASN). , SEQUENCE/SET, SEQUENCE OF/SET OF, EXPLICIT TAG- :

    TAG_CONSTRUCTED || LEN(VALUE) || VALUE
    

    LENINDEF (0x80) EOC ( , ) :

    TAG_CONSTRUCTED || 80 || VALUE || 00 00
    

  • *STRING-, 1000-, chunk- 1000-. , , DER. , 512 DER:

    TAG_PRIMITIVE || LEN(512) || 512B
    

    2048 :

    TAG_CONSTRUCTED || 80 ||
        TAG_PRIMITIVE || LEN(1000) || 1000B ||
        TAG_PRIMITIVE || LEN(1000) || 1000B ||
        TAG_PRIMITIVE || LEN(48) || 48B || 00 00
    

рдпрд╣ рд╕рдм (рдкреНрд▓рд╕ рдХреБрдЫ рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ) рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдирдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ (1000 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдмрдлрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдлрд░) рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдЖрдк mmap рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред CER рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдмрд╕ .encode_cer (рд▓реЗрдЦрдХ) рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, PyDERASN рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЕрднреА рддрдХ CER рдХреА рд╡реИрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ BER рдХреЗ рд░реВрдк рдореЗрдВ рдбреАрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

CMS рдорд╛рдирдХ, рд╡реИрд╕реЗ, BER (рджреЛрдиреЛрдВ DER рдФрд░ CER, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд, BER рд╣реИрдВ) рдореЗрдВ рдХреЛрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдЕрдкрдиреА рд╡рд┐рд╢рд╛рд▓ рдкреНрд░рддрд┐ рдХреЛ рджреЛ-рдкрд╛рд╕ рдбреАрдИрдЖрд░ рдХреЗ рдмрд┐рдирд╛ рд╕реАрдИрдЖрд░ рд╕реАрдПрдордПрд╕ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ , рд╕рд╛рдЗрдирдбреИрдЯрд╛ рдХреЗ рд▓рд┐рдП рдбреАрдИрдЖрд░ рдореЗрдВ рдПрдирдХреЛрдбреЗрдб рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреЗрдб рдПрд▓реАрдореЗрдВрдЯреНрд╕ рддрддреНрд╡ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ , рдЬреИрд╕рд╛ рдХрд┐ X.509 рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯрдкреНрд░рдорд╛рдг рдкрддреНрд░ред PyDERASN рдЖрдкрдХреЛ рджрд┐рдП рдЧрдП рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ DER рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдХреЗрд╡рд▓ der_lied = True рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рдХрд░ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ред

рд╕реНрдЯреНрд░реАрдо рдбрд┐рдХреЛрдбрд┐рдВрдЧ: рдИрд╡рдЬрди рдореЛрдб


рд╣рдордиреЗ рд╕рд╛рдВрдХреЗрддрд┐рдХ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рд╕реАрдЦ рд▓рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ mmap рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ ред рдПрдХ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рд╕реНрдЯреНрд░реАрдо рдбрд┐рдХреЛрдбрд░, рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ "рдореБрдЭреЗ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рджреЗрдВ", "рдпрд╣рд╛рдВ рдЖрдк рд╣реИрдВ" рдХреЗ рд░реВрдк рдореЗрдВ knobs рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░рд╛рдЬреНрдп - PyDERASN рдХреЗ рдПрдХ рдХрдЯреНрдЯрд░рдкрдВрдереА рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдФрд░, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред

рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИред рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдорд╛рд░реЗ рд╣рд╛рде рдореЗрдВ рд╣рдорд╛рд░реЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдбрд┐рдХреЛрдбреЗрдб рдЖрджрд┐рдо рд╡рд╕реНрддреБрдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдмреЗрд╣рддрд░ рдШрдЯрдХреЛрдВ (рдирд┐рд░реНрдорд┐рдд), рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдиреНрдп рдШрдЯрдХ, рдЖрджрд┐ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ... рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рдмрд╣реБрдд рдКрдкрд░ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ рд╣рдореЗрдВ рдПрдХ рдмрдбрд╝реА рд╡рд╕реНрддреБ рджреЛред рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд┐рдХреЛрдб рдХрд┐рдП рдЧрдП "рддреБрд░рдВрдд рдмрд╛рд╣рд░" рдХреНрдпреЛрдВ рдирд╣реАрдВрд╡рд╕реНрддреБрдУрдВ, рдЬреИрд╕реЗ рд╣реА рд╡реЗ рд╣рдорд╛рд░реЗ рд╣рд╛рдереЛрдВ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ? рдпрд╣реА рд╣реИ, рдПрдХ рдЕрдВрддрд┐рдо рд╡рд╕реНрддреБ рдирд╣реАрдВ рд▓реМрдЯрдирд╛, рд▓реЗрдХрд┐рди рдПрдХ рдЬрдирд░реЗрдЯрд░ рдЬреЛ рдХрдИ рдбрд┐рдХреЛрдб рдХрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, PyDERASN рдореЗрдВ рдЕрдм рд╕рднреА рдбрд┐рдХреЛрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐рдпрд╛рдБ рдРрд╕реЗ "рдИрд╡реЗрдВрдЯ" (рдИрд╡реЗрдВрдЯ рдЬрдирд░реЗрд╢рди, рдЗрд╡рдЬрди) рдХреЗ рдЬрдирдХ рдмрди рдЧрдП рд╣реИрдВред

рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рд╢рд╛рд▓ CACert.org CRL рдХреЗ рдИрд╡рдЬрди-рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдореЛрдб рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рджреЗрдЦреЗрдВрдЧреЗ:

$ python -m pyderasn --schema tests.test_crl:CertificateList --evgen revoke.crl
[][T,L,  V len]
     10   [1,1,      1]   . . version: Version INTEGER v2 (01) OPTIONAL
     15   [1,1,      9]   . . . algorithm: OBJECT IDENTIFIER 1.2.840.113549.1.1.13
     26   [0,0,      2]   . . . parameters: [UNIV 5] ANY OPTIONAL
     13   [1,1,     13]   . . signature: AlgorithmIdentifier SEQUENCE
     34   [1,1,      3]   . . . . . . type: AttributeType OBJECT IDENTIFIER 2.5.4.10
     39   [0,0,      9]   . . . . . . value: [UNIV 19] AttributeValue ANY
     32   [1,1,     14]   . . . . . 0: AttributeTypeAndValue SEQUENCE
     30   [1,1,     16]   . . . . 0: RelativeDistinguishedName SET OF

                                 [...]

    188   [1,1,      1]   . . . . userCertificate: CertificateSerialNumber INTEGER 17 (11)
    191   [1,1,     13]   . . . . . utcTime: UTCTime UTCTime 2003-04-01T14:25:08
    191   [0,0,     15]   . . . . revocationDate: Time CHOICE utcTime
    191   [1,1,     13]   . . . . . utcTime: UTCTime UTCTime 2003-04-01T14:25:08
    186   [1,1,     18]   . . . 0: RevokedCertificate SEQUENCE
    208   [1,1,      1]   . . . . userCertificate: CertificateSerialNumber INTEGER 20 (14)
    211   [1,1,     13]   . . . . . utcTime: UTCTime UTCTime 2002-10-01T02:18:01
    211   [0,0,     15]   . . . . revocationDate: Time CHOICE utcTime
    206   [1,1,     18]   . . . 1: RevokedCertificate SEQUENCE

                                 [...]

9144992   [0,0,     15]   . . . . revocationDate: Time CHOICE utcTime
9144985   [1,1,     20]   . . . 415755: RevokedCertificate SEQUENCE
    181   [1,4,9144821]   . . revokedCertificates: RevokedCertificates SEQUENCE OF OPTIONAL
      5   [1,4,9144997]   . tbsCertList: TBSCertList SEQUENCE
9145009   [1,1,      9]   . . algorithm: OBJECT IDENTIFIER 1.2.840.113549.1.1.13
9145020   [0,0,      2]   . . parameters: [UNIV 5] ANY OPTIONAL
9145007   [1,1,     13]   . signatureAlgorithm: AlgorithmIdentifier SEQUENCE
9145022   [1,3,    513]   . signatureValue: BIT STRING 4096 bits
      0   [1,4,9145534]  CertificateList SEQUENCE

  • рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдордиреЗ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ SEQUENCE рдЯреИрдЧ, рдбреЗрдЯрд╛ рдХреА рд▓рдВрдмрд╛рдИ рджреЗрдЦреА , рд▓реЗрдХрд┐рди рд╡рд╕реНрддреБ рдЕрднреА рддрдХ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрдВрдд рддрдХ рдбрд┐рдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрднреА рддрдХ рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИрдВред
  • SEQUENCE: version, INTEGER. . , . ( 10)
  • signature, SEQUENCE- : algorithm parameters. OBJECT IDENTIFIER ANY . ( 15, 26)
  • , , signature SEQUENCE , , : . ( 13)
  • , RevokedCertificate . ( 186, 206, ..)
  • tbsCertList . ( 5)
  • CertificateList, SEQUENCE, , , . ( 0)

рдмреЗрд╢рдХ, рд╕рднреА * STRING рдФрд░ рд╕реВрдЪрд┐рдпрд╛рдБ ( * OF ) рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрд░реНрде рдирд╣реАрдВ рд░рдЦрддреА рд╣реИрдВред DER рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, .offset рдФрд░ .vlen рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП , рдЖрдк рдПрдХ рдлрд╝рд╛рдЗрд▓ (рдореЗрдореЛрд░реА рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛?) рд╕реЗ рдПрдХ рдкрдВрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдЕрдиреБрдХреНрд░рдо рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдбрд┐рдХреЛрдбреЗрдб рдкрде рдФрд░ evgen_mode_upto


рдХреИрд╕реЗ рд╕рдордЭреЗрдВ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рдХреА рд╡рд╕реНрддреБ, рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ INTEGER рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ? рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЕрдкрдирд╛ рддрдерд╛рдХрдерд┐рдд рдбрд┐рдХреЛрдб рдкрде рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреБ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, CACert.org CRL рдбрд┐рдХреЛрдб рдкрде рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП:

tbsCertList:version
tbsCertList:signature:algorithm
tbsCertList:signature:parameters
tbsCertList:signature
tbsCertList:issuer:rdnSequence:0:0:type
                                 [...]
tbsCertList:issuer:rdnSequence
tbsCertList:issuer
                                 [...]
tbsCertList:revokedCertificates:0:userCertificate
tbsCertList:revokedCertificates:0:revocationDate:utcTime
tbsCertList:revokedCertificates:0:revocationDate
tbsCertList:revokedCertificates:0
tbsCertList:revokedCertificates:1:userCertificate
tbsCertList:revokedCertificates:1:revocationDate:utcTime
tbsCertList:revokedCertificates:1:revocationDate
tbsCertList:revokedCertificates:1
                                 [...]
tbsCertList:revokedCertificates:415755:userCertificate
tbsCertList:revokedCertificates:415755:revocationDate:utcTime
tbsCertList:revokedCertificates:415755:revocationDate
tbsCertList:revokedCertificates:415755
tbsCertList:revokedCertificates
tbsCertList
signatureAlgorithm:algorithm
signatureAlgorithm:parameters
signatureAlgorithm
signatureValue

рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЗрд╕ CRL рд╕реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдирд┐рд░рд╕реНрддреАрдХрд░рдг рдХреНрд░рдорд╛рдВрдХ рдХреА рд╕реВрдЪреА рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

raw = file_mmaped(open("....crl", "rb"))
for decode_path, obj, tail in CertificateList().decode_evgen(raw):
    if (len(decode_path) == 5) and (decode_path[-1] == "userCertificate"):
        print(int(obj))

RevokedCertificate рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕рд╣рд┐рдд рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рд╣рдо Evgen рдореЛрдб рдореЗрдВ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЛрдЧ рдХреЗ рдПрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдирд╛рдУрдВ revokedCertificates рддрддреНрд╡ рд╣реИ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВред рдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдВрддрд┐рдо RevokedCertificate , рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЕрдзрд┐рдХ рд╕реНрдерд╛рди рдирд╣реАрдВ рд▓реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рднреА рд╡рд╕реНрддреБрдПрдВ, рд╕рднреА рд╡рд╕реНрддреБрдПрдВ рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдЗрддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ "рдХреНрд░рдордмрджреНрдз" рди рд╣реЛрдВред PyDERASN рд╕реВрдЪреА рдХреЛ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ evgen рдореЛрдб рдЕрдХреНрд╖рдо рд╣реИред рддреЛ рд╣рдо рдбрд┐рдХреЛрдб рдкрде ( "tbsCertList", "рдирд┐рд░рд╕реНрдд рдкреНрд░рдорд╛рдгрдкрддреНрд░") рд╕реВрдЪреА рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рддрддреНрд╡ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдЬрд┐рд╕ рдкрд░ рд╣рдо рдкреВрд░реНрдг RevokedCertificate рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ :

for decode_path, obj, _ in CertificateList().decode_evgen(raw, ctx={
    "evgen_mode_upto": (
        (("tbsCertList", "revokedCertificates", any), True),
    ),
}):
    if (len(decode_path) == 3) and (decode_path[1] == "revokedCertificates"):
        print(int(obj["userCertificate"]))

рд╕рдХрд▓ рддрд╛рд░: agg_octet_string


рдЕрдм рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рдЖрдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдбреАрдИрдЖрд░-рдПрдиреНрдХреЛрдбреЗрдб рд╕реАрдПрдордПрд╕ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ: рд╣рдо рдПрдХ рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдбрд┐рдХреЛрдб рдорд╛рд░реНрдЧ рдкрд░ рд╕реАрдПрдордПрд╕ рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд / рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдСрдлрд╕реЗрдЯ + рд╡реАрдПрд▓рдПрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ CMS CER рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдерд╛? рддрдм рдСрдлрд╕реЗрдЯ + vlen рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рд╕рднреА 10 GiBs 1000 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмреАрдЪ DER рд╣реИрдбрд░ рджреНрд╡рд╛рд░рд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ BER рд╣реИ рдЬрд┐рд╕рдореЗрдВ * STRINGs рдХрд╛ рдШреЛрдВрд╕рд▓рд╛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

SOME STRING[CONSTRUCTED]
    OCTET STRING[CONSTRUCTED]
        OCTET STRING[PRIMITIVE]
            DATA CHUNK
        OCTET STRING[PRIMITIVE]
            DATA CHUNK
        OCTET STRING[PRIMITIVE]
            DATA CHUNK
    OCTET STRING[PRIMITIVE]
        DATA CHUNK
    OCTET STRING[CONSTRUCTED]
        OCTET STRING[PRIMITIVE]
            DATA CHUNK
        OCTET STRING[PRIMITIVE]
            DATA CHUNK
    OCTET STRING[CONSTRUCTED]
        OCTET STRING[CONSTRUCTED]
            OCTET STRING[PRIMITIVE]
                DATA CHUNK

рдЬрдм рдЗрд╡рд╛рдЬреЗрди рдореЛрдб рдореЗрдВ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рд╣реЛрддреА рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдирд╛ рдорд┐рд▓рддреА рд╣реИ рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрджрд┐рдо (рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ) * рдПрдХрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ , рдЬрд╣рд╛рдВ рдИрд╡реЗрдВрдЯ + рдСрдлрд╕реЗрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреБрдХрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред PyDERASN рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рд╣реИ agg_octet_string рдЬреЛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдИрд╡реЗрдВрдЯ рдЬрдирд░реЗрдЯрд░ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдбрд┐рдХреЛрдб рдкрде "рдиреАрдЪреЗ" рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ (рдпрд╛ рдореЗрдореЛрд░реАрд╡реНрдпреВ ) рдФрд░ рд▓реЗрдЦрдХ рдХреЛ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо SHA512 рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реА рд╕рдордп encapContentInfo.eContent CMS рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ ? рд╕рд╛рдордЧреНрд░реА рдлрд╝реАрд▓реНрдб рдХрд╛ рд╕реНрдерд╛рди рдвреВрдВрдвреЗрдВ (рдЬрд┐рд╕рдореЗрдВ SignedData рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛), рдФрд░ рдлрд┐рд░ рдЗрд╕рдХреА CER рд╕рд╛рдордЧреНрд░реА рдХреЛ рдбреАрдХреЛрдб рдХрд░реЗрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде FS рдФрд░ рд╣реИрд╢рд┐рдВрдЧ рдХреЛ рд▓рд┐рдЦреЗрдВ:

fdIn = open("data.p7m", "rb")
raw = file_mmaped(fdIn)
for decode_path, obj, _ in ContentInfo().decode_evgen(raw, ctx={"bered": True}):
    if decode_path == ("content",):
        content = obj
        break
hasher_state = sha512()
fdOut = open("dump.sql.zst", "wb")
def hash_n_save(data):
    write_full(fdOut, data)
    hasher_state.update(data)
    return len(data)
evgens = SignedData().decode_evgen(
    raw[content.offset:],
    offset=content.offset,
    ctx={"bered": True},
)
agg_octet_string(evgens, ("encapContentInfo", "eContent"), raw, hash_n_save)

рдпрд╣рд╛рдВ, рдПрдХ рдФрд░ write_full рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬреЛ рддрдм рддрдХ рд▓реЗрдЦрдХ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╕рднреА рдбреЗрдЯрд╛ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд┐рд╕реА рдлрд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдУрдПрд╕ рдХреЛ рд╕рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рддрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

SET OF рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдиреЗрд╣реА рдЬреЛрдбрд╝реЗ


рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, SET OF рдХреЛ DER рдФрд░ CER рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдордХреНрдЦреА рдкрд░ рдПрдирдХреЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рдПрдиреНрдХреЛрдбреЗрдб рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХреЛ рдЫрд╛рдВрдЯрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рди рддреЛ рд╕реАрдИрдЖрд░ рдФрд░ рди рд╣реА рджреЛ-рдкрд╛рд╕ рдбреАрдИрдЖрд░ рдорджрдж рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдЖрдзреБрдирд┐рдХ ASN.1 рдорд╛рдирдХ рджреЛрдиреЛрдВ SET (DER рдореЗрдВ рд╕рдорд╛рди рдЫрдВрдЯрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛) рдФрд░ SET рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред

рдФрд░ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдпрд╣ рддрд╕реНрд╡реАрд░ рдХреНрдпрд╛ рд╣реИ?


рдпрд╣ PyDERASN рдореЗрдВ рдерд╛ рдХрд┐ рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡, рд╕рд░рд▓ ASN.1 рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ , рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдорджрдж рдХреАред рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рдХреЛрдбреЗрдб рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЪрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рджрд┐рдЦрд╛рддреЗ рд╣реБрдП, рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕реНрдерд╛рди, рдбрд┐рдХреЛрдб рдкрдеред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рднреА рдЖрдЗрдЯрдо рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдпрд╛ рд╕реАрдПрдордПрд╕ рд╕реАрдПрдордПрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ред

рд╕рд░реНрдЧреЗрдИ рдорддрд╡реЗрд╡ , рд╕рд┐рдлрд░рдкрдВрдХ , рдкрд╛рдпрдерди / рдЧреЛ-рдбреЗрд╡рд▓рдкрд░ , рдПрдлрдПрд╕рдпреВрдИ рдХреЗ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ "рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдФрд░ рддрдХрдиреАрдХреА рдХреЗрдВрджреНрд░" рдПрдЯрд▓рд╕ "ред

All Articles