Loading crates/s3s/src/sig_v4/methods.rs +12 −3 Original line number Diff line number Diff line Loading @@ -4,19 +4,28 @@ use super::AmzDate; use crate::http::OrderedHeaders; use crate::utils::from_ascii; use crate::utils::hex_bytes32; use crate::utils::hmac_sha256; use crate::utils::stable_sort_by_first; use std::mem::MaybeUninit; use hex_simd::{AsOut, AsciiCase}; use hyper::body::Bytes; use hyper::Method; use sha2::{Digest, Sha256}; use smallvec::SmallVec; /// `f(hex(src))` fn hex_bytes32<R>(src: &[u8; 32], f: impl FnOnce(&str) -> R) -> R { let buf: &mut [_] = &mut [MaybeUninit::uninit(); 64]; let ans = hex_simd::encode_as_str(src.as_ref(), buf.as_out(), AsciiCase::Lower); f(ans) } /// `f(hex(sha256(data)))` fn hex_sha256<R>(data: &[u8], f: impl FnOnce(&str) -> R) -> R { let src = Sha256::digest(data); hex_bytes32(src, f) hex_bytes32(src.as_ref(), f) } /// `f(hex(sha256(chunk)))` Loading @@ -26,7 +35,7 @@ fn hex_sha256_chunk<R>(chunk: &[Bytes], f: impl FnOnce(&str) -> R) -> R { chunk.iter().for_each(|data| h.update(data)); h.finalize() }; hex_bytes32(src, f) hex_bytes32(src.as_ref(), f) } fn hex(data: impl AsRef<[u8]>) -> String { Loading crates/s3s/src/utils.rs +4 −14 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ use crate::dto::{Timestamp, TimestampFormat}; use std::fmt::Write; use std::future::Future; use std::mem::MaybeUninit; use std::pin::Pin; use arrayvec::{ArrayString, ArrayVec}; Loading Loading @@ -134,30 +133,21 @@ pub mod parser { } /// `hmac_sha1(key, data)` pub fn hmac_sha1(key: impl AsRef<[u8]>, data: impl AsRef<[u8]>) -> impl AsRef<[u8]> { pub fn hmac_sha1(key: impl AsRef<[u8]>, data: impl AsRef<[u8]>) -> [u8; 20] { use hmac::{Hmac, Mac}; use sha1::Sha1; let mut m = <Hmac<Sha1>>::new_from_slice(key.as_ref()).unwrap(); m.update(data.as_ref()); m.finalize().into_bytes() m.finalize().into_bytes().into() } /// `hmac_sha256(key, data)` pub fn hmac_sha256(key: impl AsRef<[u8]>, data: impl AsRef<[u8]>) -> impl AsRef<[u8]> { pub fn hmac_sha256(key: impl AsRef<[u8]>, data: impl AsRef<[u8]>) -> [u8; 32] { use hmac::{Hmac, Mac}; use sha2::Sha256; let mut m = <Hmac<Sha256>>::new_from_slice(key.as_ref()).unwrap(); m.update(data.as_ref()); m.finalize().into_bytes() } /// `f(hex(src))` pub fn hex_bytes32<R>(src: impl AsRef<[u8]>, f: impl FnOnce(&str) -> R) -> R { use hex_simd::{AsOut, AsciiCase}; let buf: &mut [_] = &mut [MaybeUninit::uninit(); 64]; let ans = hex_simd::encode_as_str(src.as_ref(), buf.as_out(), AsciiCase::Lower); f(ans) m.finalize().into_bytes().into() } Loading
crates/s3s/src/sig_v4/methods.rs +12 −3 Original line number Diff line number Diff line Loading @@ -4,19 +4,28 @@ use super::AmzDate; use crate::http::OrderedHeaders; use crate::utils::from_ascii; use crate::utils::hex_bytes32; use crate::utils::hmac_sha256; use crate::utils::stable_sort_by_first; use std::mem::MaybeUninit; use hex_simd::{AsOut, AsciiCase}; use hyper::body::Bytes; use hyper::Method; use sha2::{Digest, Sha256}; use smallvec::SmallVec; /// `f(hex(src))` fn hex_bytes32<R>(src: &[u8; 32], f: impl FnOnce(&str) -> R) -> R { let buf: &mut [_] = &mut [MaybeUninit::uninit(); 64]; let ans = hex_simd::encode_as_str(src.as_ref(), buf.as_out(), AsciiCase::Lower); f(ans) } /// `f(hex(sha256(data)))` fn hex_sha256<R>(data: &[u8], f: impl FnOnce(&str) -> R) -> R { let src = Sha256::digest(data); hex_bytes32(src, f) hex_bytes32(src.as_ref(), f) } /// `f(hex(sha256(chunk)))` Loading @@ -26,7 +35,7 @@ fn hex_sha256_chunk<R>(chunk: &[Bytes], f: impl FnOnce(&str) -> R) -> R { chunk.iter().for_each(|data| h.update(data)); h.finalize() }; hex_bytes32(src, f) hex_bytes32(src.as_ref(), f) } fn hex(data: impl AsRef<[u8]>) -> String { Loading
crates/s3s/src/utils.rs +4 −14 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ use crate::dto::{Timestamp, TimestampFormat}; use std::fmt::Write; use std::future::Future; use std::mem::MaybeUninit; use std::pin::Pin; use arrayvec::{ArrayString, ArrayVec}; Loading Loading @@ -134,30 +133,21 @@ pub mod parser { } /// `hmac_sha1(key, data)` pub fn hmac_sha1(key: impl AsRef<[u8]>, data: impl AsRef<[u8]>) -> impl AsRef<[u8]> { pub fn hmac_sha1(key: impl AsRef<[u8]>, data: impl AsRef<[u8]>) -> [u8; 20] { use hmac::{Hmac, Mac}; use sha1::Sha1; let mut m = <Hmac<Sha1>>::new_from_slice(key.as_ref()).unwrap(); m.update(data.as_ref()); m.finalize().into_bytes() m.finalize().into_bytes().into() } /// `hmac_sha256(key, data)` pub fn hmac_sha256(key: impl AsRef<[u8]>, data: impl AsRef<[u8]>) -> impl AsRef<[u8]> { pub fn hmac_sha256(key: impl AsRef<[u8]>, data: impl AsRef<[u8]>) -> [u8; 32] { use hmac::{Hmac, Mac}; use sha2::Sha256; let mut m = <Hmac<Sha256>>::new_from_slice(key.as_ref()).unwrap(); m.update(data.as_ref()); m.finalize().into_bytes() } /// `f(hex(src))` pub fn hex_bytes32<R>(src: impl AsRef<[u8]>, f: impl FnOnce(&str) -> R) -> R { use hex_simd::{AsOut, AsciiCase}; let buf: &mut [_] = &mut [MaybeUninit::uninit(); 64]; let ans = hex_simd::encode_as_str(src.as_ref(), buf.as_out(), AsciiCase::Lower); f(ans) m.finalize().into_bytes().into() }