High Speed BLS12-381 Implementation in Go
Pairing Instance
A Group instance or a pairing engine instance is not suitable for concurrent processing since an instance has its own preallocated memory for temporary variables. A new instance must be created for each thread.
Base Field
x86 optimized base field is generated with kilic/fp and for native go is generated with goff. Generated codes are slightly edited in both for further requirements.
Scalar Field
Both standart big.Int module and x86 optimized implementation are available for scalar field elements and opereations.
Serialization
Point serialization is in line with zkcrypto library.
Hashing to Curve
Hashing to curve implementations for both G1 and G2 follows _XMD:SHA-256_SSWU_RO_
and _XMD:SHA-256_SSWU_NU_
suites as defined in v7
of irtf hash to curve draft.
Benchmarks
on 2.3 GHz i7
BenchmarkPairing 667720 ns/op