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