mirror of
https://github.com/sbrow/envr.git
synced 2026-06-27 18:48:33 -04:00
133 lines
3.9 KiB
Rust
133 lines
3.9 KiB
Rust
//! Tests for recipient and identity validation functions.
|
|
|
|
use crate::keys::*;
|
|
use crate::memory::*;
|
|
use crate::types::*;
|
|
use crate::validation::*;
|
|
use std::ffi::CString;
|
|
|
|
#[test]
|
|
fn test_is_valid_x25519_recipient_valid() {
|
|
let mut keypair = AgeKeypair::null();
|
|
age_generate_x25519(&mut keypair);
|
|
|
|
assert!(age_is_valid_x25519_recipient(keypair.public_key));
|
|
|
|
age_free_keypair(&mut keypair);
|
|
}
|
|
|
|
#[test]
|
|
fn test_is_valid_x25519_recipient_invalid() {
|
|
let invalid = CString::new("not-a-valid-key").unwrap();
|
|
assert!(!age_is_valid_x25519_recipient(invalid.as_ptr()));
|
|
|
|
let almost_valid = CString::new("age1qqqqqqqqqqqqqqqqqqqqq").unwrap();
|
|
assert!(!age_is_valid_x25519_recipient(almost_valid.as_ptr()));
|
|
|
|
// Private key should not be valid as recipient
|
|
let mut keypair = AgeKeypair::null();
|
|
age_generate_x25519(&mut keypair);
|
|
assert!(!age_is_valid_x25519_recipient(keypair.private_key));
|
|
age_free_keypair(&mut keypair);
|
|
}
|
|
|
|
#[test]
|
|
fn test_is_valid_x25519_recipient_null() {
|
|
assert!(!age_is_valid_x25519_recipient(std::ptr::null()));
|
|
}
|
|
|
|
#[test]
|
|
fn test_is_valid_x25519_identity_valid() {
|
|
let mut keypair = AgeKeypair::null();
|
|
age_generate_x25519(&mut keypair);
|
|
|
|
assert!(age_is_valid_x25519_identity(keypair.private_key));
|
|
|
|
age_free_keypair(&mut keypair);
|
|
}
|
|
|
|
#[test]
|
|
fn test_is_valid_x25519_identity_invalid() {
|
|
let invalid = CString::new("not-a-valid-key").unwrap();
|
|
assert!(!age_is_valid_x25519_identity(invalid.as_ptr()));
|
|
|
|
let almost_valid = CString::new("AGE-SECRET-KEY-1QQQQQQQQQQQQQ").unwrap();
|
|
assert!(!age_is_valid_x25519_identity(almost_valid.as_ptr()));
|
|
|
|
// Public key should not be valid as identity
|
|
let mut keypair = AgeKeypair::null();
|
|
age_generate_x25519(&mut keypair);
|
|
assert!(!age_is_valid_x25519_identity(keypair.public_key));
|
|
age_free_keypair(&mut keypair);
|
|
}
|
|
|
|
#[test]
|
|
fn test_is_valid_x25519_identity_null() {
|
|
assert!(!age_is_valid_x25519_identity(std::ptr::null()));
|
|
}
|
|
|
|
#[test]
|
|
fn test_is_valid_ssh_recipient() {
|
|
// Test with an ed25519 SSH public key format
|
|
let ed25519_key = CString::new("ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGXzDvU2fB2Z9R7z1q1q1q1q1q1q1q1q1q1q1q1q1q1q").unwrap();
|
|
// This might or might not be valid depending on exact format
|
|
// The important thing is the function doesn't crash
|
|
let _ = age_is_valid_ssh_recipient(ed25519_key.as_ptr());
|
|
|
|
// Invalid SSH key
|
|
let invalid = CString::new("not-an-ssh-key").unwrap();
|
|
assert!(!age_is_valid_ssh_recipient(invalid.as_ptr()));
|
|
}
|
|
|
|
#[test]
|
|
fn test_is_valid_ssh_recipient_null() {
|
|
assert!(!age_is_valid_ssh_recipient(std::ptr::null()));
|
|
}
|
|
|
|
#[test]
|
|
fn test_recipient_type_x25519() {
|
|
let mut keypair = AgeKeypair::null();
|
|
age_generate_x25519(&mut keypair);
|
|
|
|
assert_eq!(age_recipient_type(keypair.public_key), 1);
|
|
|
|
age_free_keypair(&mut keypair);
|
|
}
|
|
|
|
#[test]
|
|
fn test_recipient_type_invalid() {
|
|
let invalid = CString::new("not-a-valid-key").unwrap();
|
|
assert_eq!(age_recipient_type(invalid.as_ptr()), 0);
|
|
}
|
|
|
|
#[test]
|
|
fn test_recipient_type_null() {
|
|
assert_eq!(age_recipient_type(std::ptr::null()), 0);
|
|
}
|
|
|
|
#[test]
|
|
fn test_recipient_type_with_whitespace() {
|
|
let mut keypair = AgeKeypair::null();
|
|
age_generate_x25519(&mut keypair);
|
|
|
|
// Get the public key and add whitespace
|
|
let public_key_str = unsafe {
|
|
std::ffi::CStr::from_ptr(keypair.public_key).to_str().unwrap()
|
|
};
|
|
let with_whitespace = CString::new(format!(" {} ", public_key_str)).unwrap();
|
|
|
|
// Should still be recognized as x25519 after trimming
|
|
assert_eq!(age_recipient_type(with_whitespace.as_ptr()), 1);
|
|
|
|
age_free_keypair(&mut keypair);
|
|
}
|
|
|
|
#[test]
|
|
fn test_empty_string_validation() {
|
|
let empty = CString::new("").unwrap();
|
|
|
|
assert!(!age_is_valid_x25519_recipient(empty.as_ptr()));
|
|
assert!(!age_is_valid_x25519_identity(empty.as_ptr()));
|
|
assert!(!age_is_valid_ssh_recipient(empty.as_ptr()));
|
|
assert_eq!(age_recipient_type(empty.as_ptr()), 0);
|
|
} |