(v!V      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUunknown experimental#Vincent Hanquez <vincent@snarc.org> V      unknown experimental#Vincent Hanquez <vincent@snarc.org> W   unknown experimental#Vincent Hanquez <vincent@snarc.org> XYZ[ \]^_`abcdefg \_`abcdefg \_`abcdefgQ !"#$%&'(Certificate Version )Certificate Serial number * Certificate Signature algorithm +Certificate Issuer DN ,Certificate Subject DN -Certificate Validity period .Certificate Public key /Certificate Extensions 0123456hijklmnopqr789:unrecognized format ; ECDSA format not done yet FIXME <DSA format with (pub, p, q, g) =*RSA format with (len modulus, modulus, e) >?@ABCDEFGHIsJKLMt,parse a RSA pubkeys from ASN1 encoded bits. = - return PubKeyRSA (len-modulus, modulus, e) if successful uvwxyNzO{|}~PKparse header structure of a x509 certificate. the structure the following:  Version  Serial Number  Algorithm ID  Issuer  Validity  Not Before  Not After  Subject  Subject Public Key Info  Public Key Algorithm  Subject Public Key - Issuer Unique Identifier (Optional) (>= 2) - Subject Unique Identifier (Optional) (>= 2) ! Extensions (Optional) (>= v3) Q3 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ3CIHGFED>BA@?9=<;:781654320&'()*+,-./ !"#$%JKLMNOPQ3 !"#$% !"#$%& '()*+,-./'()*+,-./0165432234567889=<;::;<=>BA@??@ABCIHGFEDDEFGHIJKLMNOPQunknown experimental#Vincent Hanquez <vincent@snarc.org>RST!decode an X509 from a bytestring # - the structure is the following:  - Certificate % - Certificate Signature Algorithm  - Certificate Signature U+encode a X509 certificate to a bytestring / !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIRSTU/RSCIHGFED>BA@?9=<;:781654320&'()*+,-./ !"#$%TURSSTU       !"#$%&&'()*+,-./01234566789:;<=>?@ABCDEFGHIJKLMNOPPQRSSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~certificate-0.6.0Data.Certificate.KeyRSAData.Certificate.KeyDSAData.Certificate.PEMData.Certificate.X509CertData.Certificate.X509Data.Certificate.X509InternalPrivateversion lenmodulusmoduluspublic_exponantprivate_exponantp1p2exp1exp2coef decodePrivate encodePrivateprivpubpqg parsePEMsfindPEM parsePEMCertparsePEMCertReqparsePEMKeyRSAparsePEMKeyDSA parsePEMKeyCertificateExtscertExtKeyUsagecertExtBasicConstraintscertExtSubjectKeyIdentifiercertExtPolicies certExtOthers Certificate certVersion certSerialcertSignatureAlg certIssuerDN certSubjectDN certValidity certPubKeycertExtensions ASN1StringASN1StringTypeIA5BMPUniv PrintableUTF8PubKey PubKeyDesc PubKeyUnknown PubKeyECDSA PubKeyDSA PubKeyRSA PubKeyALGPubKeyALG_UnknownPubKeyALG_ECDSA PubKeyALG_DSA PubKeyALG_RSA SignatureALGSignatureALG_UnknownSignatureALG_ecdsaWithSHA384SignatureALG_dsaWithSHA1"SignatureALG_sha1WithRSAEncryption!SignatureALG_md2WithRSAEncryption!SignatureALG_md5WithRSAEncryption oidCommonName oidCountryoidOrganizationoidOrganizationUnitoidSigsigOIDparseCertificateencodeCertificateHeaderX509decodeCertificateencodeCertificate parsePrivatePEM takeTillEndfindSectionNameparsePEMSections ParseASN1PrunP runParseASN1getNextgetNextContaineronNextContainergetNextContainerMaybeonNextContainerMaybehasNext asn1ContainermakeASN1Sequence CertKeyUsageCertKeyUsageDecipherOnlyCertKeyUsageEncipherOnlyCertKeyUsageCRLSignCertKeyUsageKeyCertSignCertKeyUsageKeyAgreementCertKeyUsageDataEnciphermentCertKeyUsageKeyEnciphermentCertKeyUsageNonRepudiationCertKeyUsageDigitalSignatureTimeOID parse_RSA parse_ECDSAparseCertHeaderVersionparseCertHeaderSerial sig_tablepk_table oidPubKey pubkeyalgOIDparseCertHeaderAlgorithmID asn1StringencodeAsn1StringparseCertHeaderDNparseCertHeaderValidityparseCertHeaderSubjectPKparseCertExtensionHelperparseCertExtensionsencodeDNencodePK