extern "C" {
#endif
-/** Number of bytes in an EdDSA public key. */
+/* Number of bytes in an EdDSA public key. */
# define DECAF_EDDSA_448_PUBLIC_BYTES 57
-/** Number of bytes in an EdDSA private key. */
+/* Number of bytes in an EdDSA private key. */
# define DECAF_EDDSA_448_PRIVATE_BYTES DECAF_EDDSA_448_PUBLIC_BYTES
-/** Number of bytes in an EdDSA private key. */
-# define DECAF_EDDSA_448_SIGNATURE_BYTES (DECAF_EDDSA_448_PUBLIC_BYTES + DECAF_EDDSA_448_PRIVATE_BYTES)
+/* Number of bytes in an EdDSA private key. */
+# define DECAF_EDDSA_448_SIGNATURE_BYTES (DECAF_EDDSA_448_PUBLIC_BYTES + \
+ DECAF_EDDSA_448_PRIVATE_BYTES)
-/** Does EdDSA support non-contextual signatures? */
+/* Does EdDSA support non-contextual signatures? */
# define DECAF_EDDSA_448_SUPPORTS_CONTEXTLESS_SIGS 0
-/** EdDSA encoding ratio. */
+/* EdDSA encoding ratio. */
# define DECAF_448_EDDSA_ENCODE_RATIO 4
-/** EdDSA decoding ratio. */
+/* EdDSA decoding ratio. */
# define DECAF_448_EDDSA_DECODE_RATIO (4 / 4)
-/**
- * @brief EdDSA key generation. This function uses a different (non-Decaf)
- * encoding.
+/*
+ * EdDSA key generation. This function uses a different (non-Decaf) encoding.
*
- * @param [out] pubkey The public key.
- * @param [in] privkey The private key.
+ * pubkey (out): The public key.
+ * privkey (in): The private key.
*/
-decaf_error_t decaf_ed448_derive_public_key(uint8_t
- pubkey
- [DECAF_EDDSA_448_PUBLIC_BYTES],
- const uint8_t
- privkey
- [DECAF_EDDSA_448_PRIVATE_BYTES]
- );
-
-/**
- * @brief EdDSA signing.
- *
- * @param [out] signature The signature.
- * @param [in] privkey The private key.
- * @param [in] pubkey The public key.
- * @param [in] message The message to sign.
- * @param [in] message_len The length of the message.
- * @param [in] prehashed Nonzero if the message is actually the hash of something you want to sign.
- * @param [in] context A "context" for this signature of up to 255 bytes.
- * @param [in] context_len Length of the context.
- *
- * @warning For Ed25519, it is unsafe to use the same key for both prehashed and non-prehashed
- * messages, at least without some very careful protocol-level disambiguation. For Ed448 it is
- * safe. The C++ wrapper is designed to make it harder to screw this up, but this C code gives
- * you no seat belt.
+decaf_error_t decaf_ed448_derive_public_key(
+ uint8_t pubkey [DECAF_EDDSA_448_PUBLIC_BYTES],
+ const uint8_t privkey [DECAF_EDDSA_448_PRIVATE_BYTES]);
+
+/*
+ * EdDSA signing.
+ *
+ * signature (out): The signature.
+ * privkey (in): The private key.
+ * pubkey (in): The public key.
+ * message (in): The message to sign.
+ * message_len (in): The length of the message.
+ * prehashed (in): Nonzero if the message is actually the hash of something
+ * you want to sign.
+ * context (in): A "context" for this signature of up to 255 bytes.
+ * context_len (in): Length of the context.
+ *
+ * For Ed25519, it is unsafe to use the same key for both prehashed and
+ * non-prehashed messages, at least without some very careful protocol-level
+ * disambiguation. For Ed448 it is safe. The C++ wrapper is designed to make
+ * it harder to screw this up, but this C code gives you no seat belt.
*/
-decaf_error_t decaf_ed448_sign(uint8_t
- signature[DECAF_EDDSA_448_SIGNATURE_BYTES],
- const uint8_t
- privkey[DECAF_EDDSA_448_PRIVATE_BYTES],
- const uint8_t
- pubkey[DECAF_EDDSA_448_PUBLIC_BYTES],
- const uint8_t *message, size_t message_len,
- uint8_t prehashed, const uint8_t *context,
- size_t context_len)
- __attribute__ ((nonnull(1, 2, 3)));
-
-/**
- * @brief EdDSA signing with prehash.
- *
- * @param [out] signature The signature.
- * @param [in] privkey The private key.
- * @param [in] pubkey The public key.
- * @param [in] hash The hash of the message. This object will not be modified by the call.
- * @param [in] context A "context" for this signature of up to 255 bytes. Must be the same as what was used for the prehash.
- * @param [in] context_len Length of the context.
- *
- * @warning For Ed25519, it is unsafe to use the same key for both prehashed and non-prehashed
- * messages, at least without some very careful protocol-level disambiguation. For Ed448 it is
- * safe. The C++ wrapper is designed to make it harder to screw this up, but this C code gives
- * you no seat belt.
+decaf_error_t decaf_ed448_sign(
+ uint8_t signature[DECAF_EDDSA_448_SIGNATURE_BYTES],
+ const uint8_t privkey[DECAF_EDDSA_448_PRIVATE_BYTES],
+ const uint8_t pubkey[DECAF_EDDSA_448_PUBLIC_BYTES],
+ const uint8_t *message, size_t message_len,
+ uint8_t prehashed, const uint8_t *context,
+ size_t context_len)
+ __attribute__ ((nonnull(1, 2, 3)));
+
+/*
+ * EdDSA signing with prehash.
+ *
+ * signature (out): The signature.
+ * privkey (in): The private key.
+ * pubkey (in): The public key.
+ * hash (in): The hash of the message. This object will not be modified by the
+ * call.
+ * context (in): A "context" for this signature of up to 255 bytes. Must be the
+ * same as what was used for the prehash.
+ * context_len (in): Length of the context.
+ *
+ * For Ed25519, it is unsafe to use the same key for both prehashed and
+ * non-prehashed messages, at least without some very careful protocol-level
+ * disambiguation. For Ed448 it is safe. The C++ wrapper is designed to make
+ * it harder to screw this up, but this C code gives you no seat belt.
*/
-decaf_error_t decaf_ed448_sign_prehash(uint8_t
- signature
- [DECAF_EDDSA_448_SIGNATURE_BYTES],
- const uint8_t
- privkey[DECAF_EDDSA_448_PRIVATE_BYTES],
- const uint8_t
- pubkey[DECAF_EDDSA_448_PUBLIC_BYTES],
- const uint8_t hash[64],
- const uint8_t *context,
- size_t context_len)
- __attribute__ ((nonnull(1, 2, 3, 4)));
-
-/**
- * @brief EdDSA signature verification.
+decaf_error_t decaf_ed448_sign_prehash(
+ uint8_t signature[DECAF_EDDSA_448_SIGNATURE_BYTES],
+ const uint8_t privkey[DECAF_EDDSA_448_PRIVATE_BYTES],
+ const uint8_t pubkey[DECAF_EDDSA_448_PUBLIC_BYTES],
+ const uint8_t hash[64],
+ const uint8_t *context,
+ size_t context_len)
+ __attribute__ ((nonnull(1, 2, 3, 4)));
+
+/*
+ * EdDSA signature verification.
*
* Uses the standard (i.e. less-strict) verification formula.
*
- * @param [in] signature The signature.
- * @param [in] pubkey The public key.
- * @param [in] message The message to verify.
- * @param [in] message_len The length of the message.
- * @param [in] prehashed Nonzero if the message is actually the hash of something you want to verify.
- * @param [in] context A "context" for this signature of up to 255 bytes.
- * @param [in] context_len Length of the context.
- *
- * @warning For Ed25519, it is unsafe to use the same key for both prehashed and non-prehashed
- * messages, at least without some very careful protocol-level disambiguation. For Ed448 it is
- * safe. The C++ wrapper is designed to make it harder to screw this up, but this C code gives
- * you no seat belt.
+ * signature (in): The signature.
+ * pubkey (in): The public key.
+ * message (in): The message to verify.
+ * message_len (in): The length of the message.
+ * prehashed (in): Nonzero if the message is actually the hash of something you
+ * want to verify.
+ * context (in): A "context" for this signature of up to 255 bytes.
+ * context_len (in): Length of the context.
+ *
+ * For Ed25519, it is unsafe to use the same key for both prehashed and
+ * non-prehashed messages, at least without some very careful protocol-level
+ * disambiguation. For Ed448 it is safe. The C++ wrapper is designed to make
+ * it harder to screw this up, but this C code gives you no seat belt.
*/
decaf_error_t decaf_ed448_verify(const uint8_t
signature[DECAF_EDDSA_448_SIGNATURE_BYTES],
const uint8_t *message, size_t message_len,
uint8_t prehashed, const uint8_t *context,
uint8_t context_len)
- __attribute__ ((nonnull(1, 2)));
+ __attribute__ ((nonnull(1, 2)));
-/**
- * @brief EdDSA signature verification.
+/*
+ * EdDSA signature verification.
*
* Uses the standard (i.e. less-strict) verification formula.
*
- * @param [in] signature The signature.
- * @param [in] pubkey The public key.
- * @param [in] hash The hash of the message. This object will not be modified by the call.
- * @param [in] context A "context" for this signature of up to 255 bytes. Must be the same as what was used for the prehash.
- * @param [in] context_len Length of the context.
- *
- * @warning For Ed25519, it is unsafe to use the same key for both prehashed and non-prehashed
- * messages, at least without some very careful protocol-level disambiguation. For Ed448 it is
- * safe. The C++ wrapper is designed to make it harder to screw this up, but this C code gives
- * you no seat belt.
+ * signature (in): The signature.
+ * pubkey (in): The public key.
+ * hash (in): The hash of the message. This object will not be modified by the
+ * call.
+ * context (in): A "context" for this signature of up to 255 bytes. Must be the
+ * same as what was used for the prehash.
+ * context_len (in): Length of the context.
+ *
+ * For Ed25519, it is unsafe to use the same key for both prehashed and
+ * non-prehashed messages, at least without some very careful protocol-level
+ * disambiguation. For Ed448 it is safe. The C++ wrapper is designed to make
+ * it harder to screw this up, but this C code gives you no seat belt.
*/
-decaf_error_t decaf_ed448_verify_prehash(const uint8_t
- signature
- [DECAF_EDDSA_448_SIGNATURE_BYTES],
- const uint8_t
- pubkey[DECAF_EDDSA_448_PUBLIC_BYTES],
- const uint8_t hash[64],
- const uint8_t *context,
- uint8_t context_len)
- __attribute__ ((nonnull(1, 2)));
-
-/**
- * @brief EdDSA point encoding. Used internally, exposed externally.
+decaf_error_t decaf_ed448_verify_prehash(
+ const uint8_t signature[DECAF_EDDSA_448_SIGNATURE_BYTES],
+ const uint8_t pubkey[DECAF_EDDSA_448_PUBLIC_BYTES],
+ const uint8_t hash[64],
+ const uint8_t *context,
+ uint8_t context_len)
+ __attribute__ ((nonnull(1, 2)));
+
+/*
+ * EdDSA point encoding. Used internally, exposed externally.
* Multiplies by DECAF_448_EDDSA_ENCODE_RATIO first.
*
* The multiplication is required because the EdDSA encoding represents
* this function, you will get DECAF_448_EDDSA_ENCODE_RATIO times the
* EdDSA base point.
*
- * @param [out] enc The encoded point.
- * @param [in] p The point.
+ * enc (out): The encoded point.
+ * p (in): The point.
*/
-void curve448_point_mul_by_ratio_and_encode_like_eddsa(uint8_t
- enc
- [DECAF_EDDSA_448_PUBLIC_BYTES],
- const curve448_point_t
- p);
+void curve448_point_mul_by_ratio_and_encode_like_eddsa(
+ uint8_t enc [DECAF_EDDSA_448_PUBLIC_BYTES],
+ const curve448_point_t p);
-/**
- * @brief EdDSA point decoding. Multiplies by DECAF_448_EDDSA_DECODE_RATIO,
- * and ignores cofactor information.
+/*
+ * EdDSA point decoding. Multiplies by DECAF_448_EDDSA_DECODE_RATIO, and
+ * ignores cofactor information.
*
* See notes on curve448_point_mul_by_ratio_and_encode_like_eddsa
*
- * @param [out] enc The encoded point.
- * @param [in] p The point.
+ * enc (out): The encoded point.
+ * p (in): The point.
*/
-decaf_error_t curve448_point_decode_like_eddsa_and_mul_by_ratio(curve448_point_t
- p,
- const uint8_t
- enc
- [DECAF_EDDSA_448_PUBLIC_BYTES]
- );
-
-/**
- * @brief EdDSA to ECDH public key conversion
+decaf_error_t curve448_point_decode_like_eddsa_and_mul_by_ratio(
+ curve448_point_t p,
+ const uint8_t enc[DECAF_EDDSA_448_PUBLIC_BYTES]);
+
+/*
+ * EdDSA to ECDH public key conversion
* Deserialize the point to get y on Edwards curve,
* Convert it to u coordinate on Montgomery curve.
*
- * @warning This function does not check that the public key being converted
- * is a valid EdDSA public key (FUTURE?)
+ * This function does not check that the public key being converted is a valid
+ * EdDSA public key (FUTURE?)
*
- * @param[out] x The ECDH public key as in RFC7748(point on Montgomery curve)
- * @param[in] ed The EdDSA public key(point on Edwards curve)
+ * x (out): The ECDH public key as in RFC7748(point on Montgomery curve)
+ * ed (in): The EdDSA public key(point on Edwards curve)
*/
-void decaf_ed448_convert_public_key_to_x448(uint8_t x[DECAF_X448_PUBLIC_BYTES],
- const uint8_t
- ed[DECAF_EDDSA_448_PUBLIC_BYTES]
- );
+void decaf_ed448_convert_public_key_to_x448(
+ uint8_t x[DECAF_X448_PUBLIC_BYTES],
+ const uint8_t ed[DECAF_EDDSA_448_PUBLIC_BYTES]);
-/**
- * @brief EdDSA to ECDH private key conversion
+/*
+ * EdDSA to ECDH private key conversion
* Using the appropriate hash function, hash the EdDSA private key
* and keep only the lower bytes to get the ECDH private key
*
- * @param[out] x The ECDH private key as in RFC7748
- * @param[in] ed The EdDSA private key
+ * x (out): The ECDH private key as in RFC7748
+ * ed (in): The EdDSA private key
*/
-decaf_error_t decaf_ed448_convert_private_key_to_x448(uint8_t
- x
- [DECAF_X448_PRIVATE_BYTES],
- const uint8_t
- ed
- [DECAF_EDDSA_448_PRIVATE_BYTES]
- );
+decaf_error_t decaf_ed448_convert_private_key_to_x448(
+ uint8_t x[DECAF_X448_PRIVATE_BYTES],
+ const uint8_t ed[DECAF_EDDSA_448_PRIVATE_BYTES]);
#ifdef __cplusplus
} /* extern "C" */