diff options
author | Mark Haines <mark.haines@matrix.org> | 2015-07-07 09:50:32 +0100 |
---|---|---|
committer | Mark Haines <mark.haines@matrix.org> | 2015-07-07 09:50:32 +0100 |
commit | 2a873fd4e1d53c45898b27e1c953b551b2cf6023 (patch) | |
tree | 6096e97b2245d3ada64013a90c4488c2caaeae3e /include | |
parent | a30a64d17931c43ca20090220272ce9257064072 (diff) |
Add functions for creating and verifying ed25519 signatures
Diffstat (limited to 'include')
-rw-r--r-- | include/olm/crypto.hh | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/include/olm/crypto.hh b/include/olm/crypto.hh index 7f8f069..b845bfe 100644 --- a/include/olm/crypto.hh +++ b/include/olm/crypto.hh @@ -33,6 +33,18 @@ struct Curve25519KeyPair : public Curve25519PublicKey { }; +struct Ed25519PublicKey { + static const int LENGTH = 32; + std::uint8_t public_key[32]; +}; + + +struct Ed25519KeyPair : public Ed25519PublicKey { + static const int LENGTH = 64; + std::uint8_t private_key[32]; +}; + + /** Generate a curve25519 key pair from 32 random bytes. */ void curve25519_generate_key( std::uint8_t const * random_32_bytes, @@ -61,7 +73,7 @@ void curve25519_sign( ); -/** Verify thei message using their public key. +/** Verify their message using their public key. * The signature input buffer must be 64 bytes long. * Returns true if the signature is valid. */ bool curve25519_verify( @@ -70,6 +82,31 @@ bool curve25519_verify( std::uint8_t const * signature ); +/** Generate a curve25519 key pair from 32 random bytes. */ +void ed25519_generate_key( + std::uint8_t const * random_32_bytes, + Ed25519KeyPair & key_pair +); + + +/** Signs the message using our private key. + * The output buffer must be at least 64 bytes long. */ +void ed25519_sign( + Ed25519KeyPair const & our_key, + std::uint8_t const * message, std::size_t message_length, + std::uint8_t * output +); + + +/** Verify their message using their public key. + * The signature input buffer must be 64 bytes long. + * Returns true if the signature is valid. */ +bool ed25519_verify( + Ed25519PublicKey const & their_key, + std::uint8_t const * message, std::size_t message_length, + std::uint8_t const * signature +); + struct Aes256Key { static const int LENGTH = 32; |