feat: Add SigSocket integration with WASM client and JavaScript bridge for sign requests
This commit is contained in:
@@ -24,7 +24,6 @@ use error::VaultError;
|
||||
pub use kvstore::traits::KVStore;
|
||||
|
||||
use crate::crypto::cipher::{decrypt_chacha20, encrypt_chacha20};
|
||||
use signature::SignatureEncoding;
|
||||
// TEMP: File-based debug logger for crypto troubleshooting
|
||||
use log::debug;
|
||||
|
||||
@@ -230,7 +229,7 @@ impl<S: KVStore> Vault<S> {
|
||||
let seed = kdf::keyspace_key(password, salt);
|
||||
|
||||
// 2. Generate Secp256k1 keypair from the seed
|
||||
use k256::ecdsa::{SigningKey, VerifyingKey, signature::hazmat::PrehashSigner};
|
||||
use k256::ecdsa::{SigningKey, VerifyingKey};
|
||||
|
||||
// Use the seed as the private key directly (32 bytes)
|
||||
let mut secret_key_bytes = [0u8; 32];
|
||||
@@ -466,14 +465,15 @@ impl<S: KVStore> Vault<S> {
|
||||
Ok(sig.to_bytes().to_vec())
|
||||
}
|
||||
KeyType::Secp256k1 => {
|
||||
use k256::ecdsa::{signature::Signer, SigningKey};
|
||||
use k256::ecdsa::{signature::Signer, SigningKey, Signature};
|
||||
let arr: &[u8; 32] = key.private_key.as_slice().try_into().map_err(|_| {
|
||||
VaultError::Crypto("Invalid secp256k1 private key length".to_string())
|
||||
})?;
|
||||
let sk = SigningKey::from_bytes(arr.into())
|
||||
.map_err(|e| VaultError::Crypto(e.to_string()))?;
|
||||
let sig: k256::ecdsa::DerSignature = sk.sign(message);
|
||||
Ok(sig.to_vec())
|
||||
let sig: Signature = sk.sign(message);
|
||||
// Return compact signature (64 bytes) instead of DER format
|
||||
Ok(sig.to_bytes().to_vec())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -517,7 +517,11 @@ impl<S: KVStore> Vault<S> {
|
||||
use k256::ecdsa::{signature::Verifier, Signature, VerifyingKey};
|
||||
let pk = VerifyingKey::from_sec1_bytes(&key.public_key)
|
||||
.map_err(|e| VaultError::Crypto(e.to_string()))?;
|
||||
let sig = Signature::from_der(signature)
|
||||
// Use compact format (64 bytes) instead of DER
|
||||
let sig_array: &[u8; 64] = signature.try_into().map_err(|_| {
|
||||
VaultError::Crypto("Invalid secp256k1 signature length".to_string())
|
||||
})?;
|
||||
let sig = Signature::from_bytes(sig_array.into())
|
||||
.map_err(|e| VaultError::Crypto(e.to_string()))?;
|
||||
Ok(pk.verify(message, &sig).is_ok())
|
||||
}
|
||||
|
Reference in New Issue
Block a user