twizzler_security/keys/
mod.rs

1mod sig;
2mod sign;
3mod verify;
4pub use sig::*;
5pub use sign::*;
6pub use verify::*;
7
8/// The maximum key size the security system supports
9/// NOTE: can be increased while preserving backwards compatibility.
10pub const MAX_KEY_SIZE: usize = 128;
11type KeyBuffer = heapless::Vec<u8, MAX_KEY_SIZE>;
12
13// currently these tests can only run in user space, would have to write their own
14// tests written inside kernel to run.
15#[cfg(test)]
16#[cfg(feature = "user")]
17#[allow(unused_imports)]
18mod tests {
19
20    use super::*;
21
22    extern crate test;
23
24    use twizzler::object::Object;
25    use twizzler_abi::{object::Protections, syscall::ObjectCreate};
26
27    use super::VerifyingKey;
28    use crate::{SecurityError, SigningScheme};
29
30    #[test]
31    fn test_key_creation() {
32        let object_create_spec = ObjectCreate::new(
33            Default::default(),
34            twizzler_abi::syscall::LifetimeType::Persistent,
35            Default::default(),
36            Default::default(),
37            Protections::all(),
38        );
39
40        SigningKey::new_keypair(&SigningScheme::Ecdsa, object_create_spec)
41            .expect("keys should be generated properly");
42    }
43
44    /// Create default key pair
45    fn create_default_key_pair() -> (Object<SigningKey>, Object<VerifyingKey>) {
46        let object_create_spec = ObjectCreate::new(
47            Default::default(),
48            twizzler_abi::syscall::LifetimeType::Persistent,
49            Default::default(),
50            Default::default(),
51            Protections::all(),
52        );
53
54        SigningKey::new_keypair(&SigningScheme::Ecdsa, object_create_spec)
55            .expect("Keys should be generated properly")
56    }
57
58    #[test]
59    fn test_signing() {
60        use twizzler::object::TypedObject;
61
62        let (s_obj, _) = create_default_key_pair();
63
64        let message = "deadbeef".as_bytes();
65
66        s_obj
67            .base()
68            .sign(message)
69            .expect("Signature should succeed");
70    }
71
72    #[test]
73    fn test_verifying() {
74        use twizzler::object::TypedObject;
75
76        let (s_obj, v_obj) = create_default_key_pair();
77
78        let message = "deadbeef".as_bytes();
79
80        let sig = s_obj
81            .base()
82            .sign(message)
83            .expect("Signature should succeed");
84
85        v_obj
86            .base()
87            .verify(message, &sig)
88            .expect("Should be verified properly");
89    }
90}