@@ -158,15 +158,15 @@ const BLST_P1_SERIALIZE_BYTES = BLST_FP_BYTES * 2
158158const BLST_P2_COMPRESS_BYTES = BLST_FP_BYTES * 2
159159const BLST_P2_SERIALIZE_BYTES = BLST_FP_BYTES * 4
160160
161- type Scalar = C.blst_scalar
162- type Fp = C.blst_fp
163- type Fp2 = C.blst_fp2
161+ type Scalar struct{ cgo C.blst_scalar }
162+ type Fp struct{ cgo C.blst_fp }
163+ type Fp2 struct{ cgo C.blst_fp2 }
164164type Fp6 = C.blst_fp6
165- type Fp12 = C.blst_fp12
166- type P1 = C.blst_p1
167- type P2 = C.blst_p2
168- type P1Affine = C.blst_p1_affine
169- type P2Affine = C.blst_p2_affine
165+ type Fp12 struct{ cgo C.blst_fp12 }
166+ type P1 struct{ cgo C.blst_p1 }
167+ type P2 struct{ cgo C.blst_p2 }
168+ type P1Affine struct{ cgo C.blst_p1_affine }
169+ type P2Affine struct{ cgo C.blst_p2_affine }
170170type Message = []byte
171171type Pairing = []C.blst_pairing
172172type SecretKey = Scalar
@@ -219,9 +219,9 @@ func numThreads(maxThreads int) int {
219219}
220220
221221var cgo_pairingSizeOf = C.blst_pairing_sizeof()
222- var cgo_p1Generator = *C.blst_p1_generator()
223- var cgo_p2Generator = *C.blst_p2_generator()
224- var cgo_fp12One = *C.blst_fp12_one()
222+ var cgo_p1Generator = P1{ *C.blst_p1_generator()}
223+ var cgo_p2Generator = P2{ *C.blst_p2_generator()}
224+ var cgo_fp12One = Fp12{ *C.blst_fp12_one()}
225225
226226//
227227// Secret key
@@ -240,8 +240,8 @@ func KeyGen(ikm []byte, optional ...[]byte) *SecretKey {
240240 if len(ikm) < 32 {
241241 return nil
242242 }
243- C.blst_keygen(&sk, (*C.byte)(&ikm[0]), C.size_t(len(ikm)),
244- ptrOrNil(info), C.size_t(len(info)))
243+ C.blst_keygen(&sk.cgo , (*C.byte)(&ikm[0]), C.size_t(len(ikm)),
244+ ptrOrNil(info), C.size_t(len(info)))
245245 // Postponing secret key zeroing till garbage collection can be too
246246 // late to be effective, but every little bit helps...
247247 runtime.SetFinalizer(&sk, func(sk *SecretKey) { sk.Zeroize() })
@@ -257,8 +257,8 @@ func KeyGenV3(ikm []byte, optional ...[]byte) *SecretKey {
257257 if len(optional) > 0 {
258258 info = optional[0]
259259 }
260- C.blst_keygen_v3(&sk, (*C.byte)(&ikm[0]), C.size_t(len(ikm)),
261- ptrOrNil(info), C.size_t(len(info)))
260+ C.blst_keygen_v3(&sk.cgo , (*C.byte)(&ikm[0]), C.size_t(len(ikm)),
261+ ptrOrNil(info), C.size_t(len(info)))
262262 // Postponing secret key zeroing till garbage collection can be too
263263 // late to be effective, but every little bit helps...
264264 runtime.SetFinalizer(&sk, func(sk *SecretKey) { sk.Zeroize() })
@@ -274,9 +274,9 @@ func KeyGenV45(ikm []byte, salt []byte, optional ...[]byte) *SecretKey {
274274 if len(optional) > 0 {
275275 info = optional[0]
276276 }
277- C.blst_keygen_v4_5(&sk, (*C.byte)(&ikm[0]), C.size_t(len(ikm)),
278- (*C.byte)(&salt[0]), C.size_t(len(salt)),
279- ptrOrNil(info), C.size_t(len(info)))
277+ C.blst_keygen_v4_5(&sk.cgo , (*C.byte)(&ikm[0]), C.size_t(len(ikm)),
278+ (*C.byte)(&salt[0]), C.size_t(len(salt)),
279+ ptrOrNil(info), C.size_t(len(info)))
280280 // Postponing secret key zeroing till garbage collection can be too
281281 // late to be effective, but every little bit helps...
282282 runtime.SetFinalizer(&sk, func(sk *SecretKey) { sk.Zeroize() })
@@ -292,9 +292,9 @@ func KeyGenV5(ikm []byte, salt []byte, optional ...[]byte) *SecretKey {
292292 if len(optional) > 0 {
293293 info = optional[0]
294294 }
295- C.blst_keygen_v5(&sk, (*C.byte)(&ikm[0]), C.size_t(len(ikm)),
296- (*C.byte)(&salt[0]), C.size_t(len(salt)),
297- ptrOrNil(info), C.size_t(len(info)))
295+ C.blst_keygen_v5(&sk.cgo , (*C.byte)(&ikm[0]), C.size_t(len(ikm)),
296+ (*C.byte)(&salt[0]), C.size_t(len(salt)),
297+ ptrOrNil(info), C.size_t(len(info)))
298298 // Postponing secret key zeroing till garbage collection can be too
299299 // late to be effective, but every little bit helps...
300300 runtime.SetFinalizer(&sk, func(sk *SecretKey) { sk.Zeroize() })
@@ -306,7 +306,7 @@ func DeriveMasterEip2333(ikm []byte) *SecretKey {
306306 return nil
307307 }
308308 var sk SecretKey
309- C.blst_derive_master_eip2333(&sk, (*C.byte)(&ikm[0]), C.size_t(len(ikm)))
309+ C.blst_derive_master_eip2333(&sk.cgo , (*C.byte)(&ikm[0]), C.size_t(len(ikm)))
310310 // Postponing secret key zeroing till garbage collection can be too
311311 // late to be effective, but every little bit helps...
312312 runtime.SetFinalizer(&sk, func(sk *SecretKey) { sk.Zeroize() })
@@ -315,7 +315,7 @@ func DeriveMasterEip2333(ikm []byte) *SecretKey {
315315
316316func (master *SecretKey) DeriveChildEip2333(child_index uint32) *SecretKey {
317317 var sk SecretKey
318- C.blst_derive_child_eip2333(&sk, master, C.uint(child_index))
318+ C.blst_derive_child_eip2333(&sk.cgo, & master.cgo , C.uint(child_index))
319319 // Postponing secret key zeroing till garbage collection can be too
320320 // late to be effective, but every little bit helps...
321321 runtime.SetFinalizer(&sk, func(sk *SecretKey) { sk.Zeroize() })
@@ -350,30 +350,38 @@ func PairingFinalVerify(ctx Pairing, optional ...*Fp12) bool {
350350 if len(optional) > 0 {
351351 gtsig = optional[0]
352352 }
353- return bool(C.blst_pairing_finalverify(&ctx[0], gtsig))
353+ return bool(C.blst_pairing_finalverify(&ctx[0], gtsig.asPtr() ))
354354}
355355
356356func PairingRawAggregate(ctx Pairing, q *P2Affine, p *P1Affine) {
357- C.blst_pairing_raw_aggregate(&ctx[0], q, p )
357+ C.blst_pairing_raw_aggregate(&ctx[0], &q.cgo, &p.cgo )
358358}
359359
360360func PairingAsFp12(ctx Pairing) *Fp12 {
361361 var pt Fp12
362- C.go_pairing_as_fp12(&pt, &ctx[0])
362+ C.go_pairing_as_fp12(&pt.cgo , &ctx[0])
363363 return &pt
364364}
365365
366+ func (pt *Fp12) asPtr() *C.blst_fp12 {
367+ if (pt != nil) {
368+ return &pt.cgo
369+ }
370+
371+ return nil
372+ }
373+
366374func Fp12One() Fp12 {
367375 return cgo_fp12One
368376}
369377
370378func Fp12FinalVerify(pt1 *Fp12, pt2 *Fp12) bool {
371- return bool(C.blst_fp12_finalverify(pt1, pt2))
379+ return bool(C.blst_fp12_finalverify(& pt1.cgo, & pt2.cgo ))
372380}
373381
374382func Fp12MillerLoop(q *P2Affine, p *P1Affine) *Fp12 {
375383 var pt Fp12
376- C.blst_miller_loop(&pt, q, p )
384+ C.blst_miller_loop(&pt.cgo, &q.cgo, &p.cgo )
377385 return &pt
378386}
379387
@@ -387,7 +395,7 @@ func Fp12MillerLoopN(qs []P2Affine, ps []P1Affine) *Fp12 {
387395
388396 if nThreads == 1 || nElems == 1 {
389397 var pt Fp12
390- C.go_miller_loop_n(&pt, &qs[0], &ps[0], C.size_t(nElems), false)
398+ C.go_miller_loop_n(&pt.cgo , &qs[0].cgo , &ps[0].cgo , C.size_t(nElems), false)
391399 return &pt
392400 }
393401
@@ -417,7 +425,7 @@ func Fp12MillerLoopN(qs []P2Affine, ps []P1Affine) *Fp12 {
417425 if n > stride {
418426 n = stride
419427 }
420- C.go_miller_loop_n(&acc, &qs[work], &ps[work], C.size_t(n),
428+ C.go_miller_loop_n(&acc.cgo , &qs[work].cgo , &ps[work].cgo , C.size_t(n),
421429 C.bool(!first))
422430 first = false
423431 }
@@ -431,25 +439,25 @@ func Fp12MillerLoopN(qs []P2Affine, ps []P1Affine) *Fp12 {
431439 }
432440
433441 var pt Fp12
434- C.go_fp12slice_mul(&pt, &ret[0], C.size_t(nThreads))
442+ C.go_fp12slice_mul(&pt.cgo , &ret[0].cgo , C.size_t(nThreads))
435443 return &pt
436444}
437445
438446func (pt *Fp12) MulAssign(p *Fp12) {
439- C.blst_fp12_mul(pt, pt, p )
447+ C.blst_fp12_mul(&pt.cgo, &pt.cgo, &p.cgo )
440448}
441449
442450func (pt *Fp12) FinalExp() {
443- C.blst_final_exp(pt, pt )
451+ C.blst_final_exp(&pt.cgo, &pt.cgo )
444452}
445453
446454func (pt *Fp12) InGroup() bool {
447- return bool(C.blst_fp12_in_group(pt ))
455+ return bool(C.blst_fp12_in_group(&pt.cgo ))
448456}
449457
450458func (pt *Fp12) ToBendian() []byte {
451459 var out [BLST_FP_BYTES*12]byte
452- C.blst_bendian_from_fp12((*C.byte)(&out[0]), pt )
460+ C.blst_bendian_from_fp12((*C.byte)(&out[0]), &pt.cgo )
453461 return out[:]
454462}
455463
0 commit comments