aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Mueller <deso@posteo.net>2019-10-13 04:51:29 -0700
committerDaniel Mueller <deso@posteo.net>2019-10-13 04:51:29 -0700
commitc46803a4557c9cd14df5e46192384a831b329179 (patch)
tree5128ea156a2fa76c8c841ee76e93357899c0f37d
parente09f5d841dd05ca2f1d276ba678ccbc02d0207e5 (diff)
downloadnitrocli-c46803a4557c9cd14df5e46192384a831b329179.tar.gz
nitrocli-c46803a4557c9cd14df5e46192384a831b329179.tar.bz2
Correctly pad bytes with zero in hex conversion
When reading a secret in ascii or base32 format from the user, we perform a conversion of the potentially decoded string into hexadecimal bytes, because that is what libnitrokey expects. The format string we used in the conversion, however, did not account for padding with a leading zero for single digit results. E.g., the newline/line feed symbol '\n', which has a decimal value of 10 would result in the string 'a' being produced, whereas '0a' would be the correct result. This change corrects the format string to fix this problem.
-rw-r--r--nitrocli/CHANGELOG.md1
-rw-r--r--nitrocli/src/commands.rs9
2 files changed, 9 insertions, 1 deletions
diff --git a/nitrocli/CHANGELOG.md b/nitrocli/CHANGELOG.md
index d74f7b8..07e03c5 100644
--- a/nitrocli/CHANGELOG.md
+++ b/nitrocli/CHANGELOG.md
@@ -7,6 +7,7 @@ Unreleased
- Removed `storage status` subcommand
- Moved its output into `status` command
- Removed previously deprecated `--ascii` option from `otp set` command
+- Fixed wrong hexadecimal conversion used in `otp set` command
- Bumped `libc` dependency to `0.2.62`
- Bumped `cc` dependency to `1.0.40`
diff --git a/nitrocli/src/commands.rs b/nitrocli/src/commands.rs
index b5fc282..eac8549 100644
--- a/nitrocli/src/commands.rs
+++ b/nitrocli/src/commands.rs
@@ -616,7 +616,7 @@ pub fn otp_get(
fn format_bytes(bytes: &[u8]) -> String {
bytes
.iter()
- .map(|c| format!("{:x}", c))
+ .map(|c| format!("{:02x}", c))
.collect::<Vec<_>>()
.join("")
}
@@ -956,4 +956,11 @@ mod tests {
let result = prepare_ascii_secret("Österreich");
assert!(result.is_err());
}
+
+ #[test]
+ fn hex_string() {
+ assert_eq!(format_bytes(&[b' ']), "20");
+ assert_eq!(format_bytes(&[b' ', b' ']), "2020");
+ assert_eq!(format_bytes(&[b'\n', b'\n']), "0a0a");
+ }
}