http-sign 0.3.0

Implementation of the HTTP signature draft standard
extern crate http_sign;

use std::collections::HashMap;

use bytes::BytesMut;
use http_sign::*;
use http_sign::request::{BorrowedHttpRequest, Method};
use ring::{rand::SystemRandom, signature::RsaKeyPair};

static KEY: &'static [u8] = include_bytes!("example-rsa-2048-key.pk8");

fn main() {
    let mut headers = HashMap::new();
    headers.insert("x-foo".to_string(), "bar".to_string());
    let mut request = http_sign::request::OwnedHttpRequest::new(
        Method::Get,
        "/foo/bar".to_string(),
        Some("foo=bar".to_string()),
        headers,
        b"{\"hello\":\"world\"}".to_vec());
    let mut temporary_buffer = BytesMut::with_capacity(4096);
    let key = RsaKeyPair::from_pkcs8(KEY).expect("Failed to load RSA key pair");
    let random = SystemRandom::new();
    sign(
        &mut temporary_buffer,
        SignatureScheme::AuthorizationHeader,
        &RsaSha256::new("my_key_id", key, random),
        &mut request,
        std::time::Duration::from_secs(60),
        &[SignatureElement::Header("x-foo")]).expect("Failed to sign");
    println!("{:?}", request);
}