ó
PÞ7Pc           @   sm   d  d l  Z  d  d l Z d  d l Z d d d „  ƒ  YZ d d	 d „  ƒ  YZ d „  Z e d k ri e ƒ  n  d S(
   iÿÿÿÿNt   shaauthc           B   s&   e  Z d  d „ Z d „  Z d „  Z RS(   i   c         C   s   | |  _  d  S(   N(   t   secret(   t   selfR   t   verbose(    (    s4   /home/basseq/basseq.com/fun/stripe-ctf/007/shaext.pyt   __init__   s    c         C   s6   |  j  | } t j ƒ  } | j | ƒ | j ƒ  } | S(   N(   R   t   shat   newt   updatet	   hexdigest(   R   t   msgt   datat   mt   sig(    (    s4   /home/basseq/basseq.com/fun/stripe-ctf/007/shaext.pyt   sign   s
    c         C   s<   |  j  | } t j ƒ  } | j | ƒ | j ƒ  } | | k S(   N(   R   R   R   R   R   (   R   R	   R   R
   R   t   sig2(    (    s4   /home/basseq/basseq.com/fun/stripe-ctf/007/shaext.pyt   verify   s
    (   t   __name__t
   __module__R   R   R   (    (    (    s4   /home/basseq/basseq.com/fun/stripe-ctf/007/shaext.pyR       s   	t   shaextc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s2   | |  _  | |  _ | |  _ d |  _ |  j ƒ  d  S(   Nt    (   t   origtextt   keylent   origsigt   addtextt   init(   R   R   R   R   (    (    s4   /home/basseq/basseq.com/fun/stripe-ctf/007/shaext.pyR      s
    				c         C   s  |  j  t |  j ƒ d } | d ?d @} d | } | d k  rK d | } n  d d d } |  j | |  t j d	 | ƒ |  _ |  j  t |  j ƒ d } t j ƒ  |  _ d
 | g |  j _	 |  j
 j d ƒ } t j d | ƒ \ |  j _ |  j _ |  j _ |  j _ |  j _ d  S(   Ni   i   l   ? ix   i8   s   €t    i?   s   >Qi    t   hexs   >IIIII(   R   t   lenR   t   structt   packt   inputR   R   R   t   countR   t   decodet   unpackt   H0t   H1t   H2t   H3t   H4(   R   R   t   indext   padLent   paddingt   _digest(    (    s4   /home/basseq/basseq.com/fun/stripe-ctf/007/shaext.pyR   &   s    
$c         C   s$   |  j  | |  _  |  j j | ƒ d  S(   N(   R   R   R   (   R   R   (    (    s4   /home/basseq/basseq.com/fun/stripe-ctf/007/shaext.pyt   add7   s    c         C   s)   |  j  j ƒ  } |  j |  j } | | f S(   N(   R   R   R   R   (   R   t   new_sigt   new_msg(    (    s4   /home/basseq/basseq.com/fun/stripe-ctf/007/shaext.pyt   final;   s    (   R   R   R   R   R+   R.   (    (    (    s4   /home/basseq/basseq.com/fun/stripe-ctf/007/shaext.pyR      s   			c    	      C   s†   d }  t  |  ƒ } t |  ƒ } d } | j | ƒ } d } t | | | ƒ } | j | ƒ | j ƒ  \ } } | j | | ƒ s‚ t ‚ d  S(   Nt	   topsecrets   this is orig test messages   this is addition message(   R   R    R   R   R+   R.   R   t   AssertionError(	   t   keyR   t   autht   orig_msgt   orig_sigt   add_msgt   extR-   R,   (    (    s4   /home/basseq/basseq.com/fun/stripe-ctf/007/shaext.pyt
   testattack@   s    t   __main__(    (    (   R   R   t   base64R    R   R7   R   (    (    (    s4   /home/basseq/basseq.com/fun/stripe-ctf/007/shaext.pyt   <module>   s   "	