U Ec @sddlmZddlZddlmZddlmZddlmZ m Z ddl m Z mZGdddeZGd d d eje ZGd d d eje ZdS) )OptionalN)encoding) exceptions) PrivateKey PublicKey) StringFixerrandomc@s^eZdZUdZeed<eed<eeeeddddZeeddd Z eedd d Z d S) SignedMessagezc A bytes subclass that holds a messaged that has been signed by a :class:`SigningKey`. _signature_message) signaturemessagecombinedreturncCs||}||_||_|SN)r r )clsr r robjr5/tmp/pip-target-wmutx79v/lib64/python/nacl/signing.py _from_parts#szSignedMessage._from_partsrcCs|jS)zL The signature contained within the :class:`SignedMessage`. )r selfrrrr ,szSignedMessage.signaturecCs|jS)zJ The message contained within the :class:`SignedMessage`. )r rrrrr 3szSignedMessage.messageN) __name__ __module__ __qualname____doc__bytes__annotations__ classmethodrpropertyr r rrrrr s r c@seZdZdZejfeejdddZedddZ e ddd Z e e d d d Ze e d d dZdejfeeeejedddZedddZdS) VerifyKeyz The public key counterpart to an Ed25519 SigningKey for producing digital signatures. :param key: [:class:`bytes`] Serialized Ed25519 public key :param encoder: A class that is able to decode the `key` )keyencodercCsJ||}t|tstdt|tjjkr@t dtjj||_ dS)Nz'VerifyKey must be created from 32 bytesz%The key must be exactly %s bytes long) decode isinstancerexc TypeErrorlennaclbindingsZcrypto_sign_PUBLICKEYBYTES ValueError_key)rr"r#rrr__init__Ds   zVerifyKey.__init__rcCs|jSr)r,rrrr __bytes__TszVerifyKey.__bytes__cCs tt|Srhashrrrrr__hash__WszVerifyKey.__hash__otherrcCs&t||jsdStjt|t|SNFr% __class__r)r*Z sodium_memcmprrr3rrr__eq__Zs zVerifyKey.__eq__cCs ||k Srrr7rrr__ne___szVerifyKey.__ne__N)smessager r#rcCsp|dk rVt|ts$tdtjjt|tjjkrFtdtjj|| |}n | |}tj ||j S)aS Verifies the signature of a signed message, returning the message if it has not been tampered with else raising :class:`~nacl.signing.BadSignatureError`. :param smessage: [:class:`bytes`] Either the original messaged or a signature and message concated together. :param signature: [:class:`bytes`] If an unsigned message is given for smessage then the detached signature must be provided. :param encoder: A class that is able to decode the secret message and signature. :rtype: :class:`bytes` Nz4Verification signature must be created from %d bytesz+The signature must be exactly %d bytes long) r%rr&r'r)r*crypto_sign_BYTESr(r+r$Zcrypto_sign_openr,)rr:r r#rrrverifybs   zVerifyKey.verifycCstj|j}t|S)z Converts a :class:`~nacl.signing.VerifyKey` to a :class:`~nacl.public.PublicKey` :rtype: :class:`~nacl.public.PublicKey` )r)r*Z$crypto_sign_ed25519_pk_to_curve25519r,_Curve25519_PublicKey)rZraw_pkrrrto_curve25519_public_keysz"VerifyKey.to_curve25519_public_key)rrrrr RawEncoderrEncoderr-r.intr1objectboolr8r9rr<r=r>rrrrr!;s&   )r!c@seZdZdZejfeejdddZedddZ e ddd Z e e d d d Ze e d d dZeddddZejfeejedddZedddZdS) SigningKeya Private key for producing digital signatures using the Ed25519 algorithm. Signing keys are produced from a 32-byte (256-bit) random seed value. This value can be passed into the :class:`~nacl.signing.SigningKey` as a :func:`bytes` whose length is 32. .. warning:: This **must** be protected and remain secret. Anyone who knows the value of your :class:`~nacl.signing.SigningKey` or it's seed can masquerade as you. :param seed: [:class:`bytes`] Random 32-byte value (i.e. private key) :param encoder: A class that is able to decode the seed :ivar: verify_key: [:class:`~nacl.signing.VerifyKey`] The verify (i.e. public) key that corresponds with this signing key. )seedr#cCsj||}t|tstdt|tjjkr@t dtjjtj |\}}||_ ||_ t ||_dS)Nz.SigningKey must be created from a 32 byte seedz&The seed must be exactly %d bytes long)r$r%rr&r'r(r)r*crypto_sign_SEEDBYTESr+Zcrypto_sign_seed_keypair_seed _signing_keyr!Z verify_key)rrEr#Z public_keyZ secret_keyrrrr-s  zSigningKey.__init__rcCs|jSr)rGrrrrr.szSigningKey.__bytes__cCs tt|Srr/rrrrr1szSigningKey.__hash__r2cCs&t||jsdStjt|t|Sr4r5r7rrrr8s zSigningKey.__eq__cCs ||k Srrr7rrrr9szSigningKey.__ne__cCs|ttjjtjdS)z Generates a random :class:`~nacl.signing.SigningKey` object. :rtype: :class:`~nacl.signing.SigningKey` )r#)rr)r*rFrr?)rrrrgenerates zSigningKey.generate)r r#rcCsTtj||j}tjj}||d|}|||d}||}t|||S)z Sign a message using this key. :param message: [:class:`bytes`] The data to be signed. :param encoder: A class that is used to encode the signed message. :rtype: :class:`~nacl.signing.SignedMessage` N)r)r*Z crypto_signrHr;encoder r)rr r#Z raw_signedr;r signedrrrsigns  zSigningKey.signcCs|j}tj|}t|S)z Converts a :class:`~nacl.signing.SigningKey` to a :class:`~nacl.public.PrivateKey` :rtype: :class:`~nacl.public.PrivateKey` )rHr)r*Z$crypto_sign_ed25519_sk_to_curve25519_Curve25519_PrivateKey)rskZ raw_privaterrrto_curve25519_private_keys z$SigningKey.to_curve25519_private_keyN)rrrrrr?rr@r-r.rAr1rBrCr8r9rrIr rLrMrOrrrrrDs&  rD)typingrZ nacl.bindingsr)rrr&Z nacl.publicrrMrr=Z nacl.utilsrrrr Z Encodabler!rDrrrrs   ![