use pyo3::{pymodule, types::PyModule, PyResult, Python};
macro_rules! impl_key_byte {
($py_type:ty, $rust_type:ty) => {
#[pymethods]
impl $py_type {
pub fn deep_copy(&self) -> Self {
Self(self.0.clone())
}
pub fn to_bytes(&self, py: Python) -> PyResult<Py<PyBytes>> {
Ok(PyBytes::new(py, &self.0.try_to_bytes()?).into())
}
#[staticmethod]
pub fn from_bytes(key_bytes: &[u8]) -> PyResult<Self> {
match <$rust_type>::try_from_bytes(key_bytes) {
Ok(key) => Ok(Self(key)),
Err(e) => Err(PyErr::from(e)),
}
}
}
};
}
mod py_abe_policy;
mod py_cover_crypt;
use py_abe_policy::{Attribute, Policy, PolicyAxis};
use py_cover_crypt::{CoverCrypt, MasterSecretKey, PublicKey, SymmetricKey, UserSecretKey};
#[pymodule]
fn cosmian_cover_crypt(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_class::<Attribute>()?;
m.add_class::<PolicyAxis>()?;
m.add_class::<Policy>()?;
m.add_class::<CoverCrypt>()?;
m.add_class::<SymmetricKey>()?;
m.add_class::<MasterSecretKey>()?;
m.add_class::<PublicKey>()?;
m.add_class::<UserSecretKey>()?;
Ok(())
}