use crate::error::Result;
use crate::hmac::HmacSigner;
use crate::rsa::{RsaSigner, RsaVerifier, SignatureScheme};
use crate::signature::Signature;
use super::string_to_sign::{OAuthStringToSign, ServiceStringToSign};
pub fn sign_service(client_secret: impl AsRef<[u8]>, parts: &ServiceStringToSign<'_>) -> Result<Signature> {
let signer = HmacSigner::new(client_secret)?;
Ok(signer.sign(parts.build()))
}
pub fn verify_service(
client_secret: impl AsRef<[u8]>,
parts: &ServiceStringToSign<'_>,
sig: &Signature,
) -> Result<()> {
let signer = HmacSigner::new(client_secret)?;
signer.verify(sig, parts.build())
}
pub fn sign_oauth<S: SignatureScheme>(signer: &RsaSigner<S>, parts: &OAuthStringToSign<'_>) -> Signature {
signer.sign(parts.build())
}
pub fn verify_oauth<S: SignatureScheme>(
verifier: &RsaVerifier<S>,
parts: &OAuthStringToSign<'_>,
sig: &Signature,
) -> Result<()> {
verifier.verify(sig, parts.build())
}