Annotation of embedaddon/strongswan/src/libstrongswan/plugins/ntru/ntru_param_set.c, 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: #include "ntru_param_set.h"
19:
20: #include <utils/test.h>
21:
22: ENUM(ntru_param_set_id_names, NTRU_EES401EP1, NTRU_EES743EP1,
23: "ees401ep1",
24: "ees449ep1",
25: "ees677ep1",
26: "ees1087ep2",
27: "ees541ep1",
28: "ees613ep1",
29: "ees887ep1",
30: "ees1171ep1",
31: "ees659ep1",
32: "ees761ep1",
33: "ees1087ep1",
34: "ees1499ep1",
35: "ees401ep2",
36: "ees439ep1",
37: "ees593ep1",
38: "ees743ep1"
39: );
40:
41: /**
42: * NTRU encryption parameter set definitions
43: */
44: static const ntru_param_set_t ntru_param_sets[] = {
45:
46: /* X9.98/IEEE 1363.1 parameter sets for best bandwidth (smallest size) */
47: {
48: NTRU_EES401EP1, /* parameter-set id */
49: {0x00, 0x02, 0x04}, /* OID */
50: 0x22, /* DER id */
51: 9, /* no. of bits in N (i.e., in an index) */
52: 401, /* N */
53: 14, /* security strength in octets */
54: 2048, /* q */
55: 11, /* no. of bits in q (i.e., in a coeff) */
56: FALSE, /* product form */
57: 113, /* df, dr */
58: 133, /* dg */
59: 60, /* maxMsgLenBytes */
60: 113, /* dm0 */
61: 11, /* c */
62: 1, /* lLen */
63: },
64:
65: {
66: NTRU_EES449EP1, /* parameter-set id */
67: {0x00, 0x03, 0x03}, /* OID */
68: 0x23, /* DER id */
69: 9, /* no. of bits in N (i.e., in an index) */
70: 449, /* N */
71: 16, /* security strength in octets */
72: 2048, /* q */
73: 11, /* no. of bits in q (i.e., in a coeff) */
74: FALSE, /* product form */
75: 134, /* df, dr */
76: 149, /* dg */
77: 67, /* maxMsgLenBytes */
78: 134, /* dm0 */
79: 9, /* c */
80: 1, /* lLen */
81: },
82:
83: {
84: NTRU_EES677EP1, /* parameter-set id */
85: {0x00, 0x05, 0x03}, /* OID */
86: 0x24, /* DER id */
87: 10, /* no. of bits in N (i.e., in an index) */
88: 677, /* N */
89: 24, /* security strength in octets */
90: 2048, /* q */
91: 11, /* no. of bits in q (i.e., in a coeff) */
92: FALSE, /* product form */
93: 157, /* df, dr */
94: 225, /* dg */
95: 101, /* maxMsgLenBytes */
96: 157, /* dm0 */
97: 11, /* c */
98: 1, /* lLen */
99: },
100:
101: {
102: NTRU_EES1087EP2, /* parameter-set id */
103: {0x00, 0x06, 0x03}, /* OID */
104: 0x25, /* DER id */
105: 11, /* no. of bits in N (i.e., in an index) */
106: 1087, /* N */
107: 32, /* security strength in octets */
108: 2048, /* q */
109: 11, /* no. of bits in q (i.e., in a coeff) */
110: FALSE, /* product form */
111: 120, /* df, dr */
112: 362, /* dg */
113: 170, /* maxMsgLenBytes */
114: 120, /* dm0 */
115: 13, /* c */
116: 1, /* lLen */
117: },
118:
119: /* X9.98/IEEE 1363.1 parameter sets balancing speed and bandwidth */
120: {
121: NTRU_EES541EP1, /* parameter-set id */
122: {0x00, 0x02, 0x05}, /* OID */
123: 0x26, /* DER id */
124: 10, /* no. of bits in N (i.e., in an index) */
125: 541, /* N */
126: 14, /* security strength in octets */
127: 2048, /* q */
128: 11, /* no. of bits in q (i.e., in a coeff) */
129: FALSE, /* product form */
130: 49, /* df, dr */
131: 180, /* dg */
132: 86, /* maxMsgLenBytes */
133: 49, /* dm0 */
134: 12, /* c */
135: 1, /* lLen */
136: },
137:
138: {
139: NTRU_EES613EP1, /* parameter-set id */
140: {0x00, 0x03, 0x04}, /* OID */
141: 0x27, /* DER id */
142: 10, /* no. of bits in N (i.e., in an index) */
143: 613, /* N */
144: 16, /* security strength in octets */
145: 2048, /* q */
146: 11, /* no. of bits in q (i.e., in a coeff) */
147: FALSE, /* product form */
148: 55, /* df, dr */
149: 204, /* dg */
150: 97, /* maxMsgLenBytes */
151: 55, /* dm0 */
152: 11, /* c */
153: 1, /* lLen */
154: },
155:
156: {
157: NTRU_EES887EP1, /* parameter-set id */
158: {0x00, 0x05, 0x04}, /* OID */
159: 0x28, /* DER id */
160: 10, /* no. of bits in N (i.e., in an index) */
161: 887, /* N */
162: 24, /* security strength in octets */
163: 2048, /* q */
164: 11, /* no. of bits in q (i.e., in a coeff) */
165: FALSE, /* product form */
166: 81, /* df, dr */
167: 295, /* dg */
168: 141, /* maxMsgLenBytes */
169: 81, /* dm0 */
170: 10, /* c */
171: 1, /* lLen */
172: },
173:
174: {
175: NTRU_EES1171EP1, /* parameter-set id */
176: {0x00, 0x06, 0x04}, /* OID */
177: 0x29, /* DER id */
178: 11, /* no. of bits in N (i.e., in an index) */
179: 1171, /* N */
180: 32, /* security strength in octets */
181: 2048, /* q */
182: 11, /* no. of bits in q (i.e., in a coeff) */
183: FALSE, /* product form */
184: 106, /* df, dr */
185: 390, /* dg */
186: 186, /* maxMsgLenBytes */
187: 106, /* dm0 */
188: 12, /* c */
189: 1, /* lLen */
190: },
191:
192: /* X9.98/IEEE 1363.1 parameter sets for best speed */
193: {
194: NTRU_EES659EP1, /* parameter-set id */
195: {0x00, 0x02, 0x06}, /* OID */
196: 0x2a, /* DER id */
197: 10, /* no. of bits in N (i.e., in an index) */
198: 659, /* N */
199: 14, /* security strength in octets */
200: 2048, /* q */
201: 11, /* no. of bits in q (i.e., in a coeff) */
202: FALSE, /* product form */
203: 38, /* df, dr */
204: 219, /* dg */
205: 108, /* maxMsgLenBytes */
206: 38, /* dm0 */
207: 11, /* c */
208: 1, /* lLen */
209: },
210:
211: {
212: NTRU_EES761EP1, /* parameter-set id */
213: {0x00, 0x03, 0x05}, /* OID */
214: 0x2b, /* DER id */
215: 10, /* no. of bits in N (i.e., in an index) */
216: 761, /* N */
217: 16, /* security strength in octets */
218: 2048, /* q */
219: 11, /* no. of bits in q (i.e., in a coeff) */
220: FALSE, /* product form */
221: 42, /* df, dr */
222: 253, /* dg */
223: 125, /* maxMsgLenBytes */
224: 42, /* dm0 */
225: 12, /* c */
226: 1, /* lLen */
227: },
228:
229: {
230: NTRU_EES1087EP1, /* parameter-set id */
231: {0x00, 0x05, 0x05}, /* OID */
232: 0x2c, /* DER id */
233: 11, /* no. of bits in N (i.e., in an index) */
234: 1087, /* N */
235: 24, /* security strength in octets */
236: 2048, /* q */
237: 11, /* no. of bits in q (i.e., in a coeff) */
238: FALSE, /* product form */
239: 63, /* df, dr */
240: 362, /* dg */
241: 178, /* maxMsgLenBytes */
242: 63, /* dm0 */
243: 13, /* c */
244: 1, /* lLen */
245: },
246:
247: {
248: NTRU_EES1499EP1, /* parameter-set id */
249: {0x00, 0x06, 0x05}, /* OID */
250: 0x2d, /* DER id */
251: 11, /* no. of bits in N (i.e., in an index) */
252: 1499, /* N */
253: 32, /* security strength in octets */
254: 2048, /* q */
255: 11, /* no. of bits in q (i.e., in a coeff) */
256: FALSE, /* product form */
257: 79, /* df, dr */
258: 499, /* dg */
259: 247, /* maxMsgLenBytes */
260: 79, /* dm0 */
261: 13, /* c */
262: 1, /* lLen */
263: },
264:
265: /* Best bandwidth and speed, no X9.98 compatibility */
266: {
267: NTRU_EES401EP2, /* parameter-set id */
268: {0x00, 0x02, 0x10}, /* OID */
269: 0x2e, /* DER id */
270: 9, /* no. of bits in N (i.e., in an index) */
271: 401, /* N */
272: 14, /* security strength in octets */
273: 2048, /* q */
274: 11, /* no. of bits in q (i.e., in a coeff) */
275: TRUE, /* product form */
276: 8 + (8 << 8) + (6 << 16), /* df, dr */
277: 133, /* dg */
278: 60, /* maxMsgLenBytes */
279: 136, /* m(1)_max */
280: 11, /* c */
281: 1, /* lLen */
282: },
283:
284: {
285: NTRU_EES439EP1, /* parameter-set id */
286: {0x00, 0x03, 0x10}, /* OID */
287: 0x2f, /* DER id */
288: 9, /* no. of bits in N (i.e., in an index) */
289: 439, /* N */
290: 16, /* security strength in octets */
291: 2048, /* q */
292: 11, /* no. of bits in q (i.e., in a coeff) */
293: TRUE, /* product form */
294: 9 + (8 << 8) + (5 << 16), /* df, dr */
295: 146, /* dg */
296: 65, /* maxMsgLenBytes */
297: 126, /* m(1)_max */
298: 9, /* c */
299: 1, /* lLen */
300: },
301:
302: {
303: NTRU_EES593EP1, /* parameter-set id */
304: {0x00, 0x05, 0x10}, /* OID */
305: 0x30, /* DER id */
306: 10, /* no. of bits in N (i.e., in an index) */
307: 593, /* N */
308: 24, /* security strength in octets */
309: 2048, /* q */
310: 11, /* no. of bits in q (i.e., in a coeff) */
311: TRUE, /* product form */
312: 10 + (10 << 8) + (8 << 16), /* df, dr */
313: 197, /* dg */
314: 86, /* maxMsgLenBytes */
315: 90, /* m(1)_max */
316: 11, /* c */
317: 1, /* lLen */
318: },
319:
320: {
321: NTRU_EES743EP1, /* parameter-set id */
322: {0x00, 0x06, 0x10}, /* OID */
323: 0x31, /* DER id */
324: 10, /* no. of bits in N (i.e., in an index) */
325: 743, /* N */
326: 32, /* security strength in octets */
327: 2048, /* q */
328: 11, /* no. of bits in q (i.e., in a coeff) */
329: TRUE, /* product form */
330: 11 + (11 << 8) + (15 << 16), /* df, dr */
331: 247, /* dg */
332: 106, /* maxMsgLenBytes */
333: 60, /* m(1)_max */
334: 13, /* c */
335: 1, /* lLen */
336: },
337:
338: };
339:
340: /**
341: * See header.
342: */
343: const ntru_param_set_t* ntru_param_set_get_by_id(ntru_param_set_id_t id)
344: {
345: int i;
346:
347: for (i = 0; i < countof(ntru_param_sets); i++)
348: {
349: if (ntru_param_sets[i].id == id)
350: {
351: return &ntru_param_sets[i];
352: }
353: }
354: return NULL;
355: }
356:
357:
358: /**
359: * See header.
360: */
361: const ntru_param_set_t* ntru_param_set_get_by_oid(uint8_t const *oid)
362: {
363: int i;
364:
365: for (i = 0; i < countof(ntru_param_sets); i++)
366: {
367: if (memeq(ntru_param_sets[i].oid, oid, 3))
368: {
369: return &ntru_param_sets[i];
370: }
371: }
372: return NULL;
373: }
374:
375: EXPORT_FUNCTION_FOR_TESTS(ntru, ntru_param_set_get_by_id);
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>