Overhaul crypto (Schnorr/Ristretto, HDKD, BIP39) (#1795)

* Rijig to Ristretto

* Rebuild wasm

* adds compatibility test with the wasm module

* Add Ed25519-BIP39 support

* Bump subkey version

* Update CLI output

* New keys.

* Standard phrase/password/path keys.

* Subkey uses S-URI for secrets

* Move everything to use new HDKD crypto.

* Test fixes

* Ignore old test vector.

* fix the ^^ old test vector.

* Fix tests

* Test fixes

* Cleanups

* Fix broken key conversion logic in grandpa

CC @rphmeier

* Remove legacy Keyring usage

* Traitify `Pair`

* Replace Ed25519AuthorityId with ed25519::Public

* Expunge Ed25519AuthorityId type!

* Replace Sr25519AuthorityId with sr25519::Public

* Remove dodgy crypto type-punning conversions

* Fix some tests

* Avoid trait

* Deduplicate DeriveJunction string decode

* Remove cruft code

* Fix test

* Minor removals

* Build fix

* Subkey supports sign and verify

* Inspect works for public key URIs

* Remove more crypto type-punning

* Fix typo

* Fix tests
This commit is contained in:
Gav Wood
2019-03-13 14:08:31 +01:00
committed by GitHub
parent 17f093da13
commit d7fcf5dc9d
83 changed files with 2636 additions and 1687 deletions
@@ -42,7 +42,8 @@ use runtime_primitives::generic::BlockId;
use runtime_primitives::traits::{
NumberFor, Block as BlockT, Header as HeaderT, One,
};
use substrate_primitives::{Ed25519AuthorityId, H256};
use substrate_primitives::{ed25519, H256};
use ed25519::Public as AuthorityId;
use crate::justification::GrandpaJustification;
@@ -189,7 +190,7 @@ fn do_check_finality_proof<Block: BlockT<Hash=H256>, C, J>(
call_data: vec![],
retry_count: None,
})?;
let grandpa_authorities: Vec<(Ed25519AuthorityId, u64)> = Decode::decode(&mut &grandpa_authorities[..])
let grandpa_authorities: Vec<(AuthorityId, u64)> = Decode::decode(&mut &grandpa_authorities[..])
.ok_or_else(|| ClientErrorKind::BadJustification("failed to decode GRANDPA authorities set proof".into()))?;
// and now check justification
@@ -222,7 +223,7 @@ trait ProvableJustification<Header: HeaderT>: Encode + Decode {
fn target_block(&self) -> (Header::Number, Header::Hash);
/// Verify justification with respect to authorities set and authorities set id.
fn verify(&self, set_id: u64, authorities: &VoterSet<Ed25519AuthorityId>) -> ClientResult<()>;
fn verify(&self, set_id: u64, authorities: &VoterSet<AuthorityId>) -> ClientResult<()>;
}
impl<Block: BlockT<Hash=H256>> ProvableJustification<Block::Header> for GrandpaJustification<Block>
@@ -233,7 +234,7 @@ impl<Block: BlockT<Hash=H256>> ProvableJustification<Block::Header> for GrandpaJ
(self.commit.target_number, self.commit.target_hash)
}
fn verify(&self, set_id: u64, authorities: &VoterSet<Ed25519AuthorityId>) -> ClientResult<()> {
fn verify(&self, set_id: u64, authorities: &VoterSet<AuthorityId>) -> ClientResult<()> {
GrandpaJustification::verify(self, set_id, authorities)
}
}
@@ -253,12 +254,12 @@ mod tests {
impl ProvableJustification<Header> for ValidFinalityProof {
fn target_block(&self) -> (u64, H256) { (3, header(3).hash()) }
fn verify(&self, set_id: u64, authorities: &VoterSet<Ed25519AuthorityId>) -> ClientResult<()> {
fn verify(&self, set_id: u64, authorities: &VoterSet<AuthorityId>) -> ClientResult<()> {
assert_eq!(set_id, 1);
assert_eq!(authorities, &vec![
(Ed25519AuthorityId([1u8; 32]), 1),
(Ed25519AuthorityId([2u8; 32]), 2),
(Ed25519AuthorityId([3u8; 32]), 3),
(AuthorityId([1u8; 32]), 1),
(AuthorityId([2u8; 32]), 2),
(AuthorityId([3u8; 32]), 3),
].into_iter().collect());
Ok(())
}
@@ -387,7 +388,7 @@ mod tests {
impl ProvableJustification<Header> for InvalidFinalityProof {
fn target_block(&self) -> (u64, H256) { (3, header(3).hash()) }
fn verify(&self, _set_id: u64, _authorities: &VoterSet<Ed25519AuthorityId>) -> ClientResult<()> {
fn verify(&self, _set_id: u64, _authorities: &VoterSet<AuthorityId>) -> ClientResult<()> {
Err(ClientErrorKind::Backend("test error".into()).into())
}
}
@@ -415,9 +416,9 @@ mod tests {
.unwrap().unwrap();
assert_eq!(do_check_finality_proof::<Block, _, ValidFinalityProof>(
|_| Ok(vec![
(Ed25519AuthorityId([1u8; 32]), 1u64),
(Ed25519AuthorityId([2u8; 32]), 2u64),
(Ed25519AuthorityId([3u8; 32]), 3u64),
(AuthorityId([1u8; 32]), 1u64),
(AuthorityId([2u8; 32]), 2u64),
(AuthorityId([3u8; 32]), 3u64),
].encode()),
header(1),
(2, header(2).hash()),