Skip to content

Commit efa22b4

Browse files
committed
Cleaning up interfaces
1 parent 490f520 commit efa22b4

File tree

7 files changed

+74
-31
lines changed

7 files changed

+74
-31
lines changed

Cargo.lock

Lines changed: 4 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

fortanix-vme/nitro-attestation-verify/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ serde_cbor = "0.11"
1010
# Required until PR36 is accepted
1111
# https://github.com/awslabs/aws-nitro-enclaves-cose/pull/36
1212
aws-nitro-enclaves-cose = { version = "0.5.0", git = "https://github.com/fortanix/aws-nitro-enclaves-cose.git", branch = "raoul/crypto_abstraction_pinned", default-features = false }
13-
mbedtls = { version = "0.8.2", features = ["rdrand", "std", "dsa", "time"], default-features = false, optional = true }
13+
mbedtls = { version = "0.8.2", features = ["rdrand", "std", "time"], default-features = false, optional = true }
1414
num-bigint = "0.4"
1515
serde = { version = "1.0", features = ["derive"] }
1616
serde_bytes = "0.11"

fortanix-vme/nitro-attestation-verify/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use ::mbedtls::{alloc::List as MbedtlsList, x509::{Certificate, VerifyError}};
2222
mod mbedtls;
2323

2424
#[cfg(feature = "mbedtls")]
25-
use crate::mbedtls::Mbedtls;
25+
pub use crate::mbedtls::Mbedtls;
2626

2727
pub trait VerificationType {}
2828

fortanix-vme/nitro-attestation-verify/src/mbedtls.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use num_bigint::BigUint;
1313
use std::sync::Mutex;
1414
use std::ops::Deref;
1515

16-
pub(crate) struct Mbedtls;
16+
pub struct Mbedtls;
1717

1818
struct MdType(hash::Type);
1919

fortanix-vme/nsm/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
[package]
22
name = "nsm"
33
version = "0.1.0"
4+
authors = ["Raoul Strackx <[email protected]>"]
45
edition = "2021"
56

67
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

fortanix-vme/nsm/src/lib.rs

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
pub use nitro_attestation_verify::{AttestationDocument, Unverified, NitroError as AttestationError};
1+
pub use nitro_attestation_verify::{AttestationDocument, Unverified, NitroError as AttestationError, Mbedtls};
22
use nsm_io::{ErrorCode, Response, Request};
33
pub use nsm_io::Digest;
44
pub use serde_bytes::ByteBuf;
@@ -78,8 +78,8 @@ impl From<ErrorCode> for Error {
7878

7979
#[derive(Debug, Eq, PartialEq)]
8080
pub struct Pcr {
81-
pub locked: bool,
82-
pub data: Vec<u8>,
81+
locked: bool,
82+
data: Vec<u8>,
8383
}
8484

8585
impl Pcr {
@@ -89,6 +89,14 @@ impl Pcr {
8989
data,
9090
}
9191
}
92+
93+
pub fn locked(&self) -> bool {
94+
self.locked
95+
}
96+
97+
pub fn data(&self) -> &[u8] {
98+
self.data.as_slice()
99+
}
92100
}
93101

94102
impl TryFrom<Response> for Pcr {
@@ -122,6 +130,42 @@ pub struct Description {
122130
pub digest: Digest,
123131
}
124132

133+
impl Description {
134+
pub fn version_major(&self) -> u16 {
135+
self.version_major
136+
}
137+
138+
/// Minor API changes are denoted by `minor_version`. Minor versions should be backwards compatible.
139+
pub fn version_minor(&self) -> u16 {
140+
self.version_minor
141+
}
142+
143+
/// Patch version. These are security and stability updates and do not affect API.
144+
pub fn version_patch(&self) -> u16 {
145+
self.version_patch
146+
}
147+
148+
/// `module_id` is an identifier for a singular NitroSecureModule
149+
pub fn module_id(&self) -> &String {
150+
&self.module_id
151+
}
152+
153+
/// The maximum number of PCRs exposed by the NitroSecureModule.
154+
pub fn max_pcrs(&self) -> u16 {
155+
self.max_pcrs
156+
}
157+
158+
/// The PCRs that are read-only.
159+
pub fn locked_pcrs(&self) -> &BTreeSet<u16> {
160+
&self.locked_pcrs
161+
}
162+
163+
/// The digest of the PCR Bank
164+
pub fn digest(&self) -> Digest {
165+
self.digest
166+
}
167+
}
168+
125169
impl TryFrom<Response> for Description {
126170
type Error = Error;
127171

@@ -167,7 +211,7 @@ impl Nsm {
167211
public_key,
168212
};
169213
match nsm_driver::nsm_process_request(self.0, req) {
170-
Response::Attestation { document } => Ok(AttestationDocument::from_slice(document.as_slice())?),
214+
Response::Attestation { document } => Ok(AttestationDocument::from_slice::<Mbedtls>(document.as_slice())?),
171215
Response::Error(code) => Err(code.into()),
172216
_ => Err(Error::InvalidResponse),
173217
}

fortanix-vme/tests/nsm-test/src/main.rs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,43 +6,43 @@ fn main() {
66
let nonce = ByteBuf::from(vec![3, 4, 5]);
77
let pub_key = ByteBuf::from(vec![6, 7, 8]);
88
let doc = nsm.attest(Some(user_data.clone()), Some(nonce.clone()), Some(pub_key.clone())).unwrap();
9-
println!("#module_id: {}", doc.module_id);
10-
println!("#timestamp: {}", doc.timestamp);
11-
println!("digest: {}", doc.digest);
12-
assert_eq!(doc.digest, "SHA384");
13-
for (idx, val) in doc.pcrs.iter() {
9+
println!("#module_id: {}", doc.module_id());
10+
println!("#timestamp: {}", doc.timestamp());
11+
println!("digest: {}", doc.digest());
12+
assert_eq!(doc.digest(), "SHA384");
13+
for (idx, val) in doc.pcrs().iter() {
1414
println!("# pcr{} = {:?}", idx, val);
1515
}
16-
println!("#certificate: {}", pkix::pem::der_to_pem(&doc.certificate, pkix::pem::PEM_CERTIFICATE));
17-
println!("#cabundle: {:?}", doc.cabundle.iter().map(|cert| pkix::pem::der_to_pem(cert, pkix::pem::PEM_CERTIFICATE)).collect::<Vec::<String>>());
18-
println!("public_key: {:?}", pkix::pem::der_to_pem(doc.public_key.as_ref().unwrap(), pkix::pem::PEM_CERTIFICATE));
19-
assert_eq!(doc.public_key.unwrap(), pub_key);
20-
println!("user_data: {:?}", doc.user_data);
21-
assert_eq!(doc.user_data.unwrap(), user_data);
22-
println!("nonce: {:?}", doc.nonce);
23-
assert_eq!(doc.nonce.unwrap(), nonce);
16+
println!("#certificate: {}", pkix::pem::der_to_pem(&doc.certificate(), pkix::pem::PEM_CERTIFICATE));
17+
println!("#cabundle: {:?}", doc.cabundle().iter().map(|cert| pkix::pem::der_to_pem(cert, pkix::pem::PEM_CERTIFICATE)).collect::<Vec::<String>>());
18+
println!("public_key: {:?}", pkix::pem::der_to_pem(doc.public_key().as_ref().unwrap(), pkix::pem::PEM_CERTIFICATE));
19+
assert_eq!(*doc.public_key().unwrap(), pub_key);
20+
println!("user_data: {:?}", doc.user_data());
21+
assert_eq!(*doc.user_data().unwrap(), user_data);
22+
println!("nonce: {:?}", doc.nonce());
23+
assert_eq!(*doc.nonce().unwrap(), nonce);
2424

2525
for idx in 0..32 {
2626
let pcr = nsm.describe_pcr(idx).unwrap();
2727
println!("# pcr{} = {:?}", idx, pcr);
28-
assert_eq!(pcr.locked, idx <= 15);
28+
assert_eq!(pcr.locked(), idx <= 15);
2929
}
3030

3131
let pcr16 = nsm.extend_pcr(16, vec![41, 41, 41]);
3232
println!("pcr16 = {:?}", pcr16);
3333
let pcr16 = nsm.extend_pcr(16, vec![42, 42, 42]);
3434
println!("pcr16 = {:?}", pcr16);
3535
println!("pcr16 = {:?}", nsm.describe_pcr(16));
36-
assert_eq!(nsm.describe_pcr(16).unwrap().locked, false);
36+
assert_eq!(nsm.describe_pcr(16).unwrap().locked(), false);
3737

3838
nsm.lock_pcr(16).unwrap();
3939
println!("pcr16 = {:?}", nsm.describe_pcr(10));
40-
assert_eq!(nsm.describe_pcr(16).unwrap().locked, true);
40+
assert_eq!(nsm.describe_pcr(16).unwrap().locked(), true);
4141

4242
nsm.lock_pcrs(18).unwrap();
4343
for pcr in 0..=18 {
4444
println!("#pcr{} = {:?}", pcr, nsm.describe_pcr(pcr));
45-
assert_eq!(nsm.describe_pcr(pcr).map(|val| val.locked), Ok(pcr < 18));
45+
assert_eq!(nsm.describe_pcr(pcr).map(|val| val.locked()), Ok(pcr < 18));
4646
}
4747

4848
println!("# nsm description: {:#?}", nsm.describe().unwrap());
@@ -51,7 +51,7 @@ fn main() {
5151
assert_eq!(description.version_minor, 0);
5252
assert_eq!(description.version_patch, 0);
5353
assert_eq!(description.max_pcrs, 32);
54-
assert_eq!(description.locked_pcrs.iter().count(), 18);
54+
assert_eq!(description.locked_pcrs().iter().count(), 18);
5555
assert_eq!(description.digest, Digest::SHA384);
5656
assert!(nsm.get_random().is_ok());
5757
}

0 commit comments

Comments
 (0)