diff options
author | MITSUNARI Shigeo <herumi@nifty.com> | 2017-03-14 18:49:02 +0800 |
---|---|---|
committer | MITSUNARI Shigeo <herumi@nifty.com> | 2017-03-14 18:49:02 +0800 |
commit | 172d4cb1b40f105d953bda7b9162a8bfc6227c9b (patch) | |
tree | 85ce252d48d70e6bcd2b2f8179c8d94ee3927197 /go | |
parent | 9c3bf8db5ed42d061a458626d3d78fe167ea804c (diff) | |
download | dexon-bls-172d4cb1b40f105d953bda7b9162a8bfc6227c9b.tar dexon-bls-172d4cb1b40f105d953bda7b9162a8bfc6227c9b.tar.gz dexon-bls-172d4cb1b40f105d953bda7b9162a8bfc6227c9b.tar.bz2 dexon-bls-172d4cb1b40f105d953bda7b9162a8bfc6227c9b.tar.lz dexon-bls-172d4cb1b40f105d953bda7b9162a8bfc6227c9b.tar.xz dexon-bls-172d4cb1b40f105d953bda7b9162a8bfc6227c9b.tar.zst dexon-bls-172d4cb1b40f105d953bda7b9162a8bfc6227c9b.zip |
minimize difference between bls.go and https://raw.githubusercontent.com/dfinity/random-beacon/master/blscgo/bls.go
Diffstat (limited to 'go')
-rw-r--r-- | go/blscgo/bls.go (renamed from go/bls/bls.go) | 113 | ||||
-rw-r--r-- | go/main.go | 48 |
2 files changed, 91 insertions, 70 deletions
diff --git a/go/bls/bls.go b/go/blscgo/bls.go index d9fbdd6..bd0cd2d 100644 --- a/go/bls/bls.go +++ b/go/blscgo/bls.go @@ -1,4 +1,4 @@ -package bls +package blscgo /* #cgo CFLAGS:-I../../include @@ -9,20 +9,26 @@ import "C" import "fmt" import "unsafe" +// Init -- func Init() { C.blsInit() } -type Id struct { +// ID -- +type ID struct { v [4]C.uint64_t } -func (id *Id) getPointer() (p *C.blsId) { +// getPointer -- +func (id *ID) getPointer() (p *C.blsId) { + // #nosec return (*C.blsId)(unsafe.Pointer(&id.v[0])) } -func (id *Id) String() string { +// String -- +func (id *ID) String() string { buf := make([]byte, 1024) + // #nosec n := C.blsIdGetStr(id.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) if n == 0 { panic("implementation err. size of buf is small") @@ -30,8 +36,10 @@ func (id *Id) String() string { return string(buf[:n]) } -func (id *Id) SetStr(s string) error { +// SetStr -- +func (id *ID) SetStr(s string) error { buf := []byte(s) + // #nosec err := C.blsIdSetStr(id.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) if err > 0 { return fmt.Errorf("bad string:%s", s) @@ -39,24 +47,31 @@ func (id *Id) SetStr(s string) error { return nil } -func (id *Id) Set(v []uint64) error { +// Set -- +func (id *ID) Set(v []uint64) error { if len(v) != 4 { - return fmt.Errorf("bad size", len(v)) + return fmt.Errorf("bad size (%d), expected size 4", len(v)) } + // #nosec C.blsIdSet(id.getPointer(), (*C.uint64_t)(unsafe.Pointer(&v[0]))) return nil } +// SecretKey -- type SecretKey struct { v [4]C.uint64_t } +// getPointer -- func (sec *SecretKey) getPointer() (p *C.blsSecretKey) { + // #nosec return (*C.blsSecretKey)(unsafe.Pointer(&sec.v[0])) } +// String -- func (sec *SecretKey) String() string { buf := make([]byte, 1024) + // #nosec n := C.blsSecretKeyGetStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) if n == 0 { panic("implementation err. size of buf is small") @@ -64,8 +79,10 @@ func (sec *SecretKey) String() string { return string(buf[:n]) } +// SetStr -- The string passed in is a number and can be either hex or decimal func (sec *SecretKey) SetStr(s string) error { buf := []byte(s) + // #nosec err := C.blsSecretKeySetStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) if err > 0 { return fmt.Errorf("bad string:%s", s) @@ -73,22 +90,27 @@ func (sec *SecretKey) SetStr(s string) error { return nil } +// SetArray -- func (sec *SecretKey) SetArray(v []uint64) error { if len(v) != 4 { - return fmt.Errorf("bad size", len(v)) + return fmt.Errorf("bad size (%d), expected size 4", len(v)) } + // #nosec C.blsSecretKeySetArray(sec.getPointer(), (*C.uint64_t)(unsafe.Pointer(&v[0]))) return nil } +// Init -- func (sec *SecretKey) Init() { C.blsSecretKeyInit(sec.getPointer()) } +// Add -- func (sec *SecretKey) Add(rhs *SecretKey) { C.blsSecretKeyAdd(sec.getPointer(), rhs.getPointer()) } +// GetMasterSecretKey -- func (sec *SecretKey) GetMasterSecretKey(k int) (msk []SecretKey) { msk = make([]SecretKey, k) msk[0] = *sec @@ -98,6 +120,7 @@ func (sec *SecretKey) GetMasterSecretKey(k int) (msk []SecretKey) { return msk } +// GetMasterPublicKey -- func GetMasterPublicKey(msk []SecretKey) (mpk []PublicKey) { n := len(msk) mpk = make([]PublicKey, n) @@ -107,62 +130,38 @@ func GetMasterPublicKey(msk []SecretKey) (mpk []PublicKey) { return mpk } -func makeSecretKeyPointerArray(v []SecretKey) (pv []*C.blsSecretKey) { - n := len(v) - pv = make([]*C.blsSecretKey, n) - for i := 0; i < n; i++ { - pv[i] = v[i].getPointer() - } - return pv -} -func makePublicKeyPointerArray(v []PublicKey) (pv []*C.blsPublicKey) { - n := len(v) - pv = make([]*C.blsPublicKey, n) - for i := 0; i < n; i++ { - pv[i] = v[i].getPointer() - } - return pv -} -func makeSignPointerArray(v []Sign) (pv []*C.blsSign) { - n := len(v) - pv = make([]*C.blsSign, n) - for i := 0; i < n; i++ { - pv[i] = v[i].getPointer() - } - return pv -} -func makeIdPointerArray(v []Id) (pv []*C.blsId) { - n := len(v) - pv = make([]*C.blsId, n) - for i := 0; i < n; i++ { - pv[i] = v[i].getPointer() - } - return pv -} -func (sec *SecretKey) Set(msk []SecretKey, id *Id) { +// Set -- +func (sec *SecretKey) Set(msk []SecretKey, id *ID) { C.blsSecretKeySet(sec.getPointer(), msk[0].getPointer(), C.size_t(len(msk)), id.getPointer()) } -func (sec *SecretKey) Recover(secVec []SecretKey, idVec []Id) { +// Recover -- +func (sec *SecretKey) Recover(secVec []SecretKey, idVec []ID) { C.blsSecretKeyRecover(sec.getPointer(), secVec[0].getPointer(), idVec[0].getPointer(), C.size_t(len(secVec))) } +// GetPop -- func (sec *SecretKey) GetPop() (sign *Sign) { sign = new(Sign) C.blsSecretKeyGetPop(sec.getPointer(), sign.getPointer()) return sign } +// PublicKey -- type PublicKey struct { v [4 * 2 * 3]C.uint64_t } +// getPointer -- func (pub *PublicKey) getPointer() (p *C.blsPublicKey) { + // #nosec return (*C.blsPublicKey)(unsafe.Pointer(&pub.v[0])) } +// String -- func (pub *PublicKey) String() string { buf := make([]byte, 1024) + // #nosec n := C.blsPublicKeyGetStr(pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) if n == 0 { panic("implementation err. size of buf is small") @@ -170,8 +169,10 @@ func (pub *PublicKey) String() string { return string(buf[:n]) } +// SetStr -- func (pub *PublicKey) SetStr(s string) error { buf := []byte(s) + // #nosec err := C.blsPublicKeySetStr(pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) if err > 0 { return fmt.Errorf("bad string:%s", s) @@ -179,27 +180,36 @@ func (pub *PublicKey) SetStr(s string) error { return nil } +// Add -- func (pub *PublicKey) Add(rhs *PublicKey) { C.blsPublicKeyAdd(pub.getPointer(), rhs.getPointer()) } -func (pub *PublicKey) Set(msk []PublicKey, id *Id) { - C.blsPublicKeySet(pub.getPointer(), msk[0].getPointer(), C.size_t(len(msk)), id.getPointer()) + +// Set -- +func (pub *PublicKey) Set(mpk []PublicKey, id *ID) { + C.blsPublicKeySet(pub.getPointer(), mpk[0].getPointer(), C.size_t(len(mpk)), id.getPointer()) } -func (pub *PublicKey) Recover(pubVec []PublicKey, idVec []Id) { +// Recover -- +func (pub *PublicKey) Recover(pubVec []PublicKey, idVec []ID) { C.blsPublicKeyRecover(pub.getPointer(), pubVec[0].getPointer(), idVec[0].getPointer(), C.size_t(len(pubVec))) } +// Sign -- type Sign struct { v [4 * 3]C.uint64_t } +// getPointer -- func (sign *Sign) getPointer() (p *C.blsSign) { + // #nosec return (*C.blsSign)(unsafe.Pointer(&sign.v[0])) } +// String -- func (sign *Sign) String() string { buf := make([]byte, 1024) + // #nosec n := C.blsSignGetStr(sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) if n == 0 { panic("implementation err. size of buf is small") @@ -207,8 +217,10 @@ func (sign *Sign) String() string { return string(buf[:n]) } +// SetStr -- func (sign *Sign) SetStr(s string) error { buf := []byte(s) + // #nosec err := C.blsSignSetStr(sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) if err > 0 { return fmt.Errorf("bad string:%s", s) @@ -216,31 +228,40 @@ func (sign *Sign) SetStr(s string) error { return nil } +// GetPublicKey -- func (sec *SecretKey) GetPublicKey() (pub *PublicKey) { pub = new(PublicKey) C.blsSecretKeyGetPublicKey(sec.getPointer(), pub.getPointer()) return pub } +// Sign -- func (sec *SecretKey) Sign(m string) (sign *Sign) { sign = new(Sign) buf := []byte(m) + // #nosec C.blsSecretKeySign(sec.getPointer(), sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) return sign } +// Add -- func (sign *Sign) Add(rhs *Sign) { C.blsSignAdd(sign.getPointer(), rhs.getPointer()) } -func (sign *Sign) Recover(signVec []Sign, idVec []Id) { + +// Recover -- +func (sign *Sign) Recover(signVec []Sign, idVec []ID) { C.blsSignRecover(sign.getPointer(), signVec[0].getPointer(), idVec[0].getPointer(), C.size_t(len(signVec))) } +// Verify -- func (sign *Sign) Verify(pub *PublicKey, m string) bool { buf := []byte(m) + // #nosec return C.blsSignVerify(sign.getPointer(), pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) == 1 } +// VerifyPop -- func (sign *Sign) VerifyPop(pub *PublicKey) bool { return C.blsSignVerifyPop(sign.getPointer(), pub.getPointer()) == 1 } @@ -1,7 +1,7 @@ package main import "fmt" -import "./bls" +import "./blscgo" import "runtime" import "time" @@ -13,7 +13,7 @@ func verifyTrue(b bool) { func testRecoverSecretKey() { fmt.Println("testRecoverSecretKey") k := 3000 - var sec bls.SecretKey + var sec blscgo.SecretKey sec.Init() fmt.Println("sec =", sec) @@ -21,14 +21,14 @@ func testRecoverSecretKey() { msk := sec.GetMasterSecretKey(k) n := k - secVec := make([]bls.SecretKey, n) - idVec := make([]bls.Id, n) + secVec := make([]blscgo.SecretKey, n) + idVec := make([]blscgo.ID, n) for i := 0; i < n; i++ { idVec[i].Set([]uint64{1, 2, 3, uint64(i)}) secVec[i].Set(msk, &idVec[i]) } // recover sec2 from secVec and idVec - var sec2 bls.SecretKey + var sec2 blscgo.SecretKey sec2.Recover(secVec, idVec) fmt.Println("sec2=", sec2) } @@ -37,7 +37,7 @@ func testSign() { m := "testSign" fmt.Println(m) - var sec0 bls.SecretKey + var sec0 blscgo.SecretKey sec0.Init() pub0 := sec0.GetPublicKey() s0 := sec0.Sign(m) @@ -45,15 +45,15 @@ func testSign() { k := 3 msk := sec0.GetMasterSecretKey(k) - mpk := bls.GetMasterPublicKey(msk) + mpk := blscgo.GetMasterPublicKey(msk) idTbl := []uint64{3, 5, 193, 22, 15} n := len(idTbl) - secVec := make([]bls.SecretKey, n) - pubVec := make([]bls.PublicKey, n) - signVec := make([]bls.Sign, n) - idVec := make([]bls.Id, n) + secVec := make([]blscgo.SecretKey, n) + pubVec := make([]blscgo.PublicKey, n) + signVec := make([]blscgo.Sign, n) + idVec := make([]blscgo.ID, n) for i := 0; i < n; i++ { idVec[i].Set([]uint64{idTbl[i], 0, 0, 0}) @@ -69,21 +69,21 @@ func testSign() { signVec[i] = *secVec[i].Sign(m) verifyTrue(signVec[i].Verify(&pubVec[i], m)) } - var sec1 bls.SecretKey + var sec1 blscgo.SecretKey sec1.Recover(secVec, idVec) verifyTrue(sec0.String() == sec1.String()) - var pub1 bls.PublicKey + var pub1 blscgo.PublicKey pub1.Recover(pubVec, idVec) verifyTrue(pub0.String() == pub1.String()) - var s1 bls.Sign + var s1 blscgo.Sign s1.Recover(signVec, idVec) verifyTrue(s0.String() == s1.String()) } func testAdd() { fmt.Println("testAdd") - var sec1 bls.SecretKey - var sec2 bls.SecretKey + var sec1 blscgo.SecretKey + var sec2 blscgo.SecretKey sec1.Init() sec2.Init() @@ -103,7 +103,7 @@ func testAdd() { func testPop() { fmt.Println("testPop") - var sec bls.SecretKey + var sec blscgo.SecretKey sec.Init() pop := sec.GetPop() verifyTrue(pop.VerifyPop(sec.GetPublicKey())) @@ -112,24 +112,24 @@ func testPop() { } func main() { fmt.Println("init") - bls.Init() + blscgo.Init() { - var id bls.Id + var id blscgo.ID id.Set([]uint64{4, 3, 2, 1}) fmt.Println("id :", id) - var id2 bls.Id + var id2 blscgo.ID id2.SetStr(id.String()) fmt.Println("id2:", id2) } { - var sec bls.SecretKey + var sec blscgo.SecretKey sec.SetArray([]uint64{1, 2, 3, 4}) fmt.Println("sec=", sec) } fmt.Println("create secret key") - m := "this is a bls sample for go" - var sec bls.SecretKey + m := "this is a blscgo sample for go" + var sec blscgo.SecretKey sec.Init() fmt.Println("sec:", sec) fmt.Println("create public key") @@ -141,7 +141,7 @@ func main() { // How to make array of SecretKey { - sec := make([]bls.SecretKey, 3) + sec := make([]blscgo.SecretKey, 3) for i := 0; i < len(sec); i++ { sec[i].Init() fmt.Println("sec=", sec[i].String()) |