#ifndef _ECC_ACTS_H
#define _ECC_ACTS_H

#define BT_P192_PK_SIZE  48
#define BT_P192_DHK_SIZE 24
#define BT_P256_PK_SIZE  64
#define BT_P256_DHK_SIZE 32

enum {
	PENDING_P192_PUB_KEY,
	PENDING_P192_DHKEY,
	PENDING_P256_PUB_KEY,
	PENDING_P256_DHKEY,
	/* Total number of flags - must be at the end of the enum */
	NUM_ECC_FLAGS,
};

struct bt_gen_p192_pk_rsp {
    uint8_t public_key[48];
    uint8_t private_key[24];
} __packed;

struct bt_gen_p192_dhkey_req {
	uint8_t id;
	uint8_t pad[3];
	uint8_t remote_pk[48];
	uint8_t private_key[24];
} __packed;

struct bt_gen_p192_dhkey_rsp {
	uint8_t id;
	uint8_t pad[3];
	uint8_t dhkey[24];
} __packed;

struct bt_gen_p256_pk_rsp {
    uint8_t public_key[64];
    uint8_t private_key[32];
} __packed;

struct bt_gen_p256_dhkey_req {
	uint8_t id;
	uint8_t pad[3];
    uint8_t remote_pk[64];
    uint8_t private_key[32];
} __packed;

struct bt_gen_p256_dhkey_rsp {
	uint8_t id;
	uint8_t pad[3];
    uint8_t dhkey[32];
} __packed;

int ecc_init(void);

void acts_work_submit(struct k_work *work);

int ecc_gen_p192_pk(uint8_t *public_key, uint8_t *private_key);

int ecc_valid_p192_pk(uint8_t *public_key);

int ecc_gen_p192_dhkey(uint8_t *public_key, uint8_t *private_key, uint8_t *dhkey);

int ecc_gen_p256_pk(uint8_t *public_key, uint8_t *private_key);

int ecc_valid_p256_pk(uint8_t *public_key);

int ecc_gen_p256_dhkey(uint8_t *public_key, uint8_t *private_key, uint8_t *dhkey);

#endif
