use ootle_byte_type::ToByteType;
use tari_crypto::{
keys::PublicKey,
ristretto::{RistrettoPublicKey, RistrettoSchnorr, RistrettoSecretKey},
};
use tari_ootle_transaction::TransactionSignature;
pub use tari_ootle_wallet_crypto::adaptor::{RistrettoAdaptorSignature, extract, verify};
use tari_ootle_wallet_crypto::adaptor::{complete, sign};
use crate::wallet::TransactionAuthorization;
pub fn sign_authorization(secret: &RistrettoSecretKey, message: &[u8]) -> TransactionAuthorization {
let public_key = RistrettoPublicKey::from_secret_key(secret);
let signature =
RistrettoSchnorr::sign(secret, message, &mut rand::rng()).expect("sign is infallible with Ristretto keys");
authorization_from_parts(&public_key, signature)
}
pub fn pre_sign_authorization(
secret: &RistrettoSecretKey,
adaptor_point: &RistrettoPublicKey,
message: &[u8],
) -> RistrettoAdaptorSignature {
sign(secret, adaptor_point, message)
}
pub fn complete_authorization(
pre: &RistrettoAdaptorSignature,
t: &RistrettoSecretKey,
public_key: &RistrettoPublicKey,
) -> TransactionAuthorization {
let signature = complete(pre, t);
authorization_from_parts(public_key, signature)
}
fn authorization_from_parts(public_key: &RistrettoPublicKey, signature: RistrettoSchnorr) -> TransactionAuthorization {
TransactionAuthorization::new(TransactionSignature::new(
public_key.to_byte_type(),
signature.to_byte_type(),
))
}