U
    Á“«ji<  ã                   @  s†  d dl mZ d dlZd dlZd dlZd dlZd dlZejdk rŠd dlZej	Z	ejdk rpej
Z
ejZejZejZq¨ej
Z
ejZejZejZnej
Z
ejZejZejZej	Z	ejdk r¼edƒZnejZd dlmZ ejddd	�Ze d
¡Zejde	d�Zejdd�G dd„ dejeef ƒƒZejZejZdddœdd„Zddddœdd„Zddddœdd„Zddd d!œd"d#„Z d$d%d&œd'd(„Z!d)d*d+œd,d-„Z"d)d*d+œd.d/„Z#ejdk �râej$dd0�d)d)d+œd1d2„ƒZ%ej$dd0�d)d)d+œd3d4„ƒZ&n8ej$dd0�d)d)d+œd5d2„ƒZ%ej$dd0�d)d)d+œd6d4„ƒZ&ejdd�G d7d8„ d8eje ƒƒZ'ej(Z(ej)j*Z*ej)j+Z+ej,Z,ej-Z-ej.Z.ej/Z/ej0Z0ej1Z1ej2Z3ej4Z4dS )9é    )ÚannotationsN)é   é   )r   é	   ©r   é
   )Údeclarative_asn1ÚTT)Ú	covariantÚUÚTag)Úbound)Úfrozenc                   @  s"   e Zd ZU dZded< ded< dS )ÚVarianta  
    A tagged variant for CHOICE fields with the same underlying type.

    Use this when you have multiple CHOICE alternatives with the same type
    and need to distinguish between them:

        foo: (
            Annotated[Variant[int, typing.Literal["IntA"]], Implicit(0)]
            | Annotated[Variant[int, typing.Literal["IntB"]], Implicit(1)]
        )

    Usage:
        example = Example(foo=Variant(5, "IntA"))
        decoded.foo.value  # The int value
        decoded.foo.tag    # "IntA" or "IntB"
    r   ÚvalueÚstrÚtagN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© r   r   úA/tmp/pip-unpacked-wheel-w0_gbkxc/cryptography/hazmat/asn1/asn1.pyr   2   s   
r   ÚtypeÚbool)Ú
field_typeÚreturnc                 C  s*   t tdƒrtjtjfntjf}t| ƒ|kS )NÚ	UnionType)ÚhasattrÚtypesr   ÚtypingÚUnionÚget_type_origin)r   Zunion_typesr   r   r   Ú	_is_unionM   s
    ÿýr$   Útupler   zdeclarative_asn1.Annotation)ÚmetadataÚ
field_namer   c                 C  s²   d }d }d }| D ]�}t |tƒr>|d k	r6td|› d�ƒ‚|j}qt |tjƒrh|d k	rbtd|› d�ƒ‚|}qt |tjƒr’|d k	rŒtd|› d�ƒ‚|}qtd|› �ƒ‚qtj|||d�S )Nz-multiple DEFAULT annotations found in field 'ú'z7multiple IMPLICIT/EXPLICIT annotations found in field 'z*multiple SIZE annotations found in field 'zunsupported annotation: )ÚdefaultÚencodingÚsize)Ú
isinstanceÚDefaultÚ	TypeErrorr   r   ÚEncodingÚSizeÚ
Annotation)r&   r'   r)   r*   r+   Zraw_annotationr   r   r   Ú_extract_annotationY   s8    

ÿ
ÿ
ÿ  ÿr2   z
typing.Anyzdeclarative_asn1.AnnotatedType)r   r'   r   c                   sÄ  t | ƒtkr&t| jˆƒ}t| ƒ^} }nt ¡ }|jd k	rpt | ƒtj	t
fkrp| tjtjtttfkrptdˆ› d�ƒ‚| tkr°t|jtƒr–tdˆ› d�ƒ‚n|jd k	r°tdˆ› d�ƒ‚t| dƒrú| j}t|tjjtjjfƒsätd|› �ƒ‚t t tj|¡|¡S t| ƒ�rPt| ƒ}t|ƒdk�r˜t |k�r˜|d t!d ƒk�r>|d	 n|d }|tk�rXtd
ƒ‚t"|ˆƒ}|j# $¡ �svtdƒ‚|jd k	�rŠtdƒ‚tj %|¡}n¶t|jtƒ�r®tdƒ‚‡fdd„|D ƒ}	|	d	 j&d k	‰ t'‡ fdd„|	D ƒƒ�rîtdƒ‚ˆ �rdd„ |	D ƒ}
t|	ƒt|
ƒk�rtdƒ‚tj (|	¡}t |k�rJtj %t |t ¡ ¡¡n|}nht | ƒtj	k�r€t"t| ƒd	 ˆƒ}tj )|¡}n8t | ƒt
k�r®t"t| ƒd	 ˆƒ}tj 
|¡}n
t *| ¡}t ||¡S )Nzfield 'z­' has a SIZE annotation, but SIZE annotations are only supported for fields of types: [SEQUENCE OF, SET OF, BIT STRING, OCTET STRING, UTF8String, PrintableString, IA5String]zW' has an IMPLICIT annotation, but IMPLICIT annotations are not supported for TLV types.zT' has a DEFAULT annotation, but DEFAULT annotations are not supported for TLV types.Ú__asn1_root__zunsupported root type: é   é   r   z=optional TLV types (`TLV | None`) are not currently supportedzƒoptional (`X | None`) types cannot have `X` annotated: annotations must apply to the union (i.e: `Annotated[X | None, annotation]`)z@optional (`X | None`) types should not have a DEFAULT annotationzCCHOICE (`X | Y | ...`) types should not have an IMPLICIT annotationc                   s"   g | ]}|t d ƒk	rt|ˆ ƒ‘qS ©N)r   Ú_type_to_variant)Ú.0Úarg)r'   r   r   Ú
<listcomp>Ô   s   þz)_normalize_field_type.<locals>.<listcomp>c                 3  s   | ]}|j d k	ˆ kV  qd S r6   ©Útag_name©r8   Úv)Úare_union_types_taggedr   r   Ú	<genexpr>Ý   s   ÿz(_normalize_field_type.<locals>.<genexpr>zbWhen using `asn1.Variant` in a union, all the other types in the union must also be `asn1.Variant`c                 S  s   h | ]
}|j ’qS r   r;   r=   r   r   r   Ú	<setcomp>ç   s     z(_normalize_field_type.<locals>.<setcomp>zBWhen using `asn1.Variant` in a union, the tags used must be unique)+r#   Ú	Annotatedr2   Ú__metadata__Úget_type_argsr   r1   r+   ÚbuiltinsÚlistÚSetOfÚbytesr   Ú	BitStringÚ	IA5StringÚPrintableStringr.   ÚTLVr,   r*   ÚImplicitr)   r   r3   ÚTypeÚSequenceÚSetÚAnnotatedTyper!   Úcastr$   ÚlenÚNoneTyper   Ú_normalize_field_typeÚ
annotationZis_emptyÚOptionr<   ÚanyZChoiceZ
SequenceOfÚnon_root_python_to_rust)r   r'   rV   Ú_Z	root_typeZ
union_argsZoptional_typeÚannotated_typeZrust_field_typeÚvariantsÚtagsZrust_choice_typeÚ
inner_typer   )r?   r'   r   rU   |   sÌ    
ÿûÿþ
ÿ
ÿ

ÿ
þ ÿ
 ÿ
ÿ
ÿÿÿ
þþ
ÿÿû
 ÿÿù

 ÿ
 ÿ
rU   zdeclarative_asn1.Variant)Útr'   r   c           	      C  sÆ   t | ƒtk}|rt| ƒd n| }t |ƒtkr®t|ƒ\}}t |ƒtjk	rNtdƒ‚t|ƒd }t|dƒrl|j}n
t	 
|¡}|r�t	 |t| j|ƒ¡}nt	 |t	 ¡ ¡}t	 t||¡S t	 |t| |ƒd ¡S d S )Nr   z˜When using `asn1.Variant` in a type annotation, the second type parameter must be a `typing.Literal` type. E.g: `Variant[int, typing.Literal["MyInt"]]`.r3   )r#   rB   rD   r   r!   ÚLiteralr.   r   r3   r   rY   rQ   r2   rC   r1   rU   )	r_   r'   Zis_annotatedr^   Z
value_typeZtag_literalr<   Z	rust_typeZann_typer   r   r   r7     s6    ÿ


þþýr7   zdict[str, type]z)dict[str, declarative_asn1.AnnotatedType])Ú
raw_fieldsr   c                 C  s,   i }|   ¡ D ]\}}t||ƒ}|||< q|S r6   )ÚitemsrU   )ra   Úfieldsr'   r   Zannotated_field_typer   r   r   Ú_annotate_fields7  s
    

rd   ztype[U]ÚNone)Úclsr   c                 C  s.   t | dd�}tj | t|ƒ¡}t| d|ƒ d S ©NT)Zinclude_extrasr3   )Úget_type_hintsr   rN   rO   rd   Úsetattr©rf   ra   Úrootr   r   r   Ú_register_asn1_sequenceD  s    rl   c                 C  s.   t | dd�}tj | t|ƒ¡}t| d|ƒ d S rg   )rh   r   rN   rP   rd   ri   rj   r   r   r   Ú_register_asn1_setK  s    rm   )Zkw_only_defaultc                 C  s@   t jdkr"tjddddd�| ƒ}ntjddd�| ƒ}t|ƒ |S ©Nr   FT©ÚreprÚeqZ
match_argsZkw_only)rp   rq   )ÚsysÚversion_infoÚdataclassesÚ	dataclassrl   ©rf   Zdataclass_clsr   r   r   ÚsequenceZ  s"    
ø	÷þýrw   c                 C  s@   t jdkr"tjddddd�| ƒ}ntjddd�| ƒ}t|ƒ |S rn   )rr   rs   rt   ru   rm   rv   r   r   r   Úsetq  s"    
ø	÷þýrx   c                 C  s"   t jddddd�| ƒ}t|ƒ |S ©NFTro   )rt   ru   rl   rv   r   r   r   rw   Š  s    üûc                 C  s"   t jddddd�| ƒ}t|ƒ |S ry   )rt   ru   rm   rv   r   r   r   rx   —  s    üûc                   @  s   e Zd ZU ded< dS )r-   r   r   N)r   r   r   r   r   r   r   r   r-   ¦  s   
r-   )5Ú
__future__r   rE   rt   rr   r    r!   rs   Ztyping_extensionsZLiteralStringrh   Úget_argsrD   Ú
get_originr#   rB   r   rT   Z"cryptography.hazmat.bindings._rustr   ÚTypeVarr	   r   r   ru   ÚGenericr   Z
decode_derZ
encode_derr$   r2   rU   r7   rd   rl   rm   Zdataclass_transformrw   rx   r-   rG   r/   ZExplicitrM   r0   rK   rJ   ZUTCTimeZGeneralizedTimerI   ZTlvrL   ZNullr   r   r   r   Ú<module>   s~   





# +




