Skip to content

Commit 65d14a9

Browse files
authored
chore: use crates.io secpfun, use bytes to convert types (#269)
1 parent d979e45 commit 65d14a9

File tree

2 files changed

+60
-15
lines changed

2 files changed

+60
-15
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ tiny-keccak = { version = "2", features = ["keccak"] }
4747

4848
bincode = { version = "1", optional = true }
4949
curve25519-dalek = { version = "3", features = ["serde"] }
50-
ecdsa_fun = { git = "https://github.com/farcaster-project/secp256kfun.git", branch = "secp256k1/0.22", default-features = false, features = ["all"], optional = true }
50+
ecdsa_fun = { version = "0.7", default-features = false, features = ["all"], optional = true }
5151
rand = { version = "0.8.4", optional = true }
5252
rand_alt = { package = "rand", version = "0.7.3", features = ["std"] }
5353
rand_chacha = { version = "0.3.1", optional = true }
54-
secp256kfun = { git = "https://github.com/farcaster-project/secp256kfun.git", branch = "secp256k1/0.22", default-features = false, features = ["std", "serde", "libsecp_compat"], optional = true }
54+
secp256kfun = { version = "0.7", default-features = false, features = ["std", "serde", "libsecp_compat"], optional = true }
5555
sha2 = { version = "0.9", optional = true }
5656
sha3 = "0.10"
5757

src/swap/btcxmr.rs

Lines changed: 58 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,14 @@ use ecdsa_fun::{
2424
fun::{Point, Scalar},
2525
nonce, ECDSA,
2626
};
27+
// FIXME: when secp256kfun as new crates.io release
2728
#[cfg(feature = "experimental")]
2829
use rand::rngs::ThreadRng;
2930
#[cfg(feature = "experimental")]
3031
use rand_chacha::ChaCha20Rng;
3132
#[cfg(feature = "experimental")]
33+
use secp256kfun::marker::*;
34+
#[cfg(feature = "experimental")]
3235
use sha2::Sha256;
3336

3437
#[cfg(feature = "experimental")]
@@ -306,7 +309,12 @@ impl Sign<PublicKey, Sha256dHash, Signature> for KeyManager {
306309
) -> Result<Signature, crypto::Error> {
307310
let secret_key = self.get_or_derive_bitcoin_key(key)?;
308311

309-
let secret_key = Scalar::from(secret_key);
312+
// FIXME: when new version is released on crates.io
313+
// let secret_key = Scalar::from(secret_key);
314+
let secret_key = Scalar::from_slice(&secret_key[..])
315+
.unwrap()
316+
.mark::<NonZero>()
317+
.expect("SecretKey is never zero");
310318
let message_hash: &[u8; 32] = {
311319
use bitcoin::hashes::Hash;
312320
msg.as_inner()
@@ -315,7 +323,12 @@ impl Sign<PublicKey, Sha256dHash, Signature> for KeyManager {
315323
let nonce_gen = nonce::Synthetic::<Sha256, nonce::GlobalRng<ThreadRng>>::default();
316324
let ecdsa = ECDSA::new(nonce_gen);
317325

318-
Ok(ecdsa.sign(&secret_key, message_hash).into())
326+
// FIXME
327+
// Ok(ecdsa.sign(&secret_key, message_hash).into())
328+
Ok(
329+
Signature::from_compact(ecdsa.sign(&secret_key, message_hash).to_bytes().as_ref())
330+
.unwrap(),
331+
)
319332
}
320333

321334
fn verify_signature(
@@ -343,8 +356,15 @@ impl EncSign<PublicKey, Sha256dHash, Signature, EncryptedSignature> for KeyManag
343356
let secret_key = self.get_or_derive_bitcoin_key(signing_key)?;
344357

345358
let engine = Adaptor::<Transcript, NonceGen>::default();
346-
let secret_signing_key = Scalar::from(secret_key);
347-
let encryption_key = Point::from(*encryption_key);
359+
// FIXME
360+
// let secret_signing_key = Scalar::from(secret_key);
361+
let secret_signing_key = Scalar::from_slice(&secret_key[..])
362+
.unwrap()
363+
.mark::<NonZero>()
364+
.expect("SecretKey is never zero");
365+
// FIXME
366+
// let encryption_key = Point::from(*encryption_key);
367+
let encryption_key = Point::from_bytes(encryption_key.serialize()).unwrap();
348368
let message_hash: &[u8; 32] = {
349369
use bitcoin::hashes::Hash;
350370
msg.as_inner()
@@ -361,8 +381,11 @@ impl EncSign<PublicKey, Sha256dHash, Signature, EncryptedSignature> for KeyManag
361381
sig: &EncryptedSignature,
362382
) -> Result<(), crypto::Error> {
363383
let engine = Adaptor::<Transcript, NonceGen>::default();
364-
let verification_key = Point::from(*signing_key);
365-
let encryption_key = Point::from(*encryption_key);
384+
// FIXME
385+
// let verification_key = Point::from(*signing_key);
386+
// let encryption_key = Point::from(*encryption_key);
387+
let verification_key = Point::from_bytes(signing_key.serialize()).unwrap();
388+
let encryption_key = Point::from_bytes(encryption_key.serialize()).unwrap();
366389
let message_hash: &[u8; 32] = {
367390
use bitcoin::hashes::Hash;
368391
msg.as_inner()
@@ -394,9 +417,22 @@ impl EncSign<PublicKey, Sha256dHash, Signature, EncryptedSignature> for KeyManag
394417
.map_err(crypto::Error::new)?;
395418

396419
let adaptor = Adaptor::<Transcript, NonceGen>::default();
397-
let decryption_key = Scalar::from(secret_key);
398-
399-
Ok(adaptor.decrypt_signature(&decryption_key, sig).into())
420+
// FIXME
421+
// let decryption_key = Scalar::from(secret_key);
422+
let decryption_key = Scalar::from_slice(&secret_key[..])
423+
.unwrap()
424+
.mark::<NonZero>()
425+
.expect("SecretKey is never zero");
426+
427+
// FIXME
428+
// Ok(adaptor.decrypt_signature(&decryption_key, sig).into())
429+
Ok(Signature::from_compact(
430+
adaptor
431+
.decrypt_signature(&decryption_key, sig)
432+
.to_bytes()
433+
.as_ref(),
434+
)
435+
.unwrap())
400436
}
401437
}
402438

@@ -410,11 +446,18 @@ impl RecoverSecret<PublicKey, SecretKey, Signature, EncryptedSignature> for KeyM
410446
sig: Signature,
411447
) -> SecretKey {
412448
let adaptor = Adaptor::<Transcript, NonceGen>::default();
413-
let encryption_key = Point::from(*encryption_key);
414-
let signature = ecdsa_fun::Signature::from(sig);
449+
// FIXME
450+
// let encryption_key = Point::from(*encryption_key);
451+
//let signature = ecdsa_fun::Signature::from(sig);
452+
let encryption_key = Point::from_bytes(encryption_key.serialize()).unwrap();
453+
let signature = ecdsa_fun::Signature::from_bytes(sig.serialize_compact()).unwrap();
415454

416455
match adaptor.recover_decryption_key(&encryption_key, &signature, &encrypted_sig) {
417-
Some(decryption_key) => decryption_key.into(),
456+
// FIXME
457+
// Some(decryption_key) => decryption_key.into(),
458+
Some(decryption_key) => {
459+
SecretKey::from_slice(decryption_key.to_bytes().as_ref()).unwrap()
460+
}
418461
None => panic!("signature is not the decryption of our original encrypted signature"),
419462
}
420463
}
@@ -456,7 +499,9 @@ impl ProveCrossGroupDleq<PublicKey, monero::PublicKey, DLEQProof> for KeyManager
456499
.point
457500
.decompress()
458501
.expect("Valid point to decompress"),
459-
ecdsa_fun::fun::Point::from(*encryption_key),
502+
// FIXME
503+
//ecdsa_fun::fun::Point::from(*encryption_key),
504+
Point::from_bytes(encryption_key.serialize()).unwrap(),
460505
)
461506
}
462507
}

0 commit comments

Comments
 (0)