
    kKj                         d dl Z d dlmZmZmZmZmZmZ ddlm	Z	m
Z
mZmZ ddlmZmZ ddlmZmZ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 ddlmZ  ddl!m"Z# ddl$m%Z%m&Z& ddl'm(Z( ddl)m*Z* g dZ+ e         G d de      Z,eee
f   Z-ee,ge-f   Z.ee-e.f   Z/	 	 d3de/de,de0ded   dz  def
dZ1ed4deded   dedz  defd       Z2ed4deded    dedz  defd!       Z2ed4deded"   dedz  defd#       Z2ed4deded$   dedz  defd%       Z2ed5dedddedz  defd&       Z2	 	 d5deded'   dz  dedz  defd(Z2e	 	 	 	 d6ded   d)e3dz  dedz  d*e0d+e0defd,       Z4e	 	 	 	 d6ded    d)e3dz  dedz  d*e0d+e0defd-       Z4e	 	 	 	 d6ded"   d)ed.   dz  dedz  d*e0d+e0defd/       Z4e	 	 	 	 d6ded$   d)ed0   dz  dedz  d*e0d+e0defd1       Z4	 	 	 	 d6ded'   d)e5e3z  dz  dedz  d*e0d+e0defd2Z4y)7    N)castoverloadLiteralUnionCallableProtocol   )JWKRegistryKeySetKeyKeySetSerialization)import_from_pem_keyimport_from_ssh_key)AnyKeyDictKeyKeyParameters)OctKey)RSAKey)ECKey)OKPKey)register_secp256k1)calculate_thumbprint)calculate_thumbprint_uri)SecurityWarningInvalidKeyTypeError)Header)to_bytes)r   r   r   KeyCallableKeyFlexibler   KeyBaseGuestProtocolr
   r   r   r   r   r   	guess_key
import_keygenerate_key
thumbprintthumbprint_uric                   (    e Zd ZdefdZdeddfdZy)r!   returnc                      y N )selfs    \/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/joserfc/jwk.pyheaderszGuestProtocol.headers4   s        kidNc                      y r*   r+   )r,   r0   s     r-   set_kidzGuestProtocol.set_kid6   s    r/   )__name__
__module____qualname__r   r.   strr2   r+   r/   r-   r!   r!   3   s    $$,3,4,r/   r!   keyobjrandomuse)sigencr(   c                    t        |       r	 | |      }n| }t        |t        t        t        t
        f      r|S t        |t              r|j                         }|j                  d      }d|d   i}|r||d<   |s_|r]|j                  |d   |      }|t        d      |j                          |j                  t        t        |j                               |S |j!                  ||      }|S t        d      )zGuess key from a various sources.

    :param key: a very flexible key
    :param obj: a protocol that has ``headers`` and ``set_kid`` methods
    :param random: pick a random key from key set
    :param use: optional "use" value
    r0   algr:   zInvalid key)callable
isinstancer   r   r   r   r   r.   getpick_random_key
ValueError
ensure_kidr2   r   r6   r0   
get_by_kid)	r7   r8   r9   r:   resolved_keyr.   r0   
parameters
return_keys	            r-   r"   r"   >   s     }3x, ?@	L&	)++-!++e,%*GEN$;
 #Juv%55genjQJ! //!!#KKS*..12  &00jAJ''r/   datakey_typeoctrG   c                      y r*   r+   rI   rJ   rG   s      r-   r#   r#   i       knr/   RSAc                      y r*   r+   rM   s      r-   r#   r#   m   rN   r/   ECc                      y r*   r+   rM   s      r-   r#   r#   q   s    ilr/   OKPc                      y r*   r+   rM   s      r-   r#   r#   u   rN   r/   c                      y r*   r+   rM   s      r-   r#   r#   y   s    ehr/   )rK   rO   rQ   rS   c                    t        | t        t        f      r|t        j                  dt
               t        |       }t        d t        j                  j                         D              }|j                  |      r	 t        |      }n	 t!        |      }t        j                  j                         D ]@  }t#        |j$                  d      s|j$                  j'                  |      s6 ||| |      c S  t)        d      t        j                  | ||      S # t        $ r t        j                  ||      cY S w xY w# t        $ r t        j                  ||      cY S w xY w)a  Importing a key from bytes, string, and dict. When ``value`` is a dict,
    this method can tell the key type automatically, otherwise, developers
    SHOULD pass the ``key_type`` themselves.

    :param data: the key data in bytes, string, or dict.
    :param key_type: an optional key type in string.
    :param parameters: extra key parameters
    :return: OctKey, RSAKey, ECKey, or OKPKey
    z+Using implicit key type is not recommended.c              3   v   K   | ]1  }t        |j                  d       s|j                  j                   3 yw)ssh_typeN)hasattrbindingrX   ).0clss     r-   	<genexpr>zimport_key.<locals>.<genexpr>   s0      
,JSgVYVaVacmNnCKK  ,Js   99check_cryptography_keyzNot a key of any supported type)r@   r6   byteswarningswarnr   r   tupler
   	key_typesvalues
startswithr   rC   r   r#   r   rY   rZ   r^   r   )rI   rJ   rG   value	ssh_typesraw_keyr\   s          r-   r#   r#   }   s8    $e%(*:C_U 
,7,A,A,H,H,J
 
	 I&<-e4<-e4 ((//1Cs{{$<=#++BdBdelBm7D*55 2 ""CDD!!$*==  <((
;;<
  <((
;;<s$   >D D> D;:D;>E E crv_or_sizeprivateauto_kidc                      y r*   r+   rJ   ri   rG   rj   rk   s        r-   r$   r$           r/   c                      y r*   r+   rm   s        r-   r$   r$      rn   r/   )zP-256zP-384zP-521	secp256k1c                      y r*   r+   rm   s        r-   r$   r$      s     r/   )Ed25519Ed448X25519X448c                      y r*   r+   rm   s        r-   r$   r$      rn   r/   c                 4    t        j                  | ||||      S )zGenerating key according to the given key type. When ``key_type`` is
    "oct" and "RSA", the second parameter SHOULD be a key size in bits.
    When ``key_type`` is "EC" and "OKP", the second
    parameter SHOULD be a "crv" string.
    )r
   r$   rm   s        r-   r$   r$      s     ##Hk:wPXYYr/   )FNr*   )NN)NNTF)6r`   typingr   r   r   r   r   r   _keysr
   r   r   r   _rfc7517.pemr   r   _rfc7517.typesr   r   r   _rfc7518.oct_keyr   _rfc7518.rsa_keyr   _rfc7518.ec_keyr   _rfc8037.okp_keyr   _rfc8812r   _rfc7638r   r%   _rfc9278r   r&   errorsr   r   registryr   utilr   __all__r!   r    r   r   boolr"   r#   intr$   r6   r+   r/   r-   <module>r      s    E E  C : : $ $ " $ ( 8 @ 8  2  -H - V
/0G[() (,	((	((	(( (( 
		%	((
 	((V 
 nV nwu~ n=SWCW nci n 
 n 
 nV nwu~ n=SWCW nci n 
 n 
 lV lwt} l-RVBV lbg l 
 l 
 nV nwu~ n=SWCW nci n 
 n 
 hV ht hPT@T h`c h 
 h
 ;?'+$>
$>/047$> $$> 		$>N 
 #'+ent $ 	
   
 
 #'+ent $ 	
   
 
 KO'+dm?@4G $ 	
   
 
 IM'+en=>E $ 	
   
 %)'+Z/0ZsT!Z $Z 	Z
 Z 	Zr/   