| @@ -1,49 +1,44 @@ | |||
| /** | |||
| * @file decaf/crypto_255.h | |||
| * @copyright | |||
| * Copyright (c) 2015 Cryptography Research, Inc. \n | |||
| * Released under the MIT License. See LICENSE.txt for license information. | |||
| * @author Mike Hamburg | |||
| * @brief Example Decaf cyrpto routines. | |||
| * @warning These are merely examples, though they ought to be secure. But real | |||
| * protocols will decide differently on magic numbers, formats, which items to | |||
| * hash, etc. | |||
| * @warning Experimental! The names, parameter orders etc are likely to change. | |||
| */ | |||
| #ifndef __DECAF_CRYPTO_255_H__ | |||
| #define __DECAF_CRYPTO_255_H__ 1 | |||
| #include <decaf/decaf_255.h> | |||
| from gen_file import gen_file | |||
| crypto_h = gen_file( | |||
| name = "decaf/crypto_%(shortname)s.h", | |||
| doc = """ | |||
| @brief Example Decaf cyrpto routines. | |||
| @warning These are merely examples, though they ought to be secure. But real | |||
| protocols will decide differently on magic numbers, formats, which items to | |||
| hash, etc. | |||
| @warning Experimental! The names, parameter orders etc are likely to change. | |||
| """, code = """ | |||
| #include <decaf/%(c_ns)s.h> | |||
| #include <decaf/shake.h> | |||
| /** Number of bytes for a symmetric key (expanded to full key) */ | |||
| #define DECAF_255_SYMMETRIC_KEY_BYTES 32 | |||
| #define %(C_NS)s_SYMMETRIC_KEY_BYTES 32 | |||
| /** A symmetric key, the compressed point of a private key. */ | |||
| typedef unsigned char decaf_255_symmetric_key_t[DECAF_255_SYMMETRIC_KEY_BYTES]; | |||
| typedef unsigned char %(c_ns)s_symmetric_key_t[%(C_NS)s_SYMMETRIC_KEY_BYTES]; | |||
| /** An encoded public key. */ | |||
| typedef unsigned char decaf_255_public_key_t[DECAF_255_SER_BYTES]; | |||
| typedef unsigned char %(c_ns)s_public_key_t[%(C_NS)s_SER_BYTES]; | |||
| /** A signature. */ | |||
| typedef unsigned char decaf_255_signature_t[DECAF_255_SER_BYTES + DECAF_255_SCALAR_BYTES]; | |||
| typedef unsigned char %(c_ns)s_signature_t[%(C_NS)s_SER_BYTES + %(C_NS)s_SCALAR_BYTES]; | |||
| typedef struct { | |||
| /** @cond intetrnal */ | |||
| /** The symmetric key from which everything is expanded */ | |||
| decaf_255_symmetric_key_t sym; | |||
| %(c_ns)s_symmetric_key_t sym; | |||
| /** The scalar x */ | |||
| decaf_255_scalar_t secret_scalar; | |||
| %(c_ns)s_scalar_t secret_scalar; | |||
| /** x*Base */ | |||
| decaf_255_public_key_t pub; | |||
| %(c_ns)s_public_key_t pub; | |||
| /** @endcond */ | |||
| } /** Private key structure for pointers. */ | |||
| decaf_255_private_key_s, | |||
| %(c_ns)s_private_key_s, | |||
| /** A private key (gmp array[1] style). */ | |||
| decaf_255_private_key_t[1]; | |||
| %(c_ns)s_private_key_t[1]; | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| @@ -54,16 +49,16 @@ extern "C" { | |||
| * @param [out] priv The derived private key. | |||
| * @param [in] proto The compressed or proto-key, which must be 32 random bytes. | |||
| */ | |||
| void decaf_255_derive_private_key ( | |||
| decaf_255_private_key_t priv, | |||
| const decaf_255_symmetric_key_t proto | |||
| void %(c_ns)s_derive_private_key ( | |||
| %(c_ns)s_private_key_t priv, | |||
| const %(c_ns)s_symmetric_key_t proto | |||
| ) NONNULL2 API_VIS; | |||
| /** | |||
| * @brief Destroy a private key. | |||
| */ | |||
| void decaf_255_destroy_private_key ( | |||
| decaf_255_private_key_t priv | |||
| void %(c_ns)s_destroy_private_key ( | |||
| %(c_ns)s_private_key_t priv | |||
| ) NONNULL1 API_VIS; | |||
| /** | |||
| @@ -71,9 +66,9 @@ void decaf_255_destroy_private_key ( | |||
| * @param [out] pub The extracted private key. | |||
| * @param [in] priv The private key. | |||
| */ | |||
| void decaf_255_private_to_public ( | |||
| decaf_255_public_key_t pub, | |||
| const decaf_255_private_key_t priv | |||
| void %(c_ns)s_private_to_public ( | |||
| %(c_ns)s_public_key_t pub, | |||
| const %(c_ns)s_private_key_t priv | |||
| ) NONNULL2 API_VIS; | |||
| /** | |||
| @@ -92,11 +87,11 @@ void decaf_255_private_to_public ( | |||
| * @retval DECAF_FAILURE Key exchange failed. | |||
| */ | |||
| decaf_error_t | |||
| decaf_255_shared_secret ( | |||
| %(c_ns)s_shared_secret ( | |||
| uint8_t *shared, | |||
| size_t shared_bytes, | |||
| const decaf_255_private_key_t my_privkey, | |||
| const decaf_255_public_key_t your_pubkey, | |||
| const %(c_ns)s_private_key_t my_privkey, | |||
| const %(c_ns)s_public_key_t your_pubkey, | |||
| int me_first | |||
| ) NONNULL134 WARN_UNUSED API_VIS; | |||
| @@ -108,10 +103,10 @@ decaf_255_shared_secret ( | |||
| * @param [in] strobe A STROBE context with the message. | |||
| */ | |||
| void | |||
| decaf_255_sign_strobe ( | |||
| %(c_ns)s_sign_strobe ( | |||
| keccak_strobe_t strobe, | |||
| decaf_255_signature_t sig, | |||
| const decaf_255_private_key_t priv | |||
| %(c_ns)s_signature_t sig, | |||
| const %(c_ns)s_private_key_t priv | |||
| ) NONNULL3 API_VIS; | |||
| /** | |||
| @@ -123,9 +118,9 @@ decaf_255_sign_strobe ( | |||
| * @param [in] message_len The message's length. | |||
| */ | |||
| void | |||
| decaf_255_sign ( | |||
| decaf_255_signature_t sig, | |||
| const decaf_255_private_key_t priv, | |||
| %(c_ns)s_sign ( | |||
| %(c_ns)s_signature_t sig, | |||
| const %(c_ns)s_private_key_t priv, | |||
| const unsigned char *message, | |||
| size_t message_len | |||
| ) NONNULL3 API_VIS; | |||
| @@ -141,10 +136,10 @@ decaf_255_sign ( | |||
| * @return DECAF_FAILURE The signature did not verify successfully. | |||
| */ | |||
| decaf_error_t | |||
| decaf_255_verify_strobe ( | |||
| %(c_ns)s_verify_strobe ( | |||
| keccak_strobe_t strobe, | |||
| const decaf_255_signature_t sig, | |||
| const decaf_255_public_key_t pub | |||
| const %(c_ns)s_signature_t sig, | |||
| const %(c_ns)s_public_key_t pub | |||
| ) NONNULL3 API_VIS WARN_UNUSED; | |||
| /** | |||
| @@ -159,9 +154,9 @@ decaf_255_verify_strobe ( | |||
| * @return DECAF_FAILURE The signature did not verify successfully. | |||
| */ | |||
| decaf_error_t | |||
| decaf_255_verify ( | |||
| const decaf_255_signature_t sig, | |||
| const decaf_255_public_key_t pub, | |||
| %(c_ns)s_verify ( | |||
| const %(c_ns)s_signature_t sig, | |||
| const %(c_ns)s_public_key_t pub, | |||
| const unsigned char *message, | |||
| size_t message_len | |||
| ) NONNULL3 API_VIS WARN_UNUSED; | |||
| @@ -169,7 +164,4 @@ decaf_255_verify ( | |||
| #ifdef __cplusplus | |||
| } /* extern "C" */ | |||
| #endif | |||
| #endif /* __DECAF_CRYPTO_255_H__ */ | |||
| """) | |||
| @@ -29,7 +29,7 @@ def gen_file(name,doc,code,author="Mike Hamburg"): | |||
| ns_name = name % data | |||
| _,_,name_base = ns_name.rpartition("/") | |||
| header_guard = "__" + name_base.replace(".","_").upper() + "__" | |||
| header_guard = "__DECAF_" + name_base.replace(".","_").upper() + "__" | |||
| ns_doc = dedent(doc).strip().rstrip() | |||
| ns_doc = redoc(ns_name, ns_doc % data, author) | |||
| @@ -12,6 +12,7 @@ prefixes = { "h" : args.hpre, "hxx" : args.hpre, "c" : args.cpre } | |||
| from decaf_hxx import decaf_hxx | |||
| from decaf_h import decaf_h | |||
| from crypto_h import crypto_h | |||
| for name,code in gend_files.iteritems(): | |||
| _,_,name_suffix = name.partition(".") | |||
| @@ -1,175 +0,0 @@ | |||
| /** | |||
| * @file decaf/crypto_448.h | |||
| * @copyright | |||
| * Copyright (c) 2015 Cryptography Research, Inc. \n | |||
| * Released under the MIT License. See LICENSE.txt for license information. | |||
| * @author Mike Hamburg | |||
| * @brief Example Decaf cyrpto routines. | |||
| * @warning These are merely examples, though they ought to be secure. But real | |||
| * protocols will decide differently on magic numbers, formats, which items to | |||
| * hash, etc. | |||
| * @warning Experimental! The names, parameter orders etc are likely to change. | |||
| */ | |||
| #ifndef __DECAF_CRYPTO_448_H__ | |||
| #define __DECAF_CRYPTO_448_H__ 1 | |||
| #include <decaf/decaf_448.h> | |||
| #include <decaf/shake.h> | |||
| /** Number of bytes for a symmetric key (expanded to full key) */ | |||
| #define DECAF_448_SYMMETRIC_KEY_BYTES 32 | |||
| /** A symmetric key, the compressed point of a private key. */ | |||
| typedef unsigned char decaf_448_symmetric_key_t[DECAF_448_SYMMETRIC_KEY_BYTES]; | |||
| /** An encoded public key. */ | |||
| typedef unsigned char decaf_448_public_key_t[DECAF_448_SER_BYTES]; | |||
| /** A signature. */ | |||
| typedef unsigned char decaf_448_signature_t[DECAF_448_SER_BYTES + DECAF_448_SCALAR_BYTES]; | |||
| typedef struct { | |||
| /** @cond intetrnal */ | |||
| /** The symmetric key from which everything is expanded */ | |||
| decaf_448_symmetric_key_t sym; | |||
| /** The scalar x */ | |||
| decaf_448_scalar_t secret_scalar; | |||
| /** x*Base */ | |||
| decaf_448_public_key_t pub; | |||
| /** @endcond */ | |||
| } /** Private key structure for pointers. */ | |||
| decaf_448_private_key_s, | |||
| /** A private key (gmp array[1] style). */ | |||
| decaf_448_private_key_t[1]; | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #endif | |||
| /** | |||
| * @brief Derive a key from its compressed form. | |||
| * @param [out] priv The derived private key. | |||
| * @param [in] proto The compressed or proto-key, which must be 32 random bytes. | |||
| */ | |||
| void decaf_448_derive_private_key ( | |||
| decaf_448_private_key_t priv, | |||
| const decaf_448_symmetric_key_t proto | |||
| ) NONNULL2 API_VIS; | |||
| /** | |||
| * @brief Destroy a private key. | |||
| */ | |||
| void decaf_448_destroy_private_key ( | |||
| decaf_448_private_key_t priv | |||
| ) NONNULL1 API_VIS; | |||
| /** | |||
| * @brief Convert a private key to a public one. | |||
| * @param [out] pub The extracted private key. | |||
| * @param [in] priv The private key. | |||
| */ | |||
| void decaf_448_private_to_public ( | |||
| decaf_448_public_key_t pub, | |||
| const decaf_448_private_key_t priv | |||
| ) NONNULL2 API_VIS; | |||
| /** | |||
| * @brief Compute a Diffie-Hellman shared secret. | |||
| * | |||
| * This is an example routine; real protocols would use something | |||
| * protocol-specific. | |||
| * | |||
| * @param [out] shared A buffer to store the shared secret. | |||
| * @param [in] shared_bytes The size of the buffer. | |||
| * @param [in] my_privkey My private key. | |||
| * @param [in] your_pubkey Your public key. | |||
| * @param [in] me_first Direction flag to break symmetry. | |||
| * | |||
| * @retval DECAF_SUCCESS Key exchange was successful. | |||
| * @retval DECAF_FAILURE Key exchange failed. | |||
| */ | |||
| decaf_error_t | |||
| decaf_448_shared_secret ( | |||
| uint8_t *shared, | |||
| size_t shared_bytes, | |||
| const decaf_448_private_key_t my_privkey, | |||
| const decaf_448_public_key_t your_pubkey, | |||
| int me_first | |||
| ) NONNULL134 WARN_UNUSED API_VIS; | |||
| /** | |||
| * @brief Sign a message from a STROBE context. | |||
| * | |||
| * @param [out] sig The signature. | |||
| * @param [in] priv Your private key. | |||
| * @param [in] strobe A STROBE context with the message. | |||
| */ | |||
| void | |||
| decaf_448_sign_strobe ( | |||
| keccak_strobe_t strobe, | |||
| decaf_448_signature_t sig, | |||
| const decaf_448_private_key_t priv | |||
| ) NONNULL3 API_VIS; | |||
| /** | |||
| * @brief Sign a message. | |||
| * | |||
| * @param [out] sig The signature. | |||
| * @param [in] priv Your private key. | |||
| * @param [in] message The message. | |||
| * @param [in] message_len The message's length. | |||
| */ | |||
| void | |||
| decaf_448_sign ( | |||
| decaf_448_signature_t sig, | |||
| const decaf_448_private_key_t priv, | |||
| const unsigned char *message, | |||
| size_t message_len | |||
| ) NONNULL3 API_VIS; | |||
| /** | |||
| * @brief Verify a signed message from its STROBE context. | |||
| * | |||
| * @param [in] sig The signature. | |||
| * @param [in] pub The public key. | |||
| * @param [in] strobe A STROBE context with the message. | |||
| * | |||
| * @return DECAF_SUCCESS The signature verified successfully. | |||
| * @return DECAF_FAILURE The signature did not verify successfully. | |||
| */ | |||
| decaf_error_t | |||
| decaf_448_verify_strobe ( | |||
| keccak_strobe_t strobe, | |||
| const decaf_448_signature_t sig, | |||
| const decaf_448_public_key_t pub | |||
| ) NONNULL3 API_VIS WARN_UNUSED; | |||
| /** | |||
| * @brief Verify a signed message. | |||
| * | |||
| * @param [in] sig The signature. | |||
| * @param [in] pub The public key. | |||
| * @param [in] message The message. | |||
| * @param [in] message_len The message's length. | |||
| * | |||
| * @return DECAF_SUCCESS The signature verified successfully. | |||
| * @return DECAF_FAILURE The signature did not verify successfully. | |||
| */ | |||
| decaf_error_t | |||
| decaf_448_verify ( | |||
| const decaf_448_signature_t sig, | |||
| const decaf_448_public_key_t pub, | |||
| const unsigned char *message, | |||
| size_t message_len | |||
| ) NONNULL3 API_VIS WARN_UNUSED; | |||
| #ifdef __cplusplus | |||
| } /* extern "C" */ | |||
| #endif | |||
| #endif /* __DECAF_CRYPTO_448_H__ */ | |||