
    kKj#                        d dl Zd dlm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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 dd
lmZ ddlmZmZ ddl m!Z!m"Z"m#Z# ddl$m%Z% dgZ& ejN                  de(e(e(e(dd      Z) G d de      Z*e*jW                  de       e*jW                  de       e*jW                  de        G d deee
f         Z,	 d de-d   dede.de.dedz  de,fdZ/y)!    N)cached_property)hashes)generate_private_keyderive_private_keyECDHEllipticCurvePublicKeyEllipticCurvePrivateKeyEllipticCurvePrivateNumbersEllipticCurvePublicNumbersEllipticCurve	SECP256R1	SECP384R1	SECP521R1)HKDF)
PBKDF2HMAC   )InvalidExchangeKeyErrorInvalidKeyCurveError)CurveKey)CryptographyBinding)KeyParametersAnyKey)base64_to_intint_to_base64to_bytes)KeyParameterECKey	ECDictKeycrvxydF)totalc                       e Zd ZU dZdZeefZi Ze	e
ee   f   ed<   i Ze	e
e
f   ed<   ede
dee   dd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fd       Zededefd       Zy)	ECBindingECs   ecdsa-sha2-_dss_curves_curves_dssnamecurvereturnNc                 f    || j                   |<   || j                  t        |j                        <   y N)r(   r)   strr*   clsr*   r+   s      h/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/joserfc/_rfc7518/ec_key.pyregister_curvezECBinding.register_curve0   s&     %+/EJJ(    c                 |    || j                   vrt        d| d       | j                   |          }t        |      S )NInvalid crv value: '')r+   )r(   r   r   r0   s      r2   r   zECBinding.generate_private_key5   sA    s&&)=dV1'EFF%%'#%00r4   objc                      | j                   |d             }t        t        |d         t        |d         |      }t        |d         }t        ||      }|j	                         S )Nr    r!   r"   r#   )r(   r   r   r
   private_key)r1   r8   r+   public_numbersr#   private_numberss         r2   import_private_keyzECBinding.import_private_key=   si    +E
+-3#c(##c(#

 #c(#5aH**,,r4   keyc                 6   |j                         }|j                  dz   dz  }| j                  |j                  j                     t        |j                  j                  |      t        |j                  j                  |      t        |j                  |      dS )N      r   )
r<   key_sizer)   r+   r*   r   r;   r!   r"   private_valuer1   r>   numbers
byte_counts       r2   export_private_keyzECBinding.export_private_keyI   s}    %%'llQ&1,
??399>>2w5577Dw5577Dw44jA	
 	
r4   c                      | j                   |d             }t        t        |d         t        |d         |      }|j                         S )Nr    r!   r"   )r(   r   r   
public_key)r1   r8   r+   r;   s       r2   import_public_keyzECBinding.import_public_keyT   sO    +E
+-3#c(##c(#

 ((**r4   c                     |j                         }|j                  dz   dz  }| j                  |j                  j                     t        |j                  |      t        |j                  |      dS )Nr@   rA   )r    r!   r"   )r;   rB   r)   r+   r*   r   r!   r"   rD   s       r2   export_public_keyzECBinding.export_public_key^   s_    $$&llQ&1,
??7==#5#56wyy*5wyy*5
 	
r4   )__name__
__module____qualname__key_typessh_typer	   r   _cryptography_key_typesr(   dictr/   typer   __annotations__r)   classmethodr3   r   r   r=   rG   rJ   rL    r4   r2   r&   r&   (   s   HH68NO24Kc4../4"$Kc3h$0# 0d=.A 0d 0 0 1 10G 1 1 	-Y 	-3J 	- 	- 
%< 
 
 
 +I +2H + + 
$: 
y 
 
r4   r&   P-256zP-384zP-521c                   B    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      d
ZeZede	fd       Z
edefd       Zededz  fd       Zdd defdZedefd       Zedefd       Ze	 	 d"dej0                  deez  ez  dedz  dej0                  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e	 	 	 	 	 	 d$ded    deez  dededz  de	de	dej<                  d   d eeej0                  f   dz  dd fd!       Z  xZ!S )%r   r'   Curver/   FT)privaterequiredzX CoordinatezY CoordinatezEC Private Keyr   r,   c                 6    t        | j                  t              S r.   
isinstance	raw_valuer	   selfs    r2   
is_privatezECKey.is_private|   s    $..*ABBr4   c                     t        | j                  t              r| j                  j                         S | j                  S r.   )r_   r`   r	   rI   ra   s    r2   rI   zECKey.public_key   s.    dnn&=>>>,,..~~r4   Nc                 P    t        | j                  t              r| j                  S y r.   r^   ra   s    r2   r:   zECKey.private_key   s    dnn&=>>>!r4   r>   c                     |j                  d      }| j                  r=| j                  |j                  k(  r$| j                  j                  t	               |      S t               )N	deriveKey)
get_op_keyr:   
curve_nameexchanger   r   )rb   r>   pubkeys      r2   exchange_derive_keyzECKey.exchange_derive_key   sL    ,3>> A##,,TVV<<%''r4   c                 p    | j                   j                  | j                  j                  j                     S r.   )bindingr)   r`   r+   r*   ra   s    r2   ri   zECKey.curve_name   s'    ||''(<(<(A(ABBr4   c                 B    | j                   j                  j                  S r.   )r`   r+   rB   ra   s    r2   curve_key_sizezECKey.curve_key_size   s    ~~##,,,r4   r1   value
parameterspasswordc                 v    t        |t        t        f      r | |||      }|S t        t        |   |||      }|S r.   )r_   r	   r   superr   
import_key)r1   rq   rr   rs   r>   	__class__s        r2   rv   zECKey.import_key   sG     e57MNOeUJ/C 
 s.uj(KC
r4   r    r[   auto_kidc                 ^    |d}| j                   j                  |      }t        | ||||      S )a  Generate a ``ECKey`` with the given "crv" value.

        :param crv: ECKey curve name
        :param parameters: extra parameter in JWK
        :param private: generate a private key or public key
        :param auto_kid: add ``kid`` automatically
        rX   )rn   r   	_wrap_key)r1   r    rr   r[   rx   raw_keys         r2   generate_keyzECKey.generate_key   s5     ;C++2237gw*EEr4   secretkdf_name)r   PBKDF2kdf_optionsc           	         	 | j                   j                  |   } |       }	|	j                  j                         dz   dz  dz  }
|i }|j                  dd      }|t        j                         }|j                  dt        d	| d
|              |dk(  r;|j                  dd       t        d||
d|}|j                  t        |            }nO|dk(  r;|j                  dd       t        d||
d|}|j                  t        |            }nt        d| d      t        j!                  |d      |	j                  z  }t#        ||	      }t%        | ||||      S # t        $ r t        d| d      w xY w)a  
        Generate an elliptic curve cryptographic key derived from a secret input using a key
        derivation function (KDF). This allows the creation of deterministic elliptic curve
        keys based on given input data, curve specification, and KDF options.

        :param secret: The input secret used for key derivation
        :param crv: ECKey curve name
        :param parameters: extra parameter in JWK
        :param private: generate a private key or public key
        :param auto_kid: add ``kid`` automatically
        :param kdf_name: Key derivation function name
        :param kdf_options: Additional options for the KDF
        r6   r7   r@   rA   r   N	algorithmsaltzjoserfc:EC::r   infor4   )r   lengthr   
iterationsi zInvalid kdf value: 'bigrW   )rn   r(   KeyErrorr   group_order
bit_lengthpopr   SHA256
setdefaultr   r   deriver   
ValueErrorint
from_bytesr   rz   )r1   r}   r    rr   r[   rx   r~   r   curve_classr+   r   r   hkdfseedpbkdf2r#   r{   s                    r2   
derive_keyzECKey.derive_key   s   0	F++11#6K ##..014:Q>KOOK6	Ivx+hZq0N'OPv""63/ # D
 ;;x/0D!""<8 # F
 ==&!12D3H:Q?@@NN4'%*;*;;$Q.gw*EEG  	F&)=cU!'DEE	Fs   E E8)NN)rX   NTF)rX   NTFr   N)"rM   rN   rO   rP   r   value_registryr&   rn   propertyboolrc   r   r   rI   r	   r:   bytesrl   r/   ri   r   rp   rV   tAnyr   r   rv   rT   r|   LiteralrS   r   __classcell__)rw   s   @r2   r   r   p   sz   H GUEDI.%N.%N*E4%P	N GCD C C 2  
 4t;  
(w (5 ( CC C C - - -  ,0	UU//2HH "D( %%	
 
   "+/F']F4ZF "D(F 	F
 F 
F F&  +/06/3<F']<F<F <F "D(	<F
 <F <F )),-<F #quu*%,<F 
<F <Fr4   r1   r{   r[   rx   rr   r,   c                 x    |r | |||      }n|j                         } | |||      }|r|j                          |S r.   )rI   
ensure_kid)r1   r{   r[   rx   rr   r>   pub_keys          r2   rz   rz      sC     '7J/$$&'7J/Jr4   r.   )0typingr   	functoolsr   cryptography.hazmat.primitivesr   ,cryptography.hazmat.primitives.asymmetric.ecr   r   r   r   r	   r
   r   r   r   r   r   'cryptography.hazmat.primitives.kdf.hkdfr   )cryptography.hazmat.primitives.kdf.pbkdf2r   errorsr   r   _rfc7517.modelsr   _rfc7517.pemr   _rfc7517.typesr   r   utilr   r   r   registryr   __all__	TypedDictr/   r   r&   r3   r   rT   r   rz   rW   r4   r2   <module>r      s    % 1    9 @ B & . 2 9 9 #)AKK	 		>
# >
F 
  ) , 	  ) , 	  ) ,IFH,.DDE IFb (,	g$  	
 $ r4   