#ifndef OPENSSL_HEADER_EC_ECP_NISTZ256_H
#define OPENSSL_HEADER_EC_ECP_NISTZ256_H
#include <openssl/bn.h>
#include "../limbs/limbs.h"
#if defined(__cplusplus)
extern "C" {
#endif
#define P256_LIMBS (256u / LIMB_BITS)
typedef struct {
BN_ULONG X[P256_LIMBS];
BN_ULONG Y[P256_LIMBS];
BN_ULONG Z[P256_LIMBS];
} P256_POINT;
typedef struct {
BN_ULONG X[P256_LIMBS];
BN_ULONG Y[P256_LIMBS];
} P256_POINT_AFFINE;
void GFp_nistz256_mul_mont(BN_ULONG res[P256_LIMBS],
const BN_ULONG a[P256_LIMBS],
const BN_ULONG b[P256_LIMBS]);
void GFp_nistz256_sqr_mont(BN_ULONG res[P256_LIMBS],
const BN_ULONG a[P256_LIMBS]);
void GFp_nistz256_select_w5(P256_POINT *out, const P256_POINT table[16],
int index);
void GFp_nistz256_select_w7(P256_POINT_AFFINE *out,
const P256_POINT_AFFINE table[64], int index);
#if defined(__cplusplus)
}
#endif
#endif