v2 / vlib / v / gen / c / testdata / struct_field_result_init.vv
32 lines · 26 sloc · 837 bytes · 8a36fe3fd82b73666e9d0d9e8294c59cced1b268
Raw
1import math
2import math.big { Integer }
3import crypto.rand
4
5struct SSS {
6mut:
7 prime Integer = big.integer_from_string('115792089237316195423570985008687907853269984665640564039457584007913129639747')!
8}
9
10// random returns a random number from the range (0, prime-1) inclusive
11fn (s SSS) random() !Integer {
12 mut result := big.zero_int + s.prime
13 result = result - big.one_int
14 return rand.int_big(result)
15}
16
17// mod_inverse computes the multiplicative inverse of the number on the field
18// prime; more specifically, number * inverse == 1; Note: number should never be
19// zero
20fn mod_inverse(number Integer) Integer {
21 s := SSS{}
22 copy := number % s.prime
23 pcopy := s.prime
24
25 _, _, y := math.egcd(pcopy.int(), copy.int())
26
27 return (s.prime + big.integer_from_i64(y)) % s.prime
28}
29
30fn main() {
31 mod_inverse(big.integer_from_string('1')!)
32}
33