use std::io;
use rand::{CryptoRng, Rng};
use crate::crypto::hash::HashAlgorithm;
use crate::errors::Result;
use crate::types::{KeyTrait, Mpi};
pub trait PublicKeyTrait: KeyTrait {
fn verify_signature(&self, hash: HashAlgorithm, data: &[u8], sig: &[Mpi]) -> Result<()>;
fn encrypt<R: CryptoRng + Rng>(&self, rng: &mut R, plain: &[u8]) -> Result<Vec<Mpi>>;
fn to_writer_old(&self, writer: &mut impl io::Write) -> Result<()>;
}
impl<'a, T: PublicKeyTrait> PublicKeyTrait for &'a T {
fn verify_signature(&self, hash: HashAlgorithm, data: &[u8], sig: &[Mpi]) -> Result<()> {
(*self).verify_signature(hash, data, sig)
}
fn encrypt<R: CryptoRng + Rng>(&self, rng: &mut R, plain: &[u8]) -> Result<Vec<Mpi>> {
(*self).encrypt(rng, plain)
}
fn to_writer_old(&self, writer: &mut impl io::Write) -> Result<()> {
(*self).to_writer_old(writer)
}
}