diff options
author | MITSUNARI Shigeo <herumi@nifty.com> | 2017-05-29 05:31:17 +0800 |
---|---|---|
committer | MITSUNARI Shigeo <herumi@nifty.com> | 2017-05-29 05:31:17 +0800 |
commit | 14c6246a6ca198a89498d766641b07230e9c647d (patch) | |
tree | 4b8ebda7c87269b300429f91991d1d4119cb8ecd /go | |
parent | d6de132a2d40e79eaa944999882c484015c3261a (diff) | |
download | dexon-bls-14c6246a6ca198a89498d766641b07230e9c647d.tar dexon-bls-14c6246a6ca198a89498d766641b07230e9c647d.tar.gz dexon-bls-14c6246a6ca198a89498d766641b07230e9c647d.tar.bz2 dexon-bls-14c6246a6ca198a89498d766641b07230e9c647d.tar.lz dexon-bls-14c6246a6ca198a89498d766641b07230e9c647d.tar.xz dexon-bls-14c6246a6ca198a89498d766641b07230e9c647d.tar.zst dexon-bls-14c6246a6ca198a89498d766641b07230e9c647d.zip |
update api
Diffstat (limited to 'go')
-rw-r--r-- | go/bls/bls.go | 216 | ||||
-rw-r--r-- | go/bls/bls_test.go | 76 |
2 files changed, 151 insertions, 141 deletions
diff --git a/go/bls/bls.go b/go/bls/bls.go index 087b386..f342615 100644 --- a/go/bls/bls.go +++ b/go/bls/bls.go @@ -75,55 +75,69 @@ func (id *ID) getPointer() (p *C.blsId) { return (*C.blsId)(unsafe.Pointer(&id.v[0])) } -// GetByte -- -func (id *ID) GetByte(ioMode int) []byte { +// GetLittleEndian -- +func (id *ID) GetLittleEndian() []byte { buf := make([]byte, 1024) // #nosec - n := C.blsIdGetStr(id.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode)) + n := C.blsIdGetLittleEndian(unsafe.Pointer(&buf[0]), C.size_t(len(buf)), id.getPointer()) if n == 0 { - panic("implementation err. size of buf is small") + panic("err blsIdGetLittleEndian") } return buf[:n] } -// SetByte -- -func (id *ID) SetByte(buf []byte, ioMode int) error { +// SetLittleEndian -- +func (id *ID) SetLittleEndian(buf []byte) error { // #nosec - err := C.blsIdSetStr(id.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode)) + err := C.blsIdSetLittleEndian(id.getPointer(), unsafe.Pointer(&buf[0]), C.size_t(len(buf))) if err != 0 { - return fmt.Errorf("bad byte:%x", buf) + return fmt.Errorf("err blsIdSetLittleEndian %x", err) } return nil } -// Serialize -- -func (id *ID) Serialize() []byte { - return id.GetByte(C.blsIoEcComp) -} - -// Deserialize -- -func (id *ID) Deserialize(b []byte) error { - return id.SetByte(b, C.blsIoEcComp) -} - // GetHexString -- func (id *ID) GetHexString() string { - return string(id.GetByte(16)) + buf := make([]byte, 1024) + // #nosec + n := C.blsIdGetHexStr((*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), id.getPointer()) + if n == 0 { + panic("err blsIdGetHexStr") + } + return string(buf[:n]) } // GetDecString -- func (id *ID) GetDecString() string { - return string(id.GetByte(10)) + buf := make([]byte, 1024) + // #nosec + n := C.blsIdGetDecStr((*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), id.getPointer()) + if n == 0 { + panic("err blsIdGetDecStr") + } + return string(buf[:n]) } // SetHexString -- func (id *ID) SetHexString(s string) error { - return id.SetByte([]byte(s), 16) + buf := []byte(s) + // #nosec + err := C.blsIdSetHexStr(id.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + if err != 0 { + return fmt.Errorf("err blsIdSetHexStr %x", err) + } + return nil } // SetDecString -- func (id *ID) SetDecString(s string) error { - return id.SetByte([]byte(s), 10) + buf := []byte(s) + // #nosec + err := C.blsIdSetDecStr(id.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + if err != 0 { + return fmt.Errorf("err blsIdSetDecStr %x", buf) + } + return nil } // IsSame -- @@ -131,16 +145,6 @@ func (id *ID) IsSame(rhs *ID) bool { return C.blsIdIsSame(id.getPointer(), rhs.getPointer()) == 1 } -// Set -- -func (id *ID) Set(v []uint64) { - expect := GetOpUnitSize() - if len(v) != expect { - panic(fmt.Errorf("bad size (%d), expected size %d", len(v), expect)) - } - // #nosec - C.blsIdSet(id.getPointer(), (*C.uint64_t)(unsafe.Pointer(&v[0]))) -} - // SecretKey -- type SecretKey struct { v [C.BLS_MAX_OP_UNIT_SIZE]C.uint64_t @@ -152,55 +156,69 @@ func (sec *SecretKey) getPointer() (p *C.blsSecretKey) { return (*C.blsSecretKey)(unsafe.Pointer(&sec.v[0])) } -// GetByte -- -func (sec *SecretKey) GetByte(ioMode int) []byte { +// GetLittleEndian -- +func (sec *SecretKey) GetLittleEndian() []byte { buf := make([]byte, 1024) // #nosec - n := C.blsSecretKeyGetStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode)) + n := C.blsSecretKeyGetLittleEndian(unsafe.Pointer(&buf[0]), C.size_t(len(buf)), sec.getPointer()) if n == 0 { - panic("implementation err. size of buf is small") + panic("err blsSecretKeyGetLittleEndian") } return buf[:n] } -// SetByte -- -func (sec *SecretKey) SetByte(buf []byte, ioMode int) error { +// SetLittleEndian -- +func (sec *SecretKey) SetLittleEndian(buf []byte) error { // #nosec - err := C.blsSecretKeySetStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode)) + err := C.blsSecretKeySetLittleEndian(sec.getPointer(), unsafe.Pointer(&buf[0]), C.size_t(len(buf))) if err != 0 { - return fmt.Errorf("bad byte:%x", buf) + return fmt.Errorf("err blsSecretKeySetLittleEndian %x", buf) } return nil } -// Serialize -- -func (sec *SecretKey) Serialize() []byte { - return sec.GetByte(C.blsIoEcComp) -} - -// Deserialize -- -func (sec *SecretKey) Deserialize(b []byte) error { - return sec.SetByte(b, C.blsIoEcComp) -} - // GetHexString -- func (sec *SecretKey) GetHexString() string { - return string(sec.GetByte(16)) + buf := make([]byte, 1024) + // #nosec + n := C.blsSecretKeyGetHexStr((*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), sec.getPointer()) + if n == 0 { + panic("err blsSecretKeyGetHexStr") + } + return string(buf[:n]) } // GetDecString -- func (sec *SecretKey) GetDecString() string { - return string(sec.GetByte(10)) + buf := make([]byte, 1024) + // #nosec + n := C.blsSecretKeyGetDecStr((*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), sec.getPointer()) + if n == 0 { + panic("err blsSecretKeyGetDecStr") + } + return string(buf[:n]) } // SetHexString -- func (sec *SecretKey) SetHexString(s string) error { - return sec.SetByte([]byte(s), 16) + buf := []byte(s) + // #nosec + err := C.blsSecretKeySetHexStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + if err != 0 { + return fmt.Errorf("erre blsSecretKeySetHexStr %s", s) + } + return nil } // SetDecString -- func (sec *SecretKey) SetDecString(s string) error { - return sec.SetByte([]byte(s), 10) + buf := []byte(s) + // #nosec + err := C.blsSecretKeySetDecStr(sec.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + if err != 0 { + return fmt.Errorf("erre blsSecretKeySetDecStr %s", s) + } + return nil } // IsSame -- @@ -208,19 +226,9 @@ func (sec *SecretKey) IsSame(rhs *SecretKey) bool { return C.blsSecretKeyIsSame(sec.getPointer(), rhs.getPointer()) == 1 } -// SetArray -- -func (sec *SecretKey) SetArray(v []uint64) { - expect := GetOpUnitSize() - if len(v) != expect { - panic(fmt.Errorf("bad size (%d), expected size %d", len(v), expect)) - } - // #nosec - C.blsSecretKeySetArray(sec.getPointer(), (*C.uint64_t)(unsafe.Pointer(&v[0]))) -} - // Init -- func (sec *SecretKey) Init() { - C.blsSecretKeyInit(sec.getPointer()) + C.blsSecretKeySetByCSPRNG(sec.getPointer()) } // Add -- @@ -250,9 +258,9 @@ func GetMasterPublicKey(msk []SecretKey) (mpk []PublicKey) { // Set -- func (sec *SecretKey) Set(msk []SecretKey, id *ID) error { - err := C.blsSecretKeySet(sec.getPointer(), msk[0].getPointer(), C.size_t(len(msk)), id.getPointer()) + err := C.blsSecretKeyShare(sec.getPointer(), msk[0].getPointer(), C.size_t(len(msk)), id.getPointer()) if err != 0 { - return fmt.Errorf("SecretKey.Set") + return fmt.Errorf("err blsSecretKeyShare id %s", id.GetHexString()) } return nil } @@ -269,7 +277,7 @@ func (sec *SecretKey) Recover(secVec []SecretKey, idVec []ID) error { // GetPop -- func (sec *SecretKey) GetPop() (sign *Sign) { sign = new(Sign) - C.blsSecretKeyGetPop(sec.getPointer(), sign.getPointer()) + C.blsGetPop(sign.getPointer(), sec.getPointer()) return sign } @@ -284,37 +292,27 @@ func (pub *PublicKey) getPointer() (p *C.blsPublicKey) { return (*C.blsPublicKey)(unsafe.Pointer(&pub.v[0])) } -// GetByte -- -func (pub *PublicKey) GetByte(ioMode int) []byte { +// Serialize -- +func (pub *PublicKey) Serialize() []byte { buf := make([]byte, 1024) // #nosec - n := C.blsPublicKeyGetStr(pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode)) + n := C.blsPublicKeySerialize(unsafe.Pointer(&buf[0]), C.size_t(len(buf)), pub.getPointer()) if n == 0 { - panic("implementation err. size of buf is small") + panic("err blsPublicKeySerialize") } return buf[:n] } -// SetByte -- -func (pub *PublicKey) SetByte(buf []byte, ioMode int) error { +// Deserialize -- +func (pub *PublicKey) Deserialize(buf []byte) error { // #nosec - err := C.blsPublicKeySetStr(pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode)) + err := C.blsPublicKeyDeserialize(pub.getPointer(), unsafe.Pointer(&buf[0]), C.size_t(len(buf))) if err != 0 { - return fmt.Errorf("bad byte:%x", buf) + return fmt.Errorf("err blsPublicKeyDeserialize %x", buf) } return nil } -// Serialize -- -func (pub *PublicKey) Serialize() []byte { - return pub.GetByte(C.blsIoEcComp) -} - -// Deserialize -- -func (pub *PublicKey) Deserialize(b []byte) error { - return pub.SetByte(b, C.blsIoEcComp) -} - // GetHexString -- func (pub *PublicKey) GetHexString() string { return fmt.Sprintf("%x", pub.Serialize()) @@ -341,7 +339,7 @@ func (pub *PublicKey) Add(rhs *PublicKey) { // Set -- func (pub *PublicKey) Set(mpk []PublicKey, id *ID) error { - err := C.blsPublicKeySet(pub.getPointer(), mpk[0].getPointer(), C.size_t(len(mpk)), id.getPointer()) + err := C.blsPublicKeyShare(pub.getPointer(), mpk[0].getPointer(), C.size_t(len(mpk)), id.getPointer()) if err != 0 { return fmt.Errorf("PublicKey.set") } @@ -363,42 +361,32 @@ type Sign struct { } // getPointer -- -func (sign *Sign) getPointer() (p *C.blsSign) { +func (sign *Sign) getPointer() (p *C.blsSignature) { // #nosec - return (*C.blsSign)(unsafe.Pointer(&sign.v[0])) + return (*C.blsSignature)(unsafe.Pointer(&sign.v[0])) } -// GetByte -- -func (sign *Sign) GetByte(ioMode int) []byte { +// Serialize -- +func (sign *Sign) Serialize() []byte { buf := make([]byte, 1024) // #nosec - n := C.blsSignGetStr(sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode)) + n := C.blsSignatureSerialize(unsafe.Pointer(&buf[0]), C.size_t(len(buf)), sign.getPointer()) if n == 0 { - panic("implementation err. size of buf is small") + panic("err blsSignatureSerialize") } return buf[:n] } -// SetByte -- -func (sign *Sign) SetByte(buf []byte, ioMode int) error { +// Deserialize -- +func (sign *Sign) Deserialize(buf []byte) error { // #nosec - err := C.blsSignSetStr(sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf)), C.int(ioMode)) + err := C.blsSignatureDeserialize(sign.getPointer(), unsafe.Pointer(&buf[0]), C.size_t(len(buf))) if err != 0 { - return fmt.Errorf("bad byte:%x", buf) + return fmt.Errorf("err blsSignatureDeserialize %x", buf) } return nil } -// Serialize -- -func (sign *Sign) Serialize() []byte { - return sign.GetByte(C.blsIoEcComp) -} - -// Deserialize -- -func (sign *Sign) Deserialize(b []byte) error { - return sign.SetByte(b, C.blsIoEcComp) -} - // GetHexString -- func (sign *Sign) GetHexString() string { return fmt.Sprintf("%x", sign.Serialize()) @@ -415,13 +403,13 @@ func (sign *Sign) SetHexString(s string) error { // IsSame -- func (sign *Sign) IsSame(rhs *Sign) bool { - return C.blsSignIsSame(sign.getPointer(), rhs.getPointer()) == 1 + return C.blsSignatureIsSame(sign.getPointer(), rhs.getPointer()) == 1 } // GetPublicKey -- func (sec *SecretKey) GetPublicKey() (pub *PublicKey) { pub = new(PublicKey) - C.blsSecretKeyGetPublicKey(sec.getPointer(), pub.getPointer()) + C.blsGetPublicKey(pub.getPointer(), sec.getPointer()) return pub } @@ -430,18 +418,18 @@ 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))) + C.blsSign(sign.getPointer(), sec.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()) + C.blsSignatureAdd(sign.getPointer(), rhs.getPointer()) } // Recover -- func (sign *Sign) Recover(signVec []Sign, idVec []ID) error { - err := C.blsSignRecover(sign.getPointer(), signVec[0].getPointer(), idVec[0].getPointer(), C.size_t(len(signVec))) + err := C.blsSignatureRecover(sign.getPointer(), signVec[0].getPointer(), idVec[0].getPointer(), C.size_t(len(signVec))) if err != 0 { return fmt.Errorf("Sign.Recover") } @@ -452,10 +440,10 @@ func (sign *Sign) Recover(signVec []Sign, idVec []ID) error { 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 + return C.blsVerify(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 + return C.blsVerifyPop(sign.getPointer(), pub.getPointer()) == 1 } diff --git a/go/bls/bls_test.go b/go/bls/bls_test.go index 361b662..2561e83 100644 --- a/go/bls/bls_test.go +++ b/go/bls/bls_test.go @@ -11,11 +11,13 @@ func testPre(t *testing.T) { t.Log("init") { var id ID - id.Set([]uint64{6, 5, 4, 3, 2, 1}[0:unitN]) - - t.Log("id :", id) + err := id.SetLittleEndian([]byte{6, 5, 4, 3, 2, 1}) + if err != nil { + t.Error(err) + } + t.Log("id :", id.GetHexString()) var id2 ID - err := id2.SetHexString(id.GetHexString()) + err = id2.SetHexString(id.GetHexString()) if err != nil { t.Fatal(err) } @@ -32,20 +34,23 @@ func testPre(t *testing.T) { } { var sec SecretKey - sec.SetArray([]uint64{1, 2, 3, 4, 5, 6}[0:unitN]) - t.Log("sec=", sec) + err := sec.SetLittleEndian([]byte{1, 2, 3, 4, 5, 6}) + if err != nil { + t.Error(err) + } + t.Log("sec=", sec.GetHexString()) } t.Log("create secret key") m := "this is a bls sample for go" var sec SecretKey sec.Init() - t.Log("sec:", sec) + t.Log("sec:", sec.GetHexString()) t.Log("create public key") pub := sec.GetPublicKey() - t.Log("pub:", pub) + t.Log("pub:", pub.GetHexString()) sign := sec.Sign(m) - t.Log("sign:", sign) + t.Log("sign:", sign.GetHexString()) if !sign.Verify(pub, m) { t.Error("Signature does not verify") } @@ -92,6 +97,7 @@ func testRecoverSecretKey(t *testing.T) { k := 3000 var sec SecretKey sec.Init() + t.Logf("sec=%s\n", sec.GetHexString()) // make master secret key msk := sec.GetMasterSecretKey(k) @@ -100,17 +106,21 @@ func testRecoverSecretKey(t *testing.T) { secVec := make([]SecretKey, n) idVec := make([]ID, n) for i := 0; i < n; i++ { - idVec[i].Set([]uint64{uint64(i), 1, 2, 3, 4, 5}[0:unitN]) - err := secVec[i].Set(msk, &idVec[i]) + err := idVec[i].SetLittleEndian([]byte{byte(i & 255), byte(i >> 8), 2, 3, 4, 5}) if err != nil { - t.Errorf("%s\n", err) + t.Error(err) + } + err = secVec[i].Set(msk, &idVec[i]) + if err != nil { + t.Error(err) } + // t.Logf("idVec[%d]=%s\n", i, idVec[i].GetHexString()) } // recover sec2 from secVec and idVec var sec2 SecretKey err := sec2.Recover(secVec, idVec) if err != nil { - t.Errorf("err%s\n", err) + t.Error(err) } if !sec.IsSame(&sec2) { t.Errorf("Mismatch in recovered secret key:\n %s\n %s.", sec.GetHexString(), sec2.GetHexString()) @@ -118,7 +128,7 @@ func testRecoverSecretKey(t *testing.T) { } func testEachSign(t *testing.T, m string, msk []SecretKey, mpk []PublicKey) ([]ID, []SecretKey, []PublicKey, []Sign) { - idTbl := []uint64{3, 5, 193, 22, 15} + idTbl := []byte{3, 5, 193, 22, 15} n := len(idTbl) secVec := make([]SecretKey, n) @@ -127,10 +137,13 @@ func testEachSign(t *testing.T, m string, msk []SecretKey, mpk []PublicKey) ([]I idVec := make([]ID, n) for i := 0; i < n; i++ { - idVec[i].Set([]uint64{idTbl[i], 0, 0, 0, 0, 0}[0:unitN]) + err := idVec[i].SetLittleEndian([]byte{idTbl[i], 0, 0, 0, 0, 0}) + if err != nil { + t.Error(err) + } t.Logf("idVec[%d]=%s\n", i, idVec[i].GetHexString()) - err := secVec[i].Set(msk, &idVec[i]) + err = secVec[i].Set(msk, &idVec[i]) if err != nil { t.Error(err) } @@ -236,8 +249,8 @@ func testData(t *testing.T) { t.Log("testData") var sec1, sec2 SecretKey sec1.Init() - b := sec1.Serialize() - err := sec2.Deserialize(b) + b := sec1.GetLittleEndian() + err := sec2.SetLittleEndian(b) if err != nil { t.Fatal(err) } @@ -386,12 +399,15 @@ func benchmarkDeriveSeckeyShare(k int, b *testing.B) { msk := sec.GetMasterSecretKey(k) var id ID for n := 0; n < b.N; n++ { - id.Set([]uint64{1, 2, 3, 4, 5, uint64(n)}) + err = id.SetLittleEndian([]byte{1, 2, 3, 4, 5, byte(n)}) + if err != nil { + b.Error(err) + } b.StartTimer() err := sec.Set(msk, &id) b.StopTimer() if err != nil { - b.Errorf("%s\n", err) + b.Error(err) } } } @@ -417,10 +433,13 @@ func benchmarkRecoverSeckey(k int, b *testing.B) { secVec := make([]SecretKey, n) idVec := make([]ID, n) for i := 0; i < n; i++ { - idVec[i].Set([]uint64{1, 2, 3, 4, 5, uint64(i)}) - err := secVec[i].Set(msk, &idVec[i]) + err := idVec[i].SetLittleEndian([]byte{1, 2, 3, 4, 5, byte(i)}) if err != nil { - b.Errorf("%s\n", err) + b.Error(err) + } + err = secVec[i].Set(msk, &idVec[i]) + if err != nil { + b.Error(err) } } @@ -456,10 +475,13 @@ func benchmarkRecoverSignature(k int, b *testing.B) { secVec := make([]SecretKey, n) signVec := make([]Sign, n) for i := 0; i < n; i++ { - idVec[i].Set([]uint64{1, 2, 3, 4, 5, uint64(i)}) - err := secVec[i].Set(msk, &idVec[i]) + err := idVec[i].SetLittleEndian([]byte{1, 2, 3, 4, 5, byte(i)}) if err != nil { - b.Errorf("%s\n", err) + b.Error(err) + } + err = secVec[i].Set(msk, &idVec[i]) + if err != nil { + b.Error(err) } signVec[i] = *secVec[i].Sign("test message") } @@ -470,7 +492,7 @@ func benchmarkRecoverSignature(k int, b *testing.B) { for n := 0; n < b.N; n++ { err := sig.Recover(signVec, idVec) if err != nil { - b.Errorf("%s\n", err) + b.Error(err) } } } |