Hacl_Bignum.h (6624B)
1 /* MIT License 2 * 3 * Copyright (c) 2016-2022 INRIA, CMU and Microsoft Corporation 4 * Copyright (c) 2022-2023 HACL* Contributors 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to deal 8 * in the Software without restriction, including without limitation the rights 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 * copies of the Software, and to permit persons to whom the Software is 11 * furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in all 14 * copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 * SOFTWARE. 23 */ 24 25 #ifndef __internal_Hacl_Bignum_H 26 #define __internal_Hacl_Bignum_H 27 28 #if defined(__cplusplus) 29 extern "C" { 30 #endif 31 32 #include <string.h> 33 #include "krml/internal/types.h" 34 #include "krml/lowstar_endianness.h" 35 #include "krml/internal/target.h" 36 37 #include "internal/Hacl_Krmllib.h" 38 #include "internal/Hacl_Bignum_Base.h" 39 #include "../Hacl_Bignum.h" 40 #include "lib_intrinsics.h" 41 42 void 43 Hacl_Bignum_Karatsuba_bn_karatsuba_mul_uint32( 44 uint32_t aLen, 45 uint32_t *a, 46 uint32_t *b, 47 uint32_t *tmp, 48 uint32_t *res); 49 50 void 51 Hacl_Bignum_Karatsuba_bn_karatsuba_mul_uint64( 52 uint32_t aLen, 53 uint64_t *a, 54 uint64_t *b, 55 uint64_t *tmp, 56 uint64_t *res); 57 58 void 59 Hacl_Bignum_Karatsuba_bn_karatsuba_sqr_uint32( 60 uint32_t aLen, 61 uint32_t *a, 62 uint32_t *tmp, 63 uint32_t *res); 64 65 void 66 Hacl_Bignum_Karatsuba_bn_karatsuba_sqr_uint64( 67 uint32_t aLen, 68 uint64_t *a, 69 uint64_t *tmp, 70 uint64_t *res); 71 72 void 73 Hacl_Bignum_bn_add_mod_n_u32( 74 uint32_t len1, 75 uint32_t *n, 76 uint32_t *a, 77 uint32_t *b, 78 uint32_t *res); 79 80 void 81 Hacl_Bignum_bn_add_mod_n_u64( 82 uint32_t len1, 83 uint64_t *n, 84 uint64_t *a, 85 uint64_t *b, 86 uint64_t *res); 87 88 void 89 Hacl_Bignum_bn_sub_mod_n_u32( 90 uint32_t len1, 91 uint32_t *n, 92 uint32_t *a, 93 uint32_t *b, 94 uint32_t *res); 95 96 void 97 Hacl_Bignum_bn_sub_mod_n_u64( 98 uint32_t len1, 99 uint64_t *n, 100 uint64_t *a, 101 uint64_t *b, 102 uint64_t *res); 103 104 uint32_t Hacl_Bignum_ModInvLimb_mod_inv_uint32(uint32_t n0); 105 106 uint64_t Hacl_Bignum_ModInvLimb_mod_inv_uint64(uint64_t n0); 107 108 uint32_t Hacl_Bignum_Montgomery_bn_check_modulus_u32(uint32_t len, uint32_t *n); 109 110 void 111 Hacl_Bignum_Montgomery_bn_precomp_r2_mod_n_u32( 112 uint32_t len, 113 uint32_t nBits, 114 uint32_t *n, 115 uint32_t *res); 116 117 void 118 Hacl_Bignum_Montgomery_bn_mont_reduction_u32( 119 uint32_t len, 120 uint32_t *n, 121 uint32_t nInv, 122 uint32_t *c, 123 uint32_t *res); 124 125 void 126 Hacl_Bignum_Montgomery_bn_to_mont_u32( 127 uint32_t len, 128 uint32_t *n, 129 uint32_t nInv, 130 uint32_t *r2, 131 uint32_t *a, 132 uint32_t *aM); 133 134 void 135 Hacl_Bignum_Montgomery_bn_from_mont_u32( 136 uint32_t len, 137 uint32_t *n, 138 uint32_t nInv_u64, 139 uint32_t *aM, 140 uint32_t *a); 141 142 void 143 Hacl_Bignum_Montgomery_bn_mont_mul_u32( 144 uint32_t len, 145 uint32_t *n, 146 uint32_t nInv_u64, 147 uint32_t *aM, 148 uint32_t *bM, 149 uint32_t *resM); 150 151 void 152 Hacl_Bignum_Montgomery_bn_mont_sqr_u32( 153 uint32_t len, 154 uint32_t *n, 155 uint32_t nInv_u64, 156 uint32_t *aM, 157 uint32_t *resM); 158 159 uint64_t Hacl_Bignum_Montgomery_bn_check_modulus_u64(uint32_t len, uint64_t *n); 160 161 void 162 Hacl_Bignum_Montgomery_bn_precomp_r2_mod_n_u64( 163 uint32_t len, 164 uint32_t nBits, 165 uint64_t *n, 166 uint64_t *res); 167 168 void 169 Hacl_Bignum_Montgomery_bn_mont_reduction_u64( 170 uint32_t len, 171 uint64_t *n, 172 uint64_t nInv, 173 uint64_t *c, 174 uint64_t *res); 175 176 void 177 Hacl_Bignum_Montgomery_bn_to_mont_u64( 178 uint32_t len, 179 uint64_t *n, 180 uint64_t nInv, 181 uint64_t *r2, 182 uint64_t *a, 183 uint64_t *aM); 184 185 void 186 Hacl_Bignum_Montgomery_bn_from_mont_u64( 187 uint32_t len, 188 uint64_t *n, 189 uint64_t nInv_u64, 190 uint64_t *aM, 191 uint64_t *a); 192 193 void 194 Hacl_Bignum_Montgomery_bn_mont_mul_u64( 195 uint32_t len, 196 uint64_t *n, 197 uint64_t nInv_u64, 198 uint64_t *aM, 199 uint64_t *bM, 200 uint64_t *resM); 201 202 void 203 Hacl_Bignum_Montgomery_bn_mont_sqr_u64( 204 uint32_t len, 205 uint64_t *n, 206 uint64_t nInv_u64, 207 uint64_t *aM, 208 uint64_t *resM); 209 210 uint32_t 211 Hacl_Bignum_Exponentiation_bn_check_mod_exp_u32( 212 uint32_t len, 213 uint32_t *n, 214 uint32_t *a, 215 uint32_t bBits, 216 uint32_t *b); 217 218 void 219 Hacl_Bignum_Exponentiation_bn_mod_exp_vartime_precomp_u32( 220 uint32_t len, 221 uint32_t *n, 222 uint32_t mu, 223 uint32_t *r2, 224 uint32_t *a, 225 uint32_t bBits, 226 uint32_t *b, 227 uint32_t *res); 228 229 void 230 Hacl_Bignum_Exponentiation_bn_mod_exp_consttime_precomp_u32( 231 uint32_t len, 232 uint32_t *n, 233 uint32_t mu, 234 uint32_t *r2, 235 uint32_t *a, 236 uint32_t bBits, 237 uint32_t *b, 238 uint32_t *res); 239 240 void 241 Hacl_Bignum_Exponentiation_bn_mod_exp_vartime_u32( 242 uint32_t len, 243 uint32_t nBits, 244 uint32_t *n, 245 uint32_t *a, 246 uint32_t bBits, 247 uint32_t *b, 248 uint32_t *res); 249 250 void 251 Hacl_Bignum_Exponentiation_bn_mod_exp_consttime_u32( 252 uint32_t len, 253 uint32_t nBits, 254 uint32_t *n, 255 uint32_t *a, 256 uint32_t bBits, 257 uint32_t *b, 258 uint32_t *res); 259 260 uint64_t 261 Hacl_Bignum_Exponentiation_bn_check_mod_exp_u64( 262 uint32_t len, 263 uint64_t *n, 264 uint64_t *a, 265 uint32_t bBits, 266 uint64_t *b); 267 268 void 269 Hacl_Bignum_Exponentiation_bn_mod_exp_vartime_precomp_u64( 270 uint32_t len, 271 uint64_t *n, 272 uint64_t mu, 273 uint64_t *r2, 274 uint64_t *a, 275 uint32_t bBits, 276 uint64_t *b, 277 uint64_t *res); 278 279 void 280 Hacl_Bignum_Exponentiation_bn_mod_exp_consttime_precomp_u64( 281 uint32_t len, 282 uint64_t *n, 283 uint64_t mu, 284 uint64_t *r2, 285 uint64_t *a, 286 uint32_t bBits, 287 uint64_t *b, 288 uint64_t *res); 289 290 void 291 Hacl_Bignum_Exponentiation_bn_mod_exp_vartime_u64( 292 uint32_t len, 293 uint32_t nBits, 294 uint64_t *n, 295 uint64_t *a, 296 uint32_t bBits, 297 uint64_t *b, 298 uint64_t *res); 299 300 void 301 Hacl_Bignum_Exponentiation_bn_mod_exp_consttime_u64( 302 uint32_t len, 303 uint32_t nBits, 304 uint64_t *n, 305 uint64_t *a, 306 uint32_t bBits, 307 uint64_t *b, 308 uint64_t *res); 309 310 #if defined(__cplusplus) 311 } 312 #endif 313 314 #define __internal_Hacl_Bignum_H_DEFINED 315 #endif