mirror of
https://github.com/status-im/status-go.git
synced 2025-01-09 14:16:21 +00:00
c8f9dad554
## What has changed? I've introduced to the public binding functionality that will compress and decompress public keys of a variety of encoding and key types. This functionality supports all major byte encoding formats and the following EC public key types: - `secp256k1` pks - `bls12-381 g1` pks - `bls12-381 g2` pks ## Why make the change? We want shorter public (chat) keys and we want to be future proof and encoding agnostic. See the issue here https://github.com/status-im/status-go/issues/1937 --- * Added basic signature for compresspk and uncompresspk * Added basic encoding information * make vendor * formatted imports for the linter * Reformatted imports hoping linter likes it * This linter is capricious * Added check that the secp256k1 key is valid * Added test for valid key * Added multiformat/go-varint dep * Added public key type handling * Added key decompression with key type handling * Added handling for '0x' type indentifying * Added more robust testing * Less lint for the linting gods * make vendor for bls12_381 * Added bls12-381 compression tests * Added decompress key expected results * Refactor of typed and untyped keys in tests * Lint god appeasment * Refactor of sample public keys * Implemented bls12-381 decompression * gofmt * Renamed decode/encode funcs to be more descriptive * Added binary bindings for key de/compression * Refactor of func parameters gomobile is a bit tempermental using raw bytes as a parameter, so I've decided to use string only inputs and outputs * gofmt * Added function documentation * Moved multiformat de/compression into api/multiformat ns * Moved multiformat de/compression into api/multiformat ns * Changed compress to serialize on API
67 lines
819 B
Go
67 lines
819 B
Go
// +build amd64,!generic
|
|
|
|
package bls12381
|
|
|
|
import (
|
|
"golang.org/x/sys/cpu"
|
|
)
|
|
|
|
func init() {
|
|
if !cpu.X86.HasADX || !cpu.X86.HasBMI2 {
|
|
mul = mulNoADX
|
|
}
|
|
}
|
|
|
|
var mul func(c, a, b *fe) = mulADX
|
|
|
|
func square(c, a *fe) {
|
|
mul(c, a, a)
|
|
}
|
|
|
|
func neg(c, a *fe) {
|
|
if a.isZero() {
|
|
c.set(a)
|
|
} else {
|
|
_neg(c, a)
|
|
}
|
|
}
|
|
|
|
//go:noescape
|
|
func add(c, a, b *fe)
|
|
|
|
//go:noescape
|
|
func addAssign(a, b *fe)
|
|
|
|
//go:noescape
|
|
func ladd(c, a, b *fe)
|
|
|
|
//go:noescape
|
|
func laddAssign(a, b *fe)
|
|
|
|
//go:noescape
|
|
func double(c, a *fe)
|
|
|
|
//go:noescape
|
|
func doubleAssign(a *fe)
|
|
|
|
//go:noescape
|
|
func ldouble(c, a *fe)
|
|
|
|
//go:noescape
|
|
func sub(c, a, b *fe)
|
|
|
|
//go:noescape
|
|
func subAssign(a, b *fe)
|
|
|
|
//go:noescape
|
|
func lsubAssign(a, b *fe)
|
|
|
|
//go:noescape
|
|
func _neg(c, a *fe)
|
|
|
|
//go:noescape
|
|
func mulNoADX(c, a, b *fe)
|
|
|
|
//go:noescape
|
|
func mulADX(c, a, b *fe)
|