SX_ED25519_SZ Macro
C
#define SX_ED25519_SZ 57
Description
Size in bytes of a reduced value in ED25519 operations
SX_ED25519_PT_SZ Macro
C
#define SX_D448_PT_SZ 57
Description
Size in bytes of an encoded ED25519 point
SX_ED25519_DGST_SZ Macro
C
#define SX_ED25519_DGST_SZ (57 * 2)
Description
Size in bytes of a digest in ED25519 operations
sx_ed25519_pt Struct
C
struct sx_ed25519_pt {
/** Bytes array representing encoded point for ED25519 **/
char encoded[SX_ED25519_PT_SZ];
};
Description
An encoded ED25519 point
sx_ed25519_v Struct
C
struct sx_ed25519_v {
/** Bytes array representing scalar for ED25519 **/
char bytes[SX_ED25519_SZ];
};
Description
A ED25519 scalar value
sx_ed25519_dgst Struct
C
struct sx_ed25519_dgst {
/** Bytes array of hash digest **/
char bytes[SX_ED25519_DGST_SZ];
};
Description
A hash digest used in the ED25519 protocol
SX_ED25519_PTMULT
C
typedef int (*FUNC_SX_ED25519_PTMULT)(struct sx_pk_cnx *cnx, const struct sx_ed25519_dgst *r, struct sx_ed25519_pt *pt); #define SX_ED25519_PTMULT ((FUNC_SX_ED25519_PTMULT)(*(uint32_t *)(API_TABLE_BASE_ADDRESS + ATO_SX_ED25519_PTMULT)))
Description
EDDSA point multiplication (ED25519) 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
Param | Description |
---|---|
cnx | Connection structure obtained through SX_PK_OPEN() at startup |
r | Secret scalar based on the clamped hash digest of the private key |
pt | Encoded resulting R point |
See
SX_ASYNC_ED25519_PTMULT_GO() and SX_ASYNC_ED25519_PTMULT_END() for an asynchronous version
Returns
SX_OK SX_ERR_INVALID_PARAM SX_ERR_UNKNOWN_ERROR SX_ERR_BUSY SX_ERR_NOT_IMPLEMENTED SX_ERR_OPERAND_TOO_LARGE SX_ERR_PLATFORM_ERROR SX_ERR_EXPIRED
SX_ASYNC_ED25519_PTMULT_GO
C
typedef struct sx_pk_dreq (*FUNC_SX_ASYNC_ED25519_PTMULT_GO)(struct sx_pk_cnx *cnx, const struct sx_ed25519_dgst *r); #define SX_ASYNC_ED25519_PTMULT_GO ((FUNC_SX_ASYNC_ED25519_PTMULT_GO)(*(uint32_t *)(API_TABLE_BASE_ADDRESS + ATO_SX_ASYNC_ED25519_PTMULT_GO)))
Description
Asynchronous EDDSA point multiplication (ED25519) Start an EDDSA point multiplication on the accelerator and return immediately. When the operation finishes on the accelerator, call SX_ASYNC_ED25519_PTMULT_END()
Parameters
Param | Description |
---|---|
cnx | Connection structure obtained through SX_PK_OPEN() at startup |
r | Secret scalar based on the clamped hash digest of the private key |
See
SX_ASYNC_ED25519_PTMULT_END() and SX_ASYNC_ED25519_PTMULT()
Returns
Acquired acceleration request for this operation
SX_ASYNC_ED25519_PTMULT_END
C
typedef void (*FUNC_SX_ASYNC_ED25519_PTMULT_END)(sx_pk_accel *req, struct sx_ed25519_pt *pt); #define SX_ASYNC_ED25519_PTMULT_END ((FUNC_SX_ASYNC_ED25519_PTMULT_END)(*(uint32_t *)(API_TABLE_BASE_ADDRESS + ATO_SX_ASYNC_ED25519_PTMULT_END)))
Description
Collect the result of asynchronous EDDSA point multiplication (ED25519) Get the output operands of the EDDSA point multiplication and release the reserved resources. The operation on the accelerator must be finished before calling this function.
Parameters
Param | Description |
---|---|
req | The previously acquired acceleration request for this operation |
pt | Encoded resultiing R point |
See
SX_ASYNC_ED25519_PTMULT_GO() and SX_ED25519_PTMULT()
Returns
None
SX_ED25519_SIGN
C
typedef int (*FUNC_SX_ED25519_SIGN)(struct sx_pk_cnx *cnx, const struct sx_ed25519_dgst *k, const struct sx_ed25519_dgst *r, const struct sx_ed25519_v *s, struct sx_ed25519_v *sig_s); #define SX_ED25519_SIGN ((FUNC_SX_ED25519_SIGN)(*(uint32_t *)(API_TABLE_BASE_ADDRESS + ATO_SX_ED25519_SIGN)))
Description
Compute signature scalar s for pure EDDSA (ED25519). This represents the second step in computing an EDDSA signature. This step computes sig_s : sig_s = (r + k * s) % l
Parameters
Param | Description |
---|---|
cnx | Connection structure obtained through SX_PK_OPEN() at startup |
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 |
r | Secret nonce already used in the first signature step |
s | Secret scalar derived from the private key |
sig_s | Second part of EDDSA signature |
See
SX_PK_ASYNC_ED25519_SIGN_GO() and SX_ASYNC_ED25519_SIGN_END() for an asynchronous version
Returns
SX_OK SX_ERR_INVALID_PARAM SX_ERR_UNKNOWN_ERROR SX_ERR_BUSY SX_ERR_NOT_IMPLEMENTED SX_ERR_OPERAND_TOO_LARGE SX_ERR_PLATFORM_ERROR SX_ERR_EXPIRED
SX_PK_ASYNC_ED25519_SIGN_GO
C
typedef struct sx_pk_dreq (*FUNC_SX_PK_ASYNC_ED25519_SIGN_GO)(struct sx_pk_cnx *cnx, const struct sx_ed25519_dgst *k, const struct sx_ed25519_dgst *r, const struct sx_ed25519_v *s); #define SX_PK_ASYNC_ED25519_SIGN_GO ((FUNC_SX_PK_ASYNC_ED25519_SIGN_GO)(*(uint32_t *)(API_TABLE_BASE_ADDRESS + ATO_SX_PK_ASYNC_ED25519_SIGN_GO)))
Description
Asynchronous second part signature generation for pure EDDSA (ED25519). Start an ED25519 signature generation on the accelerator and return immediately. When the operation finishes on the accelerator, call SX_ASYNC_ED25519_SIGN_END()
Parameters
Param | Description |
---|---|
cnx | Connection structure obtained through SX_PK_OPEN() at startup |
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 |
r | Secret nonce already used in the first signature step |
s | Secret scalar derived from the private key |
See
SX_ED25519_SIGN() and SX_ASYNC_ED25519_SIGN_END()
Returns
Acquired acceleration request for this operation
SX_ASYNC_ED25519_SIGN_END
C
typedef void (*FUNC_SX_ASYNC_ED25519_SIGN_END)(sx_pk_accel *req, struct sx_ed25519_v *sig_s); #define SX_ASYNC_ED25519_SIGN_END ((FUNC_SX_ASYNC_ED25519_SIGN_END)(*(uint32_t *)(API_TABLE_BASE_ADDRESS + ATO_SX_ASYNC_ED25519_SIGN_END)))
Description
Collect the result of asynchronous computation of ED25519 signature scalar Get the output operands of the ED25519 signature generation and release the reserved resources. The operation on the accelerator must be finished before calling this function.
Parameters
Param | Description |
---|---|
req | The previously acquired acceleration request for this operation |
sig_s | Second part of the ED25519 signature |
See
SX_PK_ASYNC_ED25519_SIGN_GO() and SX_ED25519_SIGN()
Returns
None
SX_ED25519_VERIFY
C
typedef int (*FUNC_SX_ED25519_VERIFY)(struct sx_pk_cnx *cnx, const struct sx_ed25519_dgst *k, const struct sx_ed25519_pt *a, const struct sx_ed25519_v *sig_s, const struct sx_ed25519_pt *r); #define SX_ED25519_VERIFY ((FUNC_SX_ED25519_VERIFY)(*(uint32_t *)(API_TABLE_BASE_ADDRESS + ATO_SX_ED25519_VERIFY)))
Description
Verify an EDDSA signature (ED25519) 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
Param | Description |
---|---|
cnx | Connection structure obtained through SX_PK_OPEN() at startup |
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 |
a | Encoded public key |
sig_s | Second part of EDDSA signature |
r | Encoded first part of the signature |
See
SX_ASYNC_ED25519_VERIFY_GO() for an asynchronous version
Returns
SX_OK SX_ERR_INVALID_PARAM SX_ERR_UNKNOWN_ERROR SX_ERR_BUSY SX_ERR_NOT_IMPLEMENTED SX_ERR_OPERAND_TOO_LARGE SX_ERR_PLATFORM_ERROR SX_ERR_EXPIRED
SX_ED25519_VERIFY_GO
C
typedef struct sx_pk_dreq (*FUNC_SX_ASYNC_ED25519_VERIFY_GO)(struct sx_pk_cnx *cnx, const struct sx_ed25519_dgst *k, const struct sx_ed25519_pt *a, const struct sx_ed25519_v *sig_s, const struct sx_ed25519_pt *r); #define SX_ASYNC_ED25519_VERIFY_GO ((FUNC_SX_ASYNC_ED25519_VERIFY_GO)(*(uint32_t *)(API_TABLE_BASE_ADDRESS + ATO_SX_ASYNC_ED25519_VERIFY_GO)))
Description
Asynchronous (non-blocking) verify an ED25519 signature. Start an ED25519 signature generation on the accelerator and return immediately. When the operation finishes on the accelerator, call SX_PK_RELEASE_REQ()
Parameters
Param | Description |
---|---|
cnx | Connection structure obtained through SX_PK_OPEN() at startup |
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 |
a | Encoded public key |
sig_s | Second part of EDDSA signature |
r | Encoded first part of the signature |
See
SX_ED25519_VERIFY()
Returns
Acquired acceleration request for this operation