tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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