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
#![feature(backtrace)]

//! The `aws_sig_verify` crate provides AWS SigV4 _verification_ routines.
//! This *is not* the library you want if you just want to call AWS services
//! or other services that use AWS SigV4 signatures.
//! [Rusoto](https://github.com/rusoto/rusoto) already has a library, 
//! [rusoto_signature](https://docs.rs/rusoto_signature/), that provides this
//! functionality.
//!
//! If you are attempting to perform AWS SigV4 verification using AWS-vended
//! credentials, this library also ___will not work for you___. You need the
//! caller's secret key (or a derivative), and AWS does not allow this for
//! obvious reasons. Instead, you should be using [API Gateway with IAM
//! authentication](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html).
//!
//! On the other hand, if you have your own ecosystem of AWS-like credentials
//! and are developing mock-AWS services or just really like AWS SigV4 but
//! can't run within AWS, this library _might_ be for you.

extern crate chrono;
extern crate hex;
extern crate lazy_static;
extern crate regex;
extern crate ring;

mod chronoutil;
mod signature;
mod hmac;
pub use crate::signature::{
    AWSSigV4Algorithm, AWSSigV4, ErrorKind, IAMAssumedRoleDetails,
    IAMGroupDetails, IAMRoleDetails, IAMUserDetails, Principal, PrincipalType,
    Request, SignatureError, SigningKeyFn, SigningKeyKind,
    normalize_uri_path_component, canonicalize_uri_path,
    normalize_query_parameters
};

#[cfg(test)]
mod unittest;