Merge pull request #10 from ChainSafe/mpetrunic/update-draft-v7

Update to bls draft v7
This commit is contained in:
Marin Petrunić 2020-05-21 20:28:05 +02:00 committed by GitHub
commit 9a3338fe1c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 44 additions and 31 deletions

View File

@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [2.0.0] - 2020-05-21
Compatible with [Eth2 spec 0.12.0](https://github.com/ethereum/eth2.0-specs/blob/v0.12.0/specs/phase0/beacon-chain.md#bls-signatures)
and [IETF draft bls specification](https://github.com/ethereum/eth2.0-specs/blob/v0.12.0/specs/phase0/beacon-chain.md#bls-signatures)
## [1.0.0] - 2020-02-25 ## [1.0.0] - 2020-02-25
Compatible with [Eth2 spec 0.10.1](https://github.com/ethereum/eth2.0-specs/blob/v0.10.1/specs/phase0/beacon-chain.md#bls-signatures) Compatible with [Eth2 spec 0.10.1](https://github.com/ethereum/eth2.0-specs/blob/v0.10.1/specs/phase0/beacon-chain.md#bls-signatures)

View File

@ -2,14 +2,19 @@
[![Build Status](https://travis-ci.org/ChainSafe/lodestar.svg?branch=master)](https://travis-ci.org/ChainSafe/lodestar) [![Build Status](https://travis-ci.org/ChainSafe/lodestar.svg?branch=master)](https://travis-ci.org/ChainSafe/lodestar)
[![codecov](https://codecov.io/gh/ChainSafe/lodestar/branch/master/graph/badge.svg)](https://codecov.io/gh/ChainSafe/lodestar) [![codecov](https://codecov.io/gh/ChainSafe/lodestar/branch/master/graph/badge.svg)](https://codecov.io/gh/ChainSafe/lodestar)
![ETH2.0_Spec_Version 0.11.1](https://img.shields.io/badge/ETH2.0_Spec_Version-0.11.1-2e86c1.svg) ![ETH2.0_Spec_Version 0.12.0](https://img.shields.io/badge/ETH2.0_Spec_Version-0.12.0-2e86c1.svg)
This is a Javascript library that implements BLS (Boneh-Lynn-Shacham) signatures and supports signature aggregation. This is a Javascript library that implements BLS (Boneh-Lynn-Shacham) signatures and supports signature aggregation.
>[spec](https://github.com/ethereum/eth2.0-specs/blob/v0.11.1/specs/phase0/beacon-chain.md#bls-signatures) | Version | Bls spec version |
>[test vectors](https://github.com/ethereum/eth2.0-spec-tests/tree/master/tests/bls) |----------|:-------------:|
| 0.3.x | initial version |
| 1.x.x | draft #6 |
| 2.x.x | draft #7 |
##### Notice: *0.3.x* branch and releases follows old [eth2 bls specitification](https://github.com/ethereum/eth2.0-specs/blob/v0.9.4/specs/bls_signature.md) >[spec](https://github.com/ethereum/eth2.0-specs/blob/v0.11.1/specs/phase0/beacon-chain.md#bls-signatures)
>[test vectors](https://github.com/ethereum/eth2.0-spec-tests/tree/master/tests/bls)
## Usage ## Usage
- `yarn add @chainsafe/bls` - `yarn add @chainsafe/bls`

View File

@ -1,6 +1,6 @@
{ {
"name": "@chainsafe/bls", "name": "@chainsafe/bls",
"version": "1.0.0", "version": "2.0.0",
"description": "Implementation of bls signature verification for ethereum 2.0", "description": "Implementation of bls signature verification for ethereum 2.0",
"main": "lib/index.js", "main": "lib/index.js",
"types": "lib/index.d.ts", "types": "lib/index.d.ts",
@ -40,7 +40,7 @@
}, },
"dependencies": { "dependencies": {
"@chainsafe/bls-keygen": "^0.0.2", "@chainsafe/bls-keygen": "^0.0.2",
"@chainsafe/eth2-bls-wasm": "^0.4.0", "@chainsafe/eth2-bls-wasm": "^0.5.0",
"assert": "^1.4.1" "assert": "^1.4.1"
}, },
"devDependencies": { "devDependencies": {
@ -74,9 +74,7 @@
"ts-node": "^8.6.2", "ts-node": "^8.6.2",
"typescript": "^3.7.5", "typescript": "^3.7.5",
"webpack": "^4.30.0", "webpack": "^4.30.0",
"webpack-cli": "^3.3.2" "webpack-cli": "^3.3.2",
}, "@chainsafe/eth2-spec-tests": "0.12.0"
"optionalDependencies": {
"@chainsafe/eth2-spec-tests": "^0.11.1-fix"
} }
} }

View File

@ -47,7 +47,7 @@ export function sign(secretKey: Uint8Array, messageHash: Uint8Array): Buffer {
* @param signatures * @param signatures
*/ */
export function aggregateSignatures(signatures: Uint8Array[]): Buffer { export function aggregateSignatures(signatures: Uint8Array[]): Buffer {
assert(signatures, "signatures is null or undefined"); assert(signatures && signatures.length > 0, "signatures is null or undefined or empty array");
return Signature.aggregate( return Signature.aggregate(
signatures.map((signature): Signature => { signatures.map((signature): Signature => {
return Signature.fromCompressedBytes(signature); return Signature.fromCompressedBytes(signature);

View File

@ -20,10 +20,17 @@ describeDirectorySpecTest<IAggregateSigsTestCase, string>(
"../../node_modules/@chainsafe/eth2-spec-tests/tests/general/phase0/bls/aggregate/small" "../../node_modules/@chainsafe/eth2-spec-tests/tests/general/phase0/bls/aggregate/small"
), ),
(testCase => { (testCase => {
const result = bls.aggregateSignatures(testCase.data.input.map(pubKey => { try {
return Buffer.from(pubKey.replace("0x", ""), "hex"); const result = bls.aggregateSignatures(testCase.data.input.map(pubKey => {
})); return Buffer.from(pubKey.replace("0x", ""), "hex");
return `0x${result.toString("hex")}`; }));
return `0x${result.toString("hex")}`;
} catch (e) {
if(e.message === "signatures is null or undefined or empty array") {
return null;
}
throw e;
}
}), }),
{ {
inputTypes: { inputTypes: {

View File

@ -5,10 +5,8 @@ import {describeDirectorySpecTest, InputType} from "@chainsafe/lodestar-spec-tes
interface AggregateSigsVerifyTestCase { interface AggregateSigsVerifyTestCase {
data: { data: {
input: { input: {
pairs: [{ pubkeys: string[];
pubkey: string; messages: string[];
message: string;
}];
signature: string; signature: string;
}; };
output: boolean; output: boolean;
@ -30,11 +28,11 @@ describeDirectorySpecTest<AggregateSigsVerifyTestCase, boolean>(
"../../node_modules/@chainsafe/eth2-spec-tests/tests/general/phase0/bls/aggregate_verify/small" "../../node_modules/@chainsafe/eth2-spec-tests/tests/general/phase0/bls/aggregate_verify/small"
), ),
(testCase => { (testCase => {
const pubkeys = testCase.data.input.pairs.map(pair => { const pubkeys = testCase.data.input.pubkeys.map(pubkey => {
return Buffer.from(pair.pubkey.replace("0x", ""), "hex"); return Buffer.from(pubkey.replace("0x", ""), "hex");
}); });
const messages = testCase.data.input.pairs.map(pair => { const messages = testCase.data.input.messages.map(msg => {
return Buffer.from(pair.message.replace("0x", ""), "hex"); return Buffer.from(msg.replace("0x", ""), "hex");
}); });
return bls.verifyMultiple( return bls.verifyMultiple(
pubkeys, pubkeys,

View File

@ -820,17 +820,17 @@
bip39 "^3.0.2" bip39 "^3.0.2"
buffer "^5.4.3" buffer "^5.4.3"
"@chainsafe/eth2-bls-wasm@^0.4.0": "@chainsafe/eth2-bls-wasm@^0.5.0":
version "0.4.0" version "0.5.0"
resolved "https://registry.yarnpkg.com/@chainsafe/eth2-bls-wasm/-/eth2-bls-wasm-0.4.0.tgz#94e89e4e53ec6cdcc07178dbfeb0b80215550d2f" resolved "https://registry.yarnpkg.com/@chainsafe/eth2-bls-wasm/-/eth2-bls-wasm-0.5.0.tgz#45d0cb8807b569537d1e0099922a9617e0410b3a"
integrity sha512-4BGktOKmUyyYJNCio5Zn1LdxaGWLhPqdUoZXokrfCLW3SKhw4E6MlnpAHwPtvnDuGSkmdF/GLhYeyjQYTtovqg== integrity sha512-7aHphmg504W4YTvAEvGscODrr1Fo5Mf9NxB72fuFv2BKUS/0BPgkoxG9tA+KxcFQq1hs/VUeLhq6qVdI5WfNNA==
dependencies: dependencies:
buffer "^5.4.3" buffer "^5.4.3"
"@chainsafe/eth2-spec-tests@^0.11.1-fix": "@chainsafe/eth2-spec-tests@0.12.0":
version "0.11.1-fixed" version "0.12.0"
resolved "https://registry.yarnpkg.com/@chainsafe/eth2-spec-tests/-/eth2-spec-tests-0.11.1-fixed.tgz#4c873a627740aa43c9dd85fbfcb90a528a7e6467" resolved "https://registry.yarnpkg.com/@chainsafe/eth2-spec-tests/-/eth2-spec-tests-0.12.0.tgz#f95ffe5bc20ddaa4d2240cffe1e417877adc8055"
integrity sha512-kjxeVrg5DJJXhrbydD+FSNdNj6Z2JIOitRUY7gnXVI9DRDEjAa59tZ9ZqFjx7M0UAOCJ9DLR6JdHAU/0nLLIZQ== integrity sha512-EECbmI/1SdjSPUaQOkZqBOA6AfhviS7jlXVmAs3P2biJTeH2p0p31V4fZImR2NXAgGVFAP16sRx2OCwflOq0mw==
"@chainsafe/lodestar-params@^0.5.0": "@chainsafe/lodestar-params@^0.5.0":
version "0.5.0" version "0.5.0"