go-iden3-crypto/ff/arith.go
ff/arith.goRaw
1// Copyright 2020 ConsenSys AG
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// Code generated by goff DO NOT EDIT
16
17package ff
18
19import (
20 "math/bits"
21)
22
23func madd(a, b, t, u, v uint64) (uint64, uint64, uint64) {
24 var carry uint64
25 hi, lo := bits.Mul64(a, b)
26 v, carry = bits.Add64(lo, v, 0)
27 u, carry = bits.Add64(hi, u, carry)
28 t, _ = bits.Add64(t, 0, carry)
29 return t, u, v
30}
31
32// madd0 hi = a*b + c (discards lo bits)
33func madd0(a, b, c uint64) (hi uint64) {
34 var carry, lo uint64
35 hi, lo = bits.Mul64(a, b)
36 _, carry = bits.Add64(lo, c, 0)
37 hi, _ = bits.Add64(hi, 0, carry)
38 return
39}
40
41// madd1 hi, lo = a*b + c
42func madd1(a, b, c uint64) (hi uint64, lo uint64) {
43 var carry uint64
44 hi, lo = bits.Mul64(a, b)
45 lo, carry = bits.Add64(lo, c, 0)
46 hi, _ = bits.Add64(hi, 0, carry)
47 return
48}
49
50// madd2 hi, lo = a*b + c + d
51func madd2(a, b, c, d uint64) (hi uint64, lo uint64) {
52 var carry uint64
53 hi, lo = bits.Mul64(a, b)
54 c, carry = bits.Add64(c, d, 0)
55 hi, _ = bits.Add64(hi, 0, carry)
56 lo, carry = bits.Add64(lo, c, 0)
57 hi, _ = bits.Add64(hi, 0, carry)
58 return
59}
60
61// madd2s superhi, hi, lo = 2*a*b + c + d + e
62func madd2s(a, b, c, d, e uint64) (superhi, hi, lo uint64) {
63 var carry, sum uint64
64
65 hi, lo = bits.Mul64(a, b)
66 lo, carry = bits.Add64(lo, lo, 0)
67 hi, superhi = bits.Add64(hi, hi, carry)
68
69 sum, carry = bits.Add64(c, e, 0)
70 hi, _ = bits.Add64(hi, 0, carry)
71 lo, carry = bits.Add64(lo, sum, 0)
72 hi, _ = bits.Add64(hi, 0, carry)
73 hi, _ = bits.Add64(hi, 0, d)
74 return
75}
76
77func madd1s(a, b, d, e uint64) (superhi, hi, lo uint64) {
78 var carry uint64
79
80 hi, lo = bits.Mul64(a, b)
81 lo, carry = bits.Add64(lo, lo, 0)
82 hi, superhi = bits.Add64(hi, hi, carry)
83 lo, carry = bits.Add64(lo, e, 0)
84 hi, _ = bits.Add64(hi, 0, carry)
85 hi, _ = bits.Add64(hi, 0, d)
86 return
87}
88
89func madd2sb(a, b, c, e uint64) (superhi, hi, lo uint64) {
90 var carry, sum uint64
91
92 hi, lo = bits.Mul64(a, b)
93 lo, carry = bits.Add64(lo, lo, 0)
94 hi, superhi = bits.Add64(hi, hi, carry)
95
96 sum, carry = bits.Add64(c, e, 0)
97 hi, _ = bits.Add64(hi, 0, carry)
98 lo, carry = bits.Add64(lo, sum, 0)
99 hi, _ = bits.Add64(hi, 0, carry)
100 return
101}
102
103func madd1sb(a, b, e uint64) (superhi, hi, lo uint64) {
104 var carry uint64
105
106 hi, lo = bits.Mul64(a, b)
107 lo, carry = bits.Add64(lo, lo, 0)
108 hi, superhi = bits.Add64(hi, hi, carry)
109 lo, carry = bits.Add64(lo, e, 0)
110 hi, _ = bits.Add64(hi, 0, carry)
111 return
112}
113
114func madd3(a, b, c, d, e uint64) (hi uint64, lo uint64) {
115 var carry uint64
116 hi, lo = bits.Mul64(a, b)
117 c, carry = bits.Add64(c, d, 0)
118 hi, _ = bits.Add64(hi, 0, carry)
119 lo, carry = bits.Add64(lo, c, 0)
120 hi, _ = bits.Add64(hi, e, carry)
121 return
122}