
    kKj                     "   d dl Z d dlZd dlm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mZmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZmZ  ej<                  deeeeeeeedd      Z  G d de      Z! G d deeef         Z"de de#fdZ$y)    N)cached_property)	generate_private_keyRSAPublicKeyRSAPrivateKeyRSAPrivateNumbersRSAPublicNumbersrsa_recover_prime_factorsrsa_crt_dmp1rsa_crt_dmq1rsa_crt_iqmp   )KeyParameter)SecurityWarningKeyParameterError)AsymmetricKey)CryptographyBinding)KeyParametersAnyKey)int_to_base64base64_to_int
RSADictKeynedpqdpdqqiF)totalc                       e Zd ZdZdZeefZede	defd       Z
ededefd       Zededefd	       Zededefd
       Zededeeef   fd       Zy)
RSABindingRSAs   ssh-rsasizereturnc                     t        d|       S )Ni  )public_exponentkey_size)r   )r%   s    i/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/joserfc/_rfc7518/rsa_key.pyr   zRSABinding.generate_private_key,   s    #EDII    objc                 6   d|v rt        d      t        t        |d         t        |d               }t        |      rjt	        t        |d         t        |d         t        |d         t        |d         t        |d	         t        |d
         |      }|j                         S t        |d         }t        |j                  ||j                        \  }}t	        |||t        ||      t        ||      t        ||      |      }|j                         S )Nothz"oth" is not supported yetr   r   r   r   r   r   r   r    )r   r   r   dmp1dmq1iqmppublic_numbers)
ValueErrorr   r   has_all_prime_factorsr   r	   r   r   r
   r   r   private_key)clsr,   r2   numbersr   r   r   s          r*   import_private_keyzRSABinding.import_private_key0   s   C<9::)-C*A=QTUXQYCZ[ %'C)C)C)"3t9-"3t9-"3t9--G, ""$$ c#h'A,^-=-=q.BRBRSDAq'!!Q'!!Q'!!Q'-G ""$$r+   keyc           
         |j                         }t        |j                  j                        t        |j                  j                        t        |j
                        t        |j                        t        |j                        t        |j                        t        |j                        t        |j                        dS )Nr   )private_numbersr   r2   r   r   r   r   r   r/   r0   r1   r6   r9   r7   s      r*   export_private_keyzRSABinding.export_private_keyQ   s    %%'w55778w55778wyy)wyy)wyy)---	
 		
r+   c                 j    t        t        |d         t        |d               }|j                         S )Nr   r   )r   r   
public_key)r6   r,   r7   s      r*   import_public_keyzRSABinding.import_public_key_   s/    "=S#:M#c(<ST!!##r+   c                 x    |j                         }t        |j                        t        |j                        dS )N)r   r   )r2   r   r   r   r<   s      r*   export_public_keyzRSABinding.export_public_keyd   s-    $$&"799-M'))4LMMr+   N)__name__
__module____qualname__key_typessh_typer   r   _cryptography_key_typesstaticmethodintr   classmethodr   r8   r=   r@   dictstrrB    r+   r*   r#   r#   '   s    HH,l;J3 J= J J %Z %M % %@ 
] 
z 
 
 $J $< $ $ NL NT#s(^ N Nr+   r#   c                       e Zd ZdZ edddd       edddd       edddd       ed	ddd       ed
ddd       edddd       edddd       edddd       edddd      d	ZeZede	fd       Z
edefd       Zededz  fd       Ze	 	 ddej$                  deez  ez  dedz  dej$                  dd f
 fd       Ze	 	 	 	 d ded    dedz  dedz  de	de	dd fd       Z xZS )!RSAKeyr$   ModulusrM   FT)privaterequiredExponentzPrivate ExponentzFirst Prime FactorzSecond Prime FactorzFirst Factor CRT ExponentzSecond Factor CRT ExponentzFirst CRT CoefficientzOther Primes Infonone)	r   r   r   r   r   r   r   r    r.   r&   c                 6    t        | j                  t              S N
isinstance	raw_valuer   selfs    r*   
is_privatezRSAKey.is_private{   s    $..-88r+   c                     t        | j                  t              r| j                  j                         S | j                  S rW   )rY   rZ   r   r?   r[   s    r*   r?   zRSAKey.public_key   s-    dnnm4>>,,..~~r+   Nc                 P    t        | j                  t              r| j                  S y rW   rX   r[   s    r*   r5   zRSAKey.private_key   s    dnnm4>>!r+   r6   value
parameterspasswordc                     t        |t        t        f      r | |||      }nt        t        |   |||      }|j                  j                  dk  rt        j                  dt               |S )N   Key size should be >= 2048 bits)rY   r   r   superrP   
import_keyrZ   r)   warningswarnr   )r6   r`   ra   rb   r9   	__class__s        r*   rg   zRSAKey.import_key   s]     em\:;eUJ/C/z8LC==!!D(MM;_M
r+   r)   rR   auto_kidc                    |d}|dz  dk7  rt        d      |dk  rt        j                  dt               | j                  j                  |      }|r | |||      }n|j                         } | |||      }|r|j                          |S )a  Generate a ``RSAKey`` with the given bit size (not bytes).

        :param key_size: size in bit
        :param parameters: extra parameter in JWK
        :param private: generate a private key or public key
        :param auto_kid: add ``kid`` automatically
        rd      r   z"A bit size must be a multiple of 8re   )r3   rh   ri   r   bindingr   r?   
ensure_kid)r6   r)   ra   rR   rk   raw_keyr9   pub_keys           r*   generate_keyzRSAKey.generate_key   s     Ha<1ABBd?MM;_M++228<gw
3C((*Ggw
3CNN
r+   )NN)rd   NTF)rC   rD   rE   rF   r   value_registryr#   rn   propertyboolr]   r   r   r?   r   r5   rK   tAnyr   r   rg   typerJ   rr   __classcell__)rj   s   @r*   rP   rP   j   s   H )UEDI*eUTJ,eTER.teT/uU6tV[\7W\]2E4RWX/PUV
N G9D 9 9 L  
 ]T1  
  ,0	UU%4 "D( %%	
 
     $+/ (^ *  "D(  	 
   
   r+   rP   r,   r&   c                 |    g d}|D cg c]  }|| v  }}t        |      ryt        |      rt        d      yc c}w )N)r   r   r   r   r    Tz@RSA key must include all parameters if any are present besides dF)allanyr   )r,   propspropprops_founds       r*   r4   r4      sF    (E+015443;5K1
;
; bcc 2s   9)%rh   typingrv   	functoolsr   -cryptography.hazmat.primitives.asymmetric.rsar   r   r   r   r   r	   r
   r   r   registryr   errorsr   r   _rfc7517.modelsr   _rfc7517.pemr   _rfc7517.typesr   r   utilr   r   	TypedDictrM   r   r#   rP   ru   r4   rN   r+   r*   <module>r      s      %
 
 
 $ 7 + . 2 / Q[[	 
 @N$ @NFS]=,67 Sl	z 	d 	r+   