Simpler functions for base ED448 operations
@file
ED448_HEADER_FILE Macro
C
#define ED448_HEADER_FILE
/ Copyright (c) 2020 Silex Insight sa SPDX-License-Identifier: BSD-3-Clause
Size in bytes of a reduced value in ED448 operations */
Size in bytes of an encoded ED448 point */
SX_ED448_PT_SZ Macro
C
#define SX_ED448_PT_SZ 57
Size in bytes of a digest in ED448 operations */
SX_ED448_DGST_SZ Macro
C
#define SX_ED448_DGST_SZ (57 2)
@addtogroup SX_PK_ED448
@{
An encoded ED448 point */
struct sx_ed448_pt {
Bytes array representing encoded point for ED448 **/
char encoded; };
A ED448 scalar value */
struct sx_ed448_v {
Bytes array representing scalar for ED448 **/
char bytes; };
A hash digest used in the ED448 protocol */
struct sx_ed448_dgst {
Bytes array of hash digest **/
char bytes; };
EDDSA point multiplication (ED448)
SX_ED448_PTMULT Macro
C
typedef int (FUNC_SX_ED448_PTMULT)(struct sx_pk_cnx cnx, const struct sx_ed448_dgst r, struct sx_ed448_pt pt); #define SX_ED448_PTMULT ((FUNC_SX_ED448_PTMULT)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_ED448_PTMULT)))
Compute R = r G, where r is a scalar which can be up to twice the size of the other operands. G is the generator point for the curve. The point R is encoded in pt.
When computing the public key, the scalar 'r' is the secret scalar based on the clamped hash digest of the private key.
Parameters
cnx Connection structure obtained through SX_PK_OPEN() at startup
Parameters
r Secret scalar based on the clamped hash digest of the private key
Parameters
pt Encoded resulting R point @return ::SX_OK @return ::SX_ERR_INVALID_PARAM @return ::SX_ERR_UNKNOWN_ERROR @return ::SX_ERR_BUSY @return ::SX_ERR_NOT_IMPLEMENTED @return ::SX_ERR_OPERAND_TOO_LARGE @return ::SX_ERR_PLATFORM_ERROR @return ::SX_ERR_EXPIRED @see SX_ASYNC_ED448_PTMULT_GO() and SX_ASYNC_ED448_PTMULT_END() for an asynchronous version
Asynchronous EDDSA point multiplication (ED448)
SX_ASYNC_ED448_PTMULT_GO Macro
C
typedef struct sx_pk_dreq (FUNC_SX_ASYNC_ED448_PTMULT_GO)(struct sx_pk_cnx cnx, const struct sx_ed448_dgst r); #define SX_ASYNC_ED448_PTMULT_GO ((FUNC_SX_ASYNC_ED448_PTMULT_GO)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_ASYNC_ED448_PTMULT_GO)))
Start an EDDSA point multiplication on the accelerator and return immediately.
@remark When the operation finishes on the accelerator, call SX_ASYNC_ED448_PTMULT_END()
Parameters
cnx Connection structure obtained through SX_PK_OPEN() at startup
Parameters
r Secret scalar based on the clamped hash digest of the private key @return Acquired acceleration request for this operation @see SX_ASYNC_ED448_PTMULT_END() and SX_ED448_PTMULT()
Collect the result of asynchronous EDDSA point multiplication (ED448)
SX_ASYNC_ED448_PTMULT_END Macro
C
typedef void (FUNC_SX_ASYNC_ED448_PTMULT_END)(sx_pk_accel req, struct sx_ed448_pt pt); #define SX_ASYNC_ED448_PTMULT_END ((FUNC_SX_ASYNC_ED448_PTMULT_END)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_ASYNC_ED448_PTMULT_END)))
Get the output operands of the EDDSA point multiplication and release the reserved resources.
@pre The operation on the accelerator must be finished before calling this function.
Parameters
req The previously acquired acceleration request for this operation
Parameters
pt Encoded resulting R point @see SX_ASYNC_ED448_PTMULT_GO() and SX_ED448_PTMULT()
Compute signature scalar s for pure EDDSA (ED448).
SX_ED448_SIGN Macro
C
typedef int (FUNC_SX_ED448_SIGN)(struct sx_pk_cnx cnx, const struct sx_ed448_dgst k, const struct sx_ed448_dgst r, const struct sx_ed448_v s, struct sx_ed448_v sig_s); #define SX_ED448_SIGN ((FUNC_SX_ED448_SIGN)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_ED448_SIGN)))
This represents the second step in computing an EDDSA signature.
This step computes sig_s : sig_s = (r + k s) % l
Parameters
cnx Connection structure obtained through SX_PK_OPEN() at startup
Parameters
k Hash of the encoded point R, the public key and the message. It is interpreted as a scalar with a size double of other operands
Parameters
r Secret nonce already used in the first signature step
Parameters
s Secret scalar derived from the private key
Parameters
sig_s Second part of the EDDSA signature @return ::SX_OK @return ::SX_ERR_INVALID_PARAM @return ::SX_ERR_UNKNOWN_ERROR @return ::SX_ERR_BUSY @return ::SX_ERR_NOT_IMPLEMENTED @return ::SX_ERR_OPERAND_TOO_LARGE @return ::SX_ERR_PLATFORM_ERROR @return ::SX_ERR_EXPIRED @see sx_async_ed448_sign_go() and SX_ASYNC_ED448_SIGN_END() for an asynchronous version
Asynchronous second part signature generation for pure EDDSA (ED448).
SX_PK_ASYNC_ED448_SIGN_GO Macro
C
typedef struct sx_pk_dreq (FUNC_SX_PK_ASYNC_ED448_SIGN_GO)(struct sx_pk_cnx cnx, const struct sx_ed448_dgst k, const struct sx_ed448_dgst r, const struct sx_ed448_v s); #define SX_PK_ASYNC_ED448_SIGN_GO ((FUNC_SX_PK_ASYNC_ED448_SIGN_GO)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_ASYNC_ED448_SIGN_GO)))
Start an ED448 signature generation on the accelerator and return immediately.
@remark When the operation finishes on the accelerator, call SX_ASYNC_ED448_SIGN_END()
Parameters
cnx Connection structure obtained through SX_PK_OPEN() at startup
Parameters
k Hash of the encoded point R, the public key and the message. It is interpreted as a scalar with a size double of other operands
Parameters
r Secret nonce already used in the first signature step
Parameters
s Secret scalar derived from the private key @return Acquired acceleration request for this operation @see SX_ED448_SIGN() and SX_ASYNC_ED448_SIGN_END()
Collect the result of asynchronous computation of ED448 signature scalar
SX_ASYNC_ED448_SIGN_END Macro
C
typedef void (FUNC_SX_ASYNC_ED448_SIGN_END)(sx_pk_accel req, struct sx_ed448_v sig_s); #define SX_ASYNC_ED448_SIGN_END ((FUNC_SX_ASYNC_ED448_SIGN_END)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_ASYNC_ED448_SIGN_END)))
Get the output operands of the ED448 signature generation and release the reserved resources.
@pre The operation on the accelerator must be finished before calling this function.
Parameters
req The previously acquired acceleration request for this operation
Parameters
sig_s Second part of the ED448 signature @see SX_PK_ASYNC_ED448_SIGN_GO() and SX_ED448_SIGN()
Verify an EDDSA signature (ED448)
SX_ED448_VERIFY Macro
C
typedef int (FUNC_SX_ED448_VERIFY)(struct sx_pk_cnx cnx, const struct sx_ed448_dgst k, const struct sx_ed448_pt a, const struct sx_ed448_v sig_s, const struct sx_ed448_pt r); #define SX_ED448_VERIFY ((FUNC_SX_ED448_VERIFY)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_ED448_VERIFY)))
It checks if sig_s G - k A matches R.
sig_s and the encoded point R form the signature. The points A and R are passed in their encoded form via 'a' and 'r'.
Parameters
cnx Connection structure obtained through SX_PK_OPEN() at startup
Parameters
k Hash of the encoded point R, the public key and the message. It is interpreted as a scalar with a size double of other operands
Parameters
a Encoded public key
Parameters
sig_s Second part of the signature
Parameters
r Encoded first part of the signature @return ::SX_OK @return ::SX_ERR_OUT_OF_RANGE @return ::SX_ERR_POINT_NOT_ON_CURVE @return ::SX_ERR_INVALID_SIGNATURE @return ::SX_ERR_INVALID_PARAM @return ::SX_ERR_UNKNOWN_ERROR @return ::SX_ERR_BUSY @return ::SX_ERR_NOT_IMPLEMENTED @return ::SX_ERR_OPERAND_TOO_LARGE @return ::SX_ERR_PLATFORM_ERROR @return ::SX_ERR_EXPIRED @see SX_ASYNC_ED448_VERIFY_GO() for an asynchronous version
Asynchronous (non-blocking) verify an ED448 signature.
SX_ASYNC_ED448_VERIFY_GO Macro
C
typedef struct sx_pk_dreq (FUNC_SX_ASYNC_ED448_VERIFY_GO)(struct sx_pk_cnx cnx, const struct sx_ed448_dgst k, const struct sx_ed448_pt a, const struct sx_ed448_v sig_s, const struct sx_ed448_pt r); #define SX_ASYNC_ED448_VERIFY_GO ((FUNC_SX_ASYNC_ED448_VERIFY_GO)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_ASYNC_ED448_VERIFY_GO)))
Start an ED448 signature generation on the accelerator and return immediately.
@remark When the operation finishes on the accelerator, call SX_PK_RELEASE_REQ()
Parameters
cnx Connection structure obtained through SX_PK_OPEN() at startup
Parameters
k Hash of the encoded point R, the public key and the message. It is interpreted as a scalar with a size double of other operands
Parameters
a Encoded public key
Parameters
sig_s Second part of the signature
Parameters
r Encoded first part of the signature @return Acquired acceleration request for this operation @see SX_ED448_VERIFY()
}