@super-protocol/addons-tee 1.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bindings/amd-sev-snp-napi-rs/amd-sev-snp-napi-rs.linux-x64-gnu.node +0 -0
- package/bindings/nvidia-native/README.md +174 -0
- package/bindings/nvidia-native/build/Release/libnvat.so.1.1.0 +0 -0
- package/bindings/nvidia-native/build/Release/nvidia_native.node +0 -0
- package/bindings/nvidia-native/package.json +26 -0
- package/bindings/nvidia-native/postinstall.js +40 -0
- package/bindings/sgx-native/build/Release/sgx_native.node +0 -0
- package/bindings/usr/lib/node_modules/node-addon-api/node_api.Makefile +6 -0
- package/bindings/usr/lib/node_modules/node-addon-api/nothing.target.mk +159 -0
- package/bindings/utils/virtee/libsev.so +0 -0
- package/bindings/utils/virtee/snpguest +0 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -2
- package/dist/nvidia-native-module/nvidia-attestation.d.ts +146 -0
- package/dist/nvidia-native-module/nvidia-attestation.js +374 -0
- package/dist/nvidia-native-module/nvidia-debug-state-policy.rego +45 -0
- package/dist/nvidia-native-module/nvidia-detailed-policy.rego +205 -0
- package/package.json +4 -2
- package/.editorconfig +0 -15
- package/.eslintrc.json +0 -61
- package/.prettierignore +0 -3
- package/.prettierrc +0 -15
- package/bindings/amd-sev-snp-napi-rs/package-lock.json +0 -40
- package/bindings/sgx-native/package-lock.json +0 -23
- package/bindings/sp-sev/.github/auto_assign-issues.yml +0 -5
- package/bindings/sp-sev/.github/auto_assign.yml +0 -21
- package/bindings/sp-sev/.github/dependabot.yml +0 -6
- package/bindings/sp-sev/.github/workflows/dco.yml +0 -10
- package/bindings/sp-sev/.github/workflows/lint.yml +0 -56
- package/bindings/sp-sev/.github/workflows/test.yml +0 -215
- package/bindings/sp-sev/.rustfmt.toml +0 -2
- package/bindings/sp-sev/CODEOWNERS +0 -1
- package/bindings/sp-sev/Cargo.lock +0 -2461
- package/bindings/sp-sev/Cargo.toml +0 -80
- package/bindings/sp-sev/LICENSE +0 -201
- package/bindings/sp-sev/README.md +0 -82
- package/bindings/sp-sev/build.rs +0 -17
- package/bindings/sp-sev/docs/attestation/README.md +0 -239
- package/bindings/sp-sev/docs/attestation/certchain.dot +0 -14
- package/bindings/sp-sev/docs/attestation/certchain.dot.png +0 -0
- package/bindings/sp-sev/docs/attestation/prerequisites.md +0 -6
- package/bindings/sp-sev/docs/attestation/process.msc +0 -60
- package/bindings/sp-sev/docs/attestation/process.msc.png +0 -0
- package/bindings/sp-sev/docs/attestation/protections.md +0 -53
- package/bindings/sp-sev/package-version.py +0 -11
- package/bindings/sp-sev/tests/api.rs +0 -194
- package/bindings/sp-sev/tests/certs.rs +0 -142
- package/bindings/sp-sev/tests/certs_data/cert_chain_milan +0 -74
- package/bindings/sp-sev/tests/certs_data/cert_chain_turin +0 -74
- package/bindings/sp-sev/tests/certs_data/report_milan.hex +0 -1
- package/bindings/sp-sev/tests/certs_data/vcek_milan.der +0 -0
- package/bindings/sp-sev/tests/certs_data/vcek_turin.der +0 -0
- package/bindings/sp-sev/tests/guest.rs +0 -57
- package/bindings/sp-sev/tests/id-block.rs +0 -172
- package/bindings/sp-sev/tests/measurement/ovmf_AmdSev_suffix.bin +0 -0
- package/bindings/sp-sev/tests/measurement/ovmf_OvmfX64_suffix.bin +0 -0
- package/bindings/sp-sev/tests/measurement/test_auth_block.bin +0 -0
- package/bindings/sp-sev/tests/measurement/test_auth_key.pem +0 -6
- package/bindings/sp-sev/tests/measurement/test_auth_sig.bin +0 -0
- package/bindings/sp-sev/tests/measurement/test_id_key.pem +0 -6
- package/bindings/sp-sev/tests/measurement/test_id_sig.bin +0 -0
- package/bindings/sp-sev/tests/measurement.rs +0 -510
- package/bindings/sp-sev/tests/naples/ark.cert.bad +0 -0
- package/bindings/sp-sev/tests/naples/ark.cert.sig +0 -0
- package/bindings/sp-sev/tests/naples/ark.rs +0 -38
- package/bindings/sp-sev/tests/naples/ask.rs +0 -29
- package/bindings/sp-sev/tests/naples/cek.cert +0 -0
- package/bindings/sp-sev/tests/naples/cek.rs +0 -30
- package/bindings/sp-sev/tests/naples/mod.rs +0 -20
- package/bindings/sp-sev/tests/naples/oca.cert +0 -0
- package/bindings/sp-sev/tests/naples/oca.rs +0 -45
- package/bindings/sp-sev/tests/naples/pdh.cert +0 -0
- package/bindings/sp-sev/tests/naples/pdh.rs +0 -28
- package/bindings/sp-sev/tests/naples/pek.cert +0 -0
- package/bindings/sp-sev/tests/naples/pek.rs +0 -32
- package/bindings/sp-sev/tests/rome/ark.rs +0 -33
- package/bindings/sp-sev/tests/rome/ask.rs +0 -29
- package/bindings/sp-sev/tests/rome/cek.cert +0 -0
- package/bindings/sp-sev/tests/rome/cek.rs +0 -29
- package/bindings/sp-sev/tests/rome/mod.rs +0 -16
- package/bindings/sp-sev/tests/rome/oca.cert +0 -0
- package/bindings/sp-sev/tests/rome/oca.rs +0 -45
- package/bindings/sp-sev/tests/rome/pdh.cert +0 -0
- package/bindings/sp-sev/tests/rome/pdh.rs +0 -28
- package/bindings/sp-sev/tests/rome/pek.cert +0 -0
- package/bindings/sp-sev/tests/rome/pek.rs +0 -32
- package/bindings/sp-sev/tests/session.rs +0 -39
- package/bindings/sp-sev/tests/sev_launch.rs +0 -120
- package/bindings/sp-sev/tests/snp_launch.rs +0 -108
- package/dto/src/AmdSevSnp.proto +0 -31
- package/dto/src/Compression.proto +0 -11
- package/dto/src/Hash.proto +0 -6
- package/dto/src/OrderReport.proto +0 -21
- package/dto/src/TRI.proto +0 -22
- package/dto/src/TeeDeviceInfo.proto +0 -46
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
|
|
3
|
-
use super::*;
|
|
4
|
-
|
|
5
|
-
#[test]
|
|
6
|
-
fn decode() {
|
|
7
|
-
sev::Certificate::decode(&mut &PDH[..], ()).unwrap();
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
#[test]
|
|
11
|
-
fn encode() {
|
|
12
|
-
let pdh = sev::Certificate::decode(&mut &PDH[..], ()).unwrap();
|
|
13
|
-
|
|
14
|
-
let mut output = Vec::new();
|
|
15
|
-
pdh.encode(&mut output, ()).unwrap();
|
|
16
|
-
assert_eq!(PDH.len(), output.len());
|
|
17
|
-
assert_eq!(PDH.to_vec(), output);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
#[cfg(feature = "openssl")]
|
|
21
|
-
#[test]
|
|
22
|
-
fn verify() {
|
|
23
|
-
let pek = sev::Certificate::decode(PEK, ()).unwrap();
|
|
24
|
-
let pdh = sev::Certificate::decode(PDH, ()).unwrap();
|
|
25
|
-
|
|
26
|
-
(&pek, &pdh).verify().unwrap();
|
|
27
|
-
assert!((&pdh, &pek).verify().is_err());
|
|
28
|
-
}
|
|
Binary file
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
|
|
3
|
-
use super::*;
|
|
4
|
-
|
|
5
|
-
#[test]
|
|
6
|
-
fn decode() {
|
|
7
|
-
sev::Certificate::decode(&mut &PEK[..], ()).unwrap();
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
#[test]
|
|
11
|
-
fn encode() {
|
|
12
|
-
let pek = sev::Certificate::decode(&mut &PEK[..], ()).unwrap();
|
|
13
|
-
|
|
14
|
-
let mut output = Vec::new();
|
|
15
|
-
pek.encode(&mut output, ()).unwrap();
|
|
16
|
-
assert_eq!(PEK.len(), output.len());
|
|
17
|
-
assert_eq!(PEK.to_vec(), output);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
#[cfg(feature = "openssl")]
|
|
21
|
-
#[test]
|
|
22
|
-
fn verify() {
|
|
23
|
-
let cek = sev::Certificate::decode(CEK, ()).unwrap();
|
|
24
|
-
let oca = sev::Certificate::decode(OCA, ()).unwrap();
|
|
25
|
-
let pek = sev::Certificate::decode(PEK, ()).unwrap();
|
|
26
|
-
|
|
27
|
-
(&cek, &pek).verify().unwrap();
|
|
28
|
-
assert!((&pek, &cek).verify().is_err());
|
|
29
|
-
|
|
30
|
-
(&oca, &pek).verify().unwrap();
|
|
31
|
-
assert!((&pek, &oca).verify().is_err());
|
|
32
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
|
|
3
|
-
use super::*;
|
|
4
|
-
use ::sev::certs::sev::builtin::rome::*;
|
|
5
|
-
|
|
6
|
-
#[test]
|
|
7
|
-
fn decode() {
|
|
8
|
-
ca::Certificate::decode(&mut &ARK[..], ()).unwrap();
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
#[test]
|
|
12
|
-
fn encode() {
|
|
13
|
-
let ark = ca::Certificate::decode(&mut &ARK[..], ()).unwrap();
|
|
14
|
-
|
|
15
|
-
let mut output = Vec::new();
|
|
16
|
-
ark.encode(&mut output, ()).unwrap();
|
|
17
|
-
assert_eq!(ARK.len(), output.len());
|
|
18
|
-
assert_eq!(ARK.to_vec(), output);
|
|
19
|
-
|
|
20
|
-
let ark = ca::Certificate::decode(&mut &ARK[..], ()).unwrap();
|
|
21
|
-
|
|
22
|
-
let mut output = Vec::new();
|
|
23
|
-
ark.encode(&mut output, ()).unwrap();
|
|
24
|
-
assert_eq!(ARK.len(), output.len());
|
|
25
|
-
assert_eq!(ARK.to_vec(), output);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
#[cfg(feature = "openssl")]
|
|
29
|
-
#[test]
|
|
30
|
-
fn verify() {
|
|
31
|
-
let ark = ca::Certificate::decode(&mut &ARK[..], ()).unwrap();
|
|
32
|
-
(&ark, &ark).verify().unwrap();
|
|
33
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
|
|
3
|
-
use super::*;
|
|
4
|
-
use ::sev::certs::sev::builtin::rome::*;
|
|
5
|
-
|
|
6
|
-
#[test]
|
|
7
|
-
fn decode() {
|
|
8
|
-
ca::Certificate::decode(&mut &ASK[..], ()).unwrap();
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
#[test]
|
|
12
|
-
fn encode() {
|
|
13
|
-
let ask = ca::Certificate::decode(&mut &ASK[..], ()).unwrap();
|
|
14
|
-
|
|
15
|
-
let mut output = Vec::new();
|
|
16
|
-
ask.encode(&mut output, ()).unwrap();
|
|
17
|
-
assert_eq!(ASK.len(), output.len());
|
|
18
|
-
assert_eq!(ASK.to_vec(), output);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
#[cfg(feature = "openssl")]
|
|
22
|
-
#[test]
|
|
23
|
-
fn verify() {
|
|
24
|
-
let ark = ca::Certificate::decode(ARK, ()).unwrap();
|
|
25
|
-
let ask = ca::Certificate::decode(ASK, ()).unwrap();
|
|
26
|
-
|
|
27
|
-
(&ark, &ask).verify().unwrap();
|
|
28
|
-
assert!((&ask, &ark).verify().is_err());
|
|
29
|
-
}
|
|
Binary file
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
|
|
3
|
-
use super::*;
|
|
4
|
-
|
|
5
|
-
#[test]
|
|
6
|
-
fn decode() {
|
|
7
|
-
sev::Certificate::decode(&mut &CEK[..], ()).unwrap();
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
#[test]
|
|
11
|
-
fn encode() {
|
|
12
|
-
let cek = sev::Certificate::decode(&mut &CEK[..], ()).unwrap();
|
|
13
|
-
|
|
14
|
-
let mut output = Vec::new();
|
|
15
|
-
cek.encode(&mut output, ()).unwrap();
|
|
16
|
-
assert_eq!(CEK.len(), output.len());
|
|
17
|
-
assert_eq!(CEK.to_vec(), output);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
#[cfg(feature = "openssl")]
|
|
21
|
-
#[test]
|
|
22
|
-
fn verify() {
|
|
23
|
-
use ::sev::certs::sev::builtin::rome::ASK;
|
|
24
|
-
|
|
25
|
-
let ask = ca::Certificate::decode(ASK, ()).unwrap();
|
|
26
|
-
let cek = sev::Certificate::decode(CEK, ()).unwrap();
|
|
27
|
-
|
|
28
|
-
(&ask, &cek).verify().unwrap();
|
|
29
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
|
|
3
|
-
mod ark;
|
|
4
|
-
mod ask;
|
|
5
|
-
mod cek;
|
|
6
|
-
mod oca;
|
|
7
|
-
mod pdh;
|
|
8
|
-
mod pek;
|
|
9
|
-
|
|
10
|
-
const OCA: &[u8] = include_bytes!("oca.cert");
|
|
11
|
-
const CEK: &[u8] = include_bytes!("cek.cert");
|
|
12
|
-
const PEK: &[u8] = include_bytes!("pek.cert");
|
|
13
|
-
const PDH: &[u8] = include_bytes!("pdh.cert");
|
|
14
|
-
|
|
15
|
-
use ::sev::certs::sev::*;
|
|
16
|
-
use codicon::{Decoder, Encoder};
|
|
Binary file
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
|
|
3
|
-
use super::*;
|
|
4
|
-
|
|
5
|
-
#[test]
|
|
6
|
-
fn decode() {
|
|
7
|
-
sev::Certificate::decode(&mut &OCA[..], ()).unwrap();
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
#[test]
|
|
11
|
-
fn encode() {
|
|
12
|
-
let oca = sev::Certificate::decode(&mut &OCA[..], ()).unwrap();
|
|
13
|
-
|
|
14
|
-
let mut output = Vec::new();
|
|
15
|
-
oca.encode(&mut output, ()).unwrap();
|
|
16
|
-
assert_eq!(OCA.len(), output.len());
|
|
17
|
-
assert_eq!(OCA.to_vec(), output);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
#[cfg(feature = "openssl")]
|
|
21
|
-
#[test]
|
|
22
|
-
fn verify() {
|
|
23
|
-
let oca = sev::Certificate::decode(OCA, ()).unwrap();
|
|
24
|
-
(&oca, &oca).verify().unwrap();
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
#[cfg(feature = "openssl")]
|
|
28
|
-
#[test]
|
|
29
|
-
fn create() {
|
|
30
|
-
let mut pdh = sev::Certificate::decode(&mut &PDH[..], ()).unwrap();
|
|
31
|
-
let (mut oca, key) = sev::Certificate::generate(sev::Usage::OCA).unwrap();
|
|
32
|
-
|
|
33
|
-
assert!((&pdh, &pdh).verify().is_err());
|
|
34
|
-
assert!((&oca, &pdh).verify().is_err());
|
|
35
|
-
assert!((&oca, &oca).verify().is_err());
|
|
36
|
-
|
|
37
|
-
key.sign(&mut oca).unwrap();
|
|
38
|
-
|
|
39
|
-
assert!((&pdh, &pdh).verify().is_err());
|
|
40
|
-
assert!((&oca, &pdh).verify().is_err());
|
|
41
|
-
(&oca, &oca).verify().unwrap();
|
|
42
|
-
|
|
43
|
-
key.sign(&mut pdh).unwrap();
|
|
44
|
-
(&oca, &pdh).verify().unwrap();
|
|
45
|
-
}
|
|
Binary file
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
|
|
3
|
-
use super::*;
|
|
4
|
-
|
|
5
|
-
#[test]
|
|
6
|
-
fn decode() {
|
|
7
|
-
sev::Certificate::decode(&mut &PDH[..], ()).unwrap();
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
#[test]
|
|
11
|
-
fn encode() {
|
|
12
|
-
let pdh = sev::Certificate::decode(&mut &PDH[..], ()).unwrap();
|
|
13
|
-
|
|
14
|
-
let mut output = Vec::new();
|
|
15
|
-
pdh.encode(&mut output, ()).unwrap();
|
|
16
|
-
assert_eq!(PDH.len(), output.len());
|
|
17
|
-
assert_eq!(PDH.to_vec(), output);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
#[cfg(feature = "openssl")]
|
|
21
|
-
#[test]
|
|
22
|
-
fn verify() {
|
|
23
|
-
let pek = sev::Certificate::decode(PEK, ()).unwrap();
|
|
24
|
-
let pdh = sev::Certificate::decode(PDH, ()).unwrap();
|
|
25
|
-
|
|
26
|
-
(&pek, &pdh).verify().unwrap();
|
|
27
|
-
assert!((&pdh, &pek).verify().is_err());
|
|
28
|
-
}
|
|
Binary file
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
|
|
3
|
-
use super::*;
|
|
4
|
-
|
|
5
|
-
#[test]
|
|
6
|
-
fn decode() {
|
|
7
|
-
sev::Certificate::decode(&mut &PEK[..], ()).unwrap();
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
#[test]
|
|
11
|
-
fn encode() {
|
|
12
|
-
let pek = sev::Certificate::decode(&mut &PEK[..], ()).unwrap();
|
|
13
|
-
|
|
14
|
-
let mut output = Vec::new();
|
|
15
|
-
pek.encode(&mut output, ()).unwrap();
|
|
16
|
-
assert_eq!(PEK.len(), output.len());
|
|
17
|
-
assert_eq!(PEK.to_vec(), output);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
#[cfg(feature = "openssl")]
|
|
21
|
-
#[test]
|
|
22
|
-
fn verify() {
|
|
23
|
-
let cek = sev::Certificate::decode(CEK, ()).unwrap();
|
|
24
|
-
let oca = sev::Certificate::decode(OCA, ()).unwrap();
|
|
25
|
-
let pek = sev::Certificate::decode(PEK, ()).unwrap();
|
|
26
|
-
|
|
27
|
-
(&cek, &pek).verify().unwrap();
|
|
28
|
-
assert!((&pek, &cek).verify().is_err());
|
|
29
|
-
|
|
30
|
-
(&oca, &pek).verify().unwrap();
|
|
31
|
-
assert!((&pek, &oca).verify().is_err());
|
|
32
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
|
|
3
|
-
#![cfg(feature = "openssl")]
|
|
4
|
-
|
|
5
|
-
#[cfg(all(target_os = "linux", feature = "sev"))]
|
|
6
|
-
mod initialized {
|
|
7
|
-
use ::sev::{certs::sev::builtin::naples::*, certs::sev::*, launch, session::Session};
|
|
8
|
-
use codicon::Decoder;
|
|
9
|
-
use std::convert::*;
|
|
10
|
-
|
|
11
|
-
#[test]
|
|
12
|
-
fn create() {
|
|
13
|
-
Session::try_from(launch::sev::Policy::default()).unwrap();
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
#[test]
|
|
17
|
-
fn start() {
|
|
18
|
-
const CEK: &[u8] = include_bytes!("naples/cek.cert");
|
|
19
|
-
const OCA: &[u8] = include_bytes!("naples/oca.cert");
|
|
20
|
-
const PEK: &[u8] = include_bytes!("naples/pek.cert");
|
|
21
|
-
const PDH: &[u8] = include_bytes!("naples/pdh.cert");
|
|
22
|
-
|
|
23
|
-
let session = Session::try_from(launch::sev::Policy::default()).unwrap();
|
|
24
|
-
session
|
|
25
|
-
.start(Chain {
|
|
26
|
-
ca: ca::Chain {
|
|
27
|
-
ark: ca::Certificate::decode(&mut &ARK[..], ()).unwrap(),
|
|
28
|
-
ask: ca::Certificate::decode(&mut &ASK[..], ()).unwrap(),
|
|
29
|
-
},
|
|
30
|
-
sev: sev::Chain {
|
|
31
|
-
cek: sev::Certificate::decode(&mut &CEK[..], ()).unwrap(),
|
|
32
|
-
oca: sev::Certificate::decode(&mut &OCA[..], ()).unwrap(),
|
|
33
|
-
pek: sev::Certificate::decode(&mut &PEK[..], ()).unwrap(),
|
|
34
|
-
pdh: sev::Certificate::decode(&mut &PDH[..], ()).unwrap(),
|
|
35
|
-
},
|
|
36
|
-
})
|
|
37
|
-
.unwrap();
|
|
38
|
-
}
|
|
39
|
-
}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
|
|
3
|
-
#![cfg(all(
|
|
4
|
-
feature = "openssl",
|
|
5
|
-
target_os = "linux",
|
|
6
|
-
feature = "sev",
|
|
7
|
-
feature = "dangerous_hw_tests"
|
|
8
|
-
))]
|
|
9
|
-
|
|
10
|
-
use kvm_bindings::kvm_userspace_memory_region;
|
|
11
|
-
use kvm_ioctls::{Kvm, VcpuExit};
|
|
12
|
-
use serial_test::serial;
|
|
13
|
-
use sev::certs::sev::sev::Usage;
|
|
14
|
-
use sev::certs::sev::{sev::Certificate, Signer};
|
|
15
|
-
use sev::{cached_chain, firmware::host::Firmware, launch::sev::*, session::Session};
|
|
16
|
-
use std::slice::from_raw_parts;
|
|
17
|
-
use std::{convert::TryFrom, os::unix::io::AsRawFd};
|
|
18
|
-
|
|
19
|
-
// Has to be a multiple of 16
|
|
20
|
-
const CODE: &[u8; 16] = &[
|
|
21
|
-
0xf4; 16 // hlt
|
|
22
|
-
];
|
|
23
|
-
|
|
24
|
-
#[cfg_attr(not(host), ignore)]
|
|
25
|
-
#[test]
|
|
26
|
-
#[serial]
|
|
27
|
-
fn sev_launch_test() {
|
|
28
|
-
// KVM SEV type
|
|
29
|
-
const KVM_X86_SEV_VM: u64 = 2;
|
|
30
|
-
|
|
31
|
-
let mut sev = Firmware::open().unwrap();
|
|
32
|
-
let build = sev.platform_status().unwrap().build;
|
|
33
|
-
|
|
34
|
-
// Generating OCA cert and private key
|
|
35
|
-
let (mut oca, prv) = Certificate::generate(Usage::OCA).expect("Generating OCA key pair");
|
|
36
|
-
prv.sign(&mut oca).expect("OCA key signing");
|
|
37
|
-
|
|
38
|
-
// Provisioning the PEK with the generated OCA key pair
|
|
39
|
-
let mut pek = sev.pek_csr().expect("Cross signing request");
|
|
40
|
-
prv.sign(&mut pek).expect("Sign PEK with OCA private key");
|
|
41
|
-
sev.pek_cert_import(&pek, &oca)
|
|
42
|
-
.expect("Import the newly-signed PEK");
|
|
43
|
-
|
|
44
|
-
// Export the full chain to launch SEV guest
|
|
45
|
-
let chain = cached_chain::get_chain();
|
|
46
|
-
|
|
47
|
-
let policy = Policy::default();
|
|
48
|
-
let session = Session::try_from(policy).unwrap();
|
|
49
|
-
let start = session.start(chain).unwrap();
|
|
50
|
-
|
|
51
|
-
let kvm = Kvm::new().unwrap();
|
|
52
|
-
|
|
53
|
-
// Create VMft with SEV type
|
|
54
|
-
let vm = kvm.create_vm_with_type(KVM_X86_SEV_VM).unwrap();
|
|
55
|
-
|
|
56
|
-
// Allocate a 1kB page of memory for the address space of the VM.
|
|
57
|
-
const MEM_SIZE: usize = 0x1000;
|
|
58
|
-
let address_space = unsafe { libc::mmap(0 as _, MEM_SIZE, 3, 34, -1, 0) };
|
|
59
|
-
|
|
60
|
-
if address_space == libc::MAP_FAILED {
|
|
61
|
-
panic!("mmap() failed");
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
let address_space: &[u8] = unsafe { from_raw_parts(address_space as *mut u8, MEM_SIZE) };
|
|
65
|
-
|
|
66
|
-
let mem_region = kvm_userspace_memory_region {
|
|
67
|
-
slot: 0,
|
|
68
|
-
guest_phys_addr: 0,
|
|
69
|
-
memory_size: MEM_SIZE as _,
|
|
70
|
-
userspace_addr: address_space.as_ptr() as _,
|
|
71
|
-
flags: 0,
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
unsafe {
|
|
75
|
-
vm.set_user_memory_region(mem_region).unwrap();
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
let mut session = session.measure().unwrap();
|
|
79
|
-
session.update_data(address_space.as_ref()).unwrap();
|
|
80
|
-
|
|
81
|
-
let (mut launcher, measurement) = {
|
|
82
|
-
let launcher = Launcher::new(vm.as_raw_fd(), sev.as_raw_fd()).unwrap();
|
|
83
|
-
let mut launcher = launcher.start(start).unwrap();
|
|
84
|
-
launcher.update_data(address_space.as_ref()).unwrap();
|
|
85
|
-
let launcher = launcher.measure().unwrap();
|
|
86
|
-
let measurement = launcher.measurement();
|
|
87
|
-
(launcher, measurement)
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
let session = session.verify(build, measurement).unwrap();
|
|
91
|
-
let secret = session.secret(HeaderFlags::default(), CODE).unwrap();
|
|
92
|
-
|
|
93
|
-
launcher
|
|
94
|
-
.inject(&secret, address_space.as_ptr() as usize)
|
|
95
|
-
.unwrap();
|
|
96
|
-
|
|
97
|
-
let _handle = launcher.finish().unwrap();
|
|
98
|
-
|
|
99
|
-
let mut vcpu = vm.create_vcpu(0).unwrap();
|
|
100
|
-
let mut sregs = vcpu.get_sregs().unwrap();
|
|
101
|
-
sregs.cs.base = 0;
|
|
102
|
-
sregs.cs.selector = 0;
|
|
103
|
-
vcpu.set_sregs(&sregs).unwrap();
|
|
104
|
-
|
|
105
|
-
let mut regs = vcpu.get_regs().unwrap();
|
|
106
|
-
regs.rip = std::ptr::null::<u64>() as u64;
|
|
107
|
-
regs.rflags = 2;
|
|
108
|
-
vcpu.set_regs(®s).unwrap();
|
|
109
|
-
|
|
110
|
-
match vcpu.run().unwrap() {
|
|
111
|
-
VcpuExit::Hlt => (),
|
|
112
|
-
exit_reason => panic!("unexpected exit reason: {:?}", exit_reason),
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
drop(vcpu);
|
|
116
|
-
drop(vm);
|
|
117
|
-
|
|
118
|
-
sev.platform_reset().unwrap();
|
|
119
|
-
cached_chain::rm_cached_chain();
|
|
120
|
-
}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
|
|
3
|
-
#![cfg(all(feature = "snp", target_os = "linux"))]
|
|
4
|
-
|
|
5
|
-
use kvm_bindings::{kvm_create_guest_memfd, kvm_userspace_memory_region2, KVM_MEM_GUEST_MEMFD};
|
|
6
|
-
use kvm_ioctls::{Kvm, VcpuExit};
|
|
7
|
-
use sev::firmware::{guest::GuestPolicy, host::Firmware};
|
|
8
|
-
use sev::launch::snp::*;
|
|
9
|
-
use std::os::fd::RawFd;
|
|
10
|
-
use std::slice::from_raw_parts_mut;
|
|
11
|
-
|
|
12
|
-
// one page of `hlt
|
|
13
|
-
const CODE: &[u8; 4096] = &[
|
|
14
|
-
0xf4; 4096 // hlt
|
|
15
|
-
];
|
|
16
|
-
|
|
17
|
-
const KVM_X86_SNP_VM: u64 = 4;
|
|
18
|
-
|
|
19
|
-
#[cfg_attr(not(host), ignore)]
|
|
20
|
-
#[test]
|
|
21
|
-
fn snp_launch_test() {
|
|
22
|
-
let kvm_fd = Kvm::new().unwrap();
|
|
23
|
-
|
|
24
|
-
// Create VM-fd with SEV-SNP type
|
|
25
|
-
let vm_fd = kvm_fd.create_vm_with_type(KVM_X86_SNP_VM).unwrap();
|
|
26
|
-
|
|
27
|
-
const MEM_ADDR: u64 = 0x1000;
|
|
28
|
-
|
|
29
|
-
// Allocate a 1kB page of memory for the address space of the VM.
|
|
30
|
-
let address_space = unsafe { libc::mmap(0 as _, CODE.len(), 3, 34, -1, 0) };
|
|
31
|
-
|
|
32
|
-
if address_space == libc::MAP_FAILED {
|
|
33
|
-
panic!("mmap() failed");
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
let address_space: &mut [u8] =
|
|
37
|
-
unsafe { from_raw_parts_mut(address_space as *mut u8, CODE.len()) };
|
|
38
|
-
|
|
39
|
-
address_space[..CODE.len()].copy_from_slice(&CODE[..]);
|
|
40
|
-
|
|
41
|
-
let userspace_addr = address_space as *const [u8] as *const u8 as u64;
|
|
42
|
-
|
|
43
|
-
// Create KVM guest_memfd struct
|
|
44
|
-
let gmem = kvm_create_guest_memfd {
|
|
45
|
-
size: 0x1000,
|
|
46
|
-
flags: 0,
|
|
47
|
-
reserved: [0; 6],
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
// Create KVM guest_memfd
|
|
51
|
-
let fd: RawFd = vm_fd.create_guest_memfd(gmem).unwrap();
|
|
52
|
-
|
|
53
|
-
// Create memory region
|
|
54
|
-
let mem_region = kvm_userspace_memory_region2 {
|
|
55
|
-
slot: 0,
|
|
56
|
-
flags: KVM_MEM_GUEST_MEMFD,
|
|
57
|
-
guest_phys_addr: 0x1000_u64,
|
|
58
|
-
memory_size: 0x1000_u64,
|
|
59
|
-
userspace_addr,
|
|
60
|
-
guest_memfd_offset: 0,
|
|
61
|
-
guest_memfd: fd as u32,
|
|
62
|
-
pad1: 0,
|
|
63
|
-
pad2: [0; 14],
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
unsafe {
|
|
67
|
-
vm_fd.set_user_memory_region2(mem_region).unwrap();
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
let sev = Firmware::open().unwrap();
|
|
71
|
-
let launcher = Launcher::new(vm_fd, sev).unwrap();
|
|
72
|
-
|
|
73
|
-
let mut policy = GuestPolicy(0);
|
|
74
|
-
policy.set_smt_allowed(true);
|
|
75
|
-
let start = Start::new(policy, [0; 16]);
|
|
76
|
-
|
|
77
|
-
let mut launcher = launcher.start(start).unwrap();
|
|
78
|
-
|
|
79
|
-
let update = Update::new(
|
|
80
|
-
mem_region.guest_phys_addr >> 12,
|
|
81
|
-
address_space,
|
|
82
|
-
PageType::Normal,
|
|
83
|
-
);
|
|
84
|
-
|
|
85
|
-
launcher
|
|
86
|
-
.update_data(update, mem_region.guest_phys_addr, mem_region.memory_size)
|
|
87
|
-
.unwrap();
|
|
88
|
-
|
|
89
|
-
let finish = Finish::new(None, None, [0u8; 32]);
|
|
90
|
-
|
|
91
|
-
let mut vcpu_fd = launcher.as_mut().create_vcpu(0).unwrap();
|
|
92
|
-
|
|
93
|
-
let mut regs = vcpu_fd.get_regs().unwrap();
|
|
94
|
-
regs.rip = MEM_ADDR;
|
|
95
|
-
regs.rflags = 2;
|
|
96
|
-
vcpu_fd.set_regs(®s).unwrap();
|
|
97
|
-
|
|
98
|
-
let mut sregs = vcpu_fd.get_sregs().unwrap();
|
|
99
|
-
sregs.cs.base = 0;
|
|
100
|
-
sregs.cs.selector = 0;
|
|
101
|
-
vcpu_fd.set_sregs(&sregs).unwrap();
|
|
102
|
-
|
|
103
|
-
let (_vm_fd, _sev) = launcher.finish(finish).unwrap();
|
|
104
|
-
|
|
105
|
-
let ret = vcpu_fd.run();
|
|
106
|
-
|
|
107
|
-
assert!(matches!(ret, Ok(VcpuExit::Hlt)));
|
|
108
|
-
}
|
package/dto/src/AmdSevSnp.proto
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
syntax = "proto3";
|
|
2
|
-
|
|
3
|
-
enum SevSNPCertType {
|
|
4
|
-
ARK = 0;
|
|
5
|
-
ASK = 1;
|
|
6
|
-
VCEK = 2;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
enum SevSnpCertificateFormat {
|
|
10
|
-
PEM = 0;
|
|
11
|
-
DER = 1;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
message SnpCert {
|
|
15
|
-
SevSNPCertType type = 1;
|
|
16
|
-
bytes cert = 2;
|
|
17
|
-
SevSnpCertificateFormat format = 3;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
message SNPReport {
|
|
21
|
-
bytes rawReport = 1;
|
|
22
|
-
uint32 cpuSig = 2;
|
|
23
|
-
uint32 cores = 3;
|
|
24
|
-
bytes cmdLineHash = 4;
|
|
25
|
-
string build = 5;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
message SNPReportWithChain {
|
|
29
|
-
SNPReport snpReport = 1;
|
|
30
|
-
repeated SnpCert certs = 2;
|
|
31
|
-
}
|
package/dto/src/Hash.proto
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
syntax = "proto3";
|
|
2
|
-
|
|
3
|
-
import "Hash.proto";
|
|
4
|
-
|
|
5
|
-
message OrderReportProto {
|
|
6
|
-
repeated bytes certificates = 1;
|
|
7
|
-
WorkloadInfo workloadInfo = 2;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
message WorkloadInfo {
|
|
11
|
-
repeated RuntimeInfo runtimeInfo = 1;
|
|
12
|
-
int64 created = 2;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
message RuntimeInfo {
|
|
16
|
-
string type = 1;
|
|
17
|
-
int64 size = 2;
|
|
18
|
-
Hash hash = 3;
|
|
19
|
-
optional Hash signatureKeyHash = 4;
|
|
20
|
-
optional Hash argsHash = 5;
|
|
21
|
-
}
|
package/dto/src/TRI.proto
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
syntax = "proto3";
|
|
2
|
-
|
|
3
|
-
import "Hash.proto";
|
|
4
|
-
|
|
5
|
-
message Encryption {
|
|
6
|
-
string algo = 1;
|
|
7
|
-
optional bytes key = 2;
|
|
8
|
-
optional string cipher = 3;
|
|
9
|
-
optional bytes ciphertext = 4;
|
|
10
|
-
optional bytes iv = 6;
|
|
11
|
-
optional bytes mac = 7;
|
|
12
|
-
string encoding = 8;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
message TRI {
|
|
16
|
-
repeated Hash solutionHashes = 1;
|
|
17
|
-
bytes mrenclave = 2;
|
|
18
|
-
string args = 3;
|
|
19
|
-
Encryption encryption = 4;
|
|
20
|
-
bytes mrsigner = 5;
|
|
21
|
-
repeated Hash imageHashes = 6;
|
|
22
|
-
}
|