use base64::Engine;
use ed25519_dalek::SigningKey;
use http::{Method, Request, Uri};
use open_payments::http_signature::signatures::create_signature_headers;
use open_payments::http_signature::{HttpSignatureError, SignOptions};
use rand::rngs::OsRng;
use serde_json::json;
fn main() -> Result<(), HttpSignatureError> {
let mut request = Request::new(Some("test body".to_string()));
*request.method_mut() = Method::POST;
*request.uri_mut() = Uri::from_static("http://example.com/");
request.headers_mut().insert(
"Content-Type",
"application/json".parse().map_err(|e| {
HttpSignatureError::Other(format!("Failed to parse content type: {}", e))
})?,
);
let signing_key = SigningKey::generate(&mut OsRng);
let options = SignOptions::new(&request, &signing_key, "test-key".to_string());
let headers = create_signature_headers(options)?;
println!(
"{}",
json!({
"signature": headers.signature,
"signature_input": headers.signature_input,
"public_key": base64::engine::general_purpose::STANDARD.encode(signing_key.verifying_key().to_bytes()),
})
);
Ok(())
}