@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.
Files changed (95) hide show
  1. package/bindings/amd-sev-snp-napi-rs/amd-sev-snp-napi-rs.linux-x64-gnu.node +0 -0
  2. package/bindings/nvidia-native/README.md +174 -0
  3. package/bindings/nvidia-native/build/Release/libnvat.so.1.1.0 +0 -0
  4. package/bindings/nvidia-native/build/Release/nvidia_native.node +0 -0
  5. package/bindings/nvidia-native/package.json +26 -0
  6. package/bindings/nvidia-native/postinstall.js +40 -0
  7. package/bindings/sgx-native/build/Release/sgx_native.node +0 -0
  8. package/bindings/usr/lib/node_modules/node-addon-api/node_api.Makefile +6 -0
  9. package/bindings/usr/lib/node_modules/node-addon-api/nothing.target.mk +159 -0
  10. package/bindings/utils/virtee/libsev.so +0 -0
  11. package/bindings/utils/virtee/snpguest +0 -0
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.js +3 -2
  14. package/dist/nvidia-native-module/nvidia-attestation.d.ts +146 -0
  15. package/dist/nvidia-native-module/nvidia-attestation.js +374 -0
  16. package/dist/nvidia-native-module/nvidia-debug-state-policy.rego +45 -0
  17. package/dist/nvidia-native-module/nvidia-detailed-policy.rego +205 -0
  18. package/package.json +4 -2
  19. package/.editorconfig +0 -15
  20. package/.eslintrc.json +0 -61
  21. package/.prettierignore +0 -3
  22. package/.prettierrc +0 -15
  23. package/bindings/amd-sev-snp-napi-rs/package-lock.json +0 -40
  24. package/bindings/sgx-native/package-lock.json +0 -23
  25. package/bindings/sp-sev/.github/auto_assign-issues.yml +0 -5
  26. package/bindings/sp-sev/.github/auto_assign.yml +0 -21
  27. package/bindings/sp-sev/.github/dependabot.yml +0 -6
  28. package/bindings/sp-sev/.github/workflows/dco.yml +0 -10
  29. package/bindings/sp-sev/.github/workflows/lint.yml +0 -56
  30. package/bindings/sp-sev/.github/workflows/test.yml +0 -215
  31. package/bindings/sp-sev/.rustfmt.toml +0 -2
  32. package/bindings/sp-sev/CODEOWNERS +0 -1
  33. package/bindings/sp-sev/Cargo.lock +0 -2461
  34. package/bindings/sp-sev/Cargo.toml +0 -80
  35. package/bindings/sp-sev/LICENSE +0 -201
  36. package/bindings/sp-sev/README.md +0 -82
  37. package/bindings/sp-sev/build.rs +0 -17
  38. package/bindings/sp-sev/docs/attestation/README.md +0 -239
  39. package/bindings/sp-sev/docs/attestation/certchain.dot +0 -14
  40. package/bindings/sp-sev/docs/attestation/certchain.dot.png +0 -0
  41. package/bindings/sp-sev/docs/attestation/prerequisites.md +0 -6
  42. package/bindings/sp-sev/docs/attestation/process.msc +0 -60
  43. package/bindings/sp-sev/docs/attestation/process.msc.png +0 -0
  44. package/bindings/sp-sev/docs/attestation/protections.md +0 -53
  45. package/bindings/sp-sev/package-version.py +0 -11
  46. package/bindings/sp-sev/tests/api.rs +0 -194
  47. package/bindings/sp-sev/tests/certs.rs +0 -142
  48. package/bindings/sp-sev/tests/certs_data/cert_chain_milan +0 -74
  49. package/bindings/sp-sev/tests/certs_data/cert_chain_turin +0 -74
  50. package/bindings/sp-sev/tests/certs_data/report_milan.hex +0 -1
  51. package/bindings/sp-sev/tests/certs_data/vcek_milan.der +0 -0
  52. package/bindings/sp-sev/tests/certs_data/vcek_turin.der +0 -0
  53. package/bindings/sp-sev/tests/guest.rs +0 -57
  54. package/bindings/sp-sev/tests/id-block.rs +0 -172
  55. package/bindings/sp-sev/tests/measurement/ovmf_AmdSev_suffix.bin +0 -0
  56. package/bindings/sp-sev/tests/measurement/ovmf_OvmfX64_suffix.bin +0 -0
  57. package/bindings/sp-sev/tests/measurement/test_auth_block.bin +0 -0
  58. package/bindings/sp-sev/tests/measurement/test_auth_key.pem +0 -6
  59. package/bindings/sp-sev/tests/measurement/test_auth_sig.bin +0 -0
  60. package/bindings/sp-sev/tests/measurement/test_id_key.pem +0 -6
  61. package/bindings/sp-sev/tests/measurement/test_id_sig.bin +0 -0
  62. package/bindings/sp-sev/tests/measurement.rs +0 -510
  63. package/bindings/sp-sev/tests/naples/ark.cert.bad +0 -0
  64. package/bindings/sp-sev/tests/naples/ark.cert.sig +0 -0
  65. package/bindings/sp-sev/tests/naples/ark.rs +0 -38
  66. package/bindings/sp-sev/tests/naples/ask.rs +0 -29
  67. package/bindings/sp-sev/tests/naples/cek.cert +0 -0
  68. package/bindings/sp-sev/tests/naples/cek.rs +0 -30
  69. package/bindings/sp-sev/tests/naples/mod.rs +0 -20
  70. package/bindings/sp-sev/tests/naples/oca.cert +0 -0
  71. package/bindings/sp-sev/tests/naples/oca.rs +0 -45
  72. package/bindings/sp-sev/tests/naples/pdh.cert +0 -0
  73. package/bindings/sp-sev/tests/naples/pdh.rs +0 -28
  74. package/bindings/sp-sev/tests/naples/pek.cert +0 -0
  75. package/bindings/sp-sev/tests/naples/pek.rs +0 -32
  76. package/bindings/sp-sev/tests/rome/ark.rs +0 -33
  77. package/bindings/sp-sev/tests/rome/ask.rs +0 -29
  78. package/bindings/sp-sev/tests/rome/cek.cert +0 -0
  79. package/bindings/sp-sev/tests/rome/cek.rs +0 -29
  80. package/bindings/sp-sev/tests/rome/mod.rs +0 -16
  81. package/bindings/sp-sev/tests/rome/oca.cert +0 -0
  82. package/bindings/sp-sev/tests/rome/oca.rs +0 -45
  83. package/bindings/sp-sev/tests/rome/pdh.cert +0 -0
  84. package/bindings/sp-sev/tests/rome/pdh.rs +0 -28
  85. package/bindings/sp-sev/tests/rome/pek.cert +0 -0
  86. package/bindings/sp-sev/tests/rome/pek.rs +0 -32
  87. package/bindings/sp-sev/tests/session.rs +0 -39
  88. package/bindings/sp-sev/tests/sev_launch.rs +0 -120
  89. package/bindings/sp-sev/tests/snp_launch.rs +0 -108
  90. package/dto/src/AmdSevSnp.proto +0 -31
  91. package/dto/src/Compression.proto +0 -11
  92. package/dto/src/Hash.proto +0 -6
  93. package/dto/src/OrderReport.proto +0 -21
  94. package/dto/src/TRI.proto +0 -22
  95. 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
- }
@@ -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(&regs).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(&regs).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
- }
@@ -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
- }
@@ -1,11 +0,0 @@
1
- syntax = "proto3";
2
-
3
- message Compression {
4
- enum TYPE {
5
- Uncompressed = 0;
6
- GZIP = 1;
7
- }
8
-
9
- TYPE type = 1;
10
- bytes data = 2;
11
- }
@@ -1,6 +0,0 @@
1
- syntax = "proto3";
2
-
3
- message Hash {
4
- string algo = 1;
5
- bytes hash = 2;
6
- }
@@ -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
- }