diff options
author | Mark Haines <mjark@negativecurvature.net> | 2015-02-20 21:32:56 +0000 |
---|---|---|
committer | Mark Haines <mjark@negativecurvature.net> | 2015-02-20 21:32:56 +0000 |
commit | 44d0c0920574c3169a0ebf6a03671332753a1c76 (patch) | |
tree | 439ee95d7588b6badd58abb228ae667b16f59623 /include/axolotl/crypto.hh |
initial commit: start implementing the crypto primitives
Diffstat (limited to 'include/axolotl/crypto.hh')
-rw-r--r-- | include/axolotl/crypto.hh | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/include/axolotl/crypto.hh b/include/axolotl/crypto.hh new file mode 100644 index 0000000..9691228 --- /dev/null +++ b/include/axolotl/crypto.hh @@ -0,0 +1,88 @@ +#include <cstdint> + +namespace axolotl { + + +struct Curve25519PublicKey { + static const int LENGTH = 32; + std::uint8_t public_key[32]; +}; + + +struct Curve25519KeyPair : public Curve25519PublicKey { + std::uint8_t private_key[32]; +}; + + +Curve25519KeyPair generate_key( + std::uint8_t const * random_32_bytes +); + + +const std::size_t CURVE25519_SHARED_SECRET_LENGTH = 16; + + +void curve25519_shared_secret( + Curve25519KeyPair const & our_key, + Curve25519PublicKey const & their_key, + std::uint8_t * output +); + + +struct Aes256Key { + static const int LENGTH = 32; + std::uint8_t key[32]; +}; + + +struct Aes256Iv { + static const int LENGTH = 16; + std::uint8_t iv[16]; +}; + + +std::size_t aes_pkcs_7_padded_length( + std::size_t input_length +); + + +void aes_pkcs_7_padding( + std::uint8_t const * input, std::size_t input_length, + std::uint8_t * output +); + + +void aes_encrypt_cbc( + Aes256Key const & key, + Aes256Iv const & iv, + std::uint8_t const * input, std::size_t input_length, + std::uint8_t * output +); + + +void aes_decrypt_cbc( + Aes256Key const & key, + Aes256Iv const & iv, + std::uint8_t const * input, std::size_t input_length, + std::uint8_t * output +); + + +const std::size_t HMAC_SHA256_OUTPUT_LENGTH = 32; + + +void hmac_sha256( + std::uint8_t const * key, std::size_t key_length, + std::uint8_t const * input, std::size_t input_length, + std::uint8_t * output +); + + +void hkdf_sha256( + std::uint8_t const * input, std::size_t input_length, + std::uint8_t const * info, std::size_t info_length, + std::uint8_t const * salt, std::size_t salt_length, + std::uint8_t * output, std::size_t output_length +); + +} // namespace axolotl |