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()

}