Predefined and custom elliptic curve definitions

@file

EC_CURVES_HEADER_FILE Macro

C

#define EC_CURVES_HEADER_FILE

/ Copyright (c) 2018-2020 Silex Insight sa Copyright (c) 2018-2020 Beerten Engineering scs SPDX-License-Identifier: BSD-3-Clause

int Function

C

typedef int (*FUNC_SX_PK_CURVE_OPSIZE)(const struct sx_pk_ecurve *curve);

@addtogroup SX_PK_CURVES

@{

Slots to write custom curve parameters into. */

struct sx_curve_slots { struct sx_pk_slot p; /< Field size of curve / struct sx_pk_slot n; /< Order of curve / struct sx_pk_slot gx; /< x-coordinate of generator point of curve / struct sx_pk_slot gy; /< y-coordinate of generator point of curve / struct sx_pk_slot a; /< Curve parameter a / struct sx_pk_slot b; /< Curve parameter b / };

Create a prime elliptic curve

SX_PK_CREATE_ECP_CURVE Macro

C

typedef void (FUNC_SX_PK_CREATE_ECP_CURVE)( struct sx_pk_cnx cnx, struct sx_pk_ecurve curve, char mem, int sz, struct sx_curve_slots slots);
#define SX_PK_CREATE_ECP_CURVE ((FUNC_SX_PK_CREATE_ECP_CURVE)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_CREATE_ECP_CURVE)))

@remark When this function returns, copy the paramters of the curve into the slots returned in 'slots'. After that, you can use the prime elliptic curve

Parameters

cnx Connection structure obtained through SX_PK_OPEN() at startup

Parameters

curve Curve to initialise as a prime elliptic curve

Parameters

mem Memory for the parameters of the curve. The size of the memory should be 6 time sz as there are 6 curve parameters of size sz

Parameters

sz Size of the curve in bytes

Parameters

slots Slots for the curve parameters @see SX_PK_CREATE_ECB_CURVE() and SX_PK_DESTROY_EC_CURVE()

Create a binary elliptic curve

SX_PK_CREATE_ECB_CURVE Macro

C

typedef void (FUNC_SX_PK_CREATE_ECB_CURVE)(struct sx_pk_cnx cnx, struct sx_pk_ecurve curve, char mem, int sz, struct sx_curve_slots slots);
#define SX_PK_CREATE_ECB_CURVE ((FUNC_SX_PK_CREATE_ECB_CURVE)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_CREATE_ECB_CURVE)))

@remark When this function returns, copy the paramters of the curve into the slots returned in 'slots'. After that, you can use the binary elliptic curve

Parameters

cnx Connection structure obtained through SX_PK_OPEN() at startup

Parameters

curve Curve to initialise as a binary elliptic curve

Parameters

mem Memory for the parameters of the curve. The size of the memory should be 6 time sz as there are 6 curve parameters of size sz

Parameters

sz Size of the curve in bytes

Parameters

slots Slots for the curve parameters @see SX_PK_CREATE_ECP_CURVE() and SX_PK_DESTROY_EC_CURVE()

Destroy a custom ecp or ecb curve

SX_PK_DESTROY_EC_CURVE Macro

C

typedef void (FUNC_SX_PK_DESTROY_EC_CURVE)(struct sx_pk_ecurve curve);
#define SX_PK_DESTROY_EC_CURVE ((FUNC_SX_PK_DESTROY_EC_CURVE)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_DESTROY_EC_CURVE)))

Destroy a curve created previously by SX_PK_CREATE_ECP_CURVE() or SX_PK_CREATE_ECB_CURVE().

Parameters

curve Initialised curve to destroy

Get a reference to the predefined NIST P192 elliptic curve

SX_PK_GET_CURVE_NISTP192 Macro

C

typedef struct sx_pk_ecurve (FUNC_SX_PK_GET_CURVE_NISTP192)(struct sx_pk_cnx cnx);
#define SX_PK_GET_CURVE_NISTP192 ((FUNC_SX_PK_GET_CURVE_NISTP192)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_GET_CURVE_NISTP192)))

Parameters

cnx Connection structure obtained through SX_PK_OPEN() at startup @return Curve structure for P192 curve

Get a reference to the predefined NIST P256 elliptic curve

SX_PK_GET_CURVE_NISTP256 Macro

C

typedef struct sx_pk_ecurve (FUNC_SX_PK_GET_CURVE_NISTP256)(struct sx_pk_cnx cnx);
#define SX_PK_GET_CURVE_NISTP256 ((FUNC_SX_PK_GET_CURVE_NISTP256)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_GET_CURVE_NISTP256)))

Parameters

cnx Connection structure obtained through SX_PK_OPEN() at startup @return Curve structure for P256 curve

Get a reference to the predefined NIST P384 elliptic curve

SX_PK_GET_CURVE_NISTP384 Macro

C

typedef struct sx_pk_ecurve (FUNC_SX_PK_GET_CURVE_NISTP384)(struct sx_pk_cnx cnx);
#define SX_PK_GET_CURVE_NISTP384 ((FUNC_SX_PK_GET_CURVE_NISTP384)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_GET_CURVE_NISTP384)))

Parameters

cnx Connection structure obtained through SX_PK_OPEN() at startup @return Curve structure for P384 curve

Get a reference to the predefined NIST P521 elliptic curve

SX_PK_GET_CURVE_NISTP521 Macro

C

typedef struct sx_pk_ecurve (FUNC_SX_PK_GET_CURVE_NISTP521)(struct sx_pk_cnx cnx);
#define SX_PK_GET_CURVE_NISTP521 ((FUNC_SX_PK_GET_CURVE_NISTP521)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_GET_CURVE_NISTP521)))

Parameters

cnx Connection structure obtained through SX_PK_OPEN() at startup @return Curve structure for P521 curve

Get a reference to the predefined ED25519 elliptic curve

SX_PK_GET_CURVE_ED25519 Macro

C

typedef struct sx_pk_ecurve (FUNC_SX_PK_GET_CURVE_ED25519)(struct sx_pk_cnx cnx);
#define SX_PK_GET_CURVE_ED25519 ((FUNC_SX_PK_GET_CURVE_ED25519)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_GET_CURVE_ED25519)))

Parameters

cnx Connection structure obtained through SX_PK_OPEN() at startup @return Curve structure for ED25519 curve

Get a reference to the predefined ED448 elliptic curve

SX_PK_GET_CURVE_ED448 Macro

C

typedef struct sx_pk_ecurve (FUNC_SX_PK_GET_CURVE_ED448)(struct sx_pk_cnx cnx);
#define SX_PK_GET_CURVE_ED448 ((FUNC_SX_PK_GET_CURVE_ED448)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_GET_CURVE_ED448)))

Parameters

cnx Connection structure obtained through SX_PK_OPEN() at startup @return Curve structure for ED448 curve

Get a reference to the predefined X25519 elliptic curve

SX_PK_GET_CURVE_X25519 Macro

C

typedef struct sx_pk_ecurve (FUNC_SX_PK_GET_CURVE_X25519)(struct sx_pk_cnx cnx);
#define SX_PK_GET_CURVE_X25519 ((FUNC_SX_PK_GET_CURVE_X25519)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_GET_CURVE_X25519)))

Parameters

cnx Connection structure obtained through SX_PK_OPEN() at startup @return Curve structure for X25519 curve

Get a reference to the predefined X448 elliptic curve

SX_PK_GET_CURVE_X448 Macro

C

typedef struct sx_pk_ecurve (FUNC_SX_PK_GET_CURVE_X448)(struct sx_pk_cnx cnx);
#define SX_PK_GET_CURVE_X448 ((FUNC_SX_PK_GET_CURVE_X448)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_GET_CURVE_X448)))

Parameters

cnx Connection structure obtained through SX_PK_OPEN() at startup @return Curve structure for X448 curve

Get a reference to the predefined SEC p256k1 elliptic curve

SX_PK_GET_CURVE_SECP256K1 Macro

C

typedef struct sx_pk_ecurve (FUNC_SX_PK_GET_CURVE_SECP256K1)(struct sx_pk_cnx cnx);
#define SX_PK_GET_CURVE_SECP256K1 ((FUNC_SX_PK_GET_CURVE_SECP256K1)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_GET_CURVE_SECP256K1)))

Parameters

cnx Connection structure obtained through SX_PK_OPEN() at startup @return Curve structure for SEC p256k1 curve

Get a reference to the predefined fp256 elliptic curve

SX_PK_GET_CURVE_FP256 Macro

C

typedef struct sx_pk_ecurve (FUNC_SX_PK_GET_CURVE_FP256)(struct sx_pk_cnx cnx);
#define SX_PK_GET_CURVE_FP256 ((FUNC_SX_PK_GET_CURVE_FP256)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_GET_CURVE_FP256)))

Parameters

cnx Connection structure obtained through SX_PK_OPEN() at startup @return Curve structure for fp256 curve (used in SM2)

Write the generator point of the curve into the slots (internal)

SX_PK_WRITE_CURVE_GEN Macro

C

typedef void (FUNC_SX_PK_WRITE_CURVE_GEN)(sx_pk_accel pk, const struct sx_pk_ecurve curve, struct sx_pk_slot px, struct sx_pk_slot py);
#define SX_PK_WRITE_CURVE_GEN ((FUNC_SX_PK_WRITE_CURVE_GEN)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_AEAD_CREATE_AESGCM_ENC)))

Write the parameter gx & gy from curve to px.addr & py.addr respectively

Parameters

pk The accelerator request

Parameters

curve Initialised curve to get generator point from.

Parameters

px x-coordinate slot of generator point. The curve generator (x-coordinate) will be written to this address

Parameters

py y-coordinate slot of generator point. The curve generator (y-coordinate) will be written to this address

Return the operand size in bytes for the given curve

SX_PK_CURVE_OPSIZE Macro

C

typedef int (FUNC_SX_PK_CURVE_OPSIZE)(const struct sx_pk_ecurve curve);
#define SX_PK_CURVE_OPSIZE ((FUNC_SX_PK_CURVE_OPSIZE)((uint32_t )(API_TABLE_BASE_ADDRESS + ATO_SX_PK_CURVE_OPSIZE)))

Parameters

curve Initialised curve to get operand size from @return Operand size in bytes for the given curve

}