Return to ntru_param_set.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / src / libstrongswan / plugins / ntru |
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_ @}*/