diff options
author | MITSUNARI Shigeo <herumi@nifty.com> | 2016-09-14 15:15:23 +0800 |
---|---|---|
committer | MITSUNARI Shigeo <herumi@nifty.com> | 2016-09-14 15:15:23 +0800 |
commit | 218791d020469766d9bbce9ad0cccf07e0ae93e1 (patch) | |
tree | 6d3a02f2d30e9881d0a697b7c649f169bfe4f8f3 | |
parent | 261c20cf9b4b3fbd50e4984ca81ef1912e4f11f9 (diff) | |
download | dexon-bls-218791d020469766d9bbce9ad0cccf07e0ae93e1.tar.gz dexon-bls-218791d020469766d9bbce9ad0cccf07e0ae93e1.tar.zst dexon-bls-218791d020469766d9bbce9ad0cccf07e0ae93e1.zip |
runtime.SetFinalizer is removed
-rw-r--r-- | go/bls/bls.go | 121 |
1 files changed, 54 insertions, 67 deletions
diff --git a/go/bls/bls.go b/go/bls/bls.go index c59b55c..187b89a 100644 --- a/go/bls/bls.go +++ b/go/bls/bls.go @@ -7,7 +7,6 @@ package bls */ import "C" import "fmt" -import "runtime" import "unsafe" func Init() { @@ -15,29 +14,26 @@ func Init() { } type Id struct { - self *C.blsId + v [4]C.uint64_t } -func destroyBlsId(p *Id) { - C.blsIdDestroy(p.self) +func (id *Id) getPointer() (p *C.blsId) { + return (*C.blsId)(unsafe.Pointer(&id.v[0])) } func NewId() *Id { - p := new(Id) - p.self = C.blsIdCreate() - runtime.SetFinalizer(p, destroyBlsId) - return p + return new(Id) } func (id *Id) Clone() (r *Id) { - r = NewId() - C.blsIdCopy(r.self, id.self) + r = new(Id) + *r = *id return r } func (id *Id) String() string { buf := make([]byte, 1024) - n := C.blsIdGetStr(id.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + 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") } @@ -46,7 +42,7 @@ func (id *Id) String() string { func (id *Id) SetStr(s string) error { buf := []byte(s) - err := C.blsIdSetStr(id.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + 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) } @@ -57,34 +53,31 @@ func (id *Id) Set(v []uint64) error { if len(v) != 4 { return fmt.Errorf("bad size", len(v)) } - C.blsIdSet(id.self, (*C.uint64_t)(unsafe.Pointer(&v[0]))) + C.blsIdSet(id.getPointer(), (*C.uint64_t)(unsafe.Pointer(&v[0]))) return nil } type SecretKey struct { - self *C.blsSecretKey + v [4]C.uint64_t } -func destroyBlsSecretKey(p *SecretKey) { - C.blsSecretKeyDestroy(p.self) +func (sec *SecretKey) getPointer() (p *C.blsSecretKey) { + return (*C.blsSecretKey)(unsafe.Pointer(&sec.v[0])) } func NewSecretKey() *SecretKey { - p := new(SecretKey) - p.self = C.blsSecretKeyCreate() - runtime.SetFinalizer(p, destroyBlsSecretKey) - return p + return new(SecretKey) } func (sec *SecretKey) Clone() (r *SecretKey) { - r = NewSecretKey() - C.blsSecretKeyCopy(r.self, sec.self) + r = new(SecretKey) + *r = *sec return r } func (sec *SecretKey) String() string { buf := make([]byte, 1024) - n := C.blsSecretKeyGetStr(sec.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + 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") } @@ -93,7 +86,7 @@ func (sec *SecretKey) String() string { func (sec *SecretKey) SetStr(s string) error { buf := []byte(s) - err := C.blsSecretKeySetStr(sec.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + 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) } @@ -104,23 +97,23 @@ func (sec *SecretKey) SetArray(v []uint64) error { if len(v) != 4 { return fmt.Errorf("bad size", len(v)) } - C.blsSecretKeySetArray(sec.self, (*C.uint64_t)(unsafe.Pointer(&v[0]))) + C.blsSecretKeySetArray(sec.getPointer(), (*C.uint64_t)(unsafe.Pointer(&v[0]))) return nil } func (sec *SecretKey) Init() { - C.blsSecretKeyInit(sec.self) + C.blsSecretKeyInit(sec.getPointer()) } func (sec *SecretKey) Add(rhs *SecretKey) { - C.blsSecretKeyAdd(sec.self, rhs.self) + C.blsSecretKeyAdd(sec.getPointer(), rhs.getPointer()) } func (sec *SecretKey) GetMasterSecretKey(k int) (msk []*SecretKey) { msk = make([]*SecretKey, k) msk[0] = sec.Clone() for i := 1; i < k; i++ { - msk[i] = NewSecretKey() + msk[i] = new(SecretKey) msk[i].Init() } return msk @@ -139,7 +132,7 @@ 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].self + pv[i] = v[i].getPointer() } return pv } @@ -147,7 +140,7 @@ 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].self + pv[i] = v[i].getPointer() } return pv } @@ -155,7 +148,7 @@ 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].self + pv[i] = v[i].getPointer() } return pv } @@ -163,51 +156,48 @@ 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].self + pv[i] = v[i].getPointer() } return pv } func (sec *SecretKey) Set(msk []*SecretKey, id *Id) { v := makeSecretKeyPointerArray(msk) - C.blsSecretKeySet(sec.self, (**C.blsSecretKey)(unsafe.Pointer(&v[0])), C.size_t(len(msk)), id.self) + C.blsSecretKeySet(sec.getPointer(), (**C.blsSecretKey)(unsafe.Pointer(&v[0])), C.size_t(len(msk)), id.getPointer()) } func (sec *SecretKey) Recover(secVec []*SecretKey, idVec []*Id) { sv := makeSecretKeyPointerArray(secVec) iv := makeIdPointerArray(idVec) - C.blsSecretKeyRecover(sec.self, (**C.blsSecretKey)(unsafe.Pointer(&sv[0])), (**C.blsId)(unsafe.Pointer(&iv[0])), C.size_t(len(secVec))) + C.blsSecretKeyRecover(sec.getPointer(), (**C.blsSecretKey)(unsafe.Pointer(&sv[0])), (**C.blsId)(unsafe.Pointer(&iv[0])), C.size_t(len(secVec))) } func (sec *SecretKey) GetPop() (sign *Sign) { sign = NewSign() - C.blsSecretKeyGetPop(sec.self, sign.self) + C.blsSecretKeyGetPop(sec.getPointer(), sign.getPointer()) return sign } type PublicKey struct { - self *C.blsPublicKey + v [4 * 2 * 3]C.uint64_t } -func destroyBlsPublicKey(p *PublicKey) { - C.blsPublicKeyDestroy(p.self) +func (pub *PublicKey) getPointer() (p *C.blsPublicKey) { + return (*C.blsPublicKey)(unsafe.Pointer(&pub.v[0])) } func NewPublicKey() *PublicKey { - p := new(PublicKey) - p.self = C.blsPublicKeyCreate() - runtime.SetFinalizer(p, destroyBlsPublicKey) - return p + return new(PublicKey) } func (pub *PublicKey) Clone() (r *PublicKey) { - r = NewPublicKey() - C.blsPublicKeyCopy(r.self, pub.self) + r = new(PublicKey) + *r = *pub return r } func (pub *PublicKey) String() string { buf := make([]byte, 1024) - n := C.blsPublicKeyGetStr(pub.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + 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") } @@ -216,7 +206,7 @@ func (pub *PublicKey) String() string { func (pub *PublicKey) SetStr(s string) error { buf := []byte(s) - err := C.blsPublicKeySetStr(pub.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + 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) } @@ -224,43 +214,40 @@ func (pub *PublicKey) SetStr(s string) error { } func (pub *PublicKey) Add(rhs *PublicKey) { - C.blsPublicKeyAdd(pub.self, rhs.self) + C.blsPublicKeyAdd(pub.getPointer(), rhs.getPointer()) } -func (sec *PublicKey) Set(msk []*PublicKey, id *Id) { +func (pub *PublicKey) Set(msk []*PublicKey, id *Id) { v := makePublicKeyPointerArray(msk) - C.blsPublicKeySet(sec.self, (**C.blsPublicKey)(unsafe.Pointer(&v[0])), C.size_t(len(msk)), id.self) + C.blsPublicKeySet(pub.getPointer(), (**C.blsPublicKey)(unsafe.Pointer(&v[0])), C.size_t(len(msk)), id.getPointer()) } func (pub *PublicKey) Recover(pubVec []*PublicKey, idVec []*Id) { sv := makePublicKeyPointerArray(pubVec) iv := makeIdPointerArray(idVec) - C.blsPublicKeyRecover(pub.self, (**C.blsPublicKey)(unsafe.Pointer(&sv[0])), (**C.blsId)(unsafe.Pointer(&iv[0])), C.size_t(len(pubVec))) + C.blsPublicKeyRecover(pub.getPointer(), (**C.blsPublicKey)(unsafe.Pointer(&sv[0])), (**C.blsId)(unsafe.Pointer(&iv[0])), C.size_t(len(pubVec))) } type Sign struct { - self *C.blsSign + v [4 * 3]C.uint64_t } -func destroyBlsSign(p *Sign) { - C.blsSignDestroy(p.self) +func (sign *Sign) getPointer() (p *C.blsSign) { + return (*C.blsSign)(unsafe.Pointer(&sign.v[0])) } func NewSign() *Sign { - p := new(Sign) - p.self = C.blsSignCreate() - runtime.SetFinalizer(p, destroyBlsSign) - return p + return new(Sign) } func (sign *Sign) Clone() (r *Sign) { - r = NewSign() - C.blsSignCopy(r.self, sign.self) + r = new(Sign) + *r = *sign return r } func (sign *Sign) String() string { buf := make([]byte, 1024) - n := C.blsSignGetStr(sign.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + 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") } @@ -269,7 +256,7 @@ func (sign *Sign) String() string { func (sign *Sign) SetStr(s string) error { buf := []byte(s) - err := C.blsSignSetStr(sign.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + 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) } @@ -278,31 +265,31 @@ func (sign *Sign) SetStr(s string) error { func (sec *SecretKey) GetPublicKey() (pub *PublicKey) { pub = NewPublicKey() - C.blsSecretKeyGetPublicKey(sec.self, pub.self) + C.blsSecretKeyGetPublicKey(sec.getPointer(), pub.getPointer()) return pub } func (sec *SecretKey) Sign(m string) (sign *Sign) { sign = NewSign() buf := []byte(m) - C.blsSecretKeySign(sec.self, sign.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) + C.blsSecretKeySign(sec.getPointer(), sign.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) return sign } func (sign *Sign) Add(rhs *Sign) { - C.blsSignAdd(sign.self, rhs.self) + C.blsSignAdd(sign.getPointer(), rhs.getPointer()) } func (sign *Sign) Recover(signVec []*Sign, idVec []*Id) { sv := makeSignPointerArray(signVec) iv := makeIdPointerArray(idVec) - C.blsSignRecover(sign.self, (**C.blsSign)(unsafe.Pointer(&sv[0])), (**C.blsId)(unsafe.Pointer(&iv[0])), C.size_t(len(signVec))) + C.blsSignRecover(sign.getPointer(), (**C.blsSign)(unsafe.Pointer(&sv[0])), (**C.blsId)(unsafe.Pointer(&iv[0])), C.size_t(len(signVec))) } func (sign *Sign) Verify(pub *PublicKey, m string) bool { buf := []byte(m) - return C.blsSignVerify(sign.self, pub.self, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) == 1 + return C.blsSignVerify(sign.getPointer(), pub.getPointer(), (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(len(buf))) == 1 } func (sign *Sign) VerifyPop(pub *PublicKey) bool { - return C.blsSignVerifyPop(sign.self, pub.self) == 1 + return C.blsSignVerifyPop(sign.getPointer(), pub.getPointer()) == 1 } |