
    U-f<                        d Z ddlZddlZddlZddlmZmZmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlZddlmZmZmZmZ ddlmZ ddlmZ  G d d	          Z G d
 dej                  Z G d dej                  Z G d dej                  Z G d d          Zedk    r ee                                            dS dS )zJSON Web Signature.    N)	AnyDict	FrozenSetListMappingOptionalTupleTypecast)crypto)b64errors	json_utiljwa)jwk)utilc                   X    e Zd ZdZdZ	 ededefd            Zededefd            ZdS )	MediaTypez MediaType field encoder/decoder.zapplication/valuereturnc                 R    d|vr"d|v rt          j        d          | j        |z   S |S )zDecoder./;zUnexpected semi-colon)r   DeserializationErrorPREFIXclsr   s     Y/home/cdr/domains/dharristours.com/map/certbot/lib/python3.11/site-packages/josepy/jws.pydecodezMediaType.decode   s<     ee||12IJJJ:%%    c                 ~    d|vr8|                     | j                  sJ |t          | j                  d         S |S )zEncoder.r   N)
startswithr   lenr   s     r   encodezMediaType.encode)   sI     e##CJ/////SZ**++r    N)	__name__
__module____qualname____doc__r   classmethodstrr   r$    r    r   r   r      s|        **F23 3    [ 3 3    [  r    r   c                   
   e Zd ZU dZ ej        dej        j        d          Z	e
ej                 ed<    ej        dd          Ze
e         ed<    ej        dej        j        d          Ze
ej                 ed<    ej        dd          Ze
e         ed<    ej        d	d          Ze
e         ed	<    ej        d
dd          Zeej        df         ed
<    ej        dej        d          Ze
e         ed<    ej        dej        d          Ze
e         ed<    ej        dej        ej        d          Ze
e         ed<    ej        dej        ej        d          Ze
e         ed<    ej        ddd          Z ee!df         ed<   e"eej#        f         ed<   de"eej#        f         fdZ$de!dd fdZ%de&j        fdZ'e j(        de!de!fd            Z ej)        d             Zej(        d             ZdS ) Headera6  JOSE Header.

    .. warning:: This class supports **only** Registered Header
        Parameter Names (as defined in section 4.1 of the
        protocol). If you need Public Header Parameter Names (4.2)
        or Private Header Parameter Names (4.3), you must subclass
        and override :meth:`from_json` and :meth:`to_partial_json`
        appropriately.

    .. warning:: This class does not support any extensions through
        the "crit" (Critical) Header Parameter (4.1.11) and as a
        conforming implementation, :meth:`from_json` treats its
        occurrence as an error. Please subclass if you seek for
        a different behaviour.

    :ivar x5tS256: "x5t#S256"
    :ivar str typ: MIME Media Type, inc. :const:`MediaType.PREFIX`.
    :ivar str cty: Content-Type, inc. :const:`MediaType.PREFIX`.

    algT)decoder	omitemptyjku)r0   r   kidx5ux5cr+   r0   default.x5tzx5t#S256x5tS256typ)encoderr/   r0   ctycrit_fieldsr   c                 N      fd j                                         D             S )z4Fields that would not be omitted in the JSON object.c                 ~    i | ]9\  }}|                     t          |                    (|t          |          :S r+   )omitgetattr).0namefieldselfs      r   
<dictcomp>z&Header.not_omitted.<locals>.<dictcomp>b   sU     
 
 
e::gdD1122
'$%%
 
 
r    )r=   itemsrE   s   `r   not_omittedzHeader.not_omitted`   s<    
 
 
 
#|1133
 
 
 	
r    otherc                    t          |t          |                     s/t          d                    t          |                              |                                 }|                                }t          |                              |          rt          d          |                    |            t          |           di |S )NzHeader cannot be added to: {0}z+Addition of overlapping headers not definedr+   )
isinstancetype	TypeErrorformatrI   setintersectionupdate)rE   rJ   not_omitted_selfnot_omitted_others       r   __add__zHeader.__add__h   s    %d,, 	R<CCDKKPPQQQ++--!--//  --.?@@ 	KIJJJ 1222tDzz--,---r    c                 F    | j         t          j        d          | j         S )zFind key based on header.

        .. todo:: Supports only "jwk" header parameter lookup.

        :returns: (Public) key found in the header.
        :rtype: .JWK

        :raises josepy.errors.Error: if key could not be found

        NzNo key found)r   r   ErrorrH   s    r   find_keyzHeader.find_keyu   s#     8,~...xr    unused_valuec                 *    t          j        d          )Nz("crit" is not supported, please subclass)r   r   )rY   s    r   r<   zHeader.crit   s    )*TUUUr    c                     d | D             S )Nc                 z    g | ]8}t          j        t          j        t          j        |j                            9S r+   )base64	b64encoder   dump_certificateFILETYPE_ASN1wrappedrB   certs     r   
<listcomp>zHeader.x5c.<locals>.<listcomp>   sE     
 
 
 V4V5I4<XXYY
 
 
r    r+   r   s    r   r4   z
Header.x5c   s#    
 

 
 
 	
r    c                     	 t          d | D                       S # t          j        $ r}t          j        |          d }~ww xY w)Nc           	   3      K   | ]G}t          j        t          j        t          j        t          j        |                              V  Hd S N)r   ComparableX509r   load_certificater`   r]   	b64decoderb   s     r   	<genexpr>zHeader.x5c.<locals>.<genexpr>   sd          #+F,@&BRSWBXBXYY      r    )tupler   rW   r   r   )r   errors     r   r4   z
Header.x5c   sk    	5   "	      | 	5 	5 	5-e444	5s    A>AN)*r%   r&   r'   r(   r   rD   r   JWASignature	from_jsonr.   r   __annotations__r1   bytesjwk_modJWKr   r2   r*   r3   r4   r	   r   ri   decode_b64joser7   r8   r   r$   r   r9   r;   r<   r   r   FieldrI   rU   josepyrX   r/   r:   r+   r    r   r-   r-   3   s;         * '6ios'1T' ' 'C#"	#    +9?5DAAAC%AAA!0w{," " "C'+	    )$???C#???*9?5DAAAC%AAA+:9?5DZ\+]+]+]Ct"C'	(]]]*9?5):R^bcccC%ccc.yI4     GXe_     /yy'1AT     C)	     /yy'1AT     C)	    ,IOFdBOOOD%S/OOO#y&''''
T#y"67 
 
 
 
.S .X . . . .&*     
\V3 V3 V V V \V
 	[
 
 [
 	[	5 	5 [	5 	5 	5r    r-   c                       e Zd ZU dZeZeed<   dZ ej	        ddd          Z
eed<    ej	        dd e            ej        	          Zeed<    ej	        d
ej        ej                  Zeed
<   e
j        dedefd            Z
e
j        dedefd            Z
deddf fdZededeeef         fd            Zedededefd            Zddedeej                 defdZed e            fdedej        dej         dede!dedd fd            Z"deeef         f fdZ#ede$eef         deeef         f fd            Z% xZ&S ) 	Signaturea  JWS Signature.

    :ivar combined: Combined Header (protected and unprotected,
        :class:`Header`).
    :ivar unicode protected: JWS protected header (Jose Base-64 decoded).
    :ivar header: JWS Unprotected Header (:class:`Header`).
    :ivar str signature: The signature.

    combined)rz   	protectedT r5   header)r0   r6   r/   	signature)r/   r:   r   r   c                 P    t          j        |                     d                    S Nutf-8)r   encode_b64joser$   re   s    r   r{   zSignature.protected   s!     'W(=(=>>>r    c                 P    t          j        |                               d          S r   )r   ru   r   re   s    r   r{   zSignature.protected   s!    '..55g>>>r    kwargsNc                     d|vr|                      |          } t                      j        di | | j        j        J d S )Nrz   r+   )_with_combinedsuper__init__rz   r.   )rE   r   	__class__s     r   r   zSignature.__init__   sU    V##((00F""6"""} ,,,,,r    c                     d|vsJ |                     d| j        d         j                  }|                     d| j        d         j                  }|r|| j                            |          z   }n|}||d<   |S )Nrz   r}   r{   )getr=   r6   
header_cls
json_loads)r   r   r}   r{   rz   s        r   r   zSignature._with_combined   s    ''''Hck(&;&CDDJJ{CK,D,LMM	 	 9 9) D DDHHH%zr    payloadc                     t          j        |                    d                    dz   t          j        |          z   S )Nr      .)r   r^   r$   )r   r{   r   s      r   _msgzSignature._msg   s4    }Y--g6677$>wAWAWWWr    keyc                    || j                                         n|}| j         j        st          j        d          | j         j                            |j        | j        |                     | j	        |                    S )zvVerify.

        :param bytes payload: Payload to verify.
        :param JWK key: Key used for verification.

        Nz Not signature algorithm defined.)r   sigmsg)
rz   rX   r.   rw   rW   verifyr   r~   r   r{   )rE   r   r   
actual_keys       r   r   zSignature.verify   s~     >A[!7!7!9!9!9c
}  	C,ABBB} ''DN		$.RY8Z8Z ( 
 
 	
r    r.   include_jwkprotectc                 0   t          ||j                  sJ |}||d<   |r|                                |d<   t          |                              | j        j                  sJ |                    | j        j                  sJ i }|D ]}	|	|v r|                    |	          ||	<   |r  | j        di |                                }
nd}
 | j        di |}	|	                    |j
        |                     |
|                    } | |
|	|          S )aD  Sign.

        :param bytes payload: Payload to sign.
        :param JWK key: Key for signature.
        :param JWASignature alg: Signature algorithm to use to sign.
        :param bool include_jwk: If True, insert the JWK inside the signature headers.
        :param FrozenSet protect: List of headers to protect.

        r.   r   r|   )r{   r}   r~   r+   )rL   kty
public_keyrP   issubsetr   r=   pop
json_dumpssignr   r   )r   r   r   r.   r   r   r   header_paramsprotected_paramsr}   r{   r~   s               r   r   zSignature.sign   sM   & #sw'''''"e 	4#&>>#3#3M% =!!**3>+ABBBBB 677777 	E 	EF&&+8+<+<V+D+D ( 	&::)9::EEGGIII00-00HHSWchhy'&B&BCC	sYvKKKKr    c                     t                                                      }|d                                         s|d= |S )Nr}   )r   fields_to_partial_jsonrI   )rE   fieldsr   s     r   r   z Signature.fields_to_partial_json  s>    //11h++-- 	!x r    jobjc                     t                                          |          }|                     |          }d|d                                         vrt	          j        d          |S )Nr.   rz   zalg not present)r   fields_from_jsonr   rI   r   r   )r   r   r   fields_with_combinedr   s       r   r   zSignature.fields_from_json  sc    ))$//"11&99,Z8DDFFFF-.?@@@##r    rh   )'r%   r&   r'   r(   r-   r   rq   	__slots__r   rD   r{   r*   rp   r}   ru   r   r~   rr   r:   r/   r   r   r)   r   r   r   r   rw   rt   boolr   	frozensetro   r   r   r   r   r   __classcell__)r   s   @r   ry   ry      s          JI$Y_[D"MMMIsMMM$Y_D**,,
@T  FF    'yY5y?W  Iu    ? ? ? ? ? ? ? ? ? ? ? ?- - - - - - - - C DcN    [ XS X5 XU X X X [X
 
e 
(6:*> 
$ 
 
 
 
  !&Y[[(L (L(L Z(L  	(L
 (L (L (L 
(L (L (L [(LTS#X       $GCH$5 $$sCx. $ $ $ $ $ [$ $ $ $ $r    ry   c                   "   e Zd ZU dZdZeed<   ee         ed<   eZ	dde
ej                 defdZeded	edd fd
            Zedefd            ZdefdZededd fd            Zddedeeef         fdZedeeef         dd fd            ZdS )JWSzgJSON Web Signature.

    :ivar str payload: JWS Payload.
    :ivar str signature: JWS Signatures.

    r   
signaturesr   r   Nr   r   c                 H     t           fd j        D                       S )Verify.c              3   N   K   | ]}|                     j                  V   d S rh   )r   r   )rB   r   r   rE   s     r   rl   zJWS.verify.<locals>.<genexpr>.  s3      LLS3::dlC00LLLLLLr    )allr   )rE   r   s   ``r   r   z
JWS.verify,  s,    LLLLLDOLLLLLLr    r   c                 B     | | | j         j        dd|i|f          S )Sign.r   r   r+   )signature_clsr   )r   r   r   s      r   r   zJWS.sign0  s9     s70F0A0F0a0aw0aZ`0a0a/cddddr    c                 P    t          | j                  dk    sJ | j        d         S )zPGet a singleton signature.

        :rtype: :class:`JWS.signature_cls`

           r   )r#   r   rH   s    r   r~   zJWS.signature5  s,     4?##q((((q!!r    c                 Z   t          | j                  dk    sJ d| j        j                                        vsJ t          j        | j        j                            d                    dz   t          j        | j	                  z   dz   t          j        | j        j                  z   S )z7Compact serialization.

        :rtype: bytes

        r   r.   r   r   )
r#   r   r~   r}   rI   r   r^   r{   r$   r   rH   s    r   
to_compactzJWS.to_compact?  s     4?##q((((DN1==?????? M$.299'BBCCmDL))*  mDN455	6	
r    compactc                 X   	 |                     d          \  }}}n"# t          $ r t          j        d          w xY w|                     t          j        |                              d          t          j        |                    } | t          j        |          |f          S )zACompact deserialization.

        :param bytes compact:

        r   zOCompact JWS serialization should comprise of exactly 3 dot-separated componentsr   )r{   r~   r   )split
ValueErrorr   r   r   r   rk   r   )r   r   r{   r   r~   r   s         r   from_compactzJWS.from_compactR  s    	,3MM$,?,?)Iw		 	 	 	-d  	
 mI..55g>>#-XaJbJb   
 
 s3=11sfEEEEs    ;Tflatc                     | j         sJ t          j        | j                  }|r>t	          | j                   dk    r&| j         d                                         }||d<   |S || j         dS )Nr   r   r   r   )r   r   r   r   r#   to_partial_json)rE   r   r   rets       r   r   zJWS.to_partial_jsone  s}    *4<88 	C((A--/!$4466C$C	NJ #"o  r    r   c                     d|v rd|v rt          j        d          d|v r\d |                                D             }  t          j        |d                    j                            |          f          S   t          j        |d                   t           fd|d         D                                 S )Nr~   r   zFlat mixed with non-flatc                 &    i | ]\  }}|d k    ||S )r   r+   )rB   r   r   s      r   rF   z!JWS.from_json.<locals>.<dictcomp>x  s(    VVVzsESIEUEUUEUEUEUr    r   r   c              3   L   K   | ]}j                             |          V  d S rh   )r   rp   )rB   r   r   s     r   rl   z JWS.from_json.<locals>.<genexpr>  s4       ` `c!2!<!<S!A!A ` ` ` ` ` `r    )r   r   rG   r   ru   r   rp   rm   )r   r   filtereds   `  r   rp   zJWS.from_jsons  s    $<4#7#7-.HIIID  VVTZZ\\VVVH3!0iAA-77AAC   
 3!0iAA  ` ` ` `TR^M_ ` ` ```   r    rh   )T)r%   r&   r'   r(   r   rr   rq   r   ry   r   r   rw   rt   r   r   r)   r   r   propertyr~   r   r   r   r*   r   r   rp   r+   r    r   r   r     s          *INNNYMM M(6:. M$ M M M M e5 eC eE e e e [e "9 " " " X"
E 
 
 
 
& F5 FU F F F [F$ D DcN     WS#X. 5    [  r    r   c                   ,   e Zd ZdZedej        ddfd            Zedej        defd            Z	ede
dej        fd            Zede
de
fd	            Zede
deej                 fd
            Zeddeee                  dee         fd            ZdS )CLIzJWS CLI.argsr   Nc                    |j         j                            |j                                                  }|j                                         |j        g |_        |j        r|j                            d           t          
                    t          j                                                                        ||j         t          |j                            }|j        r6t          |                                                    d                     dS t          |                                           dS )r   Nr.   )r   r   r.   r   r   )r.   r   loadr   readcloser   r   appendr   r   sysstdinr$   rP   printr   r   json_dumps_pretty)r   r   r   r   s       r   r   zCLI.sign  s    hl00<DL< 	'L&&&hhINN$$++--3DHcRVR^N_N_  
 
 < 	+#..""))'2233333#''))*****r    c                    |j         rIt                              t          j                                                                                  }nw	 t          t          t                              t          j                                                            }n,# t          j
        $ r}t          |           Y d}~dS d}~ww xY w|j        f|j        J |j                            |j                                                                                  }|j                                         nd}t          j                            |j                                                   |                    |           S )r   NF)r   )r   r   r   r   r   r   r$   r   r   r   rW   r   r   r   r   r   r   stdoutwriter   r   r   )r   r   r   rn   r   s        r   r   z
CLI.verify  s8    < 	""39>>#3#3#:#:#<#<==CC3sy~~/?/? @ @AA<   euuuuu 88'''(--00;;==CHNNC
++--...::#:&&&&s   A	B C+C  Cargc                 @    t           j                            |          S rh   )r   ro   rp   r   r   s     r   	_alg_typezCLI._alg_type  s    ))#...r    c                 0    |t           j        j        v sJ |S rh   )ry   r   r=   r   s     r   _header_typezCLI._header_type  s    i*22222
r    c                 Z    |t           j        j        v sJ t           j        j        |         S rh   )rs   rt   TYPESr   s     r   	_kty_typezCLI._kty_type  s(    gk'''''{ %%r    c                 0   |t           j        dd         }t          j                    }|                    dd           |                                }|                    d          }|                    | j                   |                    dd	t          j	        d
          d           |                    dd| j
        t          j                   |                    ddd| j                   |                    d          }|                    | j                   |                    dd	t          j	        d
          d           |                    d| j        d           |                    |          }|                    |          S )z Parse arguments and sign/verify.Nr   z	--compact
store_true)actionr   )funcz-kz--keyrbT)rM   requiredz-az--alg)rM   r6   z-pz	--protectr   )r   rM   r   Fz--kty)r   argvargparseArgumentParseradd_argumentadd_subparsers
add_parserset_defaultsr   FileTyper   r   RS256r   r   r   
parse_argsr   )r   r   parser
subparsersparser_signparser_verifyparseds          r   runzCLI.run  s}    <8ABB<D(**K===**,,
 ++F33  ch ///  wX5Ft5L5LW[ \\\  wS]CI VVV  {8#JZ [[["--h77""
"333""4x7H7N7NY^"___""7"OOO""4(({{6"""r    rh   )r%   r&   r'   r(   r)   r   	Namespacer   r   r   r   r   ro   r   r   r
   rs   rt   r   r   r   r*   r   r+   r    r   r   r     sM       N+* +t + + + [+$ '(, ' ' ' ' ['* /C /C$4 / / / [/ s s    [ &C &D$5 & & & [& # #xS	* #htn # # # [# # #r    r   __main__)!r(   r   r]   r   typingr   r   r   r   r   r   r	   r
   r   OpenSSLr   rw   r   r   r   r   r   rs   r   r   JSONObjectWithFieldsr-   ry   r   r   r%   exitr   r+   r    r   <module>r      s"       




 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
        . . . . . . . . . . . . ! ! ! ! ! !             4h5 h5 h5 h5 h5Y+ h5 h5 h5V}$ }$ }$ }$ }$	. }$ }$ }$@c c c c c)
( c c cLO# O# O# O# O# O# O# O#d zDOOOOO r    