3 lá˜_½3ã@spddlmZmZmZddlZddlZddlmZddlZddl m Z ddl m Z ddl mZmZmZe jƒe jƒe jƒe jƒe jƒdœZGdd „d eƒZGd d „d eƒZd d „eDƒZe je je je je jfZdd„ZGdd„deƒZdd „eDƒZdd„Zdd„ZGdd„de ƒZ!Gdd„de ƒZ"Gdd„de ƒZ#ej$ej%ƒGdd„de ƒƒZ&ej$ej%ƒGdd „d e ƒƒZ'dS)!é)Úabsolute_importÚdivisionÚprint_functionN)ÚEnum)Úx509)Úhashes)Ú_EARLIEST_UTC_TIMEÚ_convert_to_naive_utc_timeÚ_reject_duplicate_extension)z 1.3.14.3.2.26z2.16.840.1.101.3.4.2.4z2.16.840.1.101.3.4.2.1z2.16.840.1.101.3.4.2.2z2.16.840.1.101.3.4.2.3c@seZdZdZdZdS)ÚOCSPResponderEncodingzBy HashzBy NameN)Ú__name__Ú __module__Ú __qualname__ZHASHÚNAME©rrú/usr/lib64/python3.6/ocsp.pyr sr c@s$eZdZdZdZdZdZdZdZdS)ÚOCSPResponseStatusréééééN) r r rÚ SUCCESSFULZMALFORMED_REQUESTZINTERNAL_ERRORZ TRY_LATERZ SIG_REQUIREDZ UNAUTHORIZEDrrrrr$s rcCsi|] }||j“qSr)Úvalue)Ú.0Úxrrrú -srcCst|tƒstdƒ‚dS)Nz9Algorithm must be SHA1, SHA224, SHA256, SHA384, or SHA512)Ú isinstanceÚ_ALLOWED_HASHESÚ ValueError)Ú algorithmrrrÚ_verify_algorithm7s r!c@seZdZdZdZdZdS)ÚOCSPCertStatusrrrN)r r rZGOODÚREVOKEDZUNKNOWNrrrrr">sr"cCsi|] }||j“qSr)r)rrrrrrDscCsddlm}|j|ƒS)Nr)Úbackend)Ú,cryptography.hazmat.backends.openssl.backendr$Úload_der_ocsp_request)Údatar$rrrr&Gs r&cCsddlm}|j|ƒS)Nr)r$)r%r$Úload_der_ocsp_response)r'r$rrrr(Ms r(c@s2eZdZdgfdd„Zdd„Zdd„Zdd „ZdS) ÚOCSPRequestBuilderNcCs||_||_dS)N)Ú_requestÚ _extensions)ÚselfZrequestÚ extensionsrrrÚ__init__TszOCSPRequestBuilder.__init__cCsP|jdk rtdƒ‚t|ƒt|tjƒ s6t|tjƒ r>tdƒ‚t|||f|jƒS)Nz.Only one certificate can be added to a requestz%cert and issuer must be a Certificate) r*rr!rrÚ CertificateÚ TypeErrorr)r+)r,ÚcertÚissuerr rrrÚadd_certificateXs  z"OCSPRequestBuilder.add_certificatecCsDt|tjƒstdƒ‚tj|j||ƒ}t||jƒt|j |j|gƒS)Nz"extension must be an ExtensionType) rrÚ ExtensionTyper0Ú ExtensionÚoidr r+r)r*)r,Ú extensionÚcriticalrrrÚ add_extensionds   z OCSPRequestBuilder.add_extensioncCs(ddlm}|jdkrtdƒ‚|j|ƒS)Nr)r$z*You must add a certificate before building)r%r$r*rZcreate_ocsp_request)r,r$rrrÚbuildos  zOCSPRequestBuilder.build)r r rr.r3r9r:rrrrr)Ss  r)c@seZdZdd„ZdS)Ú_SingleResponsec Cst|tjƒ st|tjƒ r$tdƒ‚t|ƒt|tjƒs@tdƒ‚|dk r^t|tjƒ r^tdƒ‚||_||_||_||_ ||_ t|t ƒsŽtdƒ‚|t j k rº|dk r¨t dƒ‚|dk r¸t dƒ‚nNt|tjƒsÎtdƒ‚t|ƒ}|tkræt dƒ‚|dk �rt|tjƒ �rtd ƒ‚||_||_||_dS) Nz%cert and issuer must be a Certificatez%this_update must be a datetime objectz-next_update must be a datetime object or Nonez8cert_status must be an item from the OCSPCertStatus enumzBrevocation_time can only be provided if the certificate is revokedzDrevocation_reason can only be provided if the certificate is revokedz)revocation_time must be a datetime objectz7The revocation_time must be on or after 1950 January 1.zCrevocation_reason must be an item from the ReasonFlags enum or None)rrr/r0r!ÚdatetimeZ_certZ_issuerZ _algorithmZ _this_updateZ _next_updater"r#rr rZ ReasonFlagsZ _cert_statusZ_revocation_timeZ_revocation_reason) r,r1r2r Ú cert_statusÚ this_updateÚ next_updateÚrevocation_timeÚrevocation_reasonrrrr.ysJ         z_SingleResponse.__init__N)r r rr.rrrrr;xsr;c@sReZdZdddgfdd„Zdd„Zdd„Zdd „Zd d „Zd d „Ze dd„ƒZ dS)ÚOCSPResponseBuilderNcCs||_||_||_||_dS)N)Ú _responseÚ _responder_idÚ_certsr+)r,ZresponseÚ responder_idÚcertsr-rrrr.¿szOCSPResponseBuilder.__init__c Cs<|jdk rtdƒ‚t||||||||ƒ} t| |j|j|jƒS)Nz#Only one response per OCSPResponse.)rCrr;rBrDrEr+) r,r1r2r r=r>r?r@rAZ singleresprrrÚ add_responseÇs z OCSPResponseBuilder.add_responsecCsP|jdk rtdƒ‚t|tjƒs&tdƒ‚t|tƒs8tdƒ‚t|j||f|j |j ƒS)Nz!responder_id can only be set oncez$responder_cert must be a Certificatez6encoding must be an element from OCSPResponderEncoding) rDrrrr/r0r rBrCrEr+)r,ÚencodingZresponder_certrrrrFæs   z OCSPResponseBuilder.responder_idcCs\|jdk rtdƒ‚t|ƒ}t|ƒdkr.tdƒ‚tdd„|DƒƒsHtdƒ‚t|j|j||j ƒS)Nz!certificates may only be set oncerzcerts must not be an empty listcss|]}t|tjƒVqdS)N)rrr/)rrrrrú ýsz3OCSPResponseBuilder.certificates..z$certs must be a list of Certificates) rErÚlistÚlenÚallr0rBrCrDr+)r,rGrrrÚ certificates÷s  z OCSPResponseBuilder.certificatescCsLt|tjƒstdƒ‚tj|j||ƒ}t||jƒt|j |j |j |j|gƒS)Nz"extension must be an ExtensionType) rrr4r0r5r6r r+rBrCrDrE)r,r7r8rrrr9s  z!OCSPResponseBuilder.add_extensioncCsBddlm}|jdkrtdƒ‚|jdkr0tdƒ‚|jtj|||ƒS)Nr)r$z&You must add a response before signingz*You must add a responder_id before signing)r%r$rCrrDÚcreate_ocsp_responserr)r,Z private_keyr r$rrrÚsigns   zOCSPResponseBuilder.signcCs@ddlm}t|tƒstdƒ‚|tjkr0tdƒ‚|j|dddƒS)Nr)r$z7response_status must be an item from OCSPResponseStatusz$response_status cannot be SUCCESSFUL)r%r$rrr0rrrO)ÚclsÚresponse_statusr$rrrÚbuild_unsuccessful s   z&OCSPResponseBuilder.build_unsuccessful) r r rr.rHrFrNr9rPÚ classmethodrSrrrrrB¾s rBc@s`eZdZejdd„ƒZejdd„ƒZejdd„ƒZejdd„ƒZej d d „ƒZ ejd d „ƒZ d S)Ú OCSPRequestcCsdS)z3 The hash of the issuer public key Nr)r,rrrÚissuer_key_hash0szOCSPRequest.issuer_key_hashcCsdS)z- The hash of the issuer name Nr)r,rrrÚissuer_name_hash6szOCSPRequest.issuer_name_hashcCsdS)zK The hash algorithm used in the issuer name and key hashes Nr)r,rrrÚhash_algorithm<szOCSPRequest.hash_algorithmcCsdS)zM The serial number of the cert whose status is being checked Nr)r,rrrÚ serial_numberBszOCSPRequest.serial_numbercCsdS)z/ Serializes the request to DER Nr)r,rIrrrÚ public_bytesHszOCSPRequest.public_bytescCsdS)zP The list of request extensions. Not single request extensions. Nr)r,rrrr-NszOCSPRequest.extensionsN) r r rÚabcÚabstractpropertyrVrWrXrYÚabstractmethodrZr-rrrrrU.s rUc@s$eZdZejdd„ƒZejdd„ƒZejdd„ƒZejdd„ƒZejd d „ƒZ ejd d „ƒZ ejd d„ƒZ ejdd„ƒZ ejdd„ƒZ ejdd„ƒZejdd„ƒZejdd„ƒZejdd„ƒZejdd„ƒZejdd„ƒZejdd „ƒZejd!d"„ƒZejd#d$„ƒZejd%d&„ƒZejd'd(„ƒZd)S)*Ú OCSPResponsecCsdS)zm The status of the response. This is a value from the OCSPResponseStatus enumeration Nr)r,rrrrRWszOCSPResponse.response_statuscCsdS)zA The ObjectIdentifier of the signature algorithm Nr)r,rrrÚsignature_algorithm_oid^sz$OCSPResponse.signature_algorithm_oidcCsdS)zX Returns a HashAlgorithm corresponding to the type of the digest signed Nr)r,rrrÚsignature_hash_algorithmdsz%OCSPResponse.signature_hash_algorithmcCsdS)z% The signature bytes Nr)r,rrrÚ signaturejszOCSPResponse.signaturecCsdS)z+ The tbsResponseData bytes Nr)r,rrrÚtbs_response_bytespszOCSPResponse.tbs_response_bytescCsdS)z» A list of certificates used to help build a chain to verify the OCSP response. This situation occurs when the OCSP responder uses a delegate certificate. Nr)r,rrrrNvszOCSPResponse.certificatescCsdS)z2 The responder's key hash or None Nr)r,rrrÚresponder_key_hash~szOCSPResponse.responder_key_hashcCsdS)z. The responder's Name or None Nr)r,rrrÚresponder_name„szOCSPResponse.responder_namecCsdS)z4 The time the response was produced Nr)r,rrrÚ produced_atŠszOCSPResponse.produced_atcCsdS)zY The status of the certificate (an element from the OCSPCertStatus enum) Nr)r,rrrÚcertificate_status�szOCSPResponse.certificate_statuscCsdS)z^ The date of when the certificate was revoked or None if not revoked. Nr)r,rrrr@–szOCSPResponse.revocation_timecCsdS)zi The reason the certificate was revoked or None if not specified or not revoked. Nr)r,rrrrA�szOCSPResponse.revocation_reasoncCsdS)z� The most recent time at which the status being indicated is known by the responder to have been correct Nr)r,rrrr>¤szOCSPResponse.this_updatecCsdS)zC The time when newer information will be available Nr)r,rrrr?«szOCSPResponse.next_updatecCsdS)z3 The hash of the issuer public key Nr)r,rrrrV±szOCSPResponse.issuer_key_hashcCsdS)z- The hash of the issuer name Nr)r,rrrrW·szOCSPResponse.issuer_name_hashcCsdS)zK The hash algorithm used in the issuer name and key hashes Nr)r,rrrrX½szOCSPResponse.hash_algorithmcCsdS)zM The serial number of the cert whose status is being checked Nr)r,rrrrYÃszOCSPResponse.serial_numbercCsdS)zR The list of response extensions. Not single response extensions. Nr)r,rrrr-ÉszOCSPResponse.extensionscCsdS)zR The list of single response extensions. Not response extensions. Nr)r,rrrÚsingle_extensionsÏszOCSPResponse.single_extensionsN)r r rr[r\rRr_r`rarbrNrcrdrerfr@rAr>r?rVrWrXrYr-rgrrrrr^Us(r^)(Z __future__rrrr[r<ÚenumrZsixZ cryptographyrZcryptography.hazmat.primitivesrZcryptography.x509.baserr r ZSHA1ZSHA224ZSHA256ZSHA384ZSHA512Z _OIDS_TO_HASHr rZ_RESPONSE_STATUS_TO_ENUMrr!r"Z_CERT_STATUS_TO_ENUMr&r(Úobjectr)r;rBZ add_metaclassÚABCMetarUr^rrrrÚs@     %Fp&