diff options
author | Daniel Mueller <deso@posteo.net> | 2019-10-13 04:51:29 -0700 |
---|---|---|
committer | Daniel Mueller <deso@posteo.net> | 2019-10-13 04:51:29 -0700 |
commit | c46803a4557c9cd14df5e46192384a831b329179 (patch) | |
tree | 5128ea156a2fa76c8c841ee76e93357899c0f37d | |
parent | e09f5d841dd05ca2f1d276ba678ccbc02d0207e5 (diff) | |
download | nitrocli-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.md | 1 | ||||
-rw-r--r-- | nitrocli/src/commands.rs | 9 |
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"); + } } |