diff options
| -rw-r--r-- | nitrocli/src/commands.rs | 26 | 
1 files changed, 14 insertions, 12 deletions
| diff --git a/nitrocli/src/commands.rs b/nitrocli/src/commands.rs index c1942e8..71b2bdd 100644 --- a/nitrocli/src/commands.rs +++ b/nitrocli/src/commands.rs @@ -433,21 +433,23 @@ pub fn otp_get(    Ok(())  } +/// Format a byte vector as a hex string. +fn format_bytes(bytes: &[u8]) -> String { +  bytes +    .iter() +    .map(|c| format!("{:x}", c)) +    .collect::<Vec<_>>() +    .join("") +} +  /// Prepare an ASCII secret string for libnitrokey.  ///  /// libnitrokey expects secrets as hexadecimal strings.  This function transforms an ASCII string  /// into a hexadecimal string or returns an error if the given string contains non-ASCII  /// characters. -fn prepare_secret(secret: &str) -> Result<String> { +fn prepare_ascii_secret(secret: &str) -> Result<String> {    if secret.is_ascii() { -    Ok( -      secret -        .as_bytes() -        .iter() -        .map(|c| format!("{:x}", c)) -        .collect::<Vec<String>>() -        .join(""), -    ) +    Ok(format_bytes(&secret.as_bytes()))    } else {      Err(Error::Error(        "The given secret is not an ASCII string despite --format ascii being set".to_string(), @@ -465,7 +467,7 @@ pub fn otp_set(    secret_format: args::OtpSecretFormat,  ) -> Result<()> {    let secret = match secret_format { -    args::OtpSecretFormat::Ascii => prepare_secret(&data.secret)?, +    args::OtpSecretFormat::Ascii => prepare_ascii_secret(&data.secret)?,      args::OtpSecretFormat::Hex => data.secret,    };    let data = nitrokey::OtpSlotData { secret, ..data }; @@ -700,7 +702,7 @@ mod tests {    #[test]    fn prepare_secret_ascii() { -    let result = prepare_secret("12345678901234567890"); +    let result = prepare_ascii_secret("12345678901234567890");      assert_eq!(        "3132333435363738393031323334353637383930".to_string(),        result.unwrap() @@ -709,7 +711,7 @@ mod tests {    #[test]    fn prepare_secret_non_ascii() { -    let result = prepare_secret("Österreich"); +    let result = prepare_ascii_secret("Österreich");      assert!(result.is_err());    }  } | 
