Skip to content

Commit b9abd64

Browse files
Implement sign payload for ledger
1 parent 697cb5f commit b9abd64

2 files changed

Lines changed: 11 additions & 1 deletion

File tree

cmd/soroban-cli/src/signer/ledger.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ pub enum Error {
2222
mod ledger_impl {
2323
use super::Error;
2424
use crate::xdr::{DecoratedSignature, Hash, Signature, SignatureHint, Transaction};
25+
use ed25519_dalek::Signature as Ed25519Signature;
2526
use sha2::{Digest, Sha256};
2627
use stellar_ledger::{Blob as _, Exchange, LedgerSigner};
2728

@@ -96,6 +97,12 @@ mod ledger_impl {
9697
Ok(DecoratedSignature { hint, signature })
9798
}
9899

100+
pub async fn sign_payload(&self, payload: [u8; 32]) -> Result<Ed25519Signature, Error> {
101+
let signed_bytes = self.signer.sign_blob(&self.index.into(), &payload).await?;
102+
let sig = Ed25519Signature::from_bytes(signed_bytes.as_slice().try_into()?);
103+
Ok(sig)
104+
}
105+
99106
pub async fn public_key(&self) -> Result<stellar_strkey::ed25519::PublicKey, Error> {
100107
Ok(self.signer.get_public_key(&self.index.into()).await?)
101108
}

cmd/soroban-cli/src/signer/mod.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,10 @@ impl Signer {
287287
let p = <[u8; 32]>::try_from(payload)?;
288288
local_key.sign_payload(p)
289289
}
290-
SignerKind::Ledger(_ledger) => todo!("ledger"),
290+
SignerKind::Ledger(ledger) => Ok({
291+
let p = <[u8; 32]>::try_from(payload)?;
292+
ledger.sign_payload(p).await?
293+
}),
291294
SignerKind::Lab => Err(Error::ReturningSignatureFromLab),
292295
SignerKind::SecureStore(secure_store_entry) => {
293296
let p = <[u8; 32]>::try_from(payload)?;

0 commit comments

Comments
 (0)