Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions Cargo.lock

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

8 changes: 6 additions & 2 deletions pkgs/dev/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ bin = [

[build-dependencies]
built = { version = "0.7", features = ["dependency-tree", "git2"] }
dash-types = { version = "0.0.0", path = "../types", default-features = false }
dash-types = { version = "0.0.0", path = "../types", default-features = false, features = [
"codec",
] }
proc-macro2 = "1"
syn = { version = "2", features = ["full", "visit"] }
xxhash-rust = { version = "0.8", features = ["xxh32"] }
Expand All @@ -50,7 +52,9 @@ dash-num = { version = "0.0.0", path = "../num", optional = true }
dash-params = { version = "0.0.0", path = "../params", optional = true }
dash-pow = { version = "0.0.0", path = "../pow", optional = true }
dash-primitives = { version = "0.0.0", path = "../primitives" }
dash-types = { version = "0.0.0", path = "../types", default-features = false }
dash-types = { version = "0.0.0", path = "../types", default-features = false, features = [
"codec",
] }
hex-conservative = { version = "0.3", default-features = false, features = [
"alloc",
] }
Expand Down
14 changes: 14 additions & 0 deletions pkgs/dev/src/corpus.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,20 @@ impl Corpus {
}
}

/// Returns a named section as one typed value: `{ section: T }`, for
/// sections that hold a single object rather than an array.
///
/// # Panics
///
/// Panics if the section is missing or does not deserialize as `T`.
pub fn value<T: DeserializeOwned>(&self, section: &str) -> T {
let val = self
.root
.get(section)
.unwrap_or_else(|| panic!("{}: missing section '{section}'", self.name));
serde_json::from_value(val.clone()).unwrap_or_else(|e| panic!("{}: section '{section}': {e}", self.name))
}

/// Returns a named array section as typed vectors: `{ section: [T, ...] }`.
///
/// # Panics
Expand Down
4 changes: 3 additions & 1 deletion pkgs/num/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ serde = ["dep:serde", "dash-types/serde"]

[dependencies]
bitcoin-consensus-encoding = { workspace = true }
dash-types = { version = "0.0.0", path = "../types", default-features = false }
dash-types = { version = "0.0.0", path = "../types", default-features = false, features = [
"codec",
] }
serde = { version = "1", default-features = false, features = [
"derive",
"alloc",
Expand Down
3 changes: 2 additions & 1 deletion pkgs/p2p_core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,13 @@ bitcoin-primitives = { workspace = true }
bitcoin-units = { workspace = true, features = ["alloc"] }
cfg-if = "1"
dash-num = { version = "0.0.0", path = "../num" }
dash-pkc = { version = "0.0.0", path = "../pkc" }
dash-pkc = { version = "0.0.0", path = "../pkc", features = ["codec"] }
dash-script = { version = "0.0.0", path = "../script" }
dash-params = { version = "0.0.0", path = "../params" }
dash-primitives = { version = "0.0.0", path = "../primitives" }
dash-types = { version = "0.0.0", path = "../types", default-features = false, features = [
"bitcoin-p2p-messages",
"codec",
] }
serde = { version = "1", default-features = false, features = [
"alloc",
Expand Down
2 changes: 1 addition & 1 deletion pkgs/p2p_core/src/msg/mn_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use dash_primitives::{
hash_impl, BlockHash, Commitment, LlmqType, MnType, PlatformNodeId, ServiceV1, Transaction, TxHash,
};
use dash_script::PubKeyHash;
use dash_types::codec::{BaseCodec, DecodeError, EncodeBuf, NumCodec};
use dash_types::codec::{BaseCodec, DecodeError, EncodeBuf};
use dash_types::type_id::TypeId;

use core::fmt;
Expand Down
4 changes: 3 additions & 1 deletion pkgs/params/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ hex-literal = "0.4"

[dev-dependencies]
bitcoin-consensus-encoding = { workspace = true, features = ["alloc"] }
dash-types = { version = "0.0.0", path = "../types", default-features = false }
dash-types = { version = "0.0.0", path = "../types", default-features = false, features = [
"codec",
] }
hex-literal = "0.4"
rstest = "0.25"

Expand Down
20 changes: 12 additions & 8 deletions pkgs/pkc/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@ edition = "2021"
license = "MIT"

[dependencies]
base58ck = { workspace = true, features = ["alloc"] }
bitcoin_hashes = { workspace = true, features = ["alloc"] }
aes = { version = "0.8", default-features = false, features = [
"zeroize",
], optional = true }
base58ck = { workspace = true, optional = true, features = ["alloc"] }
bitcoin_hashes = { workspace = true, optional = true, features = ["alloc"] }
blst = { version = "0.3", default-features = false, optional = true }
ff = { version = "0.14", default-features = false, optional = true }
group = { version = "0.14", default-features = false, optional = true }
cfg-if = "1"
dash-num = { version = "0.0.0", path = "../num" }
dash-num = { version = "0.0.0", path = "../num", optional = true }
dash-types = { version = "0.0.0", path = "../types", default-features = false }
hex-conservative = { version = "0.3", default-features = false, features = [
"alloc",
Expand Down Expand Up @@ -46,11 +49,12 @@ serde = { version = "1", features = ["derive"] }

[features]
default = []
std = ["base58ck/std", "bitcoin_hashes/std", "dash-types/std"]
bls = ["dep:blst", "dep:ff", "dep:group", "dep:rand_core", "dep:sha2"]
ecdsa = ["dep:k256", "dep:rand_core"]
serde = ["dep:serde", "dash-num/serde", "dash-types/serde"]
full = ["ecdsa", "bls", "serde", "std", "tests"]
std = ["base58ck?/std", "bitcoin_hashes?/std", "dash-types/std"]
bls = ["dep:aes", "dep:blst", "dep:ff", "dep:group", "dep:rand_core", "dep:sha2"]
codec = ["dep:base58ck", "dep:bitcoin_hashes", "dep:dash-num", "dash-types/codec"]
ecdsa = ["codec", "dep:k256", "dep:rand_core"]
serde = ["codec", "dep:serde", "dash-num/serde", "dash-types/serde"]
full = ["bls", "codec", "ecdsa", "serde", "std", "tests"]
tests = ["std", "dep:rstest"]

[lints]
Expand Down
38 changes: 38 additions & 0 deletions pkgs/pkc/bench/bls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,44 @@ fn derive_share_n<S: BlsScheme>(bencher: Bencher, n: usize) {
.bench(|| BlsSecretKey::<S>::derive_share(&master_refs, &id));
}

/// Sealing one blob to one recipient, over a plaintext of `n` blocks.
#[divan::bench(types = [BlsScChia, BlsScIetf], args = [1, 2, 16])]
fn ies_encrypt_n<S: BlsScheme>(bencher: Bencher, n: usize) {
let pk = BlsSecretKey::<S>::generate(&test_ikm(1)).unwrap().public_key();
let plaintext = vec![0x42u8; n * 16];
let mut rng = UnwrapErr(SysRng);

bencher
.counter(ItemsCount::new(n))
.bench_local(|| pk.ies_encrypt(&plaintext, &mut rng));
}

/// Opening one blob, paying for a DH exchange.
#[divan::bench(types = [BlsScChia, BlsScIetf], args = [1, 2, 16])]
fn ies_decrypt_n<S: BlsScheme>(bencher: Bencher, n: usize) {
let sk = BlsSecretKey::<S>::generate(&test_ikm(1)).unwrap();
let plaintext = vec![0x42u8; n * 16];
let blob = sk.public_key().ies_encrypt(&plaintext, &mut UnwrapErr(SysRng)).unwrap();

bencher.counter(ItemsCount::new(n)).bench(|| sk.ies_decrypt(&blob, 0));
}

/// Sealing one 32-byte share to each of `n` recipients.
#[divan::bench(types = [BlsScChia, BlsScIetf], args = [2, 10, 100])]
fn ies_encrypt_multi_n<S: BlsScheme>(bencher: Bencher, n: usize) {
let pks: Vec<_> = (0..n)
.map(|i| BlsSecretKey::<S>::generate(&test_ikm(i)).unwrap().public_key())
.collect();
let pk_refs: Vec<&BlsPublicKey<S>> = pks.iter().collect();
let plaintexts = vec![[0x42u8; 32]; n];
let pt_refs: Vec<&[u8]> = plaintexts.iter().map(|p| p.as_slice()).collect();
let mut rng = UnwrapErr(SysRng);

bencher
.counter(ItemsCount::new(n))
.bench_local(|| BlsPublicKey::<S>::ies_encrypt_multi(&pk_refs, &pt_refs, &mut rng));
}

/// IETF-only BLS operations.
mod ietf {
use super::*;
Expand Down
62 changes: 62 additions & 0 deletions pkgs/pkc/corpus/bls_dh.json5
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,37 @@
"shared": "93033f1b14f964edc629de1508d4d5709bacefc6a9856cdc47aee4bb76ae825225442857cc158d8b3c49e898bb55d600"
}
],
"ies": {
"eph_sk": "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a",
"eph_pk": "0193db75369ee1f1b3d8828adbc05c0dc6bd38ef5dab2528174eace2140da80cd8f253ce43748a53b316fdc263234af4",
"iv_seed": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
"recipients": [
{
"sk": "0101010101010101010101010101010101010101010101010101010101010101",
"pk": "8a1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1",
"shared": "84dbc64593c984618257694cad51ea02a3c6aafcfd60f6133c1908c263d562ce4e54390f4b2665635c7cd6689d8a7dd4",
"iv": "000102030405060708090a0b0c0d0e0f",
"plaintext": "a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0",
"ciphertext": "1a242c09c5cfb0133dee47b07c911bfb2191e15927afea241b9420dec130d6de",
},
{
"sk": "0202020202020202020202020202020202020202020202020202020202020202",
"pk": "0004066a1a5cb9cdf244e45f0a59cf579a78d90ac0bc24663565264601c1c9251c0aa3dfb9835b520e0ba0f211a6696c",
"shared": "8fa4f45683aefd530efa5ee1e7c0ad7163c27db90ce53b115ab6b6ac01e1e71cfdfacf650a4a592ba7993de6c89522a6",
"iv": "2f287b4d3d4910f6cada9e1bd1b46480",
"plaintext": "a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1",
"ciphertext": "06042f900b0b3b2feb4863f6bf2e3dd905fda77888dbfdcfa23ee01b863b8ac11780aa0e5f66ea87788ad3fa6d0156d2",
},
{
"sk": "0303030303030303030303030303030303030303030303030303030303030303",
"pk": "8355519968b7db86b1ceb2261e179f6cde1a6010b8588e4a1a59eae804c9eed5f3e3d433a69dabb1eb7403c9c2721116",
"shared": "028b7c71eedeb59c96c5d7d44b60ee9badfdcf782f393f3f7663e4a301f3a28c1c711f7b4c26851d3600af792cfaf837",
"iv": "cefc1232dee44cc53fccf8cc078f657f",
"plaintext": "a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2",
"ciphertext": "518fe9f6001c86bfc36e5a6e06025353f2c5a097bdce288104067e6ef1305777d81aad3f29c3fd5f9565a65096cd711a502f769f6d234e5c31c8b905fddbb624",
}
]
}
},
"ietf": {
"dh": [
Expand All @@ -26,5 +57,36 @@
"shared": "b3033f1b14f964edc629de1508d4d5709bacefc6a9856cdc47aee4bb76ae825225442857cc158d8b3c49e898bb55d600"
}
],
"ies": {
"eph_sk": "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a",
"eph_pk": "8193db75369ee1f1b3d8828adbc05c0dc6bd38ef5dab2528174eace2140da80cd8f253ce43748a53b316fdc263234af4",
"iv_seed": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
"recipients": [
{
"sk": "0101010101010101010101010101010101010101010101010101010101010101",
"pk": "aa1a1c26055a329817a5759d877a2795f9499b97d6056edde0eea39512f24e8bc874b4471f0501127abb1ea0d9f68ac1",
"shared": "a4dbc64593c984618257694cad51ea02a3c6aafcfd60f6133c1908c263d562ce4e54390f4b2665635c7cd6689d8a7dd4",
"iv": "000102030405060708090a0b0c0d0e0f",
"plaintext": "a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0",
"ciphertext": "f9eaf2e1f1d86f2d4477ce89ad038524fc7067fa828209cf09113ac48fa232e4",
},
{
"sk": "0202020202020202020202020202020202020202020202020202020202020202",
"pk": "8004066a1a5cb9cdf244e45f0a59cf579a78d90ac0bc24663565264601c1c9251c0aa3dfb9835b520e0ba0f211a6696c",
"shared": "afa4f45683aefd530efa5ee1e7c0ad7163c27db90ce53b115ab6b6ac01e1e71cfdfacf650a4a592ba7993de6c89522a6",
"iv": "2f287b4d3d4910f6cada9e1bd1b46480",
"plaintext": "a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1",
"ciphertext": "7dfda8d00665983a943d9a1485206d93dbf08d3b46ad2c560e92d338d3d7e8f52d369c1a0ed32a00d2689197f61e7d96",
},
{
"sk": "0303030303030303030303030303030303030303030303030303030303030303",
"pk": "a355519968b7db86b1ceb2261e179f6cde1a6010b8588e4a1a59eae804c9eed5f3e3d433a69dabb1eb7403c9c2721116",
"shared": "828b7c71eedeb59c96c5d7d44b60ee9badfdcf782f393f3f7663e4a301f3a28c1c711f7b4c26851d3600af792cfaf837",
"iv": "cefc1232dee44cc53fccf8cc078f657f",
"plaintext": "a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2",
"ciphertext": "4d9bc3cf27cfa3a1da757379231685c5a9368a141c7cb990c8ea5f0afbc7c6882a394581116e63e74c4be50051b642bd4152dd5f6ccbda8883e86e41dead5f24",
}
]
}
}
}
Loading
Loading