31 lines
1.1 KiB
Markdown
31 lines
1.1 KiB
Markdown
### 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](https://github.com/kilic/fp) and for native go is generated with [goff](https://github.com/ConsenSys/goff). Generated codes are slightly edited in both for further requirements.
|
|
|
|
#### Scalar Field
|
|
|
|
Standart big.Int module is currently used for scalar field implementation. x86 optimized faster field implementation is planned to be added.
|
|
|
|
#### Serialization
|
|
|
|
Point serialization is in line with [zkcrypto library](https://github.com/zkcrypto/pairing/tree/master/src/bls12_381#serialization).
|
|
|
|
#### 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](https://github.com/cfrg/draft-irtf-cfrg-hash-to-curve/).
|
|
|
|
#### Benchmarks
|
|
|
|
on _3.1 GHz i5_
|
|
|
|
```
|
|
BenchmarkPairing 1034837 ns/op
|
|
```
|
|
|