Skip to content

Commit 72822e1

Browse files
committed
Merge #809: update deprecation versions and bump minor version
2df6636 bump version to 0.31.1 (Andrew Poelstra) 39fe628 clippy: fix PartialOrd impl of SerializedSignature (Andrew Poelstra) 39feb3b update unit tests and examples to remove deprecated functions (Andrew Poelstra) 9039ae7 deprecations: replace all TBDs with 0.31.0 (Andrew Poelstra) Pull request description: We accidentally released 0.30.0 and 0.31.0 with "in future" deprecations. Most users will not see these since the lint for them is different from the normal deprecation warning (and it's undocumented except to say that we "should not use" future deprecations, even though it works and there is no alternative). ACKs for top commit: tcharding: ACK 2df6636 Tree-SHA512: 53717ad2597dac3b616eaaf83521327b498ac848d87d11770407a75e70b51ff017feeb7fb9b5c56b6b6a3a70321c82682b1f52397cdc4b864861fa6daf5b6339
2 parents 3233cb9 + 2df6636 commit 72822e1

14 files changed

+75
-70
lines changed

Cargo-minimal.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
222222

223223
[[package]]
224224
name = "secp256k1"
225-
version = "0.31.0"
225+
version = "0.31.1"
226226
dependencies = [
227227
"bincode",
228228
"bitcoin_hashes",

Cargo-recent.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
213213

214214
[[package]]
215215
name = "secp256k1"
216-
version = "0.31.0"
216+
version = "0.31.1"
217217
dependencies = [
218218
"bincode",
219219
"bitcoin_hashes",

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "secp256k1"
3-
version = "0.31.0"
3+
version = "0.31.1"
44
authors = [ "Dawid Ciężarkiewicz <[email protected]>",
55
"Andrew Poelstra <[email protected]>" ]
66
license = "CC0-1.0"

examples/sign_verify.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ fn verify<C: Verification>(
1111
pubkey: [u8; 33],
1212
) -> Result<bool, Error> {
1313
let msg = sha256::Hash::hash(msg);
14-
let msg = Message::from_digest_slice(msg.as_ref())?;
14+
let msg = Message::from_digest(msg.to_byte_array());
1515
let sig = ecdsa::Signature::from_compact(&sig)?;
1616
let pubkey = PublicKey::from_slice(&pubkey)?;
1717

@@ -24,8 +24,8 @@ fn sign<C: Signing>(
2424
seckey: [u8; 32],
2525
) -> Result<ecdsa::Signature, Error> {
2626
let msg = sha256::Hash::hash(msg);
27-
let msg = Message::from_digest_slice(msg.as_ref())?;
28-
let seckey = SecretKey::from_slice(&seckey)?;
27+
let msg = Message::from_digest(msg.to_byte_array());
28+
let seckey = SecretKey::from_byte_array(seckey)?;
2929
Ok(secp.sign_ecdsa(msg, &seckey))
3030
}
3131

examples/sign_verify_recovery.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ fn recover<C: Verification>(
1111
recovery_id: u8,
1212
) -> Result<PublicKey, Error> {
1313
let msg = sha256::Hash::hash(msg);
14-
let msg = Message::from_digest_slice(msg.as_ref())?;
14+
let msg = Message::from_digest(msg.to_byte_array());
1515
let id = ecdsa::RecoveryId::try_from(i32::from(recovery_id))?;
1616
let sig = ecdsa::RecoverableSignature::from_compact(&sig, id)?;
1717

@@ -24,8 +24,8 @@ fn sign_recovery<C: Signing>(
2424
seckey: [u8; 32],
2525
) -> Result<ecdsa::RecoverableSignature, Error> {
2626
let msg = sha256::Hash::hash(msg);
27-
let msg = Message::from_digest_slice(msg.as_ref())?;
28-
let seckey = SecretKey::from_slice(&seckey)?;
27+
let msg = Message::from_digest(msg.to_byte_array());
28+
let seckey = SecretKey::from_byte_array(seckey)?;
2929
Ok(secp.sign_ecdsa_recoverable(msg, &seckey))
3030
}
3131

src/ecdh.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ impl SharedSecret {
6464
pub fn from_bytes(bytes: [u8; SHARED_SECRET_SIZE]) -> SharedSecret { SharedSecret(bytes) }
6565

6666
/// Creates a shared secret from `bytes` slice.
67-
#[deprecated(since = "TBD", note = "Use `from_bytes` instead.")]
67+
#[deprecated(since = "0.31.0", note = "Use `from_bytes` instead.")]
6868
#[inline]
6969
pub fn from_slice(bytes: &[u8]) -> Result<SharedSecret, Error> {
7070
match bytes.len() {
@@ -178,7 +178,7 @@ impl<'de> ::serde::Deserialize<'de> for SharedSecret {
178178
} else {
179179
d.deserialize_bytes(super::serde_util::BytesVisitor::new(
180180
"raw 32 bytes SharedSecret",
181-
SharedSecret::from_slice,
181+
|x| x.try_into().map(SharedSecret::from_bytes),
182182
))
183183
}
184184
}
@@ -263,7 +263,7 @@ mod tests {
263263
];
264264
static STR: &str = "01010101010101010001020304050607ffff0000ffff00006363636363636363";
265265

266-
let secret = SharedSecret::from_slice(&BYTES).unwrap();
266+
let secret = SharedSecret::from_bytes(BYTES);
267267

268268
assert_tokens(&secret.compact(), &[Token::BorrowedBytes(&BYTES[..])]);
269269
assert_tokens(&secret.compact(), &[Token::Bytes(&BYTES)]);

src/ecdsa/recovery.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ mod tests {
271271
let full = Secp256k1::new();
272272

273273
let msg = crate::random_32_bytes(&mut rand::rng());
274-
let msg = Message::from_digest_slice(&msg).unwrap();
274+
let msg = Message::from_digest(msg);
275275

276276
// Try key generation
277277
let (sk, pk) = full.generate_keypair(&mut rand::rng());
@@ -302,8 +302,8 @@ mod tests {
302302
let mut s = Secp256k1::new();
303303
s.randomize(&mut rand::rng());
304304

305-
let sk = SecretKey::from_slice(&ONE).unwrap();
306-
let msg = Message::from_digest_slice(&ONE).unwrap();
305+
let sk = SecretKey::from_byte_array(ONE).unwrap();
306+
let msg = Message::from_digest(ONE);
307307

308308
let sig = s.sign_ecdsa_recoverable(msg, &sk);
309309

@@ -327,8 +327,8 @@ mod tests {
327327
let mut s = Secp256k1::new();
328328
s.randomize(&mut rand::rng());
329329

330-
let sk = SecretKey::from_slice(&ONE).unwrap();
331-
let msg = Message::from_digest_slice(&ONE).unwrap();
330+
let sk = SecretKey::from_byte_array(ONE).unwrap();
331+
let msg = Message::from_digest(ONE);
332332
let noncedata = [42u8; 32];
333333

334334
let sig = s.sign_ecdsa_recoverable_with_noncedata(msg, &sk, &noncedata);
@@ -352,15 +352,15 @@ mod tests {
352352
s.randomize(&mut rand::rng());
353353

354354
let msg = crate::random_32_bytes(&mut rand::rng());
355-
let msg = Message::from_digest_slice(&msg).unwrap();
355+
let msg = Message::from_digest(msg);
356356

357357
let (sk, pk) = s.generate_keypair(&mut rand::rng());
358358

359359
let sigr = s.sign_ecdsa_recoverable(msg, &sk);
360360
let sig = sigr.to_standard();
361361

362362
let msg = crate::random_32_bytes(&mut rand::rng());
363-
let msg = Message::from_digest_slice(&msg).unwrap();
363+
let msg = Message::from_digest(msg);
364364
assert_eq!(s.verify_ecdsa(&sig, msg, &pk), Err(Error::IncorrectSignature));
365365

366366
let recovered_key = s.recover_ecdsa(msg, &sigr).unwrap();
@@ -374,7 +374,7 @@ mod tests {
374374
s.randomize(&mut rand::rng());
375375

376376
let msg = crate::random_32_bytes(&mut rand::rng());
377-
let msg = Message::from_digest_slice(&msg).unwrap();
377+
let msg = Message::from_digest(msg);
378378

379379
let (sk, pk) = s.generate_keypair(&mut rand::rng());
380380

@@ -390,7 +390,7 @@ mod tests {
390390
s.randomize(&mut rand::rng());
391391

392392
let msg = crate::random_32_bytes(&mut rand::rng());
393-
let msg = Message::from_digest_slice(&msg).unwrap();
393+
let msg = Message::from_digest(msg);
394394

395395
let noncedata = [42u8; 32];
396396

@@ -407,7 +407,7 @@ mod tests {
407407
let mut s = Secp256k1::new();
408408
s.randomize(&mut rand::rng());
409409

410-
let msg = Message::from_digest_slice(&[0x55; 32]).unwrap();
410+
let msg = Message::from_digest([0x55; 32]);
411411

412412
// Zero is not a valid sig
413413
let sig = RecoverableSignature::from_compact(&[0; 64], RecoveryId::Zero).unwrap();
@@ -478,8 +478,8 @@ mod benches {
478478
pub fn bench_recover(bh: &mut Bencher) {
479479
let s = Secp256k1::new();
480480
let msg = crate::random_32_bytes(&mut rand::rng());
481-
let msg = Message::from_digest_slice(&msg).unwrap();
482-
let (sk, _) = s.generate_keypair(&mut rand::rng());
481+
let msg = Message::from_digest(msg);
482+
let (sk, _) = s.generate_keypair(&mut rand::thread_rng());
483483
let sig = s.sign_ecdsa_recoverable(&msg, &sk);
484484

485485
bh.iter(|| {

src/ecdsa/serialized_signature.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ impl PartialEq<SerializedSignature> for [u8] {
5454

5555
impl PartialOrd for SerializedSignature {
5656
fn partial_cmp(&self, other: &SerializedSignature) -> Option<core::cmp::Ordering> {
57-
Some((**self).cmp(&**other))
57+
Some(self.cmp(other))
5858
}
5959
}
6060

src/ellswift.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ mod tests {
378378
// Test that we can round trip an ElligatorSwift encoding
379379
let secp = crate::Secp256k1::new();
380380
let public_key =
381-
PublicKey::from_secret_key(&secp, &SecretKey::from_slice(&[1u8; 32]).unwrap());
381+
PublicKey::from_secret_key(&secp, &SecretKey::from_byte_array([1u8; 32]).unwrap());
382382

383383
let ell = ElligatorSwift::from_pubkey(public_key);
384384
let pk = PublicKey::from_ellswift(ell);
@@ -391,9 +391,11 @@ mod tests {
391391
let secp = crate::Secp256k1::new();
392392
let rand32 = [1u8; 32];
393393
let priv32 = [1u8; 32];
394-
let ell = ElligatorSwift::from_seckey(&secp, SecretKey::from_slice(&rand32).unwrap(), None);
394+
let ell =
395+
ElligatorSwift::from_seckey(&secp, SecretKey::from_byte_array(rand32).unwrap(), None);
395396
let pk = PublicKey::from_ellswift(ell);
396-
let expected = PublicKey::from_secret_key(&secp, &SecretKey::from_slice(&priv32).unwrap());
397+
let expected =
398+
PublicKey::from_secret_key(&secp, &SecretKey::from_byte_array(priv32).unwrap());
397399

398400
assert_eq!(pk, expected);
399401
}
@@ -406,13 +408,13 @@ mod tests {
406408
let priv32 = [2u8; 32];
407409
let ell = ElligatorSwift::from_seckey(
408410
&secp,
409-
SecretKey::from_slice(&rand32).unwrap(),
411+
SecretKey::from_byte_array(rand32).unwrap(),
410412
Some(rand32),
411413
);
412414
let pk = ElligatorSwift::shared_secret_with_hasher(
413415
ell,
414416
ell,
415-
SecretKey::from_slice(&priv32).unwrap(),
417+
SecretKey::from_byte_array(priv32).unwrap(),
416418
Party::Initiator,
417419
|_, _, _| ElligatorSwiftSharedSecret([0xff; 32]),
418420
);
@@ -626,7 +628,7 @@ mod tests {
626628
ElligatorSwift::from_array(ellswift_theirs),
627629
)
628630
};
629-
let sec_key = SecretKey::from_slice(&my_secret).unwrap();
631+
let sec_key = SecretKey::from_byte_array(my_secret).unwrap();
630632
let initiator = if initiator == 0 { Party::Responder } else { Party::Initiator };
631633

632634
let shared = ElligatorSwift::shared_secret(el_a, el_b, sec_key, initiator, None);

src/key.rs

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ impl SecretKey {
220220
/// use secp256k1::SecretKey;
221221
/// let sk = SecretKey::from_slice(&[0xcd; 32]).expect("32 bytes, within curve order");
222222
/// ```
223-
#[deprecated(since = "TBD", note = "Use `from_byte_array` instead.")]
223+
#[deprecated(since = "0.31.0", note = "Use `from_byte_array` instead.")]
224224
#[inline]
225225
pub fn from_slice(data: &[u8]) -> Result<SecretKey, Error> {
226226
match <[u8; constants::SECRET_KEY_SIZE]>::try_from(data) {
@@ -402,10 +402,10 @@ impl<'de> serde::Deserialize<'de> for SecretKey {
402402
"a hex string representing 32 byte SecretKey",
403403
))
404404
} else {
405-
let visitor =
406-
super::serde_util::Tuple32Visitor::new("raw 32 bytes SecretKey", |bytes| {
407-
SecretKey::from_byte_array(bytes)
408-
});
405+
let visitor = super::serde_util::Tuple32Visitor::new(
406+
"raw 32 bytes SecretKey",
407+
SecretKey::from_byte_array,
408+
);
409409
d.deserialize_tuple(constants::SECRET_KEY_SIZE, visitor)
410410
}
411411
}
@@ -791,10 +791,10 @@ impl<'de> serde::Deserialize<'de> for PublicKey {
791791
"an ASCII hex string representing a public key",
792792
))
793793
} else {
794-
let visitor =
795-
super::serde_util::Tuple33Visitor::new("33 bytes compressed public key", |bytes| {
796-
PublicKey::from_byte_array_compressed(bytes)
797-
});
794+
let visitor = super::serde_util::Tuple33Visitor::new(
795+
"33 bytes compressed public key",
796+
PublicKey::from_byte_array_compressed,
797+
);
798798
d.deserialize_tuple(constants::PUBLIC_KEY_SIZE, visitor)
799799
}
800800
}
@@ -861,7 +861,7 @@ impl Keypair {
861861
///
862862
/// [`Error::InvalidSecretKey`] if the slice is not exactly 32 bytes long,
863863
/// or if the encoded number is an invalid scalar.
864-
#[deprecated(since = "TBD", note = "Use `from_seckey_byte_array` instead.")]
864+
#[deprecated(since = "0.31.0", note = "Use `from_seckey_byte_array` instead.")]
865865
#[inline]
866866
pub fn from_seckey_slice<C: Signing>(
867867
secp: &Secp256k1<C>,
@@ -1240,7 +1240,7 @@ impl XOnlyPublicKey {
12401240
///
12411241
/// Returns [`Error::InvalidPublicKey`] if the length of the data slice is not 32 bytes or the
12421242
/// slice does not represent a valid Secp256k1 point x coordinate.
1243-
#[deprecated(since = "TBD", note = "Use `from_byte_array` instead.")]
1243+
#[deprecated(since = "0.31.0", note = "Use `from_byte_array` instead.")]
12441244
#[inline]
12451245
pub fn from_slice(data: &[u8]) -> Result<XOnlyPublicKey, Error> {
12461246
match <[u8; constants::SCHNORR_PUBLIC_KEY_SIZE]>::try_from(data) {
@@ -1673,6 +1673,7 @@ mod test {
16731673
use crate::{constants, from_hex, to_hex, Scalar};
16741674

16751675
#[test]
1676+
#[allow(deprecated)]
16761677
fn skey_from_slice() {
16771678
let sk = SecretKey::from_slice(&[1; 31]);
16781679
assert_eq!(sk, Err(InvalidSecretKey));
@@ -1707,7 +1708,7 @@ mod test {
17071708
let s = Secp256k1::new();
17081709

17091710
let (sk1, pk1) = s.generate_keypair(&mut rand::rng());
1710-
assert_eq!(SecretKey::from_slice(&sk1[..]), Ok(sk1));
1711+
assert_eq!(SecretKey::from_byte_array(sk1.secret_bytes()), Ok(sk1));
17111712
assert_eq!(PublicKey::from_slice(&pk1.serialize()[..]), Ok(pk1));
17121713
assert_eq!(PublicKey::from_slice(&pk1.serialize_uncompressed()[..]), Ok(pk1));
17131714
}
@@ -1727,22 +1728,22 @@ mod test {
17271728
#[rustfmt::skip]
17281729
fn invalid_secret_key() {
17291730
// Zero
1730-
assert_eq!(SecretKey::from_slice(&[0; 32]), Err(InvalidSecretKey));
1731+
assert_eq!(SecretKey::from_byte_array([0; 32]), Err(InvalidSecretKey));
17311732
assert_eq!(
17321733
SecretKey::from_str("0000000000000000000000000000000000000000000000000000000000000000"),
17331734
Err(InvalidSecretKey)
17341735
);
17351736
// -1
1736-
assert_eq!(SecretKey::from_slice(&[0xff; 32]), Err(InvalidSecretKey));
1737+
assert_eq!(SecretKey::from_byte_array([0xff; 32]), Err(InvalidSecretKey));
17371738
// Top of range
1738-
assert!(SecretKey::from_slice(&[
1739+
assert!(SecretKey::from_byte_array([
17391740
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
17401741
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
17411742
0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B,
17421743
0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36, 0x41, 0x40,
17431744
]).is_ok());
17441745
// One past top of range
1745-
assert!(SecretKey::from_slice(&[
1746+
assert!(SecretKey::from_byte_array([
17461747
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
17471748
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
17481749
0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B,
@@ -1811,6 +1812,7 @@ mod test {
18111812
}
18121813

18131814
#[test]
1815+
#[allow(deprecated)]
18141816
fn test_seckey_from_bad_slice() {
18151817
// Bad sizes
18161818
assert_eq!(
@@ -1864,7 +1866,7 @@ mod test {
18641866

18651867
#[cfg(not(secp256k1_fuzz))]
18661868
let s = Secp256k1::signing_only();
1867-
let sk = SecretKey::from_slice(&SK_BYTES).expect("sk");
1869+
let sk = SecretKey::from_byte_array(SK_BYTES).expect("sk");
18681870

18691871
// In fuzzing mode secret->public key derivation is different, so
18701872
// hard-code the expected result.
@@ -2219,7 +2221,7 @@ mod test {
22192221

22202222
#[cfg(not(secp256k1_fuzz))]
22212223
let s = Secp256k1::new();
2222-
let sk = SecretKey::from_slice(&SK_BYTES).unwrap();
2224+
let sk = SecretKey::from_byte_array(SK_BYTES).unwrap();
22232225

22242226
// In fuzzing mode secret->public key derivation is different, so
22252227
// hard-code the expected result.
@@ -2359,10 +2361,11 @@ mod test {
23592361
pk_bytes[0] = 0x02; // Use positive Y co-ordinate.
23602362
pk_bytes[1..].clone_from_slice(&PK_BYTES);
23612363

2362-
let sk = SecretKey::from_slice(&SK_BYTES).expect("failed to parse sk bytes");
2364+
let sk = SecretKey::from_byte_array(SK_BYTES).expect("failed to parse sk bytes");
23632365
let pk = PublicKey::from_slice(&pk_bytes).expect("failed to create pk from iterator");
23642366
let kp = Keypair::from_secret_key(&secp, &sk);
2365-
let xonly = XOnlyPublicKey::from_slice(&PK_BYTES).expect("failed to get xonly from slice");
2367+
let xonly =
2368+
XOnlyPublicKey::from_byte_array(PK_BYTES).expect("failed to get xonly from slice");
23662369

23672370
(sk, pk, kp, xonly)
23682371
}

0 commit comments

Comments
 (0)