Skip to content

Commit 0b84ac4

Browse files
authored
Update to ENR v0.8.1 (#174)
* Update to ENR v0.8.1 * fmt * Update edwards curve crypto
1 parent 715fc82 commit 0b84ac4

File tree

7 files changed

+25
-20
lines changed

7 files changed

+25
-20
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ categories = ["network-programming", "asynchronous"]
1212
exclude = [".gitignore", ".github/*"]
1313

1414
[dependencies]
15-
enr = { version = "0.7.0", features = ["k256", "ed25519"] }
15+
enr = { version = "0.8.1", features = ["k256", "ed25519"] }
1616
tokio = { version = "1.15.0", features = ["net", "sync", "macros", "rt"] }
1717
tokio-stream = "0.1.8"
1818
tokio-util = { version = "0.6.9", features = ["time"] }

examples/find_nodes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ async fn main() {
7373
let raw_key =
7474
hex::decode("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
7575
.unwrap();
76-
let secret_key = k256::ecdsa::SigningKey::from_bytes(&raw_key).unwrap();
76+
let secret_key = k256::ecdsa::SigningKey::from_slice(&raw_key).unwrap();
7777
CombinedKey::from(secret_key)
7878
} else {
7979
// use a new key if specified

src/discv5.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,11 @@ impl<P: ProtocolIdentity> Discv5<P> {
422422
}
423423

424424
/// Allows application layer to insert an arbitrary field into the local ENR.
425-
pub fn enr_insert(&self, key: &str, value: &[u8]) -> Result<Option<Vec<u8>>, EnrError> {
425+
pub fn enr_insert<T: rlp::Encodable>(
426+
&self,
427+
key: &str,
428+
value: &T,
429+
) -> Result<Option<Vec<u8>>, EnrError> {
426430
self.local_enr
427431
.write()
428432
.insert(key, value, &self.enr_key.read())

src/discv5/test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ fn init() {
1111
.try_init();
1212
}
1313

14-
fn update_enr(discv5: &mut Discv5, key: &str, value: &[u8]) -> bool {
14+
fn update_enr<T: rlp::Encodable>(discv5: &mut Discv5, key: &str, value: &T) -> bool {
1515
discv5.enr_insert(key, value).is_ok()
1616
}
1717

@@ -72,7 +72,7 @@ fn generate_deterministic_keypair(n: usize, seed: u64) -> Vec<CombinedKey> {
7272
loop {
7373
// until a value is given within the curve order
7474
rng.fill_bytes(&mut b);
75-
if let Ok(k) = k256::ecdsa::SigningKey::from_bytes(&b) {
75+
if let Ok(k) = k256::ecdsa::SigningKey::from_slice(&b) {
7676
break k;
7777
}
7878
}

src/handler/crypto/ecdh.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ use super::k256::{
77

88
pub fn ecdh(public_key: &VerifyingKey, secret_key: &SigningKey) -> Vec<u8> {
99
k256::PublicKey::from_affine(
10-
(k256::PublicKey::from_sec1_bytes(public_key.to_bytes().as_ref())
10+
(k256::PublicKey::from_sec1_bytes(public_key.to_sec1_bytes().as_ref())
1111
.unwrap()
1212
.to_projective()
13-
* k256::SecretKey::from_be_bytes(&secret_key.to_bytes())
13+
* k256::SecretKey::from_slice(&secret_key.to_bytes())
1414
.unwrap()
1515
.to_nonzero_scalar()
1616
.as_ref())

src/handler/crypto/mod.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ use enr::{
1919
k256::{
2020
self,
2121
ecdsa::{
22-
digest::Update,
23-
signature::{DigestSigner, DigestVerifier, Signature as _},
22+
signature::{DigestSigner, DigestVerifier},
2423
Signature,
2524
},
2625
sha2::{Digest, Sha256},
@@ -53,10 +52,10 @@ pub(crate) fn generate_session_keys(
5352
let (secret, ephem_pk) = {
5453
match contact.public_key() {
5554
CombinedPublicKey::Secp256k1(remote_pk) => {
56-
let ephem_sk = k256::ecdsa::SigningKey::random(rand::thread_rng());
55+
let ephem_sk = k256::ecdsa::SigningKey::random(&mut rand::thread_rng());
5756
let secret = ecdh(&remote_pk, &ephem_sk);
5857
let ephem_pk = ephem_sk.verifying_key();
59-
(secret, ephem_pk.to_bytes().to_vec())
58+
(secret, ephem_pk.to_sec1_bytes().to_vec())
6059
}
6160
CombinedPublicKey::Ed25519(_) => {
6261
return Err(Discv5Error::KeyTypeNotSupported("Ed25519"))
@@ -133,11 +132,11 @@ pub(crate) fn sign_nonce(
133132

134133
match signing_key {
135134
CombinedKey::Secp256k1(key) => {
136-
let message = Sha256::new().chain(signing_message);
135+
let message = Sha256::new().chain_update(signing_message);
137136
let signature: Signature = key
138137
.try_sign_digest(message)
139138
.map_err(|e| Discv5Error::Error(format!("Failed to sign message: {e}")))?;
140-
Ok(signature.as_bytes().to_vec())
139+
Ok(signature.to_vec())
141140
}
142141
CombinedKey::Ed25519(_) => Err(Discv5Error::KeyTypeNotSupported("Ed25519")),
143142
}
@@ -157,7 +156,7 @@ pub(crate) fn verify_authentication_nonce(
157156
CombinedPublicKey::Secp256k1(key) => {
158157
if let Ok(sig) = k256::ecdsa::Signature::try_from(sig) {
159158
return key
160-
.verify_digest(Sha256::new().chain(signing_nonce), &sig)
159+
.verify_digest(Sha256::new().chain_update(signing_nonce), &sig)
161160
.is_ok();
162161
}
163162
false
@@ -262,7 +261,7 @@ mod tests {
262261
.unwrap();
263262

264263
let remote_pk = k256::ecdsa::VerifyingKey::from_sec1_bytes(&remote_pubkey).unwrap();
265-
let local_sk = k256::ecdsa::SigningKey::from_bytes(&local_secret_key).unwrap();
264+
let local_sk = k256::ecdsa::SigningKey::from_slice(&local_secret_key).unwrap();
266265

267266
let secret = ecdh(&remote_pk, &local_sk);
268267
assert_eq!(secret, expected_secret);
@@ -278,7 +277,7 @@ mod tests {
278277
.unwrap();
279278

280279
let remote_pk = k256::ecdsa::VerifyingKey::from_sec1_bytes(&dest_pubkey).unwrap();
281-
let local_sk = k256::ecdsa::SigningKey::from_bytes(&ephem_key).unwrap();
280+
let local_sk = k256::ecdsa::SigningKey::from_slice(&ephem_key).unwrap();
282281

283282
let secret = ecdh(&remote_pk, &local_sk);
284283

@@ -312,7 +311,7 @@ mod tests {
312311
let expected_sig = hex::decode("94852a1e2318c4e5e9d422c98eaf19d1d90d876b29cd06ca7cb7546d0fff7b484fe86c09a064fe72bdbef73ba8e9c34df0cd2b53e9d65528c2c7f336d5dfc6e6").unwrap();
313312

314313
let challenge_data = ChallengeData::try_from(hex::decode("000000000000000000000000000000006469736376350001010102030405060708090a0b0c00180102030405060708090a0b0c0d0e0f100000000000000000").unwrap().as_slice()).unwrap();
315-
let key = k256::ecdsa::SigningKey::from_bytes(&local_secret_key).unwrap();
314+
let key = k256::ecdsa::SigningKey::from_slice(&local_secret_key).unwrap();
316315
let sig = sign_nonce(&key.into(), &challenge_data, &ephemeral_pubkey, &dst_id).unwrap();
317316

318317
assert_eq!(sig, expected_sig);

src/node_info.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,11 @@ impl NodeContact {
117117
.expect("Libp2p key conversion, always valid")
118118
.into()
119119
}
120-
PublicKey::Ed25519(pk) => enr::ed25519_dalek::PublicKey::from_bytes(&pk.encode())
121-
.expect("Libp2p key conversion, always valid")
122-
.into(),
120+
PublicKey::Ed25519(pk) => {
121+
enr::ed25519_dalek::VerifyingKey::from_bytes(&pk.encode())
122+
.expect("Libp2p key conversion, always valid")
123+
.into()
124+
}
123125
_ => return Err("The key type is not supported"),
124126
};
125127

0 commit comments

Comments
 (0)