Skip to content

Commit 9536443

Browse files
committed
Try to fix upgrade
1 parent 6f19fd0 commit 9536443

File tree

3 files changed

+29
-27
lines changed

3 files changed

+29
-27
lines changed

flake.lock

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust-toolchain.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
[toolchain]
22
profile = "default"
3-
channel = "1.70.0"
3+
channel = "1.82.0"

src/internal/ed25519.rs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,16 @@ impl SigningKeypair {
9292
///match the private key.
9393
///
9494
pub fn from_bytes(sized_bytes: &[u8; 64]) -> Result<SigningKeypair, Ed25519Error> {
95-
let (_, pub_key) = array_split_64(sized_bytes);
95+
let (priv_key, pub_key) = array_split_64(sized_bytes);
96+
let ed25519_dalek_secret = ed25519_dalek::SigningKey::from_bytes(&priv_key);
9697
//Calculate the public key to check that the value passed in is correct.
97-
let ed25519_dalek_pub = ed25519_dalek::VerifyingKey::from_bytes(&pub_key)
98-
.map_err(|_| Ed25519Error::PublicKeyInvalid(pub_key))?;
99-
Ok(SigningKeypair::new_unchecked(*sized_bytes))
98+
99+
let ed25519_dalek_pub = ed25519_dalek::VerifyingKey::from(&ed25519_dalek_secret);
100+
if ed25519_dalek_pub.to_bytes() == pub_key {
101+
Ok(SigningKeypair::new_unchecked(*sized_bytes))
102+
} else {
103+
Err(Ed25519Error::PublicKeyInvalid(pub_key))
104+
}
100105
}
101106

102107
pub(crate) fn new_unchecked(bytes: [u8; 64]) -> SigningKeypair {
@@ -147,7 +152,8 @@ impl Ed25519Signing for Ed25519 {
147152
use ed25519_dalek::Signer;
148153
//This unwrap cannot fail. The only thing that the `from_bytes` does for validation is that the
149154
//value is 64 bytes long, which we guarantee statically.
150-
let key_pair = ed25519_dalek::SigningKey::from_bytes(signing_key.public_key().bytes());
155+
let (priv_key, _) = array_split_64(&signing_key.bytes);
156+
let key_pair = ed25519_dalek::SigningKey::from_bytes(&priv_key);
151157
let sig = key_pair.sign(&t.to_bytes()[..]);
152158

153159
Ed25519Signature::new(sig.to_bytes())
@@ -202,17 +208,13 @@ pub(crate) mod test {
202208

203209
#[test]
204210
fn real_ed25519_matches_verify_good_message() {
205-
let dalek_pub_key = ed25519_dalek::VerifyingKey::from_bytes(&[1u8; 32]).unwrap();
206-
let priv_key = SigningKeypair {
207-
bytes: array_concat_32(&[1u8; 32], &dalek_pub_key.to_bytes()),
211+
let sec_key = ed25519_dalek::SigningKey::from_bytes(&[1; 32]);
212+
let keypair = SigningKeypair {
213+
bytes: sec_key.to_keypair_bytes(),
208214
};
209215
let message = [100u8; 32].to_vec();
210-
let result = Ed25519.sign(&message, &priv_key);
211-
let verify_result = Ed25519.verify(
212-
&message,
213-
&result,
214-
&PublicSigningKey::new(dalek_pub_key.to_bytes()),
215-
);
216+
let result = Ed25519.sign(&message, &keypair);
217+
let verify_result = Ed25519.verify(&message, &result, &keypair.public_key());
216218
assert!(verify_result);
217219
}
218220

0 commit comments

Comments
 (0)