3 yá˜_& ã @ s€ d dl mZmZmZ d dlmZmZ d dlmZ d dl m Z mZmZm Z ejeƒG dd„ deƒƒZeje ƒG dd„ deƒƒZd S ) é )Úabsolute_importÚdivisionÚprint_function)Ú exceptionsÚutils)Ú serialization)ÚEd25519PrivateKeyÚEd25519PublicKeyÚ_ED25519_KEY_SIZEÚ_ED25519_SIG_SIZEc @ s, e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd S ) Ú_Ed25519PublicKeyc C s || _ || _d S )N)Ú_backendÚ _evp_pkey)ÚselfÚbackendÚevp_pkey© r ú/usr/lib64/python3.6/ed25519.pyÚ__init__ s z_Ed25519PublicKey.__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_Ed25519PublicKey.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Únewr Ú_libÚEVP_PKEY_get_raw_public_keyr Úopenssl_assertÚbuffer)r ÚbufÚbuflenÚresr r r r * s z#_Ed25519PublicKey._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&