Skip to content

Commit

Permalink
Update fastcrypto in sui (including changing the serde of EdDSA & BLS…
Browse files Browse the repository at this point in the history
… sigantures) (MystenLabs#8311)

Includes a few non breaking changes & the new binary serializations of
EdDSA and BLS signatures.

BLS/EdDSA **signatures** that were stored using the old serialization
might not be deserialized successfully after this change.

See MystenLabs/fastcrypto#401 for why we use
`insecure_default()`.
  • Loading branch information
benr-ml authored Feb 15, 2023
1 parent ba7a7b5 commit ed8d95a
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 48 deletions.
8 changes: 4 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,9 @@ move-prover-boogie-backend = { git = "https://github.com/move-language/move", re
move-stackless-bytecode = { git = "https://github.com/move-language/move", rev = "b6bff7ebf8b6ab5ede3558ad8e1b192737268b03" }
move-symbol-pool = { git = "https://github.com/move-language/move", rev = "b6bff7ebf8b6ab5ede3558ad8e1b192737268b03" }

fastcrypto = { git = "https://github.com/MystenLabs/fastcrypto", rev = "9a41ba511899c0d7efd9e047af2e968cdc54f77d" }
fastcrypto-zkp = { git = "https://github.com/MystenLabs/fastcrypto", rev = "9a41ba511899c0d7efd9e047af2e968cdc54f77d", package = "fastcrypto-zkp" }
fastcrypto-tbls = { git = "https://github.com/MystenLabs/fastcrypto", rev = "9a41ba511899c0d7efd9e047af2e968cdc54f77d", package = "fastcrypto-tbls" }
fastcrypto = { git = "https://github.com/MystenLabs/fastcrypto", rev = "54c0db503f35560ed25b2d084fface8acdd8ee96" }
fastcrypto-zkp = { git = "https://github.com/MystenLabs/fastcrypto", rev = "54c0db503f35560ed25b2d084fface8acdd8ee96", package = "fastcrypto-zkp" }
fastcrypto-tbls = { git = "https://github.com/MystenLabs/fastcrypto", rev = "54c0db503f35560ed25b2d084fface8acdd8ee96", package = "fastcrypto-tbls" }

# anemo dependencies
anemo = { git = "https://github.com/mystenlabs/anemo.git", rev = "d4017b6cefad7ebc5e84b5c6b8eeff4668f719ff" }
Expand Down
6 changes: 0 additions & 6 deletions crates/sui-core/tests/staged/sui.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,6 @@ Argument:
- U16
AuthorityPublicKeyBytes:
NEWTYPESTRUCT: BYTES
BLS12381Signature:
STRUCT:
- sig:
TUPLEARRAY:
CONTENT: U8
SIZE: 48
CallArg:
ENUM:
0:
Expand Down
5 changes: 1 addition & 4 deletions crates/sui-types/src/unit_tests/base_types_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -315,10 +315,7 @@ fn test_authority_signature_serde_human_readable() {
let (_, key): (_, AuthorityKeyPair) = get_key_pair();
let sig = AuthoritySignature::new(&Foo("some data".to_string()), 0, &key);
let serialized = serde_json::to_string(&sig).unwrap();
assert_eq!(
format!(r#"{{"sig":"{}"}}"#, sig.encode_base64()),
serialized
);
assert_eq!(format!("\"{}\"", sig.encode_base64()), serialized);
let deserialized: AuthoritySignature = serde_json::from_str(&serialized).unwrap();
assert_eq!(deserialized.as_ref(), sig.as_ref());
}
Expand Down
14 changes: 7 additions & 7 deletions crates/workspace-hack/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -201,9 +201,9 @@ expect-test = { version = "1", default-features = false }
eyre = { version = "0.6" }
fail-9fbad63c4bcf4a8f = { package = "fail", version = "0.4", default-features = false }
fail-d8f496e17d97b5cb = { package = "fail", version = "0.5", default-features = false }
fastcrypto = { git = "https://github.com/MystenLabs/fastcrypto", rev = "9a41ba511899c0d7efd9e047af2e968cdc54f77d", features = ["copy_key"] }
fastcrypto-tbls = { git = "https://github.com/MystenLabs/fastcrypto", rev = "9a41ba511899c0d7efd9e047af2e968cdc54f77d", default-features = false }
fastcrypto-zkp = { git = "https://github.com/MystenLabs/fastcrypto", rev = "9a41ba511899c0d7efd9e047af2e968cdc54f77d", default-features = false }
fastcrypto = { git = "https://github.com/MystenLabs/fastcrypto", rev = "54c0db503f35560ed25b2d084fface8acdd8ee96", features = ["copy_key"] }
fastcrypto-tbls = { git = "https://github.com/MystenLabs/fastcrypto", rev = "54c0db503f35560ed25b2d084fface8acdd8ee96", default-features = false }
fastcrypto-zkp = { git = "https://github.com/MystenLabs/fastcrypto", rev = "54c0db503f35560ed25b2d084fface8acdd8ee96", default-features = false }
fastrand = { version = "1", default-features = false }
fd-lock = { version = "3", default-features = false }
fdlimit = { version = "0.2", default-features = false }
Expand Down Expand Up @@ -876,10 +876,10 @@ expect-test = { version = "1", default-features = false }
eyre = { version = "0.6" }
fail-9fbad63c4bcf4a8f = { package = "fail", version = "0.4", default-features = false }
fail-d8f496e17d97b5cb = { package = "fail", version = "0.5", default-features = false }
fastcrypto = { git = "https://github.com/MystenLabs/fastcrypto", rev = "9a41ba511899c0d7efd9e047af2e968cdc54f77d", features = ["copy_key"] }
fastcrypto-derive = { git = "https://github.com/MystenLabs/fastcrypto", rev = "9a41ba511899c0d7efd9e047af2e968cdc54f77d", default-features = false }
fastcrypto-tbls = { git = "https://github.com/MystenLabs/fastcrypto", rev = "9a41ba511899c0d7efd9e047af2e968cdc54f77d", default-features = false }
fastcrypto-zkp = { git = "https://github.com/MystenLabs/fastcrypto", rev = "9a41ba511899c0d7efd9e047af2e968cdc54f77d", default-features = false }
fastcrypto = { git = "https://github.com/MystenLabs/fastcrypto", rev = "54c0db503f35560ed25b2d084fface8acdd8ee96", features = ["copy_key"] }
fastcrypto-derive = { git = "https://github.com/MystenLabs/fastcrypto", rev = "54c0db503f35560ed25b2d084fface8acdd8ee96", default-features = false }
fastcrypto-tbls = { git = "https://github.com/MystenLabs/fastcrypto", rev = "54c0db503f35560ed25b2d084fface8acdd8ee96", default-features = false }
fastcrypto-zkp = { git = "https://github.com/MystenLabs/fastcrypto", rev = "54c0db503f35560ed25b2d084fface8acdd8ee96", default-features = false }
fastrand = { version = "1", default-features = false }
fd-lock = { version = "3", default-features = false }
fdlimit = { version = "0.2", default-features = false }
Expand Down
20 changes: 6 additions & 14 deletions narwhal/node/tests/staged/narwhal.yaml
Original file line number Diff line number Diff line change
@@ -1,16 +1,4 @@
---
BLS12381AggregateSignature:
STRUCT:
- sig:
TUPLEARRAY:
CONTENT: U8
SIZE: 48
BLS12381Signature:
STRUCT:
- sig:
TUPLEARRAY:
CONTENT: U8
SIZE: 48
Batch:
STRUCT:
- transactions:
Expand All @@ -28,7 +16,9 @@ Certificate:
- header:
TYPENAME: Header
- aggregated_signature:
TYPENAME: BLS12381AggregateSignature
TUPLEARRAY:
CONTENT: U8
SIZE: 48
- signed_authorities: BYTES
- metadata:
TYPENAME: Metadata
Expand Down Expand Up @@ -57,7 +47,9 @@ Header:
SEQ:
TYPENAME: CertificateDigest
- signature:
TYPENAME: BLS12381Signature
TUPLEARRAY:
CONTENT: U8
SIZE: 48
HeaderDigest:
NEWTYPESTRUCT:
TUPLEARRAY:
Expand Down
4 changes: 2 additions & 2 deletions narwhal/primary/tests/integration_tests_proposer_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use consensus::{dag::Dag, metrics::ConsensusMetrics};
use crypto::PublicKey;
use fastcrypto::{
hash::Hash,
traits::{KeyPair as _, ToFromBytes},
traits::{InsecureDefault, KeyPair as _, ToFromBytes},
};
use narwhal_primary as primary;
use narwhal_primary::NUM_SHUTDOWN_RECEIVERS;
Expand Down Expand Up @@ -57,7 +57,7 @@ async fn test_rounds_errors() {
.to_string(),
},
TestCase {
public_key: Bytes::from(PublicKey::default().as_bytes().to_vec()),
public_key: Bytes::from(PublicKey::insecure_default().as_bytes().to_vec()),
test_case_name: "Valid public key, but authority not found in committee".to_string(),
expected_error: "Invalid public key: unknown authority".to_string(),
},
Expand Down
17 changes: 11 additions & 6 deletions narwhal/storage/src/certificate_store.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright (c) Mysten Labs, Inc.
// SPDX-License-Identifier: Apache-2.0
use crypto::PublicKey;
use crypto::{traits::InsecureDefault, PublicKey};
use dashmap::DashMap;
use fastcrypto::hash::Hash;
use std::{
Expand All @@ -9,6 +9,7 @@ use std::{
iter,
sync::Arc,
};

use store::{
rocks::{DBMap, TypedStoreError::RocksDBError},
Map,
Expand Down Expand Up @@ -287,7 +288,7 @@ impl CertificateStore {
// TODO: Add a more efficient seek method to typed store.
let mut iter = self.certificate_id_by_round.iter();
if round > 0 {
iter = iter.skip_to(&(round - 1, PublicKey::default()))?;
iter = iter.skip_to(&(round - 1, PublicKey::insecure_default()))?;
}

let mut digests = Vec::new();
Expand Down Expand Up @@ -326,7 +327,7 @@ impl CertificateStore {
// TODO: Add a more efficient seek method to typed store.
let mut iter = self.certificate_id_by_round.iter();
if round > 0 {
iter = iter.skip_to(&(round - 1, PublicKey::default()))?;
iter = iter.skip_to(&(round - 1, PublicKey::insecure_default()))?;
}

let mut result = BTreeMap::<Round, Vec<PublicKey>>::new();
Expand Down Expand Up @@ -440,7 +441,7 @@ impl CertificateStore {
#[cfg(test)]
mod test {
use crate::certificate_store::CertificateStore;
use crypto::PublicKey;
use crypto::{traits::InsecureDefault, PublicKey};
use fastcrypto::hash::Hash;
use futures::future::join_all;
use std::{
Expand Down Expand Up @@ -605,7 +606,9 @@ mod test {
// WHEN
let result = store.last_two_rounds_certs().unwrap();
let last_round_number = store.last_round_number(&origin).unwrap().unwrap();
let last_round_number_not_exist = store.last_round_number(&PublicKey::default()).unwrap();
let last_round_number_not_exist = store
.last_round_number(&PublicKey::insecure_default())
.unwrap();

// THEN
assert_eq!(result.len(), 8);
Expand All @@ -626,7 +629,9 @@ mod test {

// WHEN
let result = store.last_two_rounds_certs().unwrap();
let last_round_number = store.last_round_number(&PublicKey::default()).unwrap();
let last_round_number = store
.last_round_number(&PublicKey::insecure_default())
.unwrap();

// THEN
assert!(result.is_empty());
Expand Down
19 changes: 17 additions & 2 deletions narwhal/types/src/primary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use derive_builder::Builder;
use fastcrypto::{
hash::{Digest, Hash, HashFunction},
signature_service::SignatureService,
traits::{AggregateAuthenticator, EncodeDecodeBase64, Signer, VerifyingKey},
traits::{AggregateAuthenticator, EncodeDecodeBase64, InsecureDefault, Signer, VerifyingKey},
};
use indexmap::IndexMap;
use mysten_util_mem::MallocSizeOf;
Expand Down Expand Up @@ -151,7 +151,7 @@ impl Hash<{ crypto::DIGEST_LENGTH }> for Batch {
}
}

#[derive(Builder, Clone, Default, Deserialize, MallocSizeOf, Serialize)]
#[derive(Builder, Clone, Deserialize, MallocSizeOf, Serialize)]
#[builder(pattern = "owned", build_fn(skip))]
pub struct Header {
pub author: PublicKey,
Expand Down Expand Up @@ -278,6 +278,21 @@ impl Header {
}
}

impl Default for Header {
fn default() -> Self {
Self {
author: PublicKey::insecure_default(),
round: Round::default(),
epoch: Epoch::default(),
created_at: TimestampMs::default(),
payload: IndexMap::default(),
parents: BTreeSet::default(),
digest: OnceCell::default(),
signature: Signature::default(),
}
}
}

#[derive(
Clone,
Copy,
Expand Down

0 comments on commit ed8d95a

Please sign in to comment.