1*9b50bc25Stobhe /* $OpenBSD: dh.h,v 1.15 2021/05/28 18:01:39 tobhe Exp $ */ 245ae9d61Sreyk 345ae9d61Sreyk /* 4fcebd35dSreyk * Copyright (c) 2010-2013 Reyk Floeter <reyk@openbsd.org> 545ae9d61Sreyk * 645ae9d61Sreyk * Permission to use, copy, modify, and distribute this software for any 745ae9d61Sreyk * purpose with or without fee is hereby granted, provided that the above 845ae9d61Sreyk * copyright notice and this permission notice appear in all copies. 945ae9d61Sreyk * 1045ae9d61Sreyk * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1145ae9d61Sreyk * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1245ae9d61Sreyk * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1345ae9d61Sreyk * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1445ae9d61Sreyk * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1545ae9d61Sreyk * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1645ae9d61Sreyk * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1745ae9d61Sreyk */ 1845ae9d61Sreyk 19a3e464c5Sreyk #ifndef DH_GROUP_H 20a3e464c5Sreyk #define DH_GROUP_H 2145ae9d61Sreyk 2245ae9d61Sreyk enum group_type { 2345ae9d61Sreyk GROUP_MODP = 0, 24bc77414bStobhe GROUP_ECP = 1, 25*9b50bc25Stobhe GROUP_CURVE25519 = 2, 26*9b50bc25Stobhe GROUP_SNTRUP761X25519 = 3 2745ae9d61Sreyk }; 2845ae9d61Sreyk 2945ae9d61Sreyk struct group_id { 3045ae9d61Sreyk enum group_type type; 31d09d3a7dSreyk unsigned int id; 3245ae9d61Sreyk int bits; 3345ae9d61Sreyk char *prime; 3445ae9d61Sreyk char *generator; 3545ae9d61Sreyk int nid; 3645ae9d61Sreyk }; 3745ae9d61Sreyk 380e1bb3dcStobhe struct dh_group { 3945ae9d61Sreyk int id; 40e254d6eaSmikeb const struct group_id 41e254d6eaSmikeb *spec; 4245ae9d61Sreyk 4345ae9d61Sreyk void *dh; 4445ae9d61Sreyk void *ec; 4545135ebcSreyk void *curve25519; 46*9b50bc25Stobhe void *kemsx; 4745ae9d61Sreyk 480e1bb3dcStobhe int (*init)(struct dh_group *); 490e1bb3dcStobhe int (*getlen)(struct dh_group *); 500e1bb3dcStobhe int (*secretlen)(struct dh_group *); 510e1bb3dcStobhe int (*exchange)(struct dh_group *, uint8_t *); 52*9b50bc25Stobhe int (*exchange2)(struct dh_group *, struct ibuf **, struct ibuf *); 530e1bb3dcStobhe int (*shared)(struct dh_group *, uint8_t *, uint8_t *); 54*9b50bc25Stobhe int (*shared2)(struct dh_group *, struct ibuf **, struct ibuf *); 5545ae9d61Sreyk }; 5645ae9d61Sreyk 570d5bf58dSreyk #define DH_MAXSZ 1024 /* 8192 bits */ 580d5bf58dSreyk 5945ae9d61Sreyk void group_init(void); 600e1bb3dcStobhe void group_free(struct dh_group *); 610e1bb3dcStobhe struct dh_group *group_get(uint32_t); 62e254d6eaSmikeb const struct group_id 63e254d6eaSmikeb *group_getid(uint32_t); 6445ae9d61Sreyk 650e1bb3dcStobhe int dh_create_exchange(struct dh_group *, struct ibuf **, struct ibuf *); 660e1bb3dcStobhe int dh_create_shared(struct dh_group *, struct ibuf **, struct ibuf *); 6745ae9d61Sreyk 68a3e464c5Sreyk #endif /* DH_GROUP_H */ 69