3 yá˜_Y~ã @s¨ddlmZmZmZddlZddlZddlZddlmZddl m Z m Z m Z m Z ddlmZddlmZddlmZmZmZmZdd „Zd d „Zd d „Zdd„Zdd„Zdd„Zdd„Zdd„ZGdd„deƒZ dd„Z!dd„Z"dd„Z#d d!„Z$d"d#„Z%d$d%„Z&d&d'„Z'd(d)„Z(d*d+„Z)d,d-„Z*d.d/„Z+d0d1„Z,d2d3„Z-d4d5„Z.d6d7„Z/d8d9„Z0d:d;„Z1dZ2d„Z4ej5j6ej5j7ej5j8ej5j9ej5j:ej5j;ej5jd@dA„Z?dBdC„Z@dDdE„ZAdFdG„ZBdHdI„ZCdJdK„ZDdLdM„ZEdNdO„ZFej5jGej5j6ej5j7ej5j8ej5j9ej5j:ej5j;ej5jHej5jKsz$_decode_x509_name..éÿÿÿÿr)) rZX509_NAME_entry_countÚrangeZX509_NAME_get_entryr%Z Cryptography_X509_NAME_ENTRY_setÚappendÚaddrÚName) rZ x509_nameÚcountÚ attributesZ prev_set_idÚxÚentryZ attributeZset_idrrrÚ_decode_x509_name<s   r2cCsV|jj|ƒ}g}x@t|ƒD]4}|jj||ƒ}|j||jjkƒ|jt||ƒƒqW|S)N) rZsk_GENERAL_NAME_numr*Zsk_GENERAL_NAME_valuerrrr+Ú_decode_general_name)rÚgnsÚnumÚnamesÚiÚgnrrrÚ_decode_general_namesNs r9c Cs|j|jjkr.t||jjƒjdƒ}tjj |ƒS|j|jj kr\t||jj ƒjdƒ}tj j |ƒS|j|jj krˆt||jjƒ}tjtj|ƒƒS|j|jjk�rbt||jjƒ}t|ƒ}|dksÀ|dk�rNtj|d|d…ƒ}tj||dd…ƒ}tt|ƒƒdd…}|jdƒ}|d k�rt|ƒ}d||d…k�r6tdƒ‚tj|jd j|ƒƒ} n tj|ƒ} tj| ƒS|j|jjk�r†tj t!||jj"ƒƒS|j|jj#k�r¶t||jj$ƒjdƒ}tj%j |ƒS|j|jj&k�røt||jj'j(ƒ} t)||jj'j*ƒ} tj+tj| ƒ| ƒStj,d jtj-j.|j|jƒƒ|jƒ‚dS) NÚutf8éé éÚ0rÚ1zInvalid netmaskz/{}z{} is not a supported typer))/r rZGEN_DNSÚ_asn1_string_to_bytesÚdZdNSNamerrZDNSNameZ_init_without_validationZGEN_URIZuniformResourceIdentifierZUniformResourceIdentifierZGEN_RIDrZ registeredIDZ RegisteredIDr!Z GEN_IPADDZ iPAddressÚlenÚ ipaddressZ ip_addressÚbinÚintÚfindÚ ValueErrorZ ip_networkZexplodedÚformatZ IPAddressZ GEN_DIRNAMEZ DirectoryNamer2Z directoryNameZ GEN_EMAILZ rfc822NameZ RFC822NameZ GEN_OTHERNAMEZ otherNameÚtype_idÚ _asn1_to_derr#Z OtherNameZUnsupportedGeneralNameTypeZ_GENERAL_NAMESÚget) rr8r"r$Zdata_lenÚbaseZnetmaskÚbitsÚprefixZiprIr#rrrr3YsP        r3cCstjƒS)N)rZ OCSPNoCheck)rÚextrrrÚ_decode_ocsp_no_check§srPcCs0|jjd|ƒ}|jj||jjƒ}tjt||ƒƒS)NzASN1_INTEGER *)rÚcastÚgcrÚASN1_INTEGER_freerZ CRLNumberÚ_asn1_integer_to_int)rrOÚasn1_intrrrÚ_decode_crl_number«srVcCs0|jjd|ƒ}|jj||jjƒ}tjt||ƒƒS)NzASN1_INTEGER *)rrQrRrrSrZDeltaCRLIndicatorrT)rrOrUrrrÚ_decode_delta_crl_indicator±srWc@seZdZdd„Zdd„ZdS)Ú_X509ExtensionParsercCs||_||_||_||_dS)N)Ú ext_countÚget_extÚhandlersÚ_backend)ÚselfrrYrZr[rrrÚ__init__¸sz_X509ExtensionParser.__init__cCspg}tƒ}�xXt|j|ƒƒD�]D}|j||ƒ}|jj||jjjkƒ|jjj |ƒ}|dk}t j t |j|jjj |ƒƒƒ}||kr�t jdj|ƒ|ƒ‚|tjk�r |jjj|ƒ} t|j| ƒ} t| ƒjtƒ} g} x | jƒsè| j| jtƒjƒƒqÊWt jdd„| Dƒƒ} |jt j||| ƒƒ|j|ƒqn\|tjk�r||jjj|ƒ} tt|j| ƒƒ}|jtƒj ƒ|jt j||t j!ƒƒƒ|j|ƒqy|j"|}Wnvt#k �r|jjj|ƒ} |jj| |jjjkƒ|jjj$| j%| j&ƒdd…}t j'||ƒ}|jt j|||ƒƒYnXX|jjj(|ƒ}||jjjk�r8|jj)ƒt*dj|ƒƒ‚||j|ƒ} |jt j||| ƒƒ|j|ƒqWt j+|ƒS)NrzDuplicate {} extension foundcSsg|] }t|‘qSr)r )r'r0rrrú Þsz._X509ExtensionParser.parse..z/The {} extension is invalid and can't be parsed),Úsetr*rYrZr\rrrrZX509_EXTENSION_get_criticalrr!rZX509_EXTENSION_get_objectZDuplicateExtensionrHrZ TLS_FEATUREZX509_EXTENSION_get_datar@rZread_single_elementr Zis_emptyr+Z read_elementrZ as_integerZ TLSFeatureZ Extensionr,ZPRECERT_POISONZ check_emptyZ PrecertPoisonr[ÚKeyErrorrr"ÚlengthZUnrecognizedExtensionZX509V3_EXT_d2iZ_consume_errorsrGZ Extensions)r]Zx509_objÚ extensionsZ seen_oidsr7rOZcritZcriticalr$r"Z data_bytesZfeaturesZparsedr#ÚreaderZhandlerZderZ unrecognizedZext_datarrrÚparse¾sh          z_X509ExtensionParser.parseN)Ú__name__Ú __module__Ú __qualname__r^rerrrrrX·srXcCs@|jjd|ƒ}|jj||jjƒ}|jj|ƒ}g}�xt|ƒD]ö}d}|jj||ƒ}tj t ||j ƒƒ}|j |jj k�r |jj|j ƒ}g}x˜t|ƒD]Œ} |jj|j | ƒ} tj t || jƒƒ} | tjkrô|jj| jjj| jjjƒdd…jdƒ} |j| ƒq�| tjk�st‚t|| jjƒ} |j| ƒq�W|jtj||ƒƒqW|S)Nz*Cryptography_STACK_OF_ACCESS_DESCRIPTION *csˆjj|ˆjjˆjjdƒƒS)NZACCESS_DESCRIPTION_free)rZsk_ACCESS_DESCRIPTION_pop_freerZ addressofZ _original_lib)r0)rrrÚvsz,_decode_information_access..)rrQrRrZsk_ACCESS_DESCRIPTION_numr*Zsk_ACCESS_DESCRIPTION_valuerÚmethodrrr!rÚlocationr3r+ZAccessDescription)rZiar5Úaccess_descriptionsr7Zadr$r8r)rrÚ_decode_information_accessrs  rcCst||ƒ}tj|ƒS)N)rrZAuthorityInformationAccess)rÚaiar~rrrÚ$_decode_authority_information_accessŠs r�cCst||ƒ}tj|ƒS)N)rrZSubjectInformationAccess)rr€r~rrrÚ"_decode_subject_information_access�s r‚c CsÀ|jjd|ƒ}|jj||jjƒ}|jj}||dƒdk}||dƒdk}||dƒdk}||dƒdk}||dƒdk}||dƒdk}||dƒdk} ||d ƒdk} ||d ƒdk} tj||||||| | | ƒ S) NzASN1_BIT_STRING *rrr=ééééér;)rrQrRrZASN1_BIT_STRING_freeÚASN1_BIT_STRING_get_bitrZKeyUsage) rZ bit_stringZget_bitZdigital_signatureZcontent_commitmentZkey_enciphermentZdata_enciphermentZ key_agreementZ key_cert_signZcrl_signZ encipher_onlyZ decipher_onlyrrrÚ_decode_key_usage”s,r‰cCs.|jjd|ƒ}|jj||jjƒ}t||ƒ}|S)NzGENERAL_NAMES *)rrQrRrÚGENERAL_NAMES_freer9)rr4Ú general_namesrrrÚ_decode_general_names_extension®s rŒcCstjt||ƒƒS)N)rZSubjectAlternativeNamerŒ)rrOrrrÚ_decode_subject_alt_nameµsr�cCstjt||ƒƒS)N)rZIssuerAlternativeNamerŒ)rrOrrrÚ_decode_issuer_alt_name»srŽcCsF|jjd|ƒ}|jj||jjƒ}t||jƒ}t||jƒ}tj ||d�S)NzNAME_CONSTRAINTS *)Zpermitted_subtreesZexcluded_subtrees) rrQrRrZNAME_CONSTRAINTS_freeÚ_decode_general_subtreesZpermittedSubtreesZexcludedSubtreesrZNameConstraints)rZncZ permittedZexcludedrrrÚ_decode_name_constraintsÁs   r�cCsl||jjkrdS|jj|ƒ}g}xFt|ƒD]:}|jj||ƒ}|j||jjkƒt||jƒ}|j |ƒq*W|S)N) rrrZsk_GENERAL_SUBTREE_numr*Zsk_GENERAL_SUBTREE_valuerr3rLr+)rZstack_subtreesr5Zsubtreesr7rÚnamerrrr�Ës   r�c Cs¦|jjd|ƒ}|jj||jjƒ}|j|jjkr@t||jƒ\}}nd}d}|jdk}|j dk}|j dk}|j dk}|j |jjkrŒt ||j ƒ}nd}tj|||||||ƒS)NzISSUING_DIST_POINT *rr)rrQrRrZISSUING_DIST_POINT_freeÚ distpointrÚ_decode_distpointZonlyuserZonlyCAZ indirectCRLZonlyattrZonlysomereasonsÚ_decode_reasonsrZIssuingDistributionPoint) rZidpÚ full_nameÚ relative_nameZ only_userZonly_caZ indirect_crlZ only_attrZonly_some_reasonsrrrÚ_decode_issuing_dist_pointÛs*    r—cCsD|jjd|ƒ}|jj||jjƒ}t||jƒ}t||jƒ}tj ||ƒS)NzPOLICY_CONSTRAINTS *) rrQrRrZPOLICY_CONSTRAINTS_freertZrequireExplicitPolicyZinhibitPolicyMappingrZPolicyConstraints)rZpcZrequire_explicit_policyZinhibit_policy_mappingrrrÚ_decode_policy_constraintsøs  r˜cCs†|jjd|ƒ}|jj||jjƒ}|jj|ƒ}g}xJt|ƒD]>}|jj||ƒ}|j||jj kƒt j t ||ƒƒ}|j |ƒq:Wt j|ƒS)Nz#Cryptography_STACK_OF_ASN1_OBJECT *)rrQrRrZsk_ASN1_OBJECT_freeZsk_ASN1_OBJECT_numr*Zsk_ASN1_OBJECT_valuerrrr!rr+ZExtendedKeyUsage)rZskr5Zekusr7rr$rrrÚ_decode_extended_key_usages r™rc CsÌ|jjd|ƒ}|jj||jjƒ}|jj|ƒ}g}x–t|ƒD]Š}d}d}d}d}|jj||ƒ} | j|jj krvt || jƒ}| j |jj kr�t || j ƒ}| j |jj kr®t|| j ƒ\}}|jtj||||ƒƒq:W|S)Nz"Cryptography_STACK_OF_DIST_POINT *)rrQrRrZCRL_DIST_POINTS_freeZsk_DIST_POINT_numr*Zsk_DIST_POINT_valueÚreasonsrr”Z CRLissuerr9r’r“r+rZDistributionPoint) rÚcdpsr5Ú dist_pointsr7r•r–Z crl_issuerršZcdprrrÚ_decode_dist_pointss*   r�)rr=rƒr„r…r†r‡r;cCs<g}x.tjtƒD] \}}|jj||ƒr|j|ƒqWt|ƒS)N)ÚsixZ iteritemsÚ_REASON_BIT_MAPPINGrrˆr+Ú frozenset)rršZ enum_reasonsZ bit_positionÚreasonrrrr”Ss r”c CsŽ|jtkr t||jjƒ}|dfS|jj}|jj|ƒ}tƒ}x@t |ƒD]4}|jj ||ƒ}|j ||j j kƒ|jt||ƒƒqDWtj|ƒ}d|fS)N)r Ú_DISTPOINT_TYPE_FULLNAMEr9r‘ÚfullnameZ relativenamerZsk_X509_NAME_ENTRY_numr`r*Zsk_X509_NAME_ENTRY_valuerrrr,r%rr&) rr’r•ZrnsZrnumr/r7Zrnr–rrrr“]s    r“cCst||ƒ}tj|ƒS)N)r�rZCRLDistributionPoints)rr›rœrrrÚ_decode_crl_distribution_pointsvs r¤cCst||ƒ}tj|ƒS)N)r�rZ FreshestCRL)rr›rœrrrÚ_decode_freshest_crl{s r¥cCs4|jjd|ƒ}|jj||jjƒ}t||ƒ}tj|ƒS)NzASN1_INTEGER *)rrQrRrrSrTrZInhibitAnyPolicy)rrUZ skip_certsrrrÚ_decode_inhibit_any_policy€s r¦cCsnddlm}|jjd|ƒ}|jj||jjƒ}g}x8t|jj|ƒƒD]$}|jj ||ƒ}|j ||||ƒƒqBW|S)Nr)Ú_SignedCertificateTimestampzCryptography_STACK_OF_SCT *) Z)cryptography.hazmat.backends.openssl.x509r§rrQrRrZ SCT_LIST_freer*Z sk_SCT_numZ sk_SCT_valuer+)rÚ asn1_sctsr§Zsctsr7ZsctrrrÚ _decode_scts‡s r©cCstjt||ƒƒS)N)rZ)PrecertificateSignedCertificateTimestampsr©)rr¨rrrÚ-_decode_precert_signed_certificate_timestamps—srªcCstjt||ƒƒS)N)rZSignedCertificateTimestampsr©)rr¨rrrÚ%_decode_signed_certificate_timestamps�sr«) rrr=rƒr„r…r†r;é é r=rƒr„r…r†r;r¬r­c Csb|jjd|ƒ}|jj||jjƒ}|jj|ƒ}ytjt|ƒSt k r\t dj |ƒƒ‚YnXdS)NzASN1_ENUMERATED *zUnsupported reason code: {}) rrQrRrZASN1_ENUMERATED_freeZASN1_ENUMERATED_getrZ CRLReasonÚ_CRL_ENTRY_REASON_CODE_TO_ENUMrarGrH)rÚenumÚcoderrrÚ_decode_crl_reasonÉs r±cCs0|jjd|ƒ}|jj||jjƒ}tjt||ƒƒS)NzASN1_GENERALIZEDTIME *)rrQrRrÚASN1_GENERALIZEDTIME_freerZInvalidityDateÚ_parse_asn1_generalized_time)rZinv_dateÚgeneralized_timerrrÚ_decode_invalidity_dateÔs  rµcCs4|jjd|ƒ}|jj||jjƒ}t||ƒ}tj|ƒS)NzGENERAL_NAMES *)rrQrRrrŠr9rZCertificateIssuer)rr4r‹rrrÚ_decode_cert_issuerÞs r¶csnˆjjdƒ}ˆjj||ƒ}ˆj|dkƒˆj|dˆjjkƒˆjj|‡fdd„ƒ}ˆjj|d|ƒdd…S)Nzunsigned char **rcsˆjj|dƒS)Nr)rÚ OPENSSL_free)r)rrrr{ësz_asn1_to_der..)rrrZ i2d_ASN1_TYPErrrRr)rZ asn1_typerrr)rrrJås rJcCs@|jj||jjƒ}|j||jjkƒ|jj||jjƒ}|j|ƒS)N)rZASN1_INTEGER_to_BNrrrrRZBN_freeZ _bn_to_int)rrUZbnrrrrTðsrTcCs||jjkrdSt||ƒSdS)N)rrrT)rrUrrrrt÷s rtcCs|jj|j|jƒdd…S)N)rrr"rb)rrwrrrr@þsr@cCst||ƒjdƒS)Nri)r@r)rrwrrrÚ_asn1_string_to_asciisr¸cs~ˆjjdƒ}ˆjj||ƒ}|dkr2tdj|jƒƒ‚ˆj|dˆjjkƒˆjj |‡fdd„ƒ}ˆjj |d|ƒdd…j dƒS) Nzunsigned char **rz&Unsupported ASN1 string type. Type: {}rcsˆjj|dƒS)Nr)rr·)r)rrrr{sz&_asn1_string_to_utf8..r:r)) rrrZASN1_STRING_to_UTF8rGrHr rrrRrr)rrwrrr)rrrs rcCs`|j||jjkƒ|jj||jjƒ}||jjkrDtdjt||ƒƒƒ‚|jj||jj ƒ}t ||ƒS)Nz1Couldn't parse ASN.1 time as generalizedtime {!r}) rrrrZASN1_TIME_to_generalizedtimerGrHr@rRr²r³)rZ asn1_timer´rrrÚ_parse_asn1_times   r¹cCs"t||jjd|ƒƒ}tjj|dƒS)Nz ASN1_STRING *z %Y%m%d%H%M%SZ)r¸rrQÚdatetimeZstrptime)rr´Ztimerrrr³'sr³cCs0|jjd|ƒ}|jj||jjƒ}tjt||ƒƒS)NzASN1_OCTET_STRING *)rrQrRrrvrZ OCSPNoncer@)rZnoncerrrÚ _decode_nonce.sr»)wZ __future__rrrrºrCržZ cryptographyrZcryptography.hazmat._derrrrr Zcryptography.x509.extensionsr Zcryptography.x509.namer Zcryptography.x509.oidr r rrrr%r2r9r3rPrVrWÚobjectrXrprnrurxrzrr�r‚r‰rŒr�rŽr�r�r—r˜r™r¢Z_DISTPOINT_TYPE_RELATIVENAMEr�Z ReasonFlagsZkey_compromiseZ ca_compromiseZaffiliation_changedZ supersededZcessation_of_operationZcertificate_holdZprivilege_withdrawnZ aa_compromiserŸr”r“r¤r¥r¦r©rªr«Z unspecifiedZremove_from_crlr®Z_CRL_ENTRY_REASON_ENUM_TO_CODEr±rµr¶rJrTrtr@r¸rr¹r³r»ZBASIC_CONSTRAINTSZSUBJECT_KEY_IDENTIFIERZ KEY_USAGEZSUBJECT_ALTERNATIVE_NAMEZEXTENDED_KEY_USAGEZAUTHORITY_KEY_IDENTIFIERZAUTHORITY_INFORMATION_ACCESSZSUBJECT_INFORMATION_ACCESSZCERTIFICATE_POLICIESZCRL_DISTRIBUTION_POINTSZ FRESHEST_CRLZ OCSP_NO_CHECKZINHIBIT_ANY_POLICYZISSUER_ALTERNATIVE_NAMEZNAME_CONSTRAINTSZPOLICY_CONSTRAINTSZ_EXTENSION_HANDLERS_BASEZ%PRECERT_SIGNED_CERTIFICATE_TIMESTAMPSZ_EXTENSION_HANDLERS_SCTZ CRL_REASONZINVALIDITY_DATEZCERTIFICATE_ISSUERZ_REVOKED_EXTENSION_HANDLERSZ CRL_NUMBERZDELTA_CRL_INDICATORZISSUING_DISTRIBUTION_POINTZ_CRL_EXTENSION_HANDLERSZNONCEZ_OCSP_REQ_EXTENSION_HANDLERSZ"_OCSP_BASICRESP_EXTENSION_HANDLERSZSIGNED_CERTIFICATE_TIMESTAMPSZ'_OCSP_SINGLERESP_EXTENSION_HANDLERS_SCTrrrrÚsð     NQ!  -