arnaucube
arnaucube/go-iden3-cryptoPublic Self-hosted repository
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}