diff options
| -rw-r--r-- | crates/secd/src/util/mod.rs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/crates/secd/src/util/mod.rs b/crates/secd/src/util/mod.rs index fb984d1..03e7517 100644 --- a/crates/secd/src/util/mod.rs +++ b/crates/secd/src/util/mod.rs @@ -75,10 +75,18 @@ impl CredentialType { .decode(token) .map_err(|e| SecdError::DecodeError(e.to_string()))?; - let public = - general_purpose::URL_SAFE_NO_PAD.encode(&decoded[0..CREDENTIAL_PUBLIC_PART_BYTES]); - let private = - general_purpose::URL_SAFE_NO_PAD.encode(&decoded[CREDENTIAL_PUBLIC_PART_BYTES..]); + let public = general_purpose::URL_SAFE_NO_PAD.encode( + &decoded + .get(0..CREDENTIAL_PUBLIC_PART_BYTES) + .ok_or(SecdError::CredentialIsNotApiToken) + .ctx("insufficent number of bytes to find credential's public part")?, + ); + let private = general_purpose::URL_SAFE_NO_PAD.encode( + &decoded + .get(CREDENTIAL_PUBLIC_PART_BYTES..) + .ok_or(SecdError::CredentialIsNotApiToken) + .ctx("insufficent number of bytes to find credential's secret part")?, + ); Ok(CredentialType::ApiToken { public, private }) } |
