#ifndef DH_GROUP_H
#define DH_GROUP_H
enum group_type {
GROUP_MODP = 0,
GROUP_ECP = 1,
GROUP_CURVE25519 = 2,
GROUP_SNTRUP761X25519 = 3
};
struct group_id {
enum group_type type;
unsigned int id;
int bits;
char *prime;
char *generator;
int nid;
};
struct dh_group {
int id;
const struct group_id
*spec;
void *dh;
void *ec;
void *curve25519;
void *kemsx;
int (*init)(struct dh_group *);
int (*getlen)(struct dh_group *);
int (*secretlen)(struct dh_group *);
int (*exchange)(struct dh_group *, uint8_t *);
int (*exchange2)(struct dh_group *, struct ibuf **, struct ibuf *);
int (*shared)(struct dh_group *, uint8_t *, uint8_t *);
int (*shared2)(struct dh_group *, struct ibuf **, struct ibuf *);
};
#define DH_MAXSZ 1024
void group_init(void);
void group_free(struct dh_group *);
struct dh_group *group_get(uint32_t);
const struct group_id
*group_getid(uint32_t);
int dh_create_exchange(struct dh_group *, struct ibuf **, struct ibuf *);
int dh_create_shared(struct dh_group *, struct ibuf **, struct ibuf *);
#endif