Skip to content

Commit fe015a6

Browse files
committed
Added tests for public parameters.
Signed-off-by: Jesper Brynolf <[email protected]>
1 parent 7385272 commit fe015a6

File tree

5 files changed

+460
-6
lines changed

5 files changed

+460
-6
lines changed

tss-esapi/src/structures/tagged/parameters.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use std::convert::{TryFrom, TryInto};
1414
///
1515
/// # Details
1616
/// This corresponds to TPMT_PUBLIC_PARMS
17-
#[derive(Debug, Clone, Copy)]
17+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
1818
pub enum PublicParameters {
1919
Rsa(PublicRsaParameters),
2020
KeyedHash(PublicKeyedHashParameters),

tss-esapi/tests/integration_tests/common/tpms_types_equality_checks.rs

Lines changed: 81 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
1+
// Copyright 2021 Contributors to the Parsec project.
2+
// SPDX-License-Identifier: Apache-2.0
13
use tss_esapi::{
24
constants::tss::{
35
TPM2_ST_ATTEST_CERTIFY, TPM2_ST_ATTEST_COMMAND_AUDIT, TPM2_ST_ATTEST_CREATION,
46
TPM2_ST_ATTEST_NV, TPM2_ST_ATTEST_QUOTE, TPM2_ST_ATTEST_SESSION_AUDIT, TPM2_ST_ATTEST_TIME,
57
},
68
tss2_esys::{
79
TPMS_ALG_PROPERTY, TPMS_ATTEST, TPMS_CERTIFY_INFO, TPMS_CLOCK_INFO,
8-
TPMS_COMMAND_AUDIT_INFO, TPMS_CREATION_INFO, TPMS_NV_CERTIFY_INFO, TPMS_PCR_SELECTION,
9-
TPMS_QUOTE_INFO, TPMS_SESSION_AUDIT_INFO, TPMS_TAGGED_PCR_SELECT, TPMS_TAGGED_PROPERTY,
10-
TPMS_TIME_ATTEST_INFO, TPMS_TIME_INFO,
10+
TPMS_COMMAND_AUDIT_INFO, TPMS_CREATION_INFO, TPMS_ECC_PARMS, TPMS_KEYEDHASH_PARMS,
11+
TPMS_NV_CERTIFY_INFO, TPMS_PCR_SELECTION, TPMS_QUOTE_INFO, TPMS_RSA_PARMS,
12+
TPMS_SCHEME_ECDAA, TPMS_SCHEME_HASH, TPMS_SCHEME_HMAC, TPMS_SCHEME_XOR,
13+
TPMS_SESSION_AUDIT_INFO, TPMS_SYMCIPHER_PARMS, TPMS_TAGGED_PCR_SELECT,
14+
TPMS_TAGGED_PROPERTY, TPMS_TIME_ATTEST_INFO, TPMS_TIME_INFO,
1115
},
1216
};
1317

@@ -243,3 +247,77 @@ pub fn ensure_tpms_tagged_pcr_select_equality(
243247
"'pcrSelect' value TPMS_TAGGED_PCR_SELECT, mismatch between actual and expected"
244248
);
245249
}
250+
251+
pub fn ensure_tpms_rsa_parms_equality(expected: &TPMS_RSA_PARMS, actual: &TPMS_RSA_PARMS) {
252+
crate::common::ensure_tpmt_sym_def_object_equality(&expected.symmetric, &actual.symmetric);
253+
crate::common::ensure_tpmt_rsa_scheme_equality(&expected.scheme, &actual.scheme);
254+
assert_eq!(
255+
expected.keyBits, actual.keyBits,
256+
"'keyBits' value TPMS_RSA_PARMS, mismatch between actual and expected"
257+
);
258+
259+
assert_eq!(
260+
expected.exponent, actual.exponent,
261+
"'exponent' value TPMS_RSA_PARMS, mismatch between actual and expected"
262+
);
263+
}
264+
265+
pub fn ensure_tpms_scheme_hash_equality(expected: &TPMS_SCHEME_HASH, actual: &TPMS_SCHEME_HASH) {
266+
assert_eq!(
267+
expected.hashAlg, actual.hashAlg,
268+
"'hashAlg' value TPMS_SCHEME_HASH, mismatch between actual and expected"
269+
);
270+
}
271+
272+
pub fn ensure_tpms_ecc_parms_equality(expected: &TPMS_ECC_PARMS, actual: &TPMS_ECC_PARMS) {
273+
crate::common::ensure_tpmt_sym_def_object_equality(&expected.symmetric, &actual.symmetric);
274+
crate::common::ensure_tpmt_ecc_scheme_equality(&expected.scheme, &actual.scheme);
275+
assert_eq!(
276+
expected.curveID, actual.curveID,
277+
"'curveID' value TPMS_ECC_PARMS, mismatch between actual and expected"
278+
);
279+
crate::common::ensure_tpmt_kdf_scheme_equality(&expected.kdf, &actual.kdf);
280+
}
281+
282+
pub fn ensure_tpms_scheme_ecdaa_equality(expected: &TPMS_SCHEME_ECDAA, actual: &TPMS_SCHEME_ECDAA) {
283+
assert_eq!(
284+
expected.hashAlg, actual.hashAlg,
285+
"'hashAlg' value TPMS_SCHEME_ECDAA, mismatch between actual and expected"
286+
);
287+
assert_eq!(
288+
expected.count, actual.count,
289+
"'count' value TPMS_SCHEME_ECDAA, mismatch between actual and expected"
290+
);
291+
}
292+
293+
pub fn ensure_tpms_keyedhash_parms_equality(
294+
expected: &TPMS_KEYEDHASH_PARMS,
295+
actual: &TPMS_KEYEDHASH_PARMS,
296+
) {
297+
crate::common::ensure_tpmt_keyedhash_scheme_equality(&expected.scheme, &actual.scheme);
298+
}
299+
300+
pub fn ensure_tpms_scheme_xor_equality(expected: &TPMS_SCHEME_XOR, actual: &TPMS_SCHEME_XOR) {
301+
assert_eq!(
302+
expected.hashAlg, actual.hashAlg,
303+
"'hashAlg' value TPMS_SCHEME_XOR, mismatch between actual and expected"
304+
);
305+
assert_eq!(
306+
expected.kdf, actual.kdf,
307+
"'count' value TPMS_SCHEME_XOR, mismatch between actual and expected"
308+
);
309+
}
310+
311+
pub fn ensure_tpms_scheme_hmac_equality(expected: &TPMS_SCHEME_HMAC, actual: &TPMS_SCHEME_HMAC) {
312+
assert_eq!(
313+
expected.hashAlg, actual.hashAlg,
314+
"'hashAlg' value TPMS_SCHEME_HMAC, mismatch between actual and expected"
315+
);
316+
}
317+
318+
pub fn ensure_tpms_symcipher_parms_equality(
319+
expected: &TPMS_SYMCIPHER_PARMS,
320+
actual: &TPMS_SYMCIPHER_PARMS,
321+
) {
322+
crate::common::ensure_tpmt_sym_def_object_equality(&expected.sym, &actual.sym)
323+
}

tss-esapi/tests/integration_tests/common/tpmt_types_equality_checks.rs

Lines changed: 205 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
// Copyright 2021 Contributors to the Parsec project.
22
// SPDX-License-Identifier: Apache-2.0
33
use tss_esapi::{
4-
constants::tss::{TPM2_ALG_AES, TPM2_ALG_CAMELLIA, TPM2_ALG_NULL, TPM2_ALG_SM4, TPM2_ALG_XOR},
5-
tss2_esys::{TPMT_SYM_DEF, TPMT_SYM_DEF_OBJECT},
4+
constants::tss::{
5+
TPM2_ALG_AES, TPM2_ALG_CAMELLIA, TPM2_ALG_ECC, TPM2_ALG_ECDAA, TPM2_ALG_ECDH,
6+
TPM2_ALG_ECDSA, TPM2_ALG_ECMQV, TPM2_ALG_ECSCHNORR, TPM2_ALG_HMAC, TPM2_ALG_KDF1_SP800_108,
7+
TPM2_ALG_KDF1_SP800_56A, TPM2_ALG_KDF2, TPM2_ALG_KEYEDHASH, TPM2_ALG_MGF1, TPM2_ALG_NULL,
8+
TPM2_ALG_OAEP, TPM2_ALG_RSA, TPM2_ALG_RSAES, TPM2_ALG_RSAPSS, TPM2_ALG_RSASSA,
9+
TPM2_ALG_SM2, TPM2_ALG_SM4, TPM2_ALG_SYMCIPHER, TPM2_ALG_XOR,
10+
},
11+
tss2_esys::{
12+
TPMT_ECC_SCHEME, TPMT_KDF_SCHEME, TPMT_KEYEDHASH_SCHEME, TPMT_PUBLIC_PARMS,
13+
TPMT_RSA_SCHEME, TPMT_SYM_DEF, TPMT_SYM_DEF_OBJECT,
14+
},
615
};
716

817
pub fn ensure_tpmt_sym_def_equality(expected: &TPMT_SYM_DEF, actual: &TPMT_SYM_DEF) {
@@ -133,3 +142,197 @@ pub fn ensure_tpmt_sym_def_object_equality(
133142
}
134143
}
135144
}
145+
146+
pub fn ensure_tpmt_public_parms_equality(expected: &TPMT_PUBLIC_PARMS, actual: &TPMT_PUBLIC_PARMS) {
147+
assert_eq!(
148+
expected.type_, actual.type_,
149+
"'type_' value in TPMT_PUBLIC_PARMS, mismatch between actual and expected",
150+
);
151+
152+
match expected.type_ {
153+
TPM2_ALG_RSA => {
154+
let expected_rsa_parms = unsafe { &expected.parameters.rsaDetail };
155+
let actual_rsa_parms = unsafe { &actual.parameters.rsaDetail };
156+
crate::common::ensure_tpms_rsa_parms_equality(expected_rsa_parms, actual_rsa_parms);
157+
}
158+
TPM2_ALG_KEYEDHASH => {
159+
let expected_keyed_hash_parms = unsafe { &expected.parameters.keyedHashDetail };
160+
let actual_keyed_hash_parms = unsafe { &actual.parameters.keyedHashDetail };
161+
crate::common::ensure_tpms_keyedhash_parms_equality(
162+
expected_keyed_hash_parms,
163+
actual_keyed_hash_parms,
164+
);
165+
}
166+
TPM2_ALG_ECC => {
167+
let expected_ecc_parms = unsafe { &expected.parameters.eccDetail };
168+
let actual_ecc_parms = unsafe { &actual.parameters.eccDetail };
169+
crate::common::ensure_tpms_ecc_parms_equality(expected_ecc_parms, actual_ecc_parms);
170+
}
171+
TPM2_ALG_SYMCIPHER => {
172+
let expected_symcipher_parms = unsafe { &expected.parameters.symDetail };
173+
let actual_symcipher_parms = unsafe { &actual.parameters.symDetail };
174+
crate::common::ensure_tpms_symcipher_parms_equality(
175+
expected_symcipher_parms,
176+
actual_symcipher_parms,
177+
);
178+
}
179+
_ => {
180+
panic!("Invalid algorithm in TPMT_PUBLIC_PARMS");
181+
}
182+
}
183+
}
184+
185+
pub fn ensure_tpmt_rsa_scheme_equality(expected: &TPMT_RSA_SCHEME, actual: &TPMT_RSA_SCHEME) {
186+
assert_eq!(
187+
expected.scheme, actual.scheme,
188+
"'scheme' value in TPMT_RSA_SCHEME, mismatch between actual and expected",
189+
);
190+
191+
match expected.scheme {
192+
TPM2_ALG_RSASSA => {
193+
let expected_hash_scheme = unsafe { &expected.details.rsassa };
194+
let actual_hash_scheme = unsafe { &actual.details.rsassa };
195+
crate::common::ensure_tpms_scheme_hash_equality(
196+
expected_hash_scheme,
197+
actual_hash_scheme,
198+
);
199+
}
200+
TPM2_ALG_RSAES => {}
201+
TPM2_ALG_RSAPSS => {
202+
let expected_hash_scheme = unsafe { &expected.details.rsapss };
203+
let actual_hash_scheme = unsafe { &actual.details.rsapss };
204+
crate::common::ensure_tpms_scheme_hash_equality(
205+
expected_hash_scheme,
206+
actual_hash_scheme,
207+
);
208+
}
209+
TPM2_ALG_OAEP => {
210+
let expected_hash_scheme = unsafe { &expected.details.oaep };
211+
let actual_hash_scheme = unsafe { &actual.details.oaep };
212+
crate::common::ensure_tpms_scheme_hash_equality(
213+
expected_hash_scheme,
214+
actual_hash_scheme,
215+
);
216+
}
217+
TPM2_ALG_NULL => {}
218+
_ => panic!("Invalid algorithm in TPMT_RSA_SCHEME"),
219+
}
220+
}
221+
222+
pub fn ensure_tpmt_ecc_scheme_equality(expected: &TPMT_ECC_SCHEME, actual: &TPMT_ECC_SCHEME) {
223+
assert_eq!(
224+
expected.scheme, actual.scheme,
225+
"'scheme' value in TPMT_ECC_SCHEME, mismatch between actual and expected",
226+
);
227+
match expected.scheme {
228+
TPM2_ALG_ECDSA => {
229+
let expected_hash_scheme = unsafe { &expected.details.ecdsa };
230+
let actual_hash_scheme = unsafe { &actual.details.ecdsa };
231+
crate::common::ensure_tpms_scheme_hash_equality(
232+
expected_hash_scheme,
233+
actual_hash_scheme,
234+
);
235+
}
236+
TPM2_ALG_ECDH => {
237+
let expected_hash_scheme = unsafe { &expected.details.ecdh };
238+
let actual_hash_scheme = unsafe { &actual.details.ecdh };
239+
crate::common::ensure_tpms_scheme_hash_equality(
240+
expected_hash_scheme,
241+
actual_hash_scheme,
242+
);
243+
}
244+
TPM2_ALG_ECDAA => {
245+
let expected_ecdaa_scheme = unsafe { &expected.details.ecdaa };
246+
let actual_ecdaa_scheme = unsafe { &actual.details.ecdaa };
247+
crate::common::ensure_tpms_scheme_ecdaa_equality(
248+
expected_ecdaa_scheme,
249+
actual_ecdaa_scheme,
250+
);
251+
}
252+
TPM2_ALG_SM2 => {
253+
let expected_hash_scheme = unsafe { &expected.details.sm2 };
254+
let actual_hash_scheme = unsafe { &actual.details.sm2 };
255+
crate::common::ensure_tpms_scheme_hash_equality(
256+
expected_hash_scheme,
257+
actual_hash_scheme,
258+
);
259+
}
260+
TPM2_ALG_ECSCHNORR => {
261+
let expected_hash_scheme = unsafe { &expected.details.ecschnorr };
262+
let actual_hash_scheme = unsafe { &actual.details.ecschnorr };
263+
crate::common::ensure_tpms_scheme_hash_equality(
264+
expected_hash_scheme,
265+
actual_hash_scheme,
266+
);
267+
}
268+
TPM2_ALG_ECMQV => {
269+
let expected_hash_scheme = unsafe { &expected.details.ecmqv };
270+
let actual_hash_scheme = unsafe { &actual.details.ecmqv };
271+
crate::common::ensure_tpms_scheme_hash_equality(
272+
expected_hash_scheme,
273+
actual_hash_scheme,
274+
);
275+
}
276+
TPM2_ALG_NULL => {}
277+
_ => panic!("Invalid algorithm in TPMT_ECC_SCHEME"),
278+
}
279+
}
280+
281+
pub fn ensure_tpmt_keyedhash_scheme_equality(
282+
expected: &TPMT_KEYEDHASH_SCHEME,
283+
actual: &TPMT_KEYEDHASH_SCHEME,
284+
) {
285+
assert_eq!(
286+
expected.scheme, actual.scheme,
287+
"'scheme' value in TPMT_KEYEDHASH_SCHEME, mismatch between actual and expected",
288+
);
289+
match expected.scheme {
290+
TPM2_ALG_XOR => {
291+
let expected_xor_scheme = unsafe { &expected.details.exclusiveOr };
292+
let actual_xor_scheme = unsafe { &actual.details.exclusiveOr };
293+
crate::common::ensure_tpms_scheme_xor_equality(expected_xor_scheme, actual_xor_scheme);
294+
}
295+
TPM2_ALG_HMAC => {
296+
let expected_hmac_scheme = unsafe { &expected.details.hmac };
297+
let actual_hmac_scheme = unsafe { &actual.details.hmac };
298+
crate::common::ensure_tpms_scheme_hmac_equality(
299+
expected_hmac_scheme,
300+
actual_hmac_scheme,
301+
);
302+
}
303+
TPM2_ALG_NULL => {}
304+
_ => panic!("Invalid algorithm in TPMT_KEYEDHASH_SCHEME"),
305+
}
306+
}
307+
308+
pub fn ensure_tpmt_kdf_scheme_equality(expected: &TPMT_KDF_SCHEME, actual: &TPMT_KDF_SCHEME) {
309+
assert_eq!(
310+
expected.scheme, actual.scheme,
311+
"'scheme' value in TPMT_KDF_SCHEME, mismatch between actual and expected",
312+
);
313+
314+
match expected.scheme {
315+
TPM2_ALG_KDF1_SP800_56A => {
316+
let expected_scheme = unsafe { &expected.details.kdf1_sp800_56a };
317+
let actual_scheme = unsafe { &actual.details.kdf1_sp800_56a };
318+
crate::common::ensure_tpms_scheme_hash_equality(expected_scheme, actual_scheme);
319+
}
320+
TPM2_ALG_KDF2 => {
321+
let expected_scheme = unsafe { &expected.details.kdf2 };
322+
let actual_scheme = unsafe { &actual.details.kdf2 };
323+
crate::common::ensure_tpms_scheme_hash_equality(expected_scheme, actual_scheme);
324+
}
325+
TPM2_ALG_KDF1_SP800_108 => {
326+
let expected_scheme = unsafe { &expected.details.kdf1_sp800_108 };
327+
let actual_scheme = unsafe { &actual.details.kdf1_sp800_108 };
328+
crate::common::ensure_tpms_scheme_hash_equality(expected_scheme, actual_scheme);
329+
}
330+
TPM2_ALG_MGF1 => {
331+
let expected_scheme = unsafe { &expected.details.mgf1 };
332+
let actual_scheme = unsafe { &actual.details.mgf1 };
333+
crate::common::ensure_tpms_scheme_hash_equality(expected_scheme, actual_scheme);
334+
}
335+
TPM2_ALG_NULL => {}
336+
_ => panic!("Invalid algorithm in TPMT_KDF_SCHEME"),
337+
}
338+
}

tss-esapi/tests/integration_tests/structures_tests/tagged_tests/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// Copyright 2021 Contributors to the Parsec project.
22
// SPDX-License-Identifier: Apache-2.0
3+
mod parameters_tests;
34
mod public;
45
mod public_ecc_parameters_tests;
56
mod public_rsa_exponent_tests;

0 commit comments

Comments
 (0)