Skip to content

Commit 7385272

Browse files
committed
Adds tests for SymmtericDefinitionObject.
Signed-off-by: Jesper Brynolf <[email protected]>
1 parent 5fb2db7 commit 7385272

File tree

3 files changed

+224
-1
lines changed

3 files changed

+224
-1
lines changed

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

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// SPDX-License-Identifier: Apache-2.0
33
use tss_esapi::{
44
constants::tss::{TPM2_ALG_AES, TPM2_ALG_CAMELLIA, TPM2_ALG_NULL, TPM2_ALG_SM4, TPM2_ALG_XOR},
5-
tss2_esys::TPMT_SYM_DEF,
5+
tss2_esys::{TPMT_SYM_DEF, TPMT_SYM_DEF_OBJECT},
66
};
77

88
pub fn ensure_tpmt_sym_def_equality(expected: &TPMT_SYM_DEF, actual: &TPMT_SYM_DEF) {
@@ -71,3 +71,65 @@ pub fn ensure_tpmt_sym_def_equality(expected: &TPMT_SYM_DEF, actual: &TPMT_SYM_D
7171
}
7272
}
7373
}
74+
75+
pub fn ensure_tpmt_sym_def_object_equality(
76+
expected: &TPMT_SYM_DEF_OBJECT,
77+
actual: &TPMT_SYM_DEF_OBJECT,
78+
) {
79+
assert_eq!(
80+
expected.algorithm, actual.algorithm,
81+
"'algorithm' value in TPMT_SYM_DEF_OBJECT, mismatch between actual and expected",
82+
);
83+
84+
match expected.algorithm {
85+
TPM2_ALG_AES => {
86+
let expected_key_bits = unsafe { expected.keyBits.aes };
87+
let expected_mode = unsafe { expected.mode.aes };
88+
let actual_key_bits = unsafe { actual.keyBits.aes };
89+
let actual_mode = unsafe { actual.mode.aes };
90+
assert_eq!(
91+
expected_key_bits, actual_key_bits,
92+
"'keyBits' value in TPMT_SYM_DEF_OBJECT, mismatch between actual and expected",
93+
);
94+
95+
assert_eq!(
96+
expected_mode, actual_mode,
97+
"'mode' value in TPMT_SYM_DEF_OBJECT, mismatch between actual and expected",
98+
);
99+
}
100+
TPM2_ALG_SM4 => {
101+
let expected_key_bits = unsafe { expected.keyBits.sm4 };
102+
let expected_mode = unsafe { expected.mode.sm4 };
103+
let actual_key_bits = unsafe { actual.keyBits.sm4 };
104+
let actual_mode = unsafe { actual.mode.sm4 };
105+
assert_eq!(
106+
expected_key_bits, actual_key_bits,
107+
"'keyBits' value in TPMT_SYM_DEF_OBJECT, mismatch between actual and expected",
108+
);
109+
110+
assert_eq!(
111+
expected_mode, actual_mode,
112+
"'mode' value in TPMT_SYM_DEF_OBJECT, mismatch between actual and expected",
113+
);
114+
}
115+
TPM2_ALG_CAMELLIA => {
116+
let expected_key_bits = unsafe { expected.keyBits.camellia };
117+
let expected_mode = unsafe { expected.mode.camellia };
118+
let actual_key_bits = unsafe { actual.keyBits.camellia };
119+
let actual_mode = unsafe { actual.mode.camellia };
120+
assert_eq!(
121+
expected_key_bits, actual_key_bits,
122+
"'keyBits' value in TPMT_SYM_DEF_OBJECT, mismatch between actual and expected",
123+
);
124+
125+
assert_eq!(
126+
expected_mode, actual_mode,
127+
"'mode' value in TPMT_SYM_DEF_OBJECT, mismatch between actual and expected",
128+
);
129+
}
130+
TPM2_ALG_NULL => {}
131+
_ => {
132+
panic!("Invalid algorithm in TPMT_SYM_DEF_OBJECT");
133+
}
134+
}
135+
}

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
@@ -6,5 +6,6 @@ mod public_rsa_exponent_tests;
66
mod public_rsa_parameters_tests;
77
mod sensitive;
88
mod signature;
9+
mod symmetric_definition_object_tests;
910
mod symmetric_definition_tests;
1011
mod tagged_signature_scheme_tests;
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
// Copyright 2022 Contributors to the Parsec project.
2+
// SPDX-License-Identifier: Apache-2.0
3+
use std::convert::TryFrom;
4+
use tss_esapi::{
5+
interface_types::{
6+
algorithm::{SymmetricMode, SymmetricObject},
7+
key_bits::{AesKeyBits, CamelliaKeyBits, Sm4KeyBits},
8+
},
9+
structures::SymmetricDefinitionObject,
10+
tss2_esys::{TPMT_SYM_DEF_OBJECT, TPMU_SYM_KEY_BITS, TPMU_SYM_MODE},
11+
};
12+
13+
const SYM_MODES: [SymmetricMode; 5] = [
14+
SymmetricMode::Cfb,
15+
SymmetricMode::Cbc,
16+
SymmetricMode::Ctr,
17+
SymmetricMode::Ecb,
18+
SymmetricMode::Ofb,
19+
];
20+
21+
#[test]
22+
fn test_valid_aes_conversions() {
23+
const AES_KEY_BITS: [AesKeyBits; 3] =
24+
[AesKeyBits::Aes128, AesKeyBits::Aes192, AesKeyBits::Aes256];
25+
for expected_mode in SYM_MODES {
26+
for expected_key_bits in AES_KEY_BITS {
27+
let expected_tpmt_sym_def_object = TPMT_SYM_DEF_OBJECT {
28+
algorithm: SymmetricObject::Aes.into(),
29+
keyBits: TPMU_SYM_KEY_BITS {
30+
aes: expected_key_bits.into(),
31+
},
32+
mode: TPMU_SYM_MODE {
33+
aes: expected_mode.into(),
34+
},
35+
};
36+
37+
let sym_def_object = SymmetricDefinitionObject::try_from(expected_tpmt_sym_def_object)
38+
.expect("Failed to convert TPMT_SYM_DEF_OBJECT into SymmetricDefinitionObject");
39+
40+
if let SymmetricDefinitionObject::Aes { key_bits, mode } = sym_def_object {
41+
assert_eq!(
42+
expected_key_bits, key_bits, "TPMT_SYM_DEF_OBJECT converted into SymmetricDefinitionObject did not contain the correct value for 'key_bits'"
43+
);
44+
assert_eq!(expected_mode, mode, "TPMT_SYM_DEF_OBJECT converted into SymmetricDefinitionObject did not contain the correct value for 'mode'");
45+
} else {
46+
panic!("SymmetricDefinitionObject converted from TPMT_SYM_DEF_OBJECT did not contain the expected algorithm AES");
47+
}
48+
49+
let actual_tpmt_sym_def_object = TPMT_SYM_DEF_OBJECT::try_from(sym_def_object)
50+
.expect("Failed to Convert SymmetricDefinitionObject into TPMT_SYM_DEF");
51+
52+
crate::common::ensure_tpmt_sym_def_object_equality(
53+
&expected_tpmt_sym_def_object,
54+
&actual_tpmt_sym_def_object,
55+
);
56+
}
57+
}
58+
}
59+
60+
#[test]
61+
fn test_valid_sm4_conversions() {
62+
for expected_mode in SYM_MODES {
63+
let expected_key_bits = Sm4KeyBits::Sm4_128;
64+
let expected_tpmt_sym_def_object = TPMT_SYM_DEF_OBJECT {
65+
algorithm: SymmetricObject::Sm4.into(),
66+
keyBits: TPMU_SYM_KEY_BITS {
67+
sm4: expected_key_bits.into(),
68+
},
69+
mode: TPMU_SYM_MODE {
70+
sm4: expected_mode.into(),
71+
},
72+
};
73+
74+
let sym_def_object = SymmetricDefinitionObject::try_from(expected_tpmt_sym_def_object)
75+
.expect("Failed to convert TPMT_SYM_DEF_OBJECT into SymmetricDefinitionObject");
76+
77+
if let SymmetricDefinitionObject::Sm4 { key_bits, mode } = sym_def_object {
78+
assert_eq!(
79+
expected_key_bits, key_bits, "TPMT_SYM_DEF_OBJECT converted into SymmetricDefinitionObject did not contain the correct value for 'key_bits'"
80+
);
81+
assert_eq!(expected_mode, mode, "TPMT_SYM_DEF_OBJECT converted into SymmetricDefinitionObject did not contain the correct value for 'mode'");
82+
} else {
83+
panic!("SymmetricDefinitionObject converted from TPMT_SYM_DEF_OBJECT did not contain the expected algorithm SM4");
84+
}
85+
86+
let actual_tpmt_sym_def_object = TPMT_SYM_DEF_OBJECT::try_from(sym_def_object)
87+
.expect("Failed to Convert SymmetricDefinitionObject into TPMT_SYM_DEF_OBJECT");
88+
89+
crate::common::ensure_tpmt_sym_def_object_equality(
90+
&expected_tpmt_sym_def_object,
91+
&actual_tpmt_sym_def_object,
92+
);
93+
}
94+
}
95+
96+
#[test]
97+
fn test_valid_camellia_conversions() {
98+
const CAMELLIA_KEY_BITS: [CamelliaKeyBits; 3] = [
99+
CamelliaKeyBits::Camellia128,
100+
CamelliaKeyBits::Camellia192,
101+
CamelliaKeyBits::Camellia256,
102+
];
103+
for expected_mode in SYM_MODES {
104+
for expected_key_bits in CAMELLIA_KEY_BITS {
105+
let expected_tpmt_sym_def_object = TPMT_SYM_DEF_OBJECT {
106+
algorithm: SymmetricObject::Camellia.into(),
107+
keyBits: TPMU_SYM_KEY_BITS {
108+
camellia: expected_key_bits.into(),
109+
},
110+
mode: TPMU_SYM_MODE {
111+
camellia: expected_mode.into(),
112+
},
113+
};
114+
115+
let sym_def_object = SymmetricDefinitionObject::try_from(expected_tpmt_sym_def_object)
116+
.expect("Failed to convert TPMT_SYM_DEF_OBJECT into SymmetricDefinitionObject");
117+
118+
if let SymmetricDefinitionObject::Camellia { key_bits, mode } = sym_def_object {
119+
assert_eq!(
120+
expected_key_bits, key_bits, "TPMT_SYM_DEF_OBJECT converted into SymmetricDefinitionObject did not contain the correct value for 'key_bits'"
121+
);
122+
assert_eq!(expected_mode, mode, "TPMT_SYM_DEF_OBJECT converted into SymmetricDefinitionObject did not contain the correct value for 'mode'");
123+
} else {
124+
panic!("SymmetricDefinitionObject converted from TPMT_SYM_DEF_OBJECT did not contain the expected algorithm CAMELLIA");
125+
}
126+
127+
let actual_tpmt_sym_def_object = TPMT_SYM_DEF_OBJECT::try_from(sym_def_object)
128+
.expect("Failed to Convert SymmetricDefinition into TPMT_SYM_DEF_OBJECT");
129+
130+
crate::common::ensure_tpmt_sym_def_object_equality(
131+
&expected_tpmt_sym_def_object,
132+
&actual_tpmt_sym_def_object,
133+
);
134+
}
135+
}
136+
}
137+
138+
#[test]
139+
fn test_valid_null_conversions() {
140+
let expected_tpmt_sym_def_object = TPMT_SYM_DEF_OBJECT {
141+
algorithm: SymmetricObject::Null.into(),
142+
keyBits: Default::default(),
143+
mode: Default::default(),
144+
};
145+
146+
let sym_def_object = SymmetricDefinitionObject::try_from(expected_tpmt_sym_def_object)
147+
.expect("Failed to convert TPMT_SYM_DEF_OBJECT into SymmetricDefinitionObject");
148+
149+
if sym_def_object != SymmetricDefinitionObject::Null {
150+
panic!("SymmetricDefinitionObject converted from TPMT_SYM_DEF_OBJECT did not contain the expected algorithm NULL");
151+
}
152+
153+
let actual_tpmt_sym_def_object = TPMT_SYM_DEF_OBJECT::try_from(sym_def_object)
154+
.expect("Failed to Convert SymmetricDefinition into TPMT_SYM_DEF_OBJECT");
155+
156+
crate::common::ensure_tpmt_sym_def_object_equality(
157+
&expected_tpmt_sym_def_object,
158+
&actual_tpmt_sym_def_object,
159+
);
160+
}

0 commit comments

Comments
 (0)