11#include " Hacl_Bignum4096.hpp"
22
33#include " ../../karamel/Hacl_Bignum4096.h"
4+ #ifdef _WIN32
5+ #include " ../../karamel/Hacl_GenericField32.h"
6+ #endif // _WIN32
47#include " ../../karamel/Hacl_GenericField64.h"
58#include " ../log.hpp"
69
710using electionguard::Log;
811
912namespace hacl
1013{
14+ #ifdef _WIN32
15+ Bignum4096::Bignum4096 (uint32_t *elem)
16+ {
17+ HaclBignumContext4096 ctx{Hacl_Bignum4096_32_mont_ctx_init (elem)};
18+ context = std::move (ctx);
19+ }
20+ #else
1121 Bignum4096::Bignum4096 (uint64_t *elem)
1222 {
1323 HaclBignumContext4096 ctx{Hacl_Bignum4096_mont_ctx_init (elem)};
1424 context = std::move (ctx);
1525 }
26+ #endif // _WIN32
1627 Bignum4096::~Bignum4096 () {}
1728
1829 uint64_t Bignum4096::add (uint64_t *a, uint64_t *b, uint64_t *res)
1930 {
31+ #ifdef _WIN32
32+ return Hacl_Bignum4096_32_add (reinterpret_cast <uint32_t *>(a),
33+ reinterpret_cast <uint32_t *>(b),
34+ reinterpret_cast <uint32_t *>(res));
35+ #else
2036 return Hacl_Bignum4096_add (a, b, res);
37+ #endif // _WIN32
2138 }
2239
2340 uint64_t Bignum4096::sub (uint64_t *a, uint64_t *b, uint64_t *res)
2441 {
42+ #ifdef _WIN32
43+ return Hacl_Bignum4096_32_sub (reinterpret_cast <uint32_t *>(a),
44+ reinterpret_cast <uint32_t *>(b),
45+ reinterpret_cast <uint32_t *>(res));
46+ #else
2547 return Hacl_Bignum4096_sub (a, b, res);
48+ #endif // _WIN32
2649 }
2750
2851 void Bignum4096::mul (uint64_t *a, uint64_t *b, uint64_t *res)
2952 {
53+ #ifdef _WIN32
54+ Hacl_Bignum4096_32_mul (reinterpret_cast <uint32_t *>(a),
55+ reinterpret_cast <uint32_t *>(b),
56+ reinterpret_cast <uint32_t *>(res));
57+ #else
3058 Hacl_Bignum4096_mul (a, b, res);
59+ #endif // _WIN32
3160 }
3261
3362 bool Bignum4096::mod (uint64_t *n, uint64_t *a, uint64_t *res)
3463 {
64+
65+ #ifdef _WIN32
66+ return Hacl_Bignum4096_32_mod (reinterpret_cast <uint32_t *>(n),
67+ reinterpret_cast <uint32_t *>(a),
68+ reinterpret_cast <uint32_t *>(res));
69+ #else
3570 return Hacl_Bignum4096_mod (n, a, res);
71+ #endif // _WIN32
3672 }
3773
3874 bool Bignum4096::modExp (uint64_t *n, uint64_t *a, uint32_t bBits, uint64_t *b, uint64_t *res,
3975 bool useConstTime /* = true */ )
40- {
76+ {
4177 if (bBits <= 0 ) {
4278 Log::trace (" Bignum4096::modExp:: bbits <= 0" );
4379 return false ;
4480 }
4581 if (useConstTime) {
82+ #ifdef _WIN32
83+ return Hacl_Bignum4096_32_mod_exp_consttime (reinterpret_cast <uint32_t *>(n),
84+ reinterpret_cast <uint32_t *>(a), bBits,
85+ reinterpret_cast <uint32_t *>(b),
86+ reinterpret_cast <uint32_t *>(res));
87+ #else
4688 return Hacl_Bignum4096_mod_exp_consttime (n, a, bBits, b, res);
89+ #endif // WIN32
4790 }
91+ #ifdef _WIN32
92+ return Hacl_Bignum4096_32_mod_exp_vartime (reinterpret_cast <uint32_t *>(n),
93+ reinterpret_cast <uint32_t *>(a),
94+ bBits,
95+ reinterpret_cast <uint32_t *>(b),
96+ reinterpret_cast <uint32_t *>(res));
97+ #else
4898 return Hacl_Bignum4096_mod_exp_vartime (n, a, bBits, b, res);
99+ #endif // _WIN32
49100 }
50101
51102 uint64_t *Bignum4096::fromBytes (uint32_t len, uint8_t *bytes)
@@ -65,7 +116,12 @@ namespace hacl
65116
66117 void Bignum4096::mod (uint64_t *a, uint64_t *res) const
67118 {
119+ #ifdef _WIN32
120+ Hacl_Bignum4096_32_mod_precomp (context.get (), reinterpret_cast <uint32_t *>(a),
121+ reinterpret_cast <uint32_t *>(res));
122+ #else
68123 Hacl_Bignum4096_mod_precomp (context.get (), a, res);
124+ #endif // _WIN32
69125 }
70126
71127 void Bignum4096::modExp (uint64_t *a, uint32_t bBits, uint64_t *b, uint64_t *res,
@@ -76,29 +132,61 @@ namespace hacl
76132 return throw ;
77133 }
78134 if (useConstTime) {
135+ #ifdef _WIN32
136+ return Hacl_Bignum4096_32_mod_exp_consttime_precomp (context.get (),
137+ reinterpret_cast <uint32_t *>(a), bBits,
138+ reinterpret_cast <uint32_t *>(b),
139+ reinterpret_cast <uint32_t *>(res));
140+ #else
79141 return Hacl_Bignum4096_mod_exp_consttime_precomp (context.get (), a, bBits, b, res);
142+ #endif // _WIN32
80143 }
144+ #ifdef _WIN32
145+ return Hacl_Bignum4096_32_mod_exp_vartime_precomp (context.get (), reinterpret_cast <uint32_t *>(a),
146+ bBits, reinterpret_cast <uint32_t *>(b),
147+ reinterpret_cast <uint32_t *>(res));
148+ #else
81149 return Hacl_Bignum4096_mod_exp_vartime_precomp (context.get (), a, bBits, b, res);
150+ #endif // _WIN32
82151 }
83152
84153 void Bignum4096::to_montgomery_form (uint64_t *a, uint64_t *aM) const
85154 {
155+ #ifdef _WIN32
156+ Hacl_GenericField32_to_field (context.get (), reinterpret_cast <uint32_t *>(a),
157+ reinterpret_cast <uint32_t *>(aM));
158+ #else
86159 Hacl_GenericField64_to_field (context.get (), a, aM);
160+ #endif // _WIN32
87161 }
88162
89163 void Bignum4096::from_montgomery_form (uint64_t *aM, uint64_t *a) const
90164 {
165+ #ifdef _WIN32
166+ Hacl_GenericField32_from_field (context.get (), reinterpret_cast <uint32_t *>(aM),
167+ reinterpret_cast <uint32_t *>(a));
168+ #else
91169 Hacl_GenericField64_from_field (context.get (), aM, a);
170+ #endif // _WIN32
92171 }
93172
94173 void Bignum4096::montgomery_mod_mul_stay_in_mont_form (uint64_t *aM, uint64_t *bM, uint64_t *cM) const
95174 {
175+ #ifdef _WIN32
176+ Hacl_GenericField32_mul (context.get (), reinterpret_cast <uint32_t *>(aM),
177+ reinterpret_cast <uint32_t *>(bM), reinterpret_cast <uint32_t *>(cM));
178+ #else
96179 Hacl_GenericField64_mul (context.get (), aM, bM, cM);
180+ #endif // _WIN32
97181 }
98182
99183 const Bignum4096 &CONTEXT_P ()
100184 {
185+ #ifdef _WIN32
186+ static Bignum4096 instance{(uint32_t *)(P_ARRAY_REVERSE)};
187+ #else
101188 static Bignum4096 instance{const_cast <uint64_t *>(P_ARRAY_REVERSE)};
189+ #endif // _WIN32
102190 return instance;
103191 }
104192} // namespace hacl
0 commit comments