Annotation of embedaddon/strongswan/src/libstrongswan/plugins/ntru/ntru_param_set.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2014 Andreas Steffen
3: * HSR Hochschule fuer Technik Rapperswil
4: *
5: * Copyright (C) 2009-2013 Security Innovation
6: *
7: * This program is free software; you can redistribute it and/or modify it
8: * under the terms of the GNU General Public License as published by the
9: * Free Software Foundation; either version 2 of the License, or (at your
10: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
11: *
12: * This program is distributed in the hope that it will be useful, but
13: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15: * for more details.
16: */
17:
18: /**
19: * @defgroup ntru_param_set ntru_param_set
20: * @{ @ingroup ntru_p
21: */
22:
23: #ifndef NTRU_PARAM_SET_H_
24: #define NTRU_PARAM_SET_H_
25:
26: typedef enum ntru_param_set_id_t ntru_param_set_id_t;
27: typedef struct ntru_param_set_t ntru_param_set_t;
28:
29: #include <library.h>
30:
31: /**
32: * Encoding types for NTRU encryption public/private key blobs
33: */
34: #define NTRU_PUBKEY_TAG 0x01
35: #define NTRU_PRIVKEY_DEFAULT_TAG 0x02
36: #define NTRU_PRIVKEY_TRITS_TAG 0xfe
37: #define NTRU_PRIVKEY_INDICES_TAG 0xff
38:
39: /**
40: * Size in octets of the OID designating the NTRU encryption parameter set
41: */
42: #define NTRU_OID_LEN 3
43:
44: /**
45: * Packing types for NTRU encryption public/private keys
46: */
47: #define NTRU_KEY_PACKED_COEFFICIENTS 0x01
48: #define NTRU_KEY_PACKED_INDICES 0x02
49: #define NTRU_KEY_PACKED_TRITS 0x03
50:
51: /**
52: * NTRU encryption parameter set ID list
53: */
54: enum ntru_param_set_id_t {
55: /* X9.98/IEEE 1363.1 parameter sets for best bandwidth (smallest size) */
56: NTRU_EES401EP1,
57: NTRU_EES449EP1,
58: NTRU_EES677EP1,
59: NTRU_EES1087EP2,
60: /* X9.98/IEEE 1363.1 parameter sets balancing speed and bandwidth */
61: NTRU_EES541EP1,
62: NTRU_EES613EP1,
63: NTRU_EES887EP1,
64: NTRU_EES1171EP1,
65: /* X9.98/IEEE 1363.1 parameter sets for best speed */
66: NTRU_EES659EP1,
67: NTRU_EES761EP1,
68: NTRU_EES1087EP1,
69: NTRU_EES1499EP1,
70: /* Best bandwidth and speed, no X9.98 compatibility */
71: NTRU_EES401EP2,
72: NTRU_EES439EP1,
73: NTRU_EES593EP1,
74: NTRU_EES743EP1,
75: };
76:
77: extern enum_name_t *ntru_param_set_id_names;
78:
79: /**
80: * NTRU encryption parameter set definitions
81: */
82: struct ntru_param_set_t {
83:
84: /**
85: * NTRU parameter set ID
86: */
87: const ntru_param_set_id_t id;
88:
89: /**
90: * pointer to OID
91: */
92: const uint8_t oid[NTRU_OID_LEN];
93:
94: /**
95: * parameter-set DER id
96: */
97: const uint8_t der_id;
98:
99: /**
100: * no. of bits in N (i.e. in an index
101: */
102: const uint8_t N_bits;
103:
104: /**
105: * ring dimension
106: */
107: const uint16_t N;
108:
109: /**
110: * no. of octets of security strength
111: */
112: const uint16_t sec_strength_len;
113:
114: /**
115: * big modulus
116: */
117: const uint16_t q;
118:
119: /**
120: * no. of bits in q (i.e. in a coefficient)
121: */
122: const uint8_t q_bits;
123:
124: /**
125: * if product form used
126: */
127: const bool is_product_form;
128:
129: /**
130: * no. of +1 or -1 coefficients in ring elements F, r
131: */
132: const uint32_t dF_r;
133:
134: /**
135: * no. - 1 of +1 coefficients or no. of -1 coefficients in ring element g
136: */
137: const uint16_t dg;
138:
139: /**
140: * max no. of plaintext octets
141: */
142: const uint16_t m_len_max;
143:
144: /**
145: * min. message representative weight
146: */
147: const uint16_t min_msg_rep_wt;
148:
149: /**
150: * no. bits in candidate for deriving an index
151: */
152: const uint8_t c_bits;
153:
154: /**
155: * no. of octets to hold mLenOctets
156: */
157: const uint8_t m_len_len;
158: };
159:
160: /**
161: * Get NTRU encryption parameter set by NTRU parameter set ID
162: *
163: * @param id NTRU parameter set ID
164: * @return NTRU parameter set
165: */
166: const ntru_param_set_t* ntru_param_set_get_by_id(ntru_param_set_id_t id);
167:
168: /**
169: * Get NTRU encryption parameter set by NTRU parameter set OID
170: *
171: * @param oid NTRU parameter set OID
172: * @return NTRU parameter set
173: */
174: const ntru_param_set_t* ntru_param_set_get_by_oid(uint8_t const *oid);
175:
176: #endif /** NTRU_PARAM_SET_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>