@super-protocol/addons-tee 0.9.2 → 0.9.4

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 (32) hide show
  1. package/bindings/amd-sev-snp-napi-rs/amd-sev-snp-napi-rs.linux-x64-gnu.node +0 -0
  2. package/bindings/amd-sev-snp-napi-rs/index.d.ts +27 -0
  3. package/bindings/amd-sev-snp-napi-rs/index.js +12 -1
  4. package/bindings/sp-sev/.github/workflows/lint.yml +3 -3
  5. package/bindings/sp-sev/.github/workflows/test.yml +163 -2
  6. package/bindings/sp-sev/Cargo.lock +521 -281
  7. package/bindings/sp-sev/Cargo.toml +11 -11
  8. package/bindings/sp-sev/tests/api.rs +9 -6
  9. package/bindings/sp-sev/tests/certs.rs +4 -5
  10. package/bindings/sp-sev/tests/guest.rs +2 -1
  11. package/bindings/sp-sev/tests/id-block.rs +9 -5
  12. package/bindings/sp-sev/tests/snp_launch.rs +1 -1
  13. package/bindings/utils/virtee/libsev.so +0 -0
  14. package/bindings/utils/virtee/snpguest +0 -0
  15. package/dist/proto/AmdSevSnp.d.ts +194 -0
  16. package/dist/proto/AmdSevSnp.js +363 -0
  17. package/dist/sgx-native-module/dcap-quote-verify.service.js +22 -3
  18. package/dist/sgx-native-module/index.d.ts +1 -0
  19. package/dist/sgx-native-module/index.js +2 -1
  20. package/dist/sgx-native-module/sev-snp-mrenclave.d.ts +2 -2
  21. package/dist/sgx-native-module/sev-snp-mrenclave.js +46 -11
  22. package/dist/sgx-native-module/sev-snp-schema.d.ts +22 -0
  23. package/dist/sgx-native-module/sev-snp-schema.js +24 -0
  24. package/dist/sgx-native-module/sev-snp.d.ts +20 -32
  25. package/dist/sgx-native-module/sev-snp.js +126 -177
  26. package/dto/src/AmdSevSnp.proto +31 -0
  27. package/dto/src/Compression.proto +11 -0
  28. package/dto/src/Hash.proto +6 -0
  29. package/dto/src/OrderReport.proto +21 -0
  30. package/dto/src/TRI.proto +22 -0
  31. package/dto/src/TeeDeviceInfo.proto +46 -0
  32. package/package.json +8 -3
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "sev"
3
- version = "5.0.0"
3
+ version = "6.2.1"
4
4
  authors = [
5
5
  "Nathaniel McCallum <npmccallum@redhat.com>",
6
6
  "The VirTEE Project Developers",
@@ -20,7 +20,7 @@ categories = [
20
20
  "hardware-support",
21
21
  ]
22
22
  exclude = [".gitignore", ".github/*"]
23
- rust-version = "1.80.0"
23
+ rust-version = "1.85.0"
24
24
 
25
25
  [badges]
26
26
  # See https://doc.rust-lang.org/cargo/reference/manifest.html#the-badges-section
@@ -45,20 +45,20 @@ snp = []
45
45
  crypto_nossl = ["dep:p384", "dep:rsa", "dep:sha2", "dep:x509-cert"]
46
46
 
47
47
  [target.'cfg(target_os = "linux")'.dependencies]
48
- iocuddle = "0.1"
48
+ iocuddle = "^0.1"
49
49
 
50
50
  [dependencies]
51
- openssl = { version = "0.10", optional = true }
51
+ openssl = { version = "0.10", optional = true, features = ["vendored"] }
52
52
  serde = { version = "1.0", features = ["derive"] }
53
53
  serde_bytes = "0.11"
54
- bitflags = "1.2"
54
+ bitflags = "2.9.0"
55
55
  codicon = "3.0"
56
- dirs = "5.0"
56
+ dirs = "^6.0"
57
57
  serde-big-array = "0.5.1"
58
58
  static_assertions = "^1.1.0"
59
- bitfield = "^0.15"
59
+ bitfield = "^0.19"
60
60
  uuid = { version = "^1.11", features = ["serde"] }
61
- bincode = "^1.3"
61
+ bincode = { version = "^2.0", features = ["serde"] }
62
62
  hex = "0.4.3"
63
63
  libc = "0.2.161"
64
64
  lazy_static = "1.4.0"
@@ -69,12 +69,12 @@ x509-cert = { version = "0.2.5", optional = true }
69
69
  byteorder = "1.4.3"
70
70
  base64 = "0.22.1"
71
71
  rdrand = { version = "^0.8", optional = true }
72
- reqwest = { version="0.11.10", features = ["blocking"], optional = true }
73
- tokio = {version = "1.29.1", features =["rt-multi-thread"], optional = true }
72
+ reqwest = { version = "^0.12", features = ["blocking"], optional = true }
73
+ tokio = { version = "1.29.1", features = ["rt-multi-thread"], optional = true }
74
74
 
75
75
  [target.'cfg(target_os = "linux")'.dev-dependencies]
76
76
  kvm-ioctls = ">=0.16"
77
+ kvm-bindings = "^0.11"
77
78
 
78
79
  [dev-dependencies]
79
- kvm-bindings = ">=0.9.1"
80
80
  serial_test = "3.0"
@@ -1,13 +1,15 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
 
3
3
  #[cfg(all(feature = "sev", target_os = "linux"))]
4
-
5
4
  mod sev {
6
5
  #[cfg(feature = "dangerous_hw_tests")]
7
6
  use serial_test::serial;
8
7
  #[cfg(feature = "dangerous_hw_tests")]
9
8
  use sev::cached_chain;
10
- use sev::{certs::sev::sev::Usage, firmware::host::Firmware, Build, Version};
9
+ use sev::{
10
+ certs::sev::sev::Usage,
11
+ firmware::host::{Build, Firmware, Version},
12
+ };
11
13
 
12
14
  #[cfg(feature = "dangerous_hw_tests")]
13
15
  #[cfg_attr(not(host), ignore)]
@@ -147,8 +149,8 @@ mod snp {
147
149
  reported tcb tee version: {}
148
150
  reported tcb bootloader version: {}
149
151
  state: {}",
150
- status.version.major,
151
- status.version.minor,
152
+ status.version.0,
153
+ status.version.1,
152
154
  status.build_id,
153
155
  status.guest_count,
154
156
  status.platform_tcb_version.microcode,
@@ -174,8 +176,9 @@ mod snp {
174
176
  #[cfg_attr(not(all(host, feature = "dangerous_hw_tests")), ignore)]
175
177
  #[test]
176
178
  #[serial]
177
- fn set_config() {
179
+ fn set_config_generation() {
178
180
  let mut fw: Firmware = Firmware::open().unwrap();
181
+
179
182
  fw.snp_set_config(Config::default()).unwrap();
180
183
  }
181
184
 
@@ -184,7 +187,7 @@ mod snp {
184
187
  #[serial]
185
188
  fn test_host_fw_error() {
186
189
  let mut fw: Firmware = Firmware::open().unwrap();
187
- let invalid_config = Config::new(TcbVersion::new(100, 100, 100, 100), MaskId(31));
190
+ let invalid_config = Config::new(TcbVersion::new(None, 100, 100, 100, 100), MaskId(31));
188
191
  let fw_error = fw.snp_set_config(invalid_config).unwrap_err().to_string();
189
192
  assert_eq!(fw_error, "Firmware Error Encountered: Known SEV FW Error: Status Code: 0x16: Given parameter is invalid.")
190
193
  }
@@ -24,6 +24,7 @@ mod sev {
24
24
 
25
25
  #[cfg(all(feature = "snp", any(feature = "openssl", feature = "crypto_nossl")))]
26
26
  mod snp {
27
+
27
28
  use sev::certs::snp::{builtin::milan, ca, Certificate, Chain, Verifiable};
28
29
 
29
30
  const TEST_MILAN_VCEK_DER: &[u8] = include_bytes!("certs_data/vcek_milan.der");
@@ -85,8 +86,7 @@ mod snp {
85
86
  let chain = Chain { ca, vek: vcek };
86
87
 
87
88
  let report_bytes = hex::decode(TEST_MILAN_ATTESTATION_REPORT).unwrap();
88
- let report: AttestationReport =
89
- unsafe { std::ptr::read(report_bytes.as_ptr() as *const _) };
89
+ let report: AttestationReport = AttestationReport::from_bytes(&report_bytes).unwrap();
90
90
 
91
91
  assert_eq!((&chain, &report).verify().ok(), Some(()));
92
92
  }
@@ -104,9 +104,8 @@ mod snp {
104
104
  let chain = Chain { ca, vek: vcek };
105
105
 
106
106
  let mut report_bytes = hex::decode(TEST_MILAN_ATTESTATION_REPORT).unwrap();
107
- report_bytes[0] ^= 0x80;
108
- let report: AttestationReport =
109
- unsafe { std::ptr::read(report_bytes.as_ptr() as *const _) };
107
+ report_bytes[21] ^= 0x80;
108
+ let report = AttestationReport::from_bytes(&report_bytes).unwrap();
110
109
 
111
110
  assert_eq!((&chain, &report).verify().ok(), None);
112
111
  }
@@ -27,7 +27,7 @@ fn get_ext_report() {
27
27
  #[cfg_attr(not(guest), ignore)]
28
28
  #[test]
29
29
  fn get_derived_key() {
30
- let derived_key = DerivedKey::new(false, GuestFieldSelect(1), 0, 0, 0);
30
+ let derived_key = DerivedKey::new(false, GuestFieldSelect(1), 0, 0, 0, None);
31
31
 
32
32
  let mut fw = Firmware::open().unwrap();
33
33
 
@@ -43,6 +43,7 @@ fn guest_fw_error() {
43
43
  0xFFFFFFFF,
44
44
  0xFFFFFFFF,
45
45
  0xFFFFFFFFFFFFFFFF,
46
+ Some(0xFFFFFFFFFFFFFFFF),
46
47
  );
47
48
 
48
49
  let mut fw = Firmware::open().unwrap();
@@ -18,6 +18,8 @@ use sev::measurement::{
18
18
  snp::SnpLaunchDigest,
19
19
  };
20
20
 
21
+ use sev::BINCODE_CFG;
22
+
21
23
  // Testing that the appropriate id-block and key digests are being generated.
22
24
  #[test]
23
25
  fn test_id_block_and_key_digests() {
@@ -45,8 +47,8 @@ fn test_id_block_and_key_digests() {
45
47
  .unwrap();
46
48
 
47
49
  // Converting ID-block and key digests into BASE64
48
- let id_block_string =
49
- general_purpose::STANDARD.encode(bincode::serialize(&block_calculations.id_block).unwrap());
50
+ let id_block_string = general_purpose::STANDARD
51
+ .encode(bincode::encode_to_vec(block_calculations.id_block, BINCODE_CFG).unwrap());
50
52
  let id_key_digest_string = general_purpose::STANDARD
51
53
  .encode::<Vec<u8>>(block_calculations.id_key_digest.try_into().unwrap());
52
54
  let auth_key_digest_string = general_purpose::STANDARD
@@ -136,7 +138,8 @@ fn test_auth_block_generation() {
136
138
  let mut id_sig_file = fs::File::open("./tests/measurement/test_id_sig.bin").unwrap();
137
139
  let mut id_block_bytes = Vec::new();
138
140
  id_sig_file.read_to_end(&mut id_block_bytes).unwrap();
139
- let id_block_sig: SevEcdsaSig = bincode::deserialize(&id_block_bytes).unwrap();
141
+ let (id_block_sig, _): (SevEcdsaSig, usize) =
142
+ bincode::decode_from_slice(&id_block_bytes, BINCODE_CFG).unwrap();
140
143
 
141
144
  // Get author private test key from pem
142
145
  let author_ec_priv_key = load_priv_key(auth_path).unwrap();
@@ -148,7 +151,8 @@ fn test_auth_block_generation() {
148
151
  let mut auth_sig_file = fs::File::open("./tests/measurement/test_auth_sig.bin").unwrap();
149
152
  let mut auth_block_bytes = Vec::new();
150
153
  auth_sig_file.read_to_end(&mut auth_block_bytes).unwrap();
151
- let auth_block_sig: SevEcdsaSig = bincode::deserialize(&auth_block_bytes).unwrap();
154
+ let (auth_block_sig, _): (SevEcdsaSig, usize) =
155
+ bincode::decode_from_slice(&auth_block_bytes, BINCODE_CFG).unwrap();
152
156
 
153
157
  let auth_block = IdAuth::new(
154
158
  None,
@@ -160,7 +164,7 @@ fn test_auth_block_generation() {
160
164
  );
161
165
 
162
166
  // Generate Generate auth_block string
163
- let id_auth_bytes = bincode::serialize(&auth_block).unwrap();
167
+ let id_auth_bytes = bincode::encode_to_vec(auth_block, BINCODE_CFG).unwrap();
164
168
  let id_auth_str = general_purpose::STANDARD.encode(id_auth_bytes);
165
169
 
166
170
  // Comparing auth_blocks
@@ -71,7 +71,7 @@ fn snp_launch_test() {
71
71
  let launcher = Launcher::new(vm_fd, sev).unwrap();
72
72
 
73
73
  let mut policy = GuestPolicy(0);
74
- policy.set_smt_allowed(1);
74
+ policy.set_smt_allowed(true);
75
75
  let start = Start::new(policy, [0; 16]);
76
76
 
77
77
  let mut launcher = launcher.start(start).unwrap();
Binary file
Binary file
@@ -0,0 +1,194 @@
1
+ import _m0 from "protobufjs/minimal.js";
2
+ export declare const protobufPackage = "";
3
+ export declare enum SevSNPCertType {
4
+ ARK = 0,
5
+ ASK = 1,
6
+ VCEK = 2
7
+ }
8
+ export declare function sevSNPCertTypeFromJSON(object: any): SevSNPCertType;
9
+ export declare function sevSNPCertTypeToJSON(object: SevSNPCertType): string;
10
+ export declare enum SevSnpCertificateFormat {
11
+ PEM = 0,
12
+ DER = 1
13
+ }
14
+ export declare function sevSnpCertificateFormatFromJSON(object: any): SevSnpCertificateFormat;
15
+ export declare function sevSnpCertificateFormatToJSON(object: SevSnpCertificateFormat): string;
16
+ export interface SnpCert {
17
+ type: SevSNPCertType;
18
+ cert: Uint8Array;
19
+ format: SevSnpCertificateFormat;
20
+ }
21
+ export interface SNPReport {
22
+ rawReport: Uint8Array;
23
+ cpuSig: number;
24
+ cores: number;
25
+ cmdLineHash: Uint8Array;
26
+ build: string;
27
+ }
28
+ export interface SNPReportWithChain {
29
+ snpReport: SNPReport | undefined;
30
+ certs: SnpCert[];
31
+ }
32
+ export declare const SnpCert: {
33
+ encode(message: SnpCert, writer?: _m0.Writer): _m0.Writer;
34
+ decode(input: _m0.Reader | Uint8Array, length?: number): SnpCert;
35
+ fromJSON(object: any): SnpCert;
36
+ toJSON(message: SnpCert): unknown;
37
+ create<I extends {
38
+ type?: SevSNPCertType | undefined;
39
+ cert?: Uint8Array | undefined;
40
+ format?: SevSnpCertificateFormat | undefined;
41
+ } & {
42
+ type?: SevSNPCertType | undefined;
43
+ cert?: Uint8Array | undefined;
44
+ format?: SevSnpCertificateFormat | undefined;
45
+ } & { [K in Exclude<keyof I, keyof SnpCert>]: never; }>(base?: I | undefined): SnpCert;
46
+ fromPartial<I_1 extends {
47
+ type?: SevSNPCertType | undefined;
48
+ cert?: Uint8Array | undefined;
49
+ format?: SevSnpCertificateFormat | undefined;
50
+ } & {
51
+ type?: SevSNPCertType | undefined;
52
+ cert?: Uint8Array | undefined;
53
+ format?: SevSnpCertificateFormat | undefined;
54
+ } & { [K_1 in Exclude<keyof I_1, keyof SnpCert>]: never; }>(object: I_1): SnpCert;
55
+ };
56
+ export declare const SNPReport: {
57
+ encode(message: SNPReport, writer?: _m0.Writer): _m0.Writer;
58
+ decode(input: _m0.Reader | Uint8Array, length?: number): SNPReport;
59
+ fromJSON(object: any): SNPReport;
60
+ toJSON(message: SNPReport): unknown;
61
+ create<I extends {
62
+ rawReport?: Uint8Array | undefined;
63
+ cpuSig?: number | undefined;
64
+ cores?: number | undefined;
65
+ cmdLineHash?: Uint8Array | undefined;
66
+ build?: string | undefined;
67
+ } & {
68
+ rawReport?: Uint8Array | undefined;
69
+ cpuSig?: number | undefined;
70
+ cores?: number | undefined;
71
+ cmdLineHash?: Uint8Array | undefined;
72
+ build?: string | undefined;
73
+ } & { [K in Exclude<keyof I, keyof SNPReport>]: never; }>(base?: I | undefined): SNPReport;
74
+ fromPartial<I_1 extends {
75
+ rawReport?: Uint8Array | undefined;
76
+ cpuSig?: number | undefined;
77
+ cores?: number | undefined;
78
+ cmdLineHash?: Uint8Array | undefined;
79
+ build?: string | undefined;
80
+ } & {
81
+ rawReport?: Uint8Array | undefined;
82
+ cpuSig?: number | undefined;
83
+ cores?: number | undefined;
84
+ cmdLineHash?: Uint8Array | undefined;
85
+ build?: string | undefined;
86
+ } & { [K_1 in Exclude<keyof I_1, keyof SNPReport>]: never; }>(object: I_1): SNPReport;
87
+ };
88
+ export declare const SNPReportWithChain: {
89
+ encode(message: SNPReportWithChain, writer?: _m0.Writer): _m0.Writer;
90
+ decode(input: _m0.Reader | Uint8Array, length?: number): SNPReportWithChain;
91
+ fromJSON(object: any): SNPReportWithChain;
92
+ toJSON(message: SNPReportWithChain): unknown;
93
+ create<I extends {
94
+ snpReport?: {
95
+ rawReport?: Uint8Array | undefined;
96
+ cpuSig?: number | undefined;
97
+ cores?: number | undefined;
98
+ cmdLineHash?: Uint8Array | undefined;
99
+ build?: string | undefined;
100
+ } | undefined;
101
+ certs?: {
102
+ type?: SevSNPCertType | undefined;
103
+ cert?: Uint8Array | undefined;
104
+ format?: SevSnpCertificateFormat | undefined;
105
+ }[] | undefined;
106
+ } & {
107
+ snpReport?: ({
108
+ rawReport?: Uint8Array | undefined;
109
+ cpuSig?: number | undefined;
110
+ cores?: number | undefined;
111
+ cmdLineHash?: Uint8Array | undefined;
112
+ build?: string | undefined;
113
+ } & {
114
+ rawReport?: Uint8Array | undefined;
115
+ cpuSig?: number | undefined;
116
+ cores?: number | undefined;
117
+ cmdLineHash?: Uint8Array | undefined;
118
+ build?: string | undefined;
119
+ } & { [K in Exclude<keyof I["snpReport"], keyof SNPReport>]: never; }) | undefined;
120
+ certs?: ({
121
+ type?: SevSNPCertType | undefined;
122
+ cert?: Uint8Array | undefined;
123
+ format?: SevSnpCertificateFormat | undefined;
124
+ }[] & ({
125
+ type?: SevSNPCertType | undefined;
126
+ cert?: Uint8Array | undefined;
127
+ format?: SevSnpCertificateFormat | undefined;
128
+ } & {
129
+ type?: SevSNPCertType | undefined;
130
+ cert?: Uint8Array | undefined;
131
+ format?: SevSnpCertificateFormat | undefined;
132
+ } & { [K_1 in Exclude<keyof I["certs"][number], keyof SnpCert>]: never; })[] & { [K_2 in Exclude<keyof I["certs"], keyof {
133
+ type?: SevSNPCertType | undefined;
134
+ cert?: Uint8Array | undefined;
135
+ format?: SevSnpCertificateFormat | undefined;
136
+ }[]>]: never; }) | undefined;
137
+ } & { [K_3 in Exclude<keyof I, keyof SNPReportWithChain>]: never; }>(base?: I | undefined): SNPReportWithChain;
138
+ fromPartial<I_1 extends {
139
+ snpReport?: {
140
+ rawReport?: Uint8Array | undefined;
141
+ cpuSig?: number | undefined;
142
+ cores?: number | undefined;
143
+ cmdLineHash?: Uint8Array | undefined;
144
+ build?: string | undefined;
145
+ } | undefined;
146
+ certs?: {
147
+ type?: SevSNPCertType | undefined;
148
+ cert?: Uint8Array | undefined;
149
+ format?: SevSnpCertificateFormat | undefined;
150
+ }[] | undefined;
151
+ } & {
152
+ snpReport?: ({
153
+ rawReport?: Uint8Array | undefined;
154
+ cpuSig?: number | undefined;
155
+ cores?: number | undefined;
156
+ cmdLineHash?: Uint8Array | undefined;
157
+ build?: string | undefined;
158
+ } & {
159
+ rawReport?: Uint8Array | undefined;
160
+ cpuSig?: number | undefined;
161
+ cores?: number | undefined;
162
+ cmdLineHash?: Uint8Array | undefined;
163
+ build?: string | undefined;
164
+ } & { [K_4 in Exclude<keyof I_1["snpReport"], keyof SNPReport>]: never; }) | undefined;
165
+ certs?: ({
166
+ type?: SevSNPCertType | undefined;
167
+ cert?: Uint8Array | undefined;
168
+ format?: SevSnpCertificateFormat | undefined;
169
+ }[] & ({
170
+ type?: SevSNPCertType | undefined;
171
+ cert?: Uint8Array | undefined;
172
+ format?: SevSnpCertificateFormat | undefined;
173
+ } & {
174
+ type?: SevSNPCertType | undefined;
175
+ cert?: Uint8Array | undefined;
176
+ format?: SevSnpCertificateFormat | undefined;
177
+ } & { [K_5 in Exclude<keyof I_1["certs"][number], keyof SnpCert>]: never; })[] & { [K_6 in Exclude<keyof I_1["certs"], keyof {
178
+ type?: SevSNPCertType | undefined;
179
+ cert?: Uint8Array | undefined;
180
+ format?: SevSnpCertificateFormat | undefined;
181
+ }[]>]: never; }) | undefined;
182
+ } & { [K_7 in Exclude<keyof I_1, keyof SNPReportWithChain>]: never; }>(object: I_1): SNPReportWithChain;
183
+ };
184
+ type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
185
+ export type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
186
+ [K in keyof T]?: DeepPartial<T[K]>;
187
+ } : Partial<T>;
188
+ type KeysOfUnion<T> = T extends T ? keyof T : never;
189
+ export type Exact<P, I extends P> = P extends Builtin ? P : P & {
190
+ [K in keyof P]: Exact<P[K], I[K]>;
191
+ } & {
192
+ [K in Exclude<keyof I, KeysOfUnion<P>>]: never;
193
+ };
194
+ export {};