aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2019-02-18 13:40:42 +0000
committerRobin Krahl <robin.krahl@ireas.org>2019-02-18 15:54:11 +0100
commita754aea27f208bab0b1badc0d85f2dd161e6eae7 (patch)
tree4da06556246cc10572c32fe7429c0b239d8776bd
parent1f425191758e862946d89998316e53f4ce64f142 (diff)
downloadntw-a754aea27f208bab0b1badc0d85f2dd161e6eae7.tar.gz
ntw-a754aea27f208bab0b1badc0d85f2dd161e6eae7.tar.bz2
Add simple ReadSlotName command implementation
This patch adds a simple implementation for the command ReadSlotName that provides access to the names of TOTP and HOTP slots. It returns the name test for the first TOTP slot and the SlotNotProgrammed error for all other slots.
-rw-r--r--README.md1
-rw-r--r--src/device.rs16
2 files changed, 16 insertions, 1 deletions
diff --git a/README.md b/README.md
index 3a9512f..a31e315 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,7 @@ development and supports:
- connecting as a HID class device
- using these Nitrokey commands:
- `GET_STATUS`
+ - `READ_SLOT_NAME`
## Resources
diff --git a/src/device.rs b/src/device.rs
index 960f698..9ffc39a 100644
--- a/src/device.rs
+++ b/src/device.rs
@@ -50,6 +50,7 @@ enum_u8! {
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum CommandId {
GetStatus = 0,
+ ReadSlotName = 2,
}
}
@@ -69,7 +70,6 @@ impl Nitrokey {
command_id: CommandId,
data: &[u8],
) -> Result<[u8; 53], CommandStatus> {
- let _ = data;
match command_id {
CommandId::GetStatus => {
let mut data = [0u8; 53];
@@ -85,6 +85,20 @@ impl Nitrokey {
data[9] = 0; // delete_user_password
Ok(data)
}
+ CommandId::ReadSlotName => {
+ assert!(data.len() > 1);
+ let slot_number = data[0];
+ if slot_number != 0x20 {
+ Err(CommandStatus::SlotNotProgrammed)
+ } else {
+ let mut data = [0u8; 53];
+ data[0] = 0x74; // t
+ data[1] = 0x65; // e
+ data[2] = 0x73; // s
+ data[3] = 0x74; // t
+ Ok(data)
+ }
+ }
}
}
}