
                             d dl Z d dlZ	 d dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ  e
j                  d      Z G d	 d
ej                  j"                        Z e       Zd Zd Z eej.                        dk7  r+ edej.                  d    z          ej2                  d       nej.                  d   Z ej6                   ej8                  ej:                  d      d    ej<                               \  ZZ  ej6                   ej8                  ej:                  d      d    ej<                               \  Z!Z  eee!      Z" ejF                  e ejH                  e"      ddi      Z% ejL                  e%      jO                         Z( ej6                  e( ejR                               \  Z*Z  ee*      \  Z+Z,Z-Z. ede,j_                  d      de-de+de.d	       y# e$ r
 d dlmZ Y w xY w)    N)decoder)encoder)univ)rfc2560)rfc2459)pem)         r
         c                   $    e Zd Zd Zd Zd Zd Zy)ValueOnlyBitStringEncoderc                      yN  selfargss     >platform/gsutil/third_party/pyasn1-modules/tools/ocspclient.py	encodeTagz#ValueOnlyBitStringEncoder.encodeTag           c                      yr   r   r   s     r   encodeLengthz&ValueOnlyBitStringEncoder.encodeLength"   r   r   c                  b    t        j                   j                  j                  |  \  }}|dd  |fS )Nr	   )r   BitStringEncoderencodeValue)r   	substrateisConstructeds      r   r   z%ValueOnlyBitStringEncoder.encodeValue%   s5    #*??#C#C#O#OQU#V 	= }m++r   c                 ,    | j                  d |dd      S )NTr   )defModemaxChunkSize)encode)r   bitStringValues     r   __call__z"ValueOnlyBitStringEncoder.__call__+   s    {{4A{NNr   N)__name__
__module____qualname__r   r   r   r'   r   r   r   r   r      s    ,Or   r   c                 >   | j                  d      }|j                  d      }|j                  d      }|j                  d      }||k(  s(J |j                         d|j                                t        j                  t	        j
                  |            j                         }|j                  d      j                  d      }t        j                  t        |            j                         }|j                  d      }	t        j                         }
|
j                  d      j                  d      }|j                  d	      j                  d	      }|j                  d
t               |j                  d|       |j                  d|       |j                  d|	       t        j                         }|j                  d      j                  d      }|j                  dd       |j                  d      j                  d      }|j                  d|
       |S )NtbsCertificatesubjectissuer
subjectPublicKeyInfosubjectPublicKeyserialNumberreqCerthashAlgorithm	algorithmissuerNameHashissuerKeyHash
tbsRequestversionv1requestListr   )getComponentByNameprettyPrinthashlibsha1r   r%   digestvalueOnlyBitStringEncoderr   RequestsetComponentByNamesha1oidOCSPRequestsetComponentByPosition)
issuerCertuserCertissuerTbsCertificateissuerSubjectuserTbsCertificate
userIssueruserIssuerHashissuerSubjectPublicKeyr7   userSerialNumberrequestr3   r4   ocspRequestr8   r;   s                   r   mkOcspRequestrR   3   s   %889IJ(;;IFM!445EF#66x@JJ& !!#Z%;%;%=) & \\z"fh  2DDE[\oo LL!"89fh  *<<^L ooG((3FFyQG..?RRSbcM$$[':/@>~/?@%%'K//=PPQ]^J!!)T2//>QQR_`K&&q'2r   c                    | j                  d      }|t        j                  d      k(  sJ |j                                | j                  d      }|j                  d      }|t        j                  k(  sJ |j                                |j                  d      }t        j                  |t        j                               \  }}|j                  d      }|j                  d      j                  d	      }|j                  d
      |j                  d      |j                  d      j                         |j                  d      fS )NresponseStatus
successfulresponseBytesresponseTyperesponseasn1SpectbsResponseData	responsesr   
producedAtcertID
certStatus
thisUpdate)
r<   r   OCSPResponseStatusr=   id_pkix_ocsp_basicr   decodeBasicOCSPResponsegetComponentByPositiongetName)	ocspResponserT   rV   rW   rX   basicOCSPResponse_r[   	response0s	            r   parseOcspResponserk   c   s*   !445EFNW77EEc~GaGaGccE 33ODM 33NCL7555Q|7O7O7QQ5//
;H">>7446q (::;LMO22;?VVWXYI 	**<8$$X.$$\2::<$$\2	 r   r   zLUsage:
$ cat CACertificate.pem userCertificate.pem | %s <ocsp-responder-url>r	   )z-----BEGIN CERTIFICATE-----z-----END CERTIFICATE-----rY   zContent-Typezapplication/ocsp-requestzCertificate ID r2   z is z at z till r/   )0r>   sysurllib2ImportErrorurllib.requestrP   pyasn1.codec.derr   r   pyasn1.typer   pyasn1_modulesr   r   r   ObjectIdentifierrD   r   r   rA   rR   rk   lenargvprintexitocspUrlrc   readPemBlocksFromFilestdinCertificaterG   ri   rH   ocspReqrB   r%   httpRequrlopenreadhttpRspOCSPResponseocspRspr]   certIdr_   r`   r<   r   r   r   <module>r      s    
%
 % $  " " 
$

 4
5O @ @ O$ 67 -`2 sxx=A	 IKN88TU;W XCHHRLhhqkG C		O	 !W  "	
A gnnC		O	 !W  "	! 
H
-
 '//GNN7/0
 '//'
"
'
'
)
 W^^G.Bg.B.B.DE
->w-G *
FJ
 63L3L^3\3=z:W Xu  %$$%s   G. .G=<G=