+
     h0  c                  s   ^ RI Ht ^ RIHtHtHtHtHt ^ RIH	t	 ^ RI
HtHt ^ RIHtHtHtHtHt ^RIHtHt ]'       d   ^ RIHt  ! R R	]4      t]! R
]R7      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t  ! R R] 4      t! ! R R]4      t" ! R R]4      t# ! R R]4      t$ ! R  R!]$4      t% ! R" R#]4      t& ! R$ R%]4      t' ! R& R']4      t(R(# ))i    )annotations)TYPE_CHECKINGAnyMappingSequenceTypeVar)default_backend)hashesserialization)eced448ed25519paddingrsa)	bytes2int	int2bytes)PublicKeyTypesc                  s    ] tR t^+t$ RtRtR]R&   R R lt]R R l4       t	]
R	 R
 l4       t]
R R l4       t]
R R l4       t]
R R l4       tRtR# )CoseKeyzlA COSE formatted public key.

:param _: The COSE key paramters.
:cvar ALGORITHM: COSE algorithm identifier.
Nint	ALGORITHMc               s$    V ^8  d   QhRRRRRR/# )   messageZbytes	signaturereturnZNone Zformat   "//usr/lib/python3.14/site-packages/fido2/cose.py__annotate__CoseKey.__annotate__4   s&     K Ke K K$ K    c                    \        R4      h)zValidates a digital signature over a given message.

:param message: The message which was signed.
:param signature: The signature to check.
z%Signature verification not supported.ZNotImplementedErrorZselfr   r      &&&r   verifyZCoseKey.verify4   s     ""IJJr   c               s$    V ^8  d   QhRRRRRR/# )r   clsztype[T_CoseKey]
public_keyr   r   	T_CoseKeyr   r   r   r   r   r   =   s)     O OO*8O	Or   c                r   )zConverts a PublicKey object from Cryptography into a COSE key.

:param public_key: Either an EC or RSA public key.
:return: A CoseKey.
z)Creation from cryptography not supported.r    r$   r%      &&r   from_cryptography_keyZCoseKey.from_cryptography_key<   s     ""MNNr   c                    V ^8  d   QhRRRR/# )r   algr   r   type[CoseKey]r   r   r   r   r   r   H   s     8 8S 8] 8r   c                sN   a a R V V3R lloS! \         4      ;'       g    \        # )Get a subclass of CoseKey corresponding to an algorithm identifier.

:param alg: The COSE identifier of the algorithm.
:return: A CoseKey.
c               r*   r   base_clsr,   r   ztype[CoseKey] | Noner   r   r   r   r   Z%CoseKey.for_alg.<locals>.__annotate__O        	 	M 	6J 	r   c                s   < V P                  4        F,  pVP                  S8X  d   Vu # S! V4      pV'       g   K*  Vu # 	  R # N)__subclasses__r   )r/   r$   	subresultr+   find_subclass   &  r   r4   Z&CoseKey.for_alg.<locals>.find_subclassO   sA    ..0==C'J)#.	9$$ 1 r   r   UnsupportedKey)r+   r4      f@r   for_algZCoseKey.for_algG   "    	 	 W%777r   c               r*   )r   nameZstrr   r,   r   r   r   r   r   r   [   s     8 8s 8} 8r   c                sN   a a R VV 3R lloS! \         4      ;'       g    \        # )r-   c               r*   r.   r   r   r   r   r   Z&CoseKey.for_name.<locals>.__annotate__b   r0   r   c                s   < V P                  4        F,  pVP                  S8X  d   Vu # S! V4      pV'       g   K*  Vu # 	  R # r1   )r2   __name__)r/   r$   r3   r4   r;   r5   r   r4   Z'CoseKey.for_name.<locals>.find_subclassb   sA    ..0<<4'J)#.	9$$ 1 r   r6   )r;   r4   r8   r   for_nameZCoseKey.for_nameZ   r:   r   c               r*   )r   cosezMapping[int, Any]r   r   r   r   r   r   r   r   n   s     * *% *' *r   c                s    V P                  ^4      pV'       g   \        R4      h\        P                  V4      ! V 4      # )zCreate a CoseKey from a dictz%COSE alg identifier must be provided.)Zget
ValueErrorr   r9   )r>   r+   s   & r   parseZCoseKey.parsem   s4     hhqkDEEs#D))r   c               s    V ^8  d   QhRR/# )r   r   zSequence[int]r   r   r   r   r   r   v   s     / /- /r   c                 s    \         \        \        \        \        \
        \        .p V  Uu. uF  qP                  NK  	  up# u upi )z1Get a list of all supported algorithm identifiers)ES256EdDSAES384ES512PS256RS256ES256Kr   )Zalgsr$   s     r   supported_algorithmsZCoseKey.supported_algorithmsu   s<     )
 *..#...s   Ar   )r<   
__module____qualname____firstlineno____doc__r   Z__annotations__r#   classmethodr)   Zstaticmethodr9   r=   r@   rH   __static_attributes__r   r   r   r   r   +   s     IsK O O 8 8$ 8 8$ * * / /r   r   r&   )Zboundc                  s    ] tR t^tRtRtR# )r7   z)A COSE key with an unsupported algorithm.r   N)r<   rI   rJ   rK   rL   rN   r   r   r   r7   r7      s    3r   r7   c                  sb    ] tR t^tRt]P                  ! 4       tR t]	R 4       t
]	R 4       tRtR# )rA   c                	sX   V R,          ^8w  d   \        R4      h\        P                  ! \        V R,          4      \        V R,          4      \        P                  ! 4       4      P                  \        4       4      P                  W!\        P                  ! V P                  4      4       R#    Unsupported elliptic curveN)
r?   r	   EllipticCurvePublicNumbersr   Z	SECP256R1r%   r   r#   ECDSA	_HASH_ALGr!   r"   r   r#   ZES256.verify   n    8q=9::
%%d2h48!4blln	

*_&
' 8)
r   c                	s    VP                  4       pV ! ^^^V P                  R^R\        VP                  ^ 4      R\        VP                  ^ 4      /4      # rP   rR   rS   rT   public_numbersr   r   ZxZyr$   r%   Zpn   && r   r)   ZES256.from_cryptography_key   W     &&(13==AIbddB'IbddB'
 	
r   c                sV    V ! ^^^V P                   R^RVR,          RVR,          /4      # )zCreates an ES256 key from a CTAP1 formatted public key byte string.

:param data: A 65 byte SECP256R1 public key.
:return: A ES256 key.
:rP   !   N:r_   iA   NrR   rS   rT   )r   )r$   Zdatar(   r   
from_ctap1ZES256.from_ctap1   s0     Aq!S]]B2tDz2tE{STTr   r   Ni)r<   rI   rJ   rK   r   r   SHA256rW   r#   rM   r)   r`   rN   r   r   r   rA   rA      sA    II
 
 
 U Ur   rA   c                  s    ] tR t^tRtRtR# )ESP256r   Nir<   rI   rJ   rK   r   rN   r   r   r   rb   rb      s    Ir   rb   c                  sR    ] tR t^tRt]P                  ! 4       tR t]	R 4       t
RtR# )rC   c                	sX   V R,          ^8w  d   \        R4      h\        P                  ! \        V R,          4      \        V R,          4      \        P                  ! 4       4      P                  \        4       4      P                  W!\        P                  ! V P                  4      4       R# rO   )
r?   r	   rU   r   Z	SECP384R1r%   r   r#   rV   rW   r!   r"   r   r#   ZES384.verify   rX   r   c                	s    VP                  4       pV ! ^^^V P                  R^R\        VP                  ^04      R\        VP                  ^04      /4      # rY   rZ   r\   r]   r   r)   ZES384.from_cryptography_key   r^   r   r   Ni)r<   rI   rJ   rK   r   r   ZSHA384rW   r#   rM   r)   rN   r   r   r   rC   rC      +    II
 
 
r   rC   c                  s    ] tR t^tRtRtR# )ESP384r   Nirc   r   r   r   re   re          Ir   re   c                  sR    ] tR t^tRt]P                  ! 4       tR t]	R 4       t
RtR# )rD   c                	sX   V R,          ^8w  d   \        R4      h\        P                  ! \        V R,          4      \        V R,          4      \        P                  ! 4       4      P                  \        4       4      P                  W!\        P                  ! V P                  4      4       R# rO   )
r?   r	   rU   r   Z	SECP521R1r%   r   r#   rV   rW   r!   r"   r   r#   ZES512.verify   rX   r   c                	s    VP                  4       pV ! ^^^V P                  R^R\        VP                  ^B4      R\        VP                  ^B4      /4      # rY   rZ   r\   r]   r   r)   ZES512.from_cryptography_key   r^   r   r   Ni)r<   rI   rJ   rK   r   r   ZSHA512rW   r#   rM   r)   rN   r   r   r   rD   rD      rd   r   rD   c                  s    ] tR t^tRtRtR# )ESP512r   Nirc   r   r   r   rg   rg      rf   r   rg   c                  sR    ] tR t^tRt]P                  ! 4       tR t]	R 4       t
RtR# )rF   c                	    \         P                  ! \        V R,          4      \        V R,          4      4      P                  \	        4       4      P                  W!\        P                  ! 4       V P                  4       R# r   NrS   rR   	r   RSAPublicNumbersr   r%   r   r#   r   ZPKCS1v15rW   r!   r"   r   r#   ZRS256.verify   P    YtBx0)DH2EFQQ	

&W%5%5%7
Hr   c                	    VP                  4       pV ! ^^^V P                  R\        VP                  4      R\        VP                  4      /4      # rP   rR   rS   r[   r   r   ZnZer\   r]   r   r)   ZRS256.from_cryptography_key   B     &&(Aq!S]]B	"$$Yrtt_UVVr   r   Nir<   rI   rJ   rK   r   r   ra   rW   r#   rM   r)   rN   r   r   r   rF   rF      s.    III
 W Wr   rF   c                  R    ] tR tRtRt]P                  ! 4       tR t]	R 4       t
RtR# )rE   i  c           	     	sr   \         P                  ! \        V R,          4      \        V R,          4      4      P                  \	        4       4      P                  VV\        P                  ! \        P                  ! V P                  4      \        P                  P                  R7      V P                  4       R# )r   )ZmgfZsalt_lengthNrS   rR   )r   rk   r   r%   r   r#   r   ZPSSZMGF1rW   Z
MAX_LENGTHr!   r"   r   r#   ZPS256.verify  sv    YtBx0)DH2EFQQ	

&KKLL0gkk>T>T NN
r   c                	rm   rn   ro   r\   r]   r   r)   ZPS256.from_cryptography_key  rp   r   r   Nirq   r   r   r   rE   rE     s-    II

 W Wr   rE   c                  0    ] tR tRtRtR t]R 4       tRtR# )rB   i  c                	s    V R,          ^8w  d   \        R4      h\        P                  P                  V R,          4      P	                  W!4       R# rP   rQ   NrR   rS   )r?   r   ZEd25519PublicKeyfrom_public_bytesr#   r!   r"   r   r#   ZEdDSA.verify!  s<    8q=9::  2248<CCIWr   c                	s    V ! ^^^V P                   R^RVP                  \        P                  P                  \        P
                  P                  4      /4      # rn   r   Zpublic_bytesr   ZEncodingZRawZPublicFormatr'   r(   r   r)   ZEdDSA.from_cryptography_key&  V     13==AJ++!**..0J0J0N0N		
 		
r   r   Ni	r<   rI   rJ   rK   r   r#   rM   r)   rN   r   r   r   rB   rB     s!    IX
 
 
r   rB   c                  s    ] tR tRtRtRtR# )Ed25519i5  r   Nirc   r   r   r   ry   ry   5  rf   r   ry   c                  rs   )Ed448i:  c                	s    V R,          ^8w  d   \        R4      h\        P                  P                  V R,          4      P	                  W!4       R# rt   )r?   r
   ZEd448PublicKeyru   r#   r!   r"   r   r#   ZEd448.verify>  s<    8q=9::..tBx8??	Sr   c                	s    V ! ^^^V P                   R^RVP                  \        P                  P                  \        P
                  P                  4      /4      # rn   rv   r'   r(   r   r)   ZEd448.from_cryptography_keyC  rw   r   r   Nirx   r   r   r   rz   rz   :  s!    IT
 
 
r   rz   c                  rr   )RS1iR  c                	rh   ri   rj   r!   r"   r   r#   Z
RS1.verifyV  rl   r   c                	rm   rn   ro   r\   r]   r   r)   ZRS1.from_cryptography_key[  rp   r   r   Ni )r<   rI   rJ   rK   r   r   ZSHA1rW   r#   rM   r)   rN   r   r   r   r{   r{   R  s.    III
 W Wr   r{   c                  rr   )rG   ib  c                	sX   V R,          ^8w  d   \        R4      h\        P                  ! \        V R,          4      \        V R,          4      \        P                  ! 4       4      P                  \        4       4      P                  W!\        P                  ! V P                  4      4       R# rO   )
r?   r	   rU   r   Z	SECP256K1r%   r   r#   rV   rW   r!   r"   r   r#   ZES256K.verifyf  rX   r   c                	s    VP                  4       pV ! ^^^V P                  R^R\        VP                  ^ 4      R\        VP                  ^ 4      /4      # rY   rZ   r\   r]   r   r)   ZES256K.from_cryptography_keyo  r^   r   r   Nirq   r   r   r   rG   rG   b  rd   r   rG   N))Z
__future__r    Ztypingr   r   r   r   r   Zcryptography.hazmat.backendsr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr	   r
   r   r   r   Zutilsr   r   Z/cryptography.hazmat.primitives.asymmetric.typesr   Zdictr   r&   r7   rA   rb   rC   re   rD   rg   rF   rE   rB   ry   rz   r{   rG   r   r   r   <module>r|      s   8 # A A 8 @ V V 'NV/d V/r Kw/	4W 4"UG "UJU 

G 
8U 

G 
8U 
WG W WG W.
G 
.e 

G 
0W' W 
W 
r   