@@ -158,15 +158,15 @@ const BLST_P1_SERIALIZE_BYTES = BLST_FP_BYTES * 2
158
158
const BLST_P2_COMPRESS_BYTES = BLST_FP_BYTES * 2
159
159
const BLST_P2_SERIALIZE_BYTES = BLST_FP_BYTES * 4
160
160
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 }
164
164
type 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 }
170
170
type Message = []byte
171
171
type Pairing = []C.blst_pairing
172
172
type SecretKey = Scalar
@@ -219,9 +219,9 @@ func numThreads(maxThreads int) int {
219
219
}
220
220
221
221
var 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()}
225
225
226
226
//
227
227
// Secret key
@@ -240,8 +240,8 @@ func KeyGen(ikm []byte, optional ...[]byte) *SecretKey {
240
240
if len(ikm) < 32 {
241
241
return nil
242
242
}
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)))
245
245
// Postponing secret key zeroing till garbage collection can be too
246
246
// late to be effective, but every little bit helps...
247
247
runtime.SetFinalizer(&sk, func(sk *SecretKey) { sk.Zeroize() })
@@ -257,8 +257,8 @@ func KeyGenV3(ikm []byte, optional ...[]byte) *SecretKey {
257
257
if len(optional) > 0 {
258
258
info = optional[0]
259
259
}
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)))
262
262
// Postponing secret key zeroing till garbage collection can be too
263
263
// late to be effective, but every little bit helps...
264
264
runtime.SetFinalizer(&sk, func(sk *SecretKey) { sk.Zeroize() })
@@ -274,9 +274,9 @@ func KeyGenV45(ikm []byte, salt []byte, optional ...[]byte) *SecretKey {
274
274
if len(optional) > 0 {
275
275
info = optional[0]
276
276
}
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)))
280
280
// Postponing secret key zeroing till garbage collection can be too
281
281
// late to be effective, but every little bit helps...
282
282
runtime.SetFinalizer(&sk, func(sk *SecretKey) { sk.Zeroize() })
@@ -292,9 +292,9 @@ func KeyGenV5(ikm []byte, salt []byte, optional ...[]byte) *SecretKey {
292
292
if len(optional) > 0 {
293
293
info = optional[0]
294
294
}
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)))
298
298
// Postponing secret key zeroing till garbage collection can be too
299
299
// late to be effective, but every little bit helps...
300
300
runtime.SetFinalizer(&sk, func(sk *SecretKey) { sk.Zeroize() })
@@ -306,7 +306,7 @@ func DeriveMasterEip2333(ikm []byte) *SecretKey {
306
306
return nil
307
307
}
308
308
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)))
310
310
// Postponing secret key zeroing till garbage collection can be too
311
311
// late to be effective, but every little bit helps...
312
312
runtime.SetFinalizer(&sk, func(sk *SecretKey) { sk.Zeroize() })
@@ -315,7 +315,7 @@ func DeriveMasterEip2333(ikm []byte) *SecretKey {
315
315
316
316
func (master *SecretKey) DeriveChildEip2333(child_index uint32) *SecretKey {
317
317
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))
319
319
// Postponing secret key zeroing till garbage collection can be too
320
320
// late to be effective, but every little bit helps...
321
321
runtime.SetFinalizer(&sk, func(sk *SecretKey) { sk.Zeroize() })
@@ -350,30 +350,38 @@ func PairingFinalVerify(ctx Pairing, optional ...*Fp12) bool {
350
350
if len(optional) > 0 {
351
351
gtsig = optional[0]
352
352
}
353
- return bool(C.blst_pairing_finalverify(&ctx[0], gtsig))
353
+ return bool(C.blst_pairing_finalverify(&ctx[0], gtsig.asPtr() ))
354
354
}
355
355
356
356
func 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 )
358
358
}
359
359
360
360
func PairingAsFp12(ctx Pairing) *Fp12 {
361
361
var pt Fp12
362
- C.go_pairing_as_fp12(&pt, &ctx[0])
362
+ C.go_pairing_as_fp12(&pt.cgo , &ctx[0])
363
363
return &pt
364
364
}
365
365
366
+ func (pt *Fp12) asPtr() *C.blst_fp12 {
367
+ if (pt != nil) {
368
+ return &pt.cgo
369
+ }
370
+
371
+ return nil
372
+ }
373
+
366
374
func Fp12One() Fp12 {
367
375
return cgo_fp12One
368
376
}
369
377
370
378
func 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 ))
372
380
}
373
381
374
382
func Fp12MillerLoop(q *P2Affine, p *P1Affine) *Fp12 {
375
383
var pt Fp12
376
- C.blst_miller_loop(&pt, q, p )
384
+ C.blst_miller_loop(&pt.cgo, &q.cgo, &p.cgo )
377
385
return &pt
378
386
}
379
387
@@ -387,7 +395,7 @@ func Fp12MillerLoopN(qs []P2Affine, ps []P1Affine) *Fp12 {
387
395
388
396
if nThreads == 1 || nElems == 1 {
389
397
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)
391
399
return &pt
392
400
}
393
401
@@ -417,7 +425,7 @@ func Fp12MillerLoopN(qs []P2Affine, ps []P1Affine) *Fp12 {
417
425
if n > stride {
418
426
n = stride
419
427
}
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),
421
429
C.bool(!first))
422
430
first = false
423
431
}
@@ -431,25 +439,25 @@ func Fp12MillerLoopN(qs []P2Affine, ps []P1Affine) *Fp12 {
431
439
}
432
440
433
441
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))
435
443
return &pt
436
444
}
437
445
438
446
func (pt *Fp12) MulAssign(p *Fp12) {
439
- C.blst_fp12_mul(pt, pt, p )
447
+ C.blst_fp12_mul(&pt.cgo, &pt.cgo, &p.cgo )
440
448
}
441
449
442
450
func (pt *Fp12) FinalExp() {
443
- C.blst_final_exp(pt, pt )
451
+ C.blst_final_exp(&pt.cgo, &pt.cgo )
444
452
}
445
453
446
454
func (pt *Fp12) InGroup() bool {
447
- return bool(C.blst_fp12_in_group(pt ))
455
+ return bool(C.blst_fp12_in_group(&pt.cgo ))
448
456
}
449
457
450
458
func (pt *Fp12) ToBendian() []byte {
451
459
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 )
453
461
return out[:]
454
462
}
455
463
0 commit comments