Return to bliss_param_set.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / src / libstrongswan / plugins / bliss |
1.1 misho 1: /* 2: * Copyright (C) 2014 Andreas Steffen 3: * HSR Hochschule fuer Technik Rapperswil 4: * 5: * This program is free software; you can redistribute it and/or modify it 6: * under the terms of the GNU General Public License as published by the 7: * Free Software Foundation; either version 2 of the License, or (at your 8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. 9: * 10: * This program is distributed in the hope that it will be useful, but 11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13: * for more details. 14: */ 15: 16: /** 17: * @defgroup bliss_param_set bliss_param_set 18: * @{ @ingroup bliss_p 19: */ 20: 21: #ifndef BLISS_PARAM_SET_H_ 22: #define BLISS_PARAM_SET_H_ 23: 24: typedef enum bliss_param_set_id_t bliss_param_set_id_t; 25: typedef struct bliss_param_set_t bliss_param_set_t; 26: 27: #include "ntt_fft_params.h" 28: #include "bliss_huffman_code.h" 29: 30: #include <library.h> 31: 32: /** 33: * BLISS signature parameter set ID list 34: */ 35: enum bliss_param_set_id_t { 36: BLISS_I = 1, 37: BLISS_II = 2, 38: BLISS_III = 3, 39: BLISS_IV = 4, 40: BLISS_B_I = 5, 41: BLISS_B_II = 6, 42: BLISS_B_III = 7, 43: BLISS_B_IV = 8 44: }; 45: 46: extern enum_name_t *bliss_param_set_id_names; 47: 48: /** 49: * BLISS 50: */ 51: struct bliss_param_set_t { 52: 53: /** 54: * BLISS parameter set ID 55: */ 56: const bliss_param_set_id_t id; 57: 58: /** 59: * BLISS parameter set OID 60: */ 61: const int oid; 62: 63: /** 64: * Security strength in bits 65: */ 66: const uint16_t strength; 67: 68: /** 69: * Prime modulus 70: */ 71: const uint16_t q; 72: 73: /** 74: * Number of bits in q 75: */ 76: const uint16_t q_bits; 77: 78: /** 79: * Inverse of (q + 2) mod 2q 80: */ 81: const uint16_t q2_inv; 82: 83: /** 84: * Ring dimension equal to the number of polynomial coefficients 85: */ 86: const uint16_t n; 87: 88: /** 89: * Number of bits in n 90: */ 91: const uint16_t n_bits; 92: 93: /** 94: * FFT parameters 95: */ 96: const ntt_fft_params_t *fft_params; 97: 98: /** 99: * Number of [-1, +1] secret key coefficients 100: */ 101: const uint16_t non_zero1; 102: 103: /** 104: * Number of [-2, +2] secret key coefficients 105: */ 106: const uint16_t non_zero2; 107: 108: /** 109: * Number of secret key terms that go into Nk(S) norm 110: */ 111: const uint16_t kappa; 112: 113: /** 114: * Maximum Nk(S) tolerable NK(S) norm (BLISS only) 115: */ 116: const uint32_t nks_max; 117: 118: /** 119: * Maximum value Pmax for ||Sc'||^2 norm (BLISS-B only) 120: */ 121: const uint32_t p_max; 122: 123: /** 124: * Standard deviation sigma 125: */ 126: const uint16_t sigma; 127: 128: /** 129: * k_sigma = ceiling[ sqrt(2*ln 2) * sigma ] 130: */ 131: const uint16_t k_sigma; 132: 133: /** 134: * Number of bits in k_sigma 135: */ 136: const uint16_t k_sigma_bits; 137: 138: /** 139: * Coefficients for Bernoulli sampling with exponential biases 140: */ 141: const uint8_t *c; 142: 143: /** 144: * Number of columns in Bernoulli coefficient table 145: */ 146: const size_t c_cols; 147: 148: /** 149: * Number of rows in Bernoulli coefficient table 150: */ 151: const size_t c_rows; 152: 153: /** 154: * Number of bits in z1 155: */ 156: const uint16_t z1_bits; 157: 158: /** 159: * Number of z2 bits to be dropped after rounding 160: */ 161: const uint16_t d; 162: 163: /** 164: * Modulus p = floor(2q / 2^d) applied after bit dropping 165: */ 166: const uint16_t p; 167: 168: /** 169: * M = sigma^2 / alpha_rejection^2 170: */ 171: const uint32_t M; 172: 173: /** 174: * B_infinity bound 175: */ 176: const uint16_t B_inf; 177: 178: /** 179: * B_verify bound 180: */ 181: const uint32_t B_l2; 182: 183: }; 184: 185: /** 186: * Get BLISS signature parameter set by BLISS parameter set ID 187: * 188: * @param id BLISS parameter set ID 189: * @return BLISS parameter set 190: */ 191: const bliss_param_set_t* bliss_param_set_get_by_id(bliss_param_set_id_t id); 192: 193: /** 194: * Get BLISS signature parameter set by BLISS parameter set OID 195: * 196: * @param oid BLISS parameter set OID 197: * @return BLISS parameter set 198: */ 199: const bliss_param_set_t* bliss_param_set_get_by_oid(int oid); 200: 201: #endif /** BLISS_PARAM_SET_H_ @}*/