1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
use std::time::SystemTime; mod auth_header; mod c_request; mod keys; mod string_to_sign; mod util; mod vocab; pub use c_request::{ensure_header_order, ensure_query_order, split_url}; pub use keys::{signing_key, validate_key_id, validate_secret_key, Key}; pub use util::FormatTime; pub use vocab::{AwsRegion, AwsService, Hash, HttpMethod, Signature}; pub fn gen_auth_header<'a>( buffer: &'a mut Vec<u8>, http_method: HttpMethod, abspath: &[u8], query: &[(&[u8], &[u8])], signed_headers: &[(&[u8], &[u8])], signing_key: &Key, key_id: &[u8; 20], region: AwsRegion, service: AwsService, request_time: SystemTime, key_date: SystemTime, payload_hash: &Hash, ) -> &'a [u8] { let offset = buffer.len(); c_request::generate( buffer, http_method, abspath, query, signed_headers, payload_hash, ); let c_request_hash = Hash::new(&buffer[offset..]); buffer.truncate(offset); string_to_sign::generate( buffer, request_time, key_date, region, service, &c_request_hash, ); let signature = signing_key.sign(&buffer[offset..]); buffer.truncate(offset); auth_header::generate( buffer, signed_headers, key_date, region, service, key_id, &signature, ); &buffer[offset..] }