feat: updates
This commit is contained in:
@@ -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<u8>,
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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";
|
||||
@@ -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;
|
||||
|
||||
@@ -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<u8> {
|
||||
inner_hmac_sign(self, message, key)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn as_aliyun_name(&self) -> &'static str {
|
||||
match self {
|
||||
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<u8> {
|
||||
match sign_algorithm {
|
||||
SignAlgorithm::Sha256 => {
|
||||
Reference in New Issue
Block a user