Kev muaj peev xwm ua tau raws li kev txiav txim siab los ntawm cov teb, uas tshwm sim ntau zaus, yog qhov tsim nyog rau peb. Tom qab txiav txim siab tus qauv ASN.1, peb yuav raug tso tseg nrog ntau qhov chaw uas yuav tsum tau ua tiav ntxiv raws li lub tswv yim xaiv raws li OBJECT IDENTIFIER tau teev tseg hauv cov qauv teb. Hauv Python code, qhov no txhais tau tias sau yog tias thiab tom qab ntawd hu rau tus txiav txim siab rau txhua qhov chaw.
Qhov tshwm sim ntawm PyDERASN
Ntawm Atlas, peb niaj hnub xa thaj ua rau sab saum toj thaum peb pom qee qhov teeb meem lossis txhim kho cov kev pabcuam dawb uas peb siv. Peb tau xa cov kev txhim kho rau pyasn1 ob peb zaug, tab sis pyasn1 tus lej tsis yog qhov yooj yim to taub thiab qee zaum muaj qhov tsis sib xws API hloov uas ua rau peb poob qis. Ntxiv rau, peb tau siv los sau cov ntawv xeem nrog cov kev sim tsim tawm, uas tsis yog qhov xwm txheej hauv pyasn1.
Ib hnub zoo kuv txiav txim siab tias kuv muaj txaus thiab nws yog lub sij hawm los sim sau kuv tus kheej lub tsev qiv ntawv nrog __slot__s, offsets thiab zoo nkauj blobs! Tsuas yog tsim ib qho ASN.1 codec yuav tsis txaus - peb yuav tsum tau hloov tag nrho peb cov haujlwm nyob rau hauv nws, thiab cov no yog ntau pua txhiab tus kab code uas muaj tag nrho ntawm kev ua haujlwm nrog ASN.1 cov qauv. Ntawd yog, ib qho ntawm qhov yuav tsum tau ua rau nws: yooj yim ntawm kev txhais lus ntawm tus lej pyasn1 tam sim no. Tom qab siv tag nrho kuv lub caij so, kuv tau sau lub tsev qiv ntawv no thiab pauv tag nrho cov haujlwm rau nws. Txij li thaum lawv muaj yuav luag 100% kev pab cuam nrog cov kev xeem, qhov no txhais tau hais tias lub tsev qiv ntawv tau ua haujlwm tag nrho.
Txawm li cas los xij, PyDERASN muaj qee qhov zoo ib yam ntawm kev ntaus ntawv. Hauv pyasn1, yog tias ib daim teb yog hom CMSVersion (INTEGER), ces nws tuaj yeem muab int lossis INTEGER. PyDERASN nruj me ntsis kom cov khoom raug muab raws nraim CMSVersion. Ntxiv rau kev sau Python3 code, peb kuj siv ntaus ntawv annotations, yog li peb cov haujlwm yuav tsis muaj cov lus tsis meej xws li def func (serial, cov ntsiab lus), tab sis def func (serial: CertificateSerialNumber, cov ntsiab lus: EncapsulatedContentInfo), thiab PyDERASN pab tswj cov cai no.
Nyob rau tib lub sijhawm, PyDERASN muaj kev pom zoo heev rau qhov kev ntaus ntawv no. pyasn1 tsis tau tso cai rau SubjectKeyIdentifier().subtype(implicitTag=Tag(...)) teb los muab ib qho khoom rau SubjectKeyIdentifier() (tsis muaj qhov tsim nyog IMPLICIT TAG) thiab nws yog qhov tsim nyog kom nquag luam thiab rov tsim cov khoom vim yog qhov hloov pauv IMPLICIT/EXPLICIT tag. PyDERASN nruj me ntsis saib tsuas yog lub hauv paus hom - nws yuav cia li hloov cov cim npe los ntawm cov uas twb muaj lawm ASN.1 schema ntawm cov qauv. Qhov no zoo heev simplifies daim ntawv thov code.
Yog tias qhov yuam kev tshwm sim thaum lub sij hawm txiav txim siab, tom qab ntawd hauv pyasn1 nws tsis yooj yim to taub qhov tseeb nws tshwm sim. Piv txwv li, hauv daim ntawv pov thawj Turkish twb tau hais los saum no, peb yuav tau txais qhov yuam kev hauv qab no: UTF8String (tbsCertificate:issuer:rdnSequence:3:0:value:DEFINED BY 2.5.4.10:utf8String) (ntawm 138) tsis txaus siab ciam teb: 1 ⇐ 77 ⇐ 64 Thaum sau ASN .1 cov qauv tib neeg tuaj yeem ua yuam kev, thiab qhov no ua rau nws yooj yim dua rau kev debug cov ntawv thov lossis txheeb xyuas cov teeb meem nrog lwm tus neeg cov ntaub ntawv coded.
Thawj version ntawm PyDERASN tsis txhawb BER encoding. Nws tshwm sim ntau tom qab thiab tseem tsis txhawb kev ua UTCTime / GeneralizedTime nrog rau lub sijhawm. Qhov no yuav los yav tom ntej, vim hais tias qhov project yog sau tsuas yog hauv kuv lub sijhawm dawb.
Tsis tas li ntawd, hauv thawj version tsis muaj kev ua haujlwm nrog DEFINED BY teb. Ob peb hlis tom qab no lub sijhawm tshwm sim thiab pib siv zog, txo cov ntawv thov code - hauv ib qho kev txiav txim siab nws muaj peev xwm kom tau txais tag nrho cov qauv disassembled mus rau qhov tob heev. Txhawm rau ua qhov no, schema qhia qhov chaw "txhais tau" dab tsi. Piv txwv li, ib qho kev piav qhia ntawm CMS scheme:
hais tias yog cov ntsiab lusType muaj OID nrog tus nqi id_signedData, ces cov ntsiab lus teb (nyob rau hauv tib SEQUENCE) yuav tsum tau txiav txim siab raws li SignedData scheme. Vim li cas thiaj muaj ntau lub voj voog? Ib daim teb tuaj yeem "txhais tau" ntau qhov chaw tib lub sijhawm, ib yam li cov ntaub ntawv hauv EnvelopedData cov qauv. Cov teb tau raug txheeb xyuas los ntawm qhov hu ua decode path - nws qhia qhov tseeb qhov chaw ntawm txhua lub caij hauv txhua qhov qauv.
Koj tsis tas yuav xav lossis tsis tas yuav muaj sijhawm los ntxiv cov ntsiab lus tam sim no rau hauv daim duab. Tej zaum yuav muaj cov ntaub ntawv tshwj xeeb thaum OIDs thiab cov qauv paub tsuas yog nyob rau hauv peb qhov project thib peb. PyDERASN muab lub peev xwm los teeb tsa cov txheej txheem no thaum lub sijhawm txiav txim siab tus qauv:
Cov ntaub ntawv tso tawm: khoom offset, tag ntev, ntev ntev, cov ntsiab lus ntev, muaj EOC (kawg-of-octets), BER encoding attribute, indefinite-ntev encoding attribute, ntev thiab offset ntawm EXPLICIT tag (yog tias muaj), zes qhov tob ntawm cov khoom hauv cov qauv, IMPLICIT/EXPLICIT tag tus nqi, cov khoom npe raws li lub tswv yim, nws lub hauv paus ASN.1 hom, tus lej nyob rau hauv SEQUENCE / SET OF, XOV XWM tus nqi (yog tias muaj), tib neeg nyeem lub npe INTEGER / ENUMERATED / BIT STRING Raws li lub tswv yim, tus nqi ntawm txhua lub hauv paus hom , DEFAULT / OPTIONAL chij los ntawm cov tswv yim, ib qho kos npe tias cov khoom tau txiav txim siab txiav txim siab raws li DEFINED BY thiab vim OID qhov no tshwm sim, tib neeg nyeem tau OID.
Lub tshuab luam ntawv zoo nkauj yog tsim tshwj xeeb kom nws tsim ib ntu ntawm cov khoom PP uas pom pom siv cov cuab yeej sib cais. Lub screenshot qhia tau hais tias tus renderer hauv cov ntawv nyeem xim yooj yim. Kuj tseem muaj cov renderers hauv JSON/HTML hom, kom nws tuaj yeem pom nrog qhov tseem ceeb hauv ASN.1 browser, xws li hauv asn1js qhov project.
Lwm lub tsev qiv ntawv
Qhov no tsis yog lub hom phiaj, tab sis PyDERASN tau nthuav tawm qhov tseem ceeb sai dua ua pysn1. Piv txwv li, kev txiav txim siab CRL cov ntaub ntawv ntawm megabyte qhov ntau thiab tsawg tuaj yeem siv sijhawm ntev uas koj yuav tsum xav txog cov ntaub ntawv nruab nrab ntawm cov ntaub ntawv khaws cia (ceev) thiab hloov daim ntawv thov architecture. pyasn1 decodes CRL CACert.org ntawm kuv lub laptop siv sijhawm ntau dua 20 feeb, thaum PyDERASN tsuas siv 28 vib nas this! Muaj ib qhov project asn1crypto ua, tsom rau kev ua haujlwm nrawm nrog cov qauv cryptographic: nws txiav txim siab (tag nrho, tsis yog tub nkeeg) tib yam CRL hauv 29 vib nas this, tab sis siv yuav luag ob zaug ntau dua RAM thaum khiav hauv Python3 (983 MiB piv rau 498), thiab hauv 3.5 zaug hauv qab Python2 (1677). piv rau 488), thaum pyasn1 noj ntau npaum li 4.3 npaug ntxiv (2093 piv rau 488).
Peb tsis tau xav txog asn1crypto, uas kuv tau hais, vim tias qhov project tseem nyob hauv nws cov me nyuam mos thiab peb tsis tau hnov txog nws. Tam sim no peb yuav tsis saib nyob rau hauv nws cov kev taw qhia ib yam, txij li thaum kuv pom tam sim ntawd tias tib GeneralizedTime tsis siv daim ntawv arbitrary, thiab thaum lub sij hawm serialization nws ntsiag to tshem tawm ib feem ntawm ib tug thib ob. Qhov no siv tau rau kev ua haujlwm nrog X.509 daim ntawv pov thawj, tab sis feem ntau nws yuav tsis ua haujlwm.
Tam sim no, PyDERASN yog qhov nruj tshaj plaws dawb Python / Mus DER decoder kuv paub. Hauv lub tsev qiv ntawv encoding/asn1 ntawm kuv tus hlub Go tsis yog kev kuaj nruj OBJECT IDENTIFIER thiab UTCTime/GeneralizedTime hlua. Qee zaum kev nruj tuaj yeem nkag mus rau hauv txoj kev (feem ntau yog vim rov qab sib raug zoo nrog cov ntawv thov qub uas tsis muaj leej twg yuav kho), yog li PyDERASN tuaj yeem dhau. ntau qhov chaw kev kuaj xyuas tsis muaj zog.
Txoj haujlwm code sim ua kom yooj yim li sai tau. Tag nrho cov tsev qiv ntawv yog ib cov ntaub ntawv. Cov cai yog sau nrog qhov tseem ceeb ntawm kev nkag siab yooj yim, yam tsis muaj qhov tsim nyog ua tau zoo thiab DRY code. Nws tsis yog, raws li kuv twb tau hais lawm, txhawb nqa tag nrho BER kev txiav txim siab ntawm UTCTime / GeneralizedTime cov hlua, nrog rau REAL, RELATIVE OID, EXTERNAL, INSTANCE OF, EMBEDDED PDV, CHARACTER STRING cov ntaub ntawv hom. Hauv txhua qhov xwm txheej, kuv tus kheej tsis pom lub ntsiab lus ntawm kev siv lwm lub tsev qiv ntawv hauv Python.