diff --git a/src/nacl/c/crypto_sign.py b/src/nacl/c/crypto_sign.py index 7286de062889e0743feecb5e4c730af91df49397..ba6a881e6d8d3b89538e4693b44274568b1ee5e9 100644 --- a/src/nacl/c/crypto_sign.py +++ b/src/nacl/c/crypto_sign.py @@ -26,51 +26,51 @@ crypto_sign_SECRETKEYBYTES = lib.crypto_sign_secretkeybytes() def crypto_sign_keypair(): """ - Returns a randomly generated secret key and public key. + Returns a randomly generated public key and secret key. - :rtype: (bytes(secret_key), bytes(public_key)) + :rtype: (bytes(public_key), bytes(secret_key)) """ - sk = lib.ffi.new("unsigned char[]", crypto_sign_SECRETKEYBYTES) pk = lib.ffi.new("unsigned char[]", crypto_sign_PUBLICKEYBYTES) + sk = lib.ffi.new("unsigned char[]", crypto_sign_SECRETKEYBYTES) if lib.crypto_sign_keypair(pk, sk) != 0: raise CryptoError("An error occurred while generating keypairs") return ( - lib.ffi.buffer(sk, crypto_sign_SECRETKEYBYTES)[:], lib.ffi.buffer(pk, crypto_sign_PUBLICKEYBYTES)[:], + lib.ffi.buffer(sk, crypto_sign_SECRETKEYBYTES)[:], ) def crypto_sign_seed_keypair(seed): """ - Computes and returns the secret key and public key using the seed ``seed``. + Computes and returns the public key and secret key using the seed ``seed``. :param seed: bytes - :rtype: (bytes(secret_key), bytes(public_key)) + :rtype: (bytes(public_key), bytes(secret_key)) """ if len(seed) != crypto_sign_SEEDBYTES: raise ValueError("Invalid seed") - sk = lib.ffi.new("unsigned char[]", crypto_sign_SECRETKEYBYTES) pk = lib.ffi.new("unsigned char[]", crypto_sign_PUBLICKEYBYTES) + sk = lib.ffi.new("unsigned char[]", crypto_sign_SECRETKEYBYTES) if lib.crypto_sign_seed_keypair(pk, sk, seed) != 0: raise CryptoError("An error occured while generating keypairs") return ( - lib.ffi.buffer(sk, crypto_sign_SECRETKEYBYTES)[:], lib.ffi.buffer(pk, crypto_sign_PUBLICKEYBYTES)[:], + lib.ffi.buffer(sk, crypto_sign_SECRETKEYBYTES)[:], ) -def crypto_sign(sk, message): +def crypto_sign(message, sk): """ Signs the message ``message`` using the secret key ``sk`` and returns the signed message. - :param sk: bytes :param message: bytes + :param sk: bytes :rtype: bytes """ signed = lib.ffi.new("unsigned char[]", len(message) + crypto_sign_BYTES) @@ -82,13 +82,13 @@ def crypto_sign(sk, message): return lib.ffi.buffer(signed, signed_len[0])[:] -def crypto_sign_open(pk, signed): +def crypto_sign_open(signed, pk): """ Verifies the signature of the signed message ``signed`` using the public key ``pkg`` and returns the unsigned message. - :param pk: bytes :param signed: bytes + :param pk: bytes :rtype: bytes """ message = lib.ffi.new("unsigned char[]", len(signed)) diff --git a/src/nacl/signing.py b/src/nacl/signing.py index ddc027b43146e62c187868ebc9725d1205ec6304..e9f05deec3bc32057a722997244c45ac6b0488f6 100644 --- a/src/nacl/signing.py +++ b/src/nacl/signing.py @@ -96,7 +96,7 @@ class VerifyKey(encoding.Encodable, StringFixer, object): # Decode the signed message smessage = encoder.decode(smessage) - return nacl.c.crypto_sign_open(self._key, smessage) + return nacl.c.crypto_sign_open(smessage, self._key) class SigningKey(encoding.Encodable, StringFixer, object): @@ -129,7 +129,7 @@ class SigningKey(encoding.Encodable, StringFixer, object): nacl.c.crypto_sign_SEEDBYTES ) - secret_key, public_key = nacl.c.crypto_sign_seed_keypair(seed) + public_key, secret_key = nacl.c.crypto_sign_seed_keypair(seed) self._seed = seed self._signing_key = secret_key @@ -158,7 +158,7 @@ class SigningKey(encoding.Encodable, StringFixer, object): :param encoder: A class that is used to encode the signed message. :rtype: :class:`~nacl.signing.SignedMessage` """ - raw_signed = nacl.c.crypto_sign(self._signing_key, message) + raw_signed = nacl.c.crypto_sign(message, self._signing_key) signature = encoder.encode(raw_signed[:nacl.c.crypto_sign_BYTES]) message = encoder.encode(raw_signed[nacl.c.crypto_sign_BYTES:]) diff --git a/tests/test_raw.py b/tests/test_raw.py index 9b1bf1c3205b8513afcf802c0d9472a5f00b94d3..b498a10313419abd3b8d2405ed5784ead1c043b6 100644 --- a/tests/test_raw.py +++ b/tests/test_raw.py @@ -70,23 +70,20 @@ def test_box(): def test_sign(): - # TODO: NaCl C++ is pk=keypair(sk), C is keypair(pk,sk) seed = "\x00" * c.crypto_sign_SEEDBYTES - secretkey, pubkey = c.crypto_sign_seed_keypair(seed) + pubkey, secretkey = c.crypto_sign_seed_keypair(seed) assert len(pubkey) == c.crypto_sign_PUBLICKEYBYTES assert len(secretkey) == c.crypto_sign_SECRETKEYBYTES - secretkey, pubkey = c.crypto_sign_keypair() + pubkey, secretkey = c.crypto_sign_keypair() assert len(pubkey) == c.crypto_sign_PUBLICKEYBYTES assert len(secretkey) == c.crypto_sign_SECRETKEYBYTES - # TODO: NaCl is sm=sign(msg, sk) msg = "message" - sigmsg = c.crypto_sign(secretkey, msg) + sigmsg = c.crypto_sign(msg, secretkey) assert len(sigmsg) == len(msg) + c.crypto_sign_BYTES - # TODO: NaCl is msg=open(sm, pk) - msg2 = c.crypto_sign_open(pubkey, sigmsg) + msg2 = c.crypto_sign_open(sigmsg, pubkey) assert msg2 == msg def secret_scalar():