a
    ‘dbê/  ã                   @   s   d dl mZ d dlmZ ddlmZmZmZ ddlm	Z	m
Z
mZ ddlmZ g d¢ZdZd	ZG d
d„ deƒZG dd„ dƒZedejejddƒZedejejddƒZedejejddƒZedejejddƒZedej ej!ddƒZ"edej#ej$ddƒZ%ed ej&ej'd!d"ƒZ(ed#ej)ej*d$d%ƒZ+ed&ej,ej-d'd(ƒZ.ed)ej/ej0d*d+ƒZ1ed,ej2ej3d-d.ƒZ4ed/ej5ej6d0d1ƒZ7ed2ej8ej9d3d4ƒZ:ed5ej;ej<d6d7ƒZ=ed8ej>ej?d9d:ƒZ@ed;ejAejBd<d=ƒZCed>ejDejEd?d@ƒZFe"e%e(e+e.e1e4e7e:e=e@eCeFeeeegZGdAdB„ ZHdCS )Dé    )Údivision)ÚPY2é   )ÚderÚecdsaÚellipticcurve)ÚorderlenÚnumber_to_stringÚstring_to_number)Únormalise_bytes)ÚUnknownCurveErrorr   ÚCurveÚ	SECP112r1Ú	SECP112r2Ú	SECP128r1Ú	SECP160r1ÚNIST192pÚNIST224pÚNIST256pÚNIST384pÚNIST521pÚcurvesÚ
find_curveÚ	SECP256k1ÚBRAINPOOLP160r1ÚBRAINPOOLP192r1ÚBRAINPOOLP224r1ÚBRAINPOOLP256r1ÚBRAINPOOLP320r1ÚBRAINPOOLP384r1ÚBRAINPOOLP512r1ÚPRIME_FIELD_OIDÚCHARACTERISTIC_TWO_FIELD_OID)r   é   éH  é='  r   r   )r   r#   r$   r%   r   r#   c                   @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r)   r)   ú]/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python3.9/site-packages/ecdsa/curves.pyr   +   s   r   c                   @   s^   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zddd„Zddd„Ze	ddd„ƒZ
eddd„ƒZdS )r   Nc                 C   sf   || _ || _|| _|| _| ¡ | _t| jƒ| _dt| ¡ ƒ | _d| j | _	|| _
|rbtj|Ž | _d S )Nr#   )ÚnameÚopenssl_nameÚcurveÚ	generatorÚorderr   ZbaselenÚpZverifying_key_lengthZsignature_lengthÚoidr   Ú
encode_oidZencoded_oid)Úselfr+   r-   r.   r1   r,   r)   r)   r*   Ú__init__0   s    
zCurve.__init__c                 C   s&   t |tƒr"| j|jko | j|jkS tS ©N)Ú
isinstancer   r-   r.   ÚNotImplemented©r3   Úotherr)   r)   r*   Ú__eq__=   s    
ÿzCurve.__eq__c                 C   s
   | |k S r5   r)   r8   r)   r)   r*   Ú__ne__D   s    zCurve.__ne__c                 C   s   | j S r5   ©r+   )r3   r)   r)   r*   Ú__repr__G   s    zCurve.__repr__Úuncompressedc                 C   sü   |du r| j rd}nd}|dkr:| j s.tdƒ‚tj| j Ž S | j ¡ }t d¡}t tjtŽ t |¡¡}t t 	t
| j ¡ | |ƒ¡t 	t
| j ¡ | |ƒ¡¡}t 	| j |¡¡}t | j ¡ ¡}|||||g}	| j ¡ ròt | j ¡ ¡}
|	 |
¡ tj|	Ž S )aõ  Serialise the curve parameters to binary string.

        :param str encoding: the format to save the curve parameters in.
            Default is ``named_curve``, with fallback being the ``explicit``
            if the OID is not set for the curve.
        :param str point_encoding: the point encoding of the generator when
            explicit curve encoding is used. Ignored for ``named_curve``
            format.

        :return: DER encoded ECParameters structure
        :rtype: bytes
        NÚnamed_curveÚexplicitzJCan't encode curve using named_curve encoding without associated curve OIDr   )r1   r   r   r2   r-   r0   Zencode_integerZencode_sequencer!   Zencode_octet_stringr	   ÚaÚbr.   Úto_bytesr/   ÚcofactorÚappend)r3   ÚencodingÚpoint_encodingZcurve_pÚversionÚfield_idr-   Úbaser/   Zseq_elementsrD   r)   r)   r*   Úto_derJ   s<    ÿ

ÿÿÿü

zCurve.to_derc                 C   s   t  |  ||¡d¡S )a  
        Serialise the curve parameters to the :term:`PEM` format.

        :param str encoding: the format to save the curve parameters in.
            Default is ``named_curve``, with fallback being the ``explicit``
            if the OID is not set for the curve.
        :param str point_encoding: the point encoding of the generator when
            explicit curve encoding is used. Ignored for ``named_curve``
            format.

        :return: PEM encoded ECParameters structure
        :rtype: str
        zEC PARAMETERS)r   ZtopemrK   )r3   rF   rG   r)   r)   r*   Úto_pem|   s    ÿzCurve.to_pemc                 C   sä  |st dƒ}tdd„ |D ƒƒs&tdƒ‚t| ƒ} t | ¡snd|vrJt d¡‚t | ¡\}}|rft d¡‚t|ƒS d|vr€t d	¡‚t 	| ¡\}}|rœt d
¡‚t 
|¡\}}|dkr¼t d¡‚t 	|¡\}}t 	|¡\}}t |¡\}	}t 
|¡\}
}d}|rt 
|¡\}}t |¡\}}|tkr,tdƒ‚|tkrDtd |¡ƒ‚t 
|¡\}}|rbt d¡‚t |¡\}}t |¡\}}t|ƒ}t|ƒ}t ||||¡}tjj||	d|
dd}td||dƒ}tD ]}||krÆ|  S qÆ|S )a—  Decode the curve parameters from DER file.

        :param data: the binary string to decode the parameters from
        :type data: :term:`bytes-like object`
        :param valid_encodings: set of names of allowed encodings, by default
            all (set by passing ``None``), supported ones are ``named_curve``
            and ``explicit``
        :type valid_encodings: :term:`set-like object`
        ©r?   r@   c                 s   s   | ]}|d v V  qdS )rM   Nr)   )Ú.0Úir)   r)   r*   Ú	<genexpr>›   ó    z!Curve.from_der.<locals>.<genexpr>z1Only named_curve and explicit encodings supportedr?   z(named_curve curve parameters not allowedzUnexpected data after OIDr@   z%explicit curve parameters not allowedz,Unexpected data after ECParameters structurer   z!Unknown parameter encoding formatNz#Characteristic 2 curves unsupportedzUnknown field type: {0}z:Unexpected data after ECParameters.fieldID.Prime-p element)r>   Ú
compressedZhybridT)Úvalid_encodingsr/   r.   Úunknown)ÚsetÚallÚ
ValueErrorr   r   Zis_sequenceÚUnexpectedDERZremove_objectr   Zremove_sequenceZremove_integerZremove_octet_stringr"   r   r!   Úformatr
   r   ZCurveFpZPointJacobiÚ
from_bytesr   r   )ÚdatarS   r1   ÚemptyÚseqrH   ÚrestrI   r-   Z
base_bytesr/   rD   Ú_Z
field_typeÚprimeZcurve_a_bytesZcurve_b_bytesZcurve_aZcurve_bZcurve_fprJ   Z	tmp_curverO   r)   r)   r*   Úfrom_derŽ   s|    ÿ
ÿ

ÿ


ÿÿû
zCurve.from_derc                 C   sL   t st|tƒr| ¡ }| d¡}|dkr2t d¡‚|  t ||d… ¡|¡S )am  Decode the curve parameters from PEM file.

        :param str string: the text string to decode the parameters from
        :param valid_encodings: set of names of allowed encodings, by default
            all (set by passing ``None``), supported ones are ``named_curve``
            and ``explicit``
        :type valid_encodings: :term:`set-like object`
        s   -----BEGIN EC PARAMETERS-----éÿÿÿÿz"EC PARAMETERS PEM header not foundN)	r   r6   ÚstrÚencodeÚfindr   rX   ra   Zunpem)ÚclsÚstringrS   Zec_param_indexr)   r)   r*   Úfrom_pemê   s    


ÿzCurve.from_pem)N)Nr>   )Nr>   )N)N)r&   r'   r(   r4   r:   r;   r=   rK   rL   Ústaticmethodra   Úclassmethodrh   r)   r)   r)   r*   r   /   s   

2
[r   r   )r   é   é„   r   é   Z	secp112r1r   )r   rk   rl   r   é   Z	secp112r2r   )r   rk   rl   r   é   Z	secp128r1r   )r   rk   rl   r   é   Z	secp160r1r   )r   r#   r$   r%   rk   r   r   Z
prime192v1r   )r   rk   rl   r   é!   Z	secp224r1r   )r   r#   r$   r%   rk   r   rn   Z
prime256v1r   )r   rk   rl   r   é"   Z	secp384r1r   )r   rk   rl   r   é#   Z	secp521r1r   )r   rk   rl   r   é
   Z	secp256k1r   )
r   rk   é$   rk   rk   r#   rp   r   r   r   ZbrainpoolP160r1r   )
r   rk   ru   rk   rk   r#   rp   r   r   rk   ZbrainpoolP192r1r   )
r   rk   ru   rk   rk   r#   rp   r   r   é   ZbrainpoolP224r1r   )
r   rk   ru   rk   rk   r#   rp   r   r   rn   ZbrainpoolP256r1r   )
r   rk   ru   rk   rk   r#   rp   r   r   é	   ZbrainpoolP320r1r   )
r   rk   ru   rk   rk   r#   rp   r   r   é   ZbrainpoolP384r1r    )
r   rk   ru   rk   rk   r#   rp   r   r   é   ZbrainpoolP512r1c                 C   s:   t D ]}|j| kr|  S qtd| dd„ t D ƒf ƒ‚d S )NzDI don't know about the curve with oid %s.I only know about these: %sc                 S   s   g | ]
}|j ‘qS r)   r<   )rN   Úcr)   r)   r*   Ú
<listcomp>·  rQ   zfind_curve.<locals>.<listcomp>)r   r1   r   )Z	oid_curverz   r)   r)   r*   r   ±  s    

ÿÿr   N)IÚ
__future__r   Úsixr   Ú r   r   r   Úutilr   r	   r
   Z_compatr   Ú__all__r!   r"   Ú	Exceptionr   r   Zcurve_112r1Zgenerator_112r1r   Zcurve_112r2Zgenerator_112r2r   Zcurve_128r1Zgenerator_128r1r   Zcurve_160r1Zgenerator_160r1r   Z	curve_192Zgenerator_192r   Z	curve_224Zgenerator_224r   Z	curve_256Zgenerator_256r   Z	curve_384Zgenerator_384r   Z	curve_521Zgenerator_521r   Zcurve_secp256k1Zgenerator_secp256k1r   Zcurve_brainpoolp160r1Zgenerator_brainpoolp160r1r   Zcurve_brainpoolp192r1Zgenerator_brainpoolp192r1r   Zcurve_brainpoolp224r1Zgenerator_brainpoolp224r1r   Zcurve_brainpoolp256r1Zgenerator_brainpoolp256r1r   Zcurve_brainpoolp320r1Zgenerator_brainpoolp320r1r   Zcurve_brainpoolp384r1Zgenerator_brainpoolp384r1r   Zcurve_brainpoolp512r1Zgenerator_brainpoolp512r1r    r   r   r)   r)   r)   r*   Ú<module>   s(   Sû	û	û	û
û	û	û	û	û	û	û	û	û	û	û	û	ûï