Skip to content
This repository was archived by the owner on Nov 20, 2023. It is now read-only.

Commit 7027f32

Browse files
authored
Update k256 to 0.5 (#13)
1 parent 37b9638 commit 7027f32

File tree

3 files changed

+18
-27
lines changed

3 files changed

+18
-27
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ rlp = "0.4.5"
2424
tiny-keccak = { version = "2.0.2", features = ["keccak"] }
2525
zeroize = "1.1.0"
2626
libsecp256k1 = { version = "0.3.5", optional = true }
27-
ecdsa = { version = "0.7", optional = true }
27+
ecdsa = { version = "0.8", optional = true }
2828
sha3 = { version = "0.9", optional = true }
29-
k256-crate = { package = "k256", version = "0.4", features = ["ecdsa"], optional = true }
29+
k256-crate = { package = "k256", version = "0.5", features = ["ecdsa"], optional = true }
3030
serde = { version = "1.0.110", optional = true }
3131
ed25519-dalek = { version = "1.0.0-pre.4", optional = true }
3232
c-secp256k1 = { package = "secp256k1", version = "0.17.2", optional = true }

src/keys/k256.rs

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,34 @@
22
33
use super::{EnrKey, EnrPublicKey, SigningError};
44
use crate::Key;
5-
use k256_crate::{
6-
ecdsa::signature::{DigestVerifier, RandomizedDigestSigner, Signature},
7-
elliptic_curve::weierstrass::public_key::FromPublicKey,
8-
};
5+
use ecdsa::elliptic_curve::sec1::{FromEncodedPoint, ToEncodedPoint};
6+
use k256_crate::ecdsa::signature::{DigestVerifier, RandomizedDigestSigner, Signature};
97
use rand::rngs::OsRng;
108
use rlp::DecoderError;
119
use sha3::{Digest, Keccak256};
12-
use std::{
13-
collections::BTreeMap,
14-
convert::{TryFrom, TryInto},
15-
};
10+
use std::{collections::BTreeMap, convert::TryFrom};
1611

1712
/// The ENR key that stores the public key in the ENR record.
1813
pub const ENR_KEY: &str = "secp256k1";
1914

20-
type Signer = ecdsa::Signer<k256_crate::Secp256k1>;
21-
type Verifier = ecdsa::Verifier<k256_crate::Secp256k1>;
15+
type Signer = ecdsa::SigningKey<k256_crate::Secp256k1>;
16+
type Verifier = ecdsa::VerifyKey<k256_crate::Secp256k1>;
2217

2318
impl EnrKey for k256_crate::SecretKey {
24-
type PublicKey = k256_crate::PublicKey;
19+
type PublicKey = k256_crate::EncodedPoint;
2520

2621
fn sign_v4(&self, msg: &[u8]) -> Result<Vec<u8>, SigningError> {
2722
// take a keccak256 hash then sign.
2823
let digest = Keccak256::new().chain(msg);
29-
let signature: k256_crate::ecdsa::Signature = Signer::new(self)
24+
let signature: k256_crate::ecdsa::Signature = Signer::new(self.to_bytes().as_slice())
3025
.map_err(|_| SigningError::new("failed to create signer"))?
3126
.sign_digest_with_rng(&mut OsRng, digest);
3227

3328
Ok(signature.as_bytes().to_vec())
3429
}
3530

3631
fn public(&self) -> Self::PublicKey {
37-
self.try_into().unwrap()
32+
k256_crate::EncodedPoint::from_secret_key(self, false)
3833
}
3934

4035
fn enr_to_public(content: &BTreeMap<Key, Vec<u8>>) -> Result<Self::PublicKey, DecoderError> {
@@ -43,16 +38,16 @@ impl EnrKey for k256_crate::SecretKey {
4338
.ok_or_else(|| DecoderError::Custom("Unknown signature"))?;
4439

4540
// should be encoded in compressed form, i.e 33 byte raw secp256k1 public key
46-
Ok(k256_crate::PublicKey::from_bytes(pubkey_bytes)
47-
.ok_or_else(|| DecoderError::Custom("Invalid Secp256k1 Signature"))?)
41+
Ok(k256_crate::EncodedPoint::from_bytes(pubkey_bytes)
42+
.map_err(|_| DecoderError::Custom("Invalid Secp256k1 Signature"))?)
4843
}
4944
}
5045

51-
impl EnrPublicKey for k256_crate::PublicKey {
46+
impl EnrPublicKey for k256_crate::EncodedPoint {
5247
fn verify_v4(&self, msg: &[u8], sig: &[u8]) -> bool {
5348
let digest = Keccak256::new().chain(msg);
5449
if let Ok(sig) = k256_crate::ecdsa::Signature::try_from(sig) {
55-
if let Ok(verifier) = Verifier::new(self) {
50+
if let Ok(verifier) = Verifier::new(self.as_bytes()) {
5651
if verifier.verify_digest(digest, &sig).is_ok() {
5752
return true;
5853
}
@@ -63,15 +58,13 @@ impl EnrPublicKey for k256_crate::PublicKey {
6358

6459
fn encode(&self) -> Vec<u8> {
6560
// serialize in compressed form: 33 bytes
66-
let mut s = *self;
67-
s.compress();
68-
s.as_bytes().to_vec()
61+
self.compress().as_bytes().to_vec()
6962
}
7063

7164
fn encode_uncompressed(&self) -> Vec<u8> {
72-
k256_crate::AffinePoint::from_public_key(self)
65+
k256_crate::AffinePoint::from_encoded_point(self)
7366
.unwrap()
74-
.to_pubkey(false)
67+
.to_encoded_point(false)
7568
.as_bytes()[1..]
7669
.to_vec()
7770
}

src/lib.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,9 +1116,7 @@ mod tests {
11161116
#[cfg(feature = "k256")]
11171117
#[test]
11181118
fn test_encode_decode_k256() {
1119-
use k256_crate::elliptic_curve::Generate;
1120-
1121-
let key = k256_crate::SecretKey::generate(&mut rand::rngs::OsRng);
1119+
let key = k256_crate::SecretKey::random(&mut rand::rngs::OsRng);
11221120
let ip = Ipv4Addr::new(127, 0, 0, 1);
11231121
let tcp = 3000;
11241122

0 commit comments

Comments
 (0)