上传日期:2024-04-02 08:28:14
上 传 者sh-1993
说明:  bls-eth-go-二进制
(bls eth go binary)


[![Build Status](]( # bls for eth with compiled static library This repository contains compiled static library of with `BLS_ETH=1`. * SecretKey; Fr * PublicKey; G1 * Sign; G2 # News - 2023/Aug/17 The performance of Sign is a little improved. - 2023/Jun/12 move static libraries to release branch - 2021/Jan/28 (change specification) enable VerifySignatureOrder and VerifyPublicKeyOrder by default - 2021/Jan/28 (change specification) verify returns false for zero public key - 2021/Jan/02 support arm64 golang on M1 mac - 2020/Oct/15 `add SecretKey::GetSafePublicKey()`, which returns an error if sec is zero - 2020/Oct/08 `MultiVerify` returns true only if all signatures are valid. - 2020/Sep/18 static binary for x64 is JIT-less mode, which uses code pre-generated by Xbyak. - 2020/Jul/03 remove old tests and use the latest hash function defined at [draft-07]( is set by default. - 2020/May/22 `SignHashWithDomain`, `VerifyHashWithDomain`, `VerifyAggregateHashWithDomain` are removed. - 2020/May/15 `EthModeDraft07` is added for [draft-07]( - 2020/Apr/20 `EthModeDraft06` is default. Call `SetETHmode(EthModeDraft05)` to use older evrsion. - 2020/Mar/26 The signature value in `SetETHmode(2)` has changed because of changing DST in hash-to-curve function. - 2020/Mar/17 This library supports [eth2.0 functions]( But the spec of hash-to-curve function may be changed. Init as the followings: ``` Init(BLS12_381) ``` then, you can use the following functions. bls-eth-go-binary | eth2.0 spec name| ------|-----------------| SecretKey::SignByte|Sign| PublicKey::VerifyByte|Verify| Sign::Aggregate|Aggregate| Sign::FastAggregateVerify|FastAggregateVerify| Sign::AggregateVerifyNoCheck|AggregateVerify| The size of message must be 32 byte. Check functions: - VerifySignatureOrder ; make `deserialize` check the correctness of the order - Sign::IsValidOrder ; check the correctness of the order - VerifyPublicKeyOrder ; make `deserialize` check the correctness of the order - PublicKey::IsValidOrder ; check the correctness of the order - AreAllMsgDifferent ; check that all messages are different each other # How to run `examples/sample.go` ``` go get go run examples/sample.go ``` # How to build the static binary The following steps are not necessary if you use compiled binary in this repository. ``` git clone --recursive cd bls-go-binary #git submodule update --init --recursive go test ./bls -bench "Pairing|Sign|Verify" -count=1 ``` ## Linux, Mac, Windows(mingw64) On x64 Linux, ``` make ``` Otherwise, clang is necessary to build ll files. ``` make CXX=clang++ ``` ### Cross compile on macOS ``` make ARCH=x86_64 # for Intel mac make ARCH=arm64 # for M1 mac ``` ### Cross compile of aarch64 on x64 Linux ``` sudo apt-get install gcc-multilib make -C src/bls -f Makefile.onelib build_aarch64 CXX=clang++ -j OUT_DIR=../.. ``` # Android ``` make android ``` If you need a shared library, then after `make clean`, ``` make android BLS_LIB_SHARED=1 ``` # iOS ``` make ios ``` ## How to cross-compile for armeabi-v7a Check `llc --version` shows to support the target armv7a. ``` make ../mcl/src/base32.ll env CXX=clang++ BIT=32 ARCH=arm _OS=android _ARCH=armeabi-v7a make MCL_USE_GMP=0 UNIT=4 CFLAGS_USER="-target armv7a-linux-eabi -fPIC" ``` * Remark : clang++ must support `armv7a-linux-eabi`. ### How to build sample.go for armeabi-v7a ``` env CC=arm-linux-gnueabi-gcc CGO_ENABLED=1 GOOS=linux GOARM=7 GOARCH=arm go build examples/sample.go env QEMU_LD_PREFIX=/usr/arm-linux-gnueabi qemu-arm ./sample ``` ## How to cross-compile for mipsel Check `llc --version` shows to support the target mips. ``` make ../mcl/src/base32.ll env CXX=clang++ BIT=32 ARCH=mipsel _OS=linux _ARCH=mipsle make MCL_USE_GMP=0 UNIT=4 CFLAGS_USER="-target mipsel-linux -fPIC" ``` * Remark : clang++ must support `mipsel-linux`. ### How to build sample.go for mipsel ``` env CC=mipsel-linux-gnu-gcc CGO_ENABLED=1 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build examples/sample.go env QEMU_LD_PREFIX=/usr/mipsel-linux-gnu qemu-mipsel ./sample ``` # How to use the static library from C ``` #define BLS_ETH #include #include ``` # Author MITSUNARI Shigeo( # Sponsors welcome [GitHub Sponsor](