use super::Signature;
use pairing::{CurveAffine, CurveProjective, EncodedPoint, Engine};

impl<E: Engine> Signature<E> {
    pub fn to_vec(&self) -> Vec<u8> {
        let comp = self.0.into_affine().into_compressed();
        comp.as_ref().to_vec()
    }

    pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
        let mut comp = <E::G2Affine as CurveAffine>::Compressed::empty();
        comp.as_mut().copy_from_slice(bytes);
        if let Ok(affine) = comp.into_affine() {
            Some(Signature(affine.into_projective()))
        } else {
            None
        }
    }
}