#ifndef EC_H
#define EC_H
#include "sa_types.h"
#include "stored_key.h"
#ifdef __cplusplus
#include <cstdbool>
#include <cstddef>
extern "C" {
#else
#include <stdbool.h>
#include <stddef.h>
#endif
size_t ec_key_size_from_curve(sa_elliptic_curve curve);
size_t ec_validate_private(
sa_elliptic_curve curve,
const void* private,
size_t private_length);
sa_status ec_get_public(
void* out,
size_t* out_length,
const stored_key_t* stored_key);
sa_status ec_verify_cipher(
sa_cipher_mode cipher_mode,
const stored_key_t* stored_key);
sa_status ec_decrypt_elgamal(
void* out,
size_t* out_length,
const stored_key_t* stored_key,
const void* in,
size_t in_length);
sa_status ec_compute_ecdh_shared_secret(
stored_key_t** stored_key_shared_secret,
const sa_rights* rights,
const void* other_public,
size_t other_public_length,
const stored_key_t* stored_key);
sa_status ec_sign_ecdsa(
void* signature,
size_t* signature_length,
sa_digest_algorithm digest_algorithm,
const stored_key_t* stored_key,
const void* in,
size_t in_length,
bool precomputed_digest);
sa_status ec_sign_eddsa(
void* signature,
size_t* signature_length,
const stored_key_t* stored_key,
const void* in,
size_t in_length);
sa_status ec_generate_key(
stored_key_t** stored_key,
const sa_rights* rights,
sa_generate_parameters_ec* parameters);
#ifdef __cplusplus
}
#endif
#endif