arcium-primitives 0.4.0

Arcium primitives
Documentation
use aes::{cipher::BlockEncrypt, Aes128Enc};

use crate::{algebra::field::binary::Gf2_128, types::Positive};

pub type U8x16 = Gf2_128;

pub trait BlockCipher {
    type Block: AsRef<[u8]> + AsMut<[u8]> + Default + Copy;
    type BlockByteLen: Positive;

    fn encrypt(&self, inp: &Self::Block) -> Self::Block;
}

impl BlockCipher for Aes128Enc {
    type Block = Gf2_128;
    type BlockByteLen = typenum::U16;

    fn encrypt(&self, block: &U8x16) -> U8x16 {
        let mut out_block = U8x16::default();
        self.encrypt_block_b2b(&block.to_le_block(), out_block.as_ne_block_mut());
        out_block
    }
}