diff --git a/src/v4/access_keys.rs b/src/v4/access_key.rs similarity index 56% rename from src/v4/access_keys.rs rename to src/v4/access_key.rs index 02b3fe2..5bcc49f 100644 --- a/src/v4/access_keys.rs +++ b/src/v4/access_key.rs @@ -1,5 +1,8 @@ +use std::fmt::{Debug, Formatter}; + use zeroize::Zeroize; +#[derive(Clone, PartialEq, Eq)] pub struct AccessKey { pub access_key_id: String, pub access_key_secret: String, @@ -12,6 +15,12 @@ impl Drop for AccessKey { } } +impl Debug for AccessKey { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!(f, "AccessKey{{ID: {}}}", &self.access_key_id) + } +} + pub struct DerivedAccessKey { pub access_key_id: String, pub derived_access_key_secret: Vec, @@ -23,3 +32,9 @@ impl Drop for DerivedAccessKey { self.derived_access_key_secret.zeroize(); } } + +impl Debug for DerivedAccessKey { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!(f, "DerivedAccessKey{{ID: {}}}", &self.access_key_id) + } +} \ No newline at end of file diff --git a/src/v4/aliyun_util.rs b/src/v4/aliyun_util.rs index a485188..46e1cb4 100644 --- a/src/v4/aliyun_util.rs +++ b/src/v4/aliyun_util.rs @@ -2,10 +2,14 @@ use std::collections::BTreeMap; use sm3::Digest; -use crate::v4::access_keys::DerivedAccessKey; -use crate::v4::algorithm::SignAlgorithm; +use crate::v4::access_key::DerivedAccessKey; use crate::v4::common_util::{join_slices, percent_encode}; -use crate::v4::constants::{ALIYUN_V4, ALIYUN_V4_REQUEST, HEADER_CONTENT_TYPE, HEADER_HOST, HEADER_X_ACS_PREFIX, REGION_CENTER}; +use crate::v4::constant::{ + ALIYUN_V4, ALIYUN_V4_REQUEST, + HEADER_CONTENT_TYPE, + HEADER_HOST, HEADER_X_ACS_PREFIX, REGION_CENTER, +}; +use crate::v4::sign_algorithm::SignAlgorithm; fn get_authorization(sign_algorithm: SignAlgorithm, access_key: &DerivedAccessKey, diff --git a/src/v4/constants.rs b/src/v4/constant.rs similarity index 86% rename from src/v4/constants.rs rename to src/v4/constant.rs index b607e26..fcbede4 100644 --- a/src/v4/constants.rs +++ b/src/v4/constant.rs @@ -1,6 +1,3 @@ -pub(crate) const ACS4_HMAC_SHA256: &str = "ACS4-HMAC-SHA256"; -pub(crate) const ACS4_HMAC_SM3: &str = "ACS4-HMAC-SM3"; - pub(crate) const REGION_CENTER: &str = "center"; pub(crate) const ALIYUN_V4: &str = "aliyun_v4"; pub(crate) const ALIYUN_V4_REQUEST: &str = "aliyun_v4_request"; diff --git a/src/v4/mod.rs b/src/v4/mod.rs index 19eaa72..63ed817 100644 --- a/src/v4/mod.rs +++ b/src/v4/mod.rs @@ -1,5 +1,5 @@ -mod constants; -mod algorithm; -mod access_keys; +mod constant; +mod sign_algorithm; +mod access_key; mod common_util; mod aliyun_util; diff --git a/src/v4/algorithm.rs b/src/v4/sign_algorithm.rs similarity index 74% rename from src/v4/algorithm.rs rename to src/v4/sign_algorithm.rs index 9d84461..2d57f06 100644 --- a/src/v4/algorithm.rs +++ b/src/v4/sign_algorithm.rs @@ -1,6 +1,8 @@ use sm3::{Digest, Sm3}; -use crate::v4::constants::{ACS4_HMAC_SHA256, ACS4_HMAC_SM3}; +const ACS4_HMAC_SHA256: &str = "ACS4-HMAC-SHA256"; +const ACS4_HMAC_SM3: &str = "ACS4-HMAC-SM3"; + #[derive(Clone, Copy)] pub enum SignAlgorithm { @@ -9,22 +11,29 @@ pub enum SignAlgorithm { } impl SignAlgorithm { - pub fn digest(&self, messge: &[u8]) -> String { - inner_digest(self, messge) + pub fn digest(&self, message: &[u8]) -> String { + inner_digest(self, message) } pub fn hmac_sign(&self, message: &[u8], key: &[u8]) -> Vec { inner_hmac_sign(self, message, key) } + #[inline] pub fn as_aliyun_name(&self) -> &'static str { - match self { - SignAlgorithm::Sha256 => ACS4_HMAC_SHA256, - SignAlgorithm::Sm3 => ACS4_HMAC_SM3, - } + inner_as_aliyun_name(self) } } +#[inline] +fn inner_as_aliyun_name(sign_algorithm: &SignAlgorithm) -> &'static str { + match sign_algorithm { + SignAlgorithm::Sha256 => ACS4_HMAC_SHA256, + SignAlgorithm::Sm3 => ACS4_HMAC_SM3, + } +} + +#[inline] fn inner_digest(sign_algorithm: &SignAlgorithm, message: &[u8]) -> String { match sign_algorithm { SignAlgorithm::Sha256 => sha256::digest(message), @@ -36,6 +45,7 @@ fn inner_digest(sign_algorithm: &SignAlgorithm, message: &[u8]) -> String { } } +#[inline] fn inner_hmac_sign(sign_algorithm: &SignAlgorithm, message: &[u8], key: &[u8]) -> Vec { match sign_algorithm { SignAlgorithm::Sha256 => {