aboutsummaryrefslogtreecommitdiff
path: root/crates/secd/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/secd/src')
-rw-r--r--crates/secd/src/util/mod.rs16
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 })
}