feat: updates
This commit is contained in:
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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,
|
||||||
|
|||||||
@@ -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";
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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 => {
|
||||||
Reference in New Issue
Block a user