Add command_response tests for PUT DATA

This commit is contained in:
Sosthène Guédon
2024-03-01 14:29:40 +01:00
committed by Nicolas Stalder
parent 6b822e09fb
commit dd69f716dd
3 changed files with 97 additions and 1 deletions
+4 -1
View File
@@ -273,7 +273,10 @@ impl<'data> TryFrom<&'data [u8]> for PutData<'data> {
};
let (tag, inner, rem) = take_do(rem).ok_or_else(|| {
warn!("Failed to parse PUT DATA's second field: {:02x?}", data);
warn!(
"Failed to parse PUT DATA's second field: {:02x?}, {:02x?}",
data, rem
);
Status::IncorrectDataParameter
})?;
+41
View File
@@ -85,5 +85,46 @@
output: Len(70),
)
]
),
IoTest(
name: "PUT DATA",
cmd_resp: [
GetData(
input: "5C 01 7E",
output: Data("7e 12 4f 0b a000000308000010000100 5f2f 02 4000")
),
GetData(
input: "5C 03 5FC102",
output: Len(61)
),
PutData(
input: "5C 03 5FC102 53 10 000102030405060708090A0B0C0D0E0F",
expected_status: SecurityStatusNotSatisfied
),
GetData(
input: "5C 03 5FC102",
output: Len(61)
),
AuthenticateManagement(
key: (
algorithm: Tdes,
key: "0102030405060708 0102030405060708 0102030405060708"
)
),
PutData(
input: "5C 03 5FC102 53 10 000102030405060708090A0B0C0D0E0F",
),
GetData(
input: "5C 03 5FC102",
output: Data("53 10 000102030405060708090A0B0C0D0E0F")
),
PutData(
input: "5C 01 7E 53 10 000102030405060708090A0B0C0D0E0F",
),
GetData(
input: "5C 01 7E",
output: Data("7e 10 000102030405060708090A0B0C0D0E0F")
),
]
)
]
+52
View File
@@ -258,6 +258,20 @@ enum IoCmd {
#[serde(default)]
expected_status: Status,
},
GetData {
input: String,
#[serde(default)]
output: OutputMatcher,
#[serde(default)]
expected_status: Status,
},
PutData {
input: String,
#[serde(default)]
output: OutputMatcher,
#[serde(default)]
expected_status: Status,
},
VerifyDefaultApplicationPin {
#[serde(default)]
expected_status: Status,
@@ -292,6 +306,16 @@ impl IoCmd {
output,
expected_status,
} => Self::run_iodata(input, output, *expected_status, card),
Self::GetData {
input,
output,
expected_status,
} => Self::run_get_data(input, output, *expected_status, card),
Self::PutData {
input,
output,
expected_status,
} => Self::run_put_data(input, output, *expected_status, card),
Self::VerifyDefaultApplicationPin { expected_status } => {
Self::run_verify_default_application_pin(*expected_status, card)
}
@@ -373,6 +397,34 @@ impl IoCmd {
Self::run_bytes(&parse_hex(input), output, expected_status, card);
}
fn run_get_data(
input: &str,
output: &OutputMatcher,
expected_status: Status,
card: &mut setup::Piv,
) {
Self::run_bytes(
&build_command(0x00, 0xCB, 0x3F, 0xFF, &parse_hex(input), 0),
output,
expected_status,
card,
);
}
fn run_put_data(
input: &str,
output: &OutputMatcher,
expected_status: Status,
card: &mut setup::Piv,
) {
Self::run_bytes(
&build_command(0x00, 0xDB, 0x3F, 0xFF, &parse_hex(input), 0),
output,
expected_status,
card,
);
}
fn run_authenticate_management(
alg: Algorithm,
key: &str,