forked from liyue201/gnark-circomlib
/
bitify.go
35 lines (29 loc) · 833 Bytes
/
bitify.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package circuits
import (
"github.com/consensys/gnark/frontend"
)
func Num2Bits(api frontend.API, in frontend.Variable, n int) []frontend.Variable {
return api.ToBinary(in, n)
}
func Num2BitsStrict(api frontend.API, in frontend.Variable, n int) []frontend.Variable {
bits := api.ToBinary(in, n)
AliasCheck(api, bits)
return bits
}
func Bits2Num(api frontend.API, in []frontend.Variable) frontend.Variable {
return api.FromBinary(in...)
}
func Bits2NumStrict(api frontend.API, in []frontend.Variable) frontend.Variable {
AliasCheck(api, in)
return api.FromBinary(in...)
}
func Num2BitsNeg(api frontend.API, in frontend.Variable, n int) []frontend.Variable {
var neg frontend.Variable
if n == 0 {
neg = frontend.Variable(0)
} else {
neg = api.Sub(Lsh(1, uint(n)), in)
}
out := api.ToBinary(neg, n)
return out
}