use crate::ecdsa::ECDSA;
use crate::types::{ECDSACurve, ExportKeyFormat, SHAFamily};
#[tokio::test]
async fn test_generate_key_pair() {
let (private_key, public_key) = ECDSA::generate_key_pair(None)
.await
.expect("Failed to generate key pair");
assert!(!private_key.is_empty());
assert!(!public_key.is_empty());
}
#[tokio::test]
async fn test_sign_verify_flow() {
let (private_key, public_key) = ECDSA::generate_key_pair(Some(ECDSACurve::P256))
.await
.expect("Failed to generate key pair");
let signing_key = ECDSA::import_private_key(&private_key, ECDSACurve::P256, false)
.await
.expect("Failed to import private key");
let verifying_key = ECDSA::import_public_key(&public_key, ECDSACurve::P256, false)
.await
.expect("Failed to import public key");
let test_data = b"Hello, World!";
let signature = ECDSA::sign(&signing_key, test_data, Some(SHAFamily::SHA256))
.await
.expect("Failed to sign data");
let is_valid = ECDSA::verify(
&verifying_key,
&signature,
test_data,
Some(SHAFamily::SHA256),
)
.await
.expect("Failed to verify signature");
assert!(is_valid);
}
#[tokio::test]
async fn test_key_export() {
let (private_key, public_key) = ECDSA::generate_key_pair(None)
.await
.expect("Failed to generate key pair");
let signing_key = ECDSA::import_private_key(&private_key, ECDSACurve::P256, false)
.await
.expect("Failed to import private key");
let verifying_key = ECDSA::import_public_key(&public_key, ECDSACurve::P256, false)
.await
.expect("Failed to import public key");
let exported_private = ECDSA::export_key_private(&signing_key, ExportKeyFormat::PKCS8)
.await
.expect("Failed to export private key");
let exported_public = ECDSA::export_key_public(&verifying_key, ExportKeyFormat::SPKI)
.await
.expect("Failed to export public key");
assert_eq!(exported_private, private_key);
assert_eq!(exported_public, public_key);
}
#[tokio::test]
async fn test_invalid_signature() {
let (private_key1, _) = ECDSA::generate_key_pair(None)
.await
.expect("Failed to generate first key pair");
let (_, public_key2) = ECDSA::generate_key_pair(None)
.await
.expect("Failed to generate second key pair");
let signing_key = ECDSA::import_private_key(&private_key1, ECDSACurve::P256, false)
.await
.expect("Failed to import private key");
let wrong_verifying_key = ECDSA::import_public_key(&public_key2, ECDSACurve::P256, false)
.await
.expect("Failed to import wrong public key");
let test_data = b"Hello, World!";
let signature = ECDSA::sign(&signing_key, test_data, None)
.await
.expect("Failed to sign data");
let is_valid = ECDSA::verify(&wrong_verifying_key, &signature, test_data, None)
.await
.expect("Failed to verify signature");
assert!(!is_valid);
}