o
    shd                  	   @  sP  U d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
mZ eeeeeee e	eef f Zd<d=d
dZd>ddZd?ddZdd Zd@ddZdAddZdBddZeefeefeefeefe	efeefgZded< dCd d!ZdCd"d#ZdDd%d&ZdEd(d)ZdFd+d,ZdGd.d/ZdHd1d2Z eeeeee ed3Z!dId5d6Z"dJd8d9Z#dKd:d;Z$dS )La=  
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.

DO NOT use the dump_x/load_x functions directly, these will be made private in
python-fido2 2.0.
    )annotationsN)AnyTupleUnionSequenceMappingTypeCallabledataintmtreturnbytesc                 C  s   | dk r
d}d|  } |d> }| dkrd|| B f}n+| dkr%d|d	B | f}n| d
kr1d|dB | f}n| dkr=d|dB | f}nd|dB | f}t j| S )Nr            z>B   z>BB   i  z>BH   l    z>BI   z>BQ   )structpack)r
   r   args r   E/var/www/html/env_mimamsha/lib/python3.10/site-packages/fido2/cbor.pydump_int2   s   
r   boolc                 C  s   | rdS dS )N      r   r
   r   r   r   	dump_boolE      r"   Sequence[CborType]c                 C  s$   t t| ddddd | D  S )N   r       c                 S  s   g | ]}t |qS r   encode).0xr   r   r   
<listcomp>J   s    zdump_list.<locals>.<listcomp>)r   lenjoinr!   r   r   r   	dump_listI   s   $r/   c                 C  s   | d }|d t ||fS )Nr   )r-   )entrykeyr   r   r   
_sort_keysM   s   r2   Mapping[CborType, CborType]c                 C  sB   dd |   D }|jtd tt|ddddd |D  S )Nc                 S  s    g | ]\}}t |t |fqS r   r(   r*   kvr   r   r   r,   S   s     zdump_dict.<locals>.<listcomp>)r1   r   r&   r'   c                 S  s   g | ]\}}|| qS r   r   r4   r   r   r   r,   U   s    )itemssortr2   r   r-   r.   )r
   r7   r   r   r   	dump_dictR   s   $r9   c                 C  s   t t| dd|  S )N   r&   )r   r-   r!   r   r   r   
dump_bytesX   s   r;   strc                 C  s   |  d}tt|dd| S )Nutf8   r&   )r)   r   r-   )r
   
data_bytesr   r   r   	dump_text\   s   
r@   z-Sequence[Tuple[Type, Callable[[Any], bytes]]]_SERIALIZERSaiTuple[int, bytes]c                 C  s   | dk r| |fS | dkr|d |dd  fS | dkr(t d|d |dd  fS | dkr:t d|d |d	d  fS | d
krLt d|d |dd  fS td)Nr   r   r   r   z>Hr:   r   z>Ir%   r   z>Q   zInvalid additional information)r   unpack_from
ValueErrorrB   r
   r   r   r   load_intk   s   rH   c                 C  s   t | |\}}d| |fS )Nr   rH   )rB   r
   valrestr   r   r   	load_ninty   s   rL   Tuple[bool, bytes]c                 C  s   | dk|fS )N   r   rG   r   r   r   	load_bool~   r#   rO   Tuple[bytes, bytes]c                 C  s&   t | |\}}|d | ||d  fS NrI   )rB   r
   lr   r   r   
load_bytes   s   rS   Tuple[str, bytes]c                 C  s   t | |\}}|d|fS )Nr=   )rS   decode)rB   r
   encrK   r   r   r   	load_text   s   rW    Tuple[Sequence[CborType], bytes]c                 C  s>   t | |\}}g }t|D ]}t|\}}|| q||fS rQ   )rH   rangedecode_fromappend)rB   r
   rR   valuesirJ   r   r   r   
load_array   s   r^   )Tuple[Mapping[CborType, CborType], bytes]c                 C  sH   t | |\}}i }t|D ]}t|\}}t|\}}|||< q||fS rQ   )rH   rY   rZ   )rB   r
   rR   r\   r]   r5   r6   r   r   r   load_map   s   
r`   )r   r   r:   r>   r%   r      CborTypec                 C  s2   t D ]\}}t| |r||   S qtd| )z#Encodes data to a CBOR byte string.zUnsupported value: )rA   
isinstancerF   )r
   r5   r6   r   r   r   r)      s
   
r)   Tuple[Any, bytes]c                 C  s&   | d }t |d?  |d@ | 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
   fbr   r   r   rZ      s   rZ   c                 C  s    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)rZ   rF   )r
   valuerK   r   r   r   rU      s   rU   )r   )r
   r   r   r   r   r   )r
   r   r   r   )r
   r$   r   r   )r
   r3   r   r   )r
   r   r   r   )r
   r<   r   r   )rB   r   r
   r   r   rC   )rB   r   r
   r   r   rM   )rB   r   r
   r   r   rP   )rB   r   r
   r   r   rT   )rB   r   r
   r   r   rX   )rB   r   r
   r   r   r_   )r
   rb   r   r   )r
   r   r   rd   )r   rb   )%__doc__
__future__r   r   typingr   r   r   r   r   r   r	   r   r   r<   r   rb   r   r"   r/   r2   r9   r;   r@   rA   __annotations__rH   rL   rO   rS   rW   r^   r`   rf   r)   rZ   rU   r   r   r   r   <module>   sJ   $ 












	


