feat: updates

This commit is contained in:
2023-09-03 16:40:57 +08:00
parent 8ce5206dd2
commit 7a838472fe
5 changed files with 42 additions and 16 deletions

View File

@@ -1,5 +1,8 @@
use std::fmt::{Debug, Formatter};
use zeroize::Zeroize; use zeroize::Zeroize;
#[derive(Clone, PartialEq, Eq)]
pub struct AccessKey { pub struct AccessKey {
pub access_key_id: String, pub access_key_id: String,
pub access_key_secret: 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 struct DerivedAccessKey {
pub access_key_id: String, pub access_key_id: String,
pub derived_access_key_secret: Vec<u8>, pub derived_access_key_secret: Vec<u8>,
@@ -23,3 +32,9 @@ impl Drop for DerivedAccessKey {
self.derived_access_key_secret.zeroize(); 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)
}
}

View File

@@ -2,10 +2,14 @@ use std::collections::BTreeMap;
use sm3::Digest; use sm3::Digest;
use crate::v4::access_keys::DerivedAccessKey; use crate::v4::access_key::DerivedAccessKey;
use crate::v4::algorithm::SignAlgorithm;
use crate::v4::common_util::{join_slices, percent_encode}; 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, fn get_authorization(sign_algorithm: SignAlgorithm,
access_key: &DerivedAccessKey, access_key: &DerivedAccessKey,

View File

@@ -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 REGION_CENTER: &str = "center";
pub(crate) const ALIYUN_V4: &str = "aliyun_v4"; pub(crate) const ALIYUN_V4: &str = "aliyun_v4";
pub(crate) const ALIYUN_V4_REQUEST: &str = "aliyun_v4_request"; pub(crate) const ALIYUN_V4_REQUEST: &str = "aliyun_v4_request";

View File

@@ -1,5 +1,5 @@
mod constants; mod constant;
mod algorithm; mod sign_algorithm;
mod access_keys; mod access_key;
mod common_util; mod common_util;
mod aliyun_util; mod aliyun_util;

View File

@@ -1,6 +1,8 @@
use sm3::{Digest, Sm3}; 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)] #[derive(Clone, Copy)]
pub enum SignAlgorithm { pub enum SignAlgorithm {
@@ -9,22 +11,29 @@ pub enum SignAlgorithm {
} }
impl SignAlgorithm { impl SignAlgorithm {
pub fn digest(&self, messge: &[u8]) -> String { pub fn digest(&self, message: &[u8]) -> String {
inner_digest(self, messge) inner_digest(self, message)
} }
pub fn hmac_sign(&self, message: &[u8], key: &[u8]) -> Vec<u8> { pub fn hmac_sign(&self, message: &[u8], key: &[u8]) -> Vec<u8> {
inner_hmac_sign(self, message, key) inner_hmac_sign(self, message, key)
} }
#[inline]
pub fn as_aliyun_name(&self) -> &'static str { pub fn as_aliyun_name(&self) -> &'static str {
match self { inner_as_aliyun_name(self)
SignAlgorithm::Sha256 => ACS4_HMAC_SHA256,
SignAlgorithm::Sm3 => ACS4_HMAC_SM3,
}
} }
} }
#[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 { fn inner_digest(sign_algorithm: &SignAlgorithm, message: &[u8]) -> String {
match sign_algorithm { match sign_algorithm {
SignAlgorithm::Sha256 => sha256::digest(message), 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<u8> { fn inner_hmac_sign(sign_algorithm: &SignAlgorithm, message: &[u8], key: &[u8]) -> Vec<u8> {
match sign_algorithm { match sign_algorithm {
SignAlgorithm::Sha256 => { SignAlgorithm::Sha256 => {