3 yá˜_ú ã @ s€ d dl mZmZmZ d dlmZmZ d dlmZ d dl m Z mZ dZdZ ejeƒG dd„ deƒƒZeje ƒG d d „ d eƒƒZdS )é )Úabsolute_importÚdivisionÚprint_function)Ú exceptionsÚutils)Ú serialization)ÚEd448PrivateKeyÚEd448PublicKeyé9 ér c @ s, e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd S ) Ú_Ed448PublicKeyc C s || _ || _d S )N)Ú_backendÚ _evp_pkey)ÚselfÚbackendÚevp_pkey© r ú/usr/lib64/python3.6/ed448.pyÚ__init__ s z_Ed448PublicKey.__init__c C sV |t jjks|t jjkr@|t jjk s0|t jjk r8tdƒ‚| jƒ S | jj||| | jd ƒS )Nz3When using Raw both encoding and format must be Raw) r ÚEncodingÚRawÚPublicFormatÚ ValueErrorÚ_raw_public_bytesr Z_public_key_bytesr )r ÚencodingÚformatr r r Úpublic_bytes s z_Ed448PublicKey.public_bytesc C sp | j jjdtƒ}| j jjdtƒ}| j jj| j||ƒ}| j j|dkƒ | j j|d tkƒ | j jj|tƒd d … S )Nzunsigned char []zsize_t *é r ) r Ú_ffiÚnewÚ_ED448_KEY_SIZEÚ_libÚEVP_PKEY_get_raw_public_keyr Úopenssl_assertÚbuffer)r ÚbufÚbuflenÚresr r r r + s z!_Ed448PublicKey._raw_public_bytesc C s¬ | j jjƒ }| j j|| j jjkƒ | j jj|| j jjƒ}| j jj|| j jj| j jj| j jj| j ƒ}| j j|dkƒ | j jj ||t|ƒ|t|ƒƒ}|dkr¨| j jƒ t j‚d S )Nr )r r! ÚCryptography_EVP_MD_CTX_newr# r ÚNULLÚgcÚCryptography_EVP_MD_CTX_freeZEVP_DigestVerifyInitr ZEVP_DigestVerifyÚlenZ_consume_errorsr ZInvalidSignature)r Z signatureÚdataÚ evp_md_ctxr' r r r Úverify5 s z_Ed448PublicKey.verifyN)Ú__name__Ú __module__Ú__qualname__r r r r/ r r r r r s r c @ s4 e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd d „ ZdS )Ú_Ed448PrivateKeyc C s || _ || _d S )N)r r )r r r r r r r M s z_Ed448PrivateKey.__init__c C sz | j jjdtƒ}| j jjdtƒ}| j jj| j||ƒ}| j j|dkƒ | j j|d tkƒ | j jj|ƒd d … }| j j |ƒS )Nzunsigned char []zsize_t *r r ) r r r r r! r" r r# r$ Zed448_load_public_bytes)r r% r&