
    Dj                    x   U d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZ eez  ez  ez  e
e         z  e	eef         z  Zded<   eez  ez  Zded<   d.d/dZd0dZd1dZd Zd2dZd3dZd4dZeefeefeefeefe	efe
efgZded<   d5dZd5dZd6d Zd7d"Z d8d$Z!d9d&Z"d:d(Z#eee e!e"e#ed)Z$d;d*Z%d<d,Z&d=d-Z'dS )>z
Minimal CBOR implementation supporting a subset of functionality and types
required for FIDO 2 CTAP.

Use the :func:`encode`, :func:`decode` and :func:`decode_from` functions to encode
and decode objects to/from CBOR.
    )annotationsN)	UnionType)AnyCallableMappingSequence	TypeAliasr	   CborTypeBufferdataintmtreturnbytesc                    | dk     rd}d| z
  } |dz  }| dk    r	d|| z  f}}n9| dk    r
d|d	z  | f}}n)| d
k    r
d|dz  | f}}n| dk    r
d|dz  | f}}n	d|dz  | f}}t          j        |g|R  S )Nr            z>B   z>BB   i  z>BH   l    z>BI   z>BQ   )structpack)r   r   fmtargss       E/home/thesage/.hermes/venv/lib/python3.11/site-packages/fido2/cbor.py	_dump_intr    1   s    axxDy	qB rzz29,T	BGT?T	BGT?T			BGT?TBGT?T;s"T""""    boolc                    | rdndS )N       r   s    r   
_dump_boolr(   F   s    '77'r!   Sequence[CborType]c                ~    t          t          |           d          d                    d | D                       z   S )N   r   r!   c                ,    g | ]}t          |          S r&   encode).0xs     r   
<listcomp>z_dump_list.<locals>.<listcomp>K   s    1J1J1J&))1J1J1Jr!   )r    lenjoinr'   s    r   
_dump_listr5   J   s;    SYY1%%%1J1JT1J1J1J(K(KKKr!   c                B    | d         }|d         t          |          |fS )Nr   )r3   )entrykeys     r   
_sort_keysr9   N   s"    
(Cq63s88S  r!   Mapping[CborType, CborType]c                    d |                                  D             }|                    t                     t          t	          |          d          d                    d |D                       z   S )Nc                P    g | ]#\  }}t          |          t          |          f$S r&   r.   r0   kvs      r   r2   z_dump_dict.<locals>.<listcomp>T   s-    ===1fQii#===r!   )r8   r   r,   r!   c                    g | ]
\  }}||z   S r&   r&   r=   s      r   r2   z_dump_dict.<locals>.<listcomp>V   s     2M2M2MVa1q52M2M2Mr!   )itemssortr9   r    r3   r4   )r   rA   s     r   
_dump_dictrC   S   sj    ==

===E	JJ:JSZZA&&&2M2Mu2M2M2M)N)NNNr!   c                D    t          t          |           d          | z   S )N   r,   )r    r3   r'   s    r   _dump_bytesrF   Y   s     SYY1%%%,,r!   strc                n    |                      d          }t          t          |          d          |z   S )Nutf8   r,   )r/   r    r3   )r   
data_bytess     r   
_dump_textrL   ]   s1    V$$JS__+++j88r!   z9Sequence[tuple[type | UnionType, Callable[[Any], bytes]]]_SERIALIZERSaituple[int, bytes]c                f   | dk     r| |fS | dk    r|d         |dd          fS | dk    r%t          j        d|          d         |dd          fS | dk    r%t          j        d|          d         |d	d          fS | d
k    r%t          j        d|          d         |dd          fS t          d          )Nr   r   r   r   z>HrE   r   z>Ir+   r   z>Q   zInvalid additional information)r   unpack_from
ValueErrorrN   r   s     r   	_load_intrU   l   s    	Bww4x	rAwQRR  	r!$--a0$qrr(::	r!$--a0$qrr(::	r!$--a0$qrr(::
5
6
66r!   c                6    t          | |          \  }}d|z
  |fS )Nr   rU   )rN   r   valrests       r   
_load_nintrZ   z   s#    "d##IC8T>r!   tuple[bool, bytes]c                    | dk    |fS )N   r&   rT   s     r   
_load_boolr^      s    8T>r!   tuple[bytes, bytes]c                P    t          | |          \  }}|d |         ||d          fS NrW   )rN   r   lns      r   _load_bytesrc      s0    T""HB9d233ir!   tuple[str, bytes]c                V    t          | |          \  }}|                    d          |fS )NrI   )rc   decode)rN   r   encrY   s       r   
_load_textrh      s,    B%%IC::ft##r!    tuple[Sequence[CborType], bytes]c                    t          | |          \  }}g }t          |          D ])}t          |          \  }}|                    |           *||fS ra   )rU   rangedecode_fromappend)rN   r   rb   valuesirX   s         r   _load_arrayrp      s_    T""HBF2YY  %%	Tc4<r!   )tuple[Mapping[CborType, CborType], bytes]c                    t          | |          \  }}i }t          |          D ]+}t          |          \  }}t          |          \  }}|||<   ,||fS ra   )rU   rk   rl   )rN   r   rb   rn   ro   r>   r?   s          r   	_load_maprs      sf    T""HBF2YY  d##4d##4q		4<r!   )r   r   rE   rJ   r+   r      c                z    t           D ]"\  }}t          | |          r ||           c S #t          d|           )z#Encodes data to a CBOR byte string.zUnsupported value: )rM   
isinstancerS   )r   r>   r?   s      r   r/   r/      sT      1dA 	1T77NNN	
3433
4
44r!   tuple[Any, bytes]c                Z    | d         }t          |dz	           |dz  | dd                   S )zDecodes a CBOR-encoded value from the start of a byte string.

    Additional data after a valid CBOR object is returned as well.

    :return: The decoded object, and any remaining data.r   r      r   N)_DESERIALIZERS)r   fbs     r   rl   rl      s2     
aB"'"2<abb:::r!   c                T    t          |           \  }}|dk    rt          d          |S )zuDecodes data from a CBOR-encoded byte string.

    Also validates that no extra data follows the encoded object.
    r!   zExtraneous data)rl   rS   )r   valuerY   s      r   rf   rf      s2    
 d##KE4s{{*+++Lr!   )r   )r   r   r   r   r   r   )r   r"   r   r   )r   r)   r   r   )r   r:   r   r   )r   r   r   r   )r   rG   r   r   )rN   r   r   r   r   rO   )rN   r   r   r   r   r[   )rN   r   r   r   r   r_   )rN   r   r   r   r   rd   )rN   r   r   r   r   ri   )rN   r   r   r   r   rq   )r   r
   r   r   )r   r   r   rw   )r   r
   )(__doc__
__future__r   r   typesr   typingr   r   r   r   r	   r   r"   rG   r   r
   __annotations__	bytearray
memoryviewr   r    r(   r5   r9   rC   rF   rL   rM   rU   rZ   r^   rc   rh   rp   rs   rz   r/   rl   rf   r&   r!   r   <module>r      s  :   # " " " " "        > > > > > > > > > > > > > >Dj3&.#>cARR R R R R I%
2 2 2 2 2# # # # #*( ( ( (L L L L! ! !
O O O O- - - -9 9 9 9 
:)*[jzK    7 7 7 7   
          
$ $ $ $
        5 5 5 5; ; ; ;     r!   