Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/benches.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ env:

jobs:
build:
if: false # benches are broken until https://github.com/RustCrypto/AEADs/pull/665 merges
runs-on: ubuntu-latest
strategy:
matrix:
Expand Down
8 changes: 0 additions & 8 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 10 additions & 10 deletions deoxys/src/deoxys_bc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use aead::{
consts::{U15, U16, U17, U32, U48},
};

use crate::DeoxysBcType;
use crate::{DeoxysBcType, DeoxysKey, Tweak};

const H_PERM: [u8; 16] = [1, 6, 11, 12, 5, 10, 15, 0, 9, 14, 3, 4, 13, 2, 7, 8];

Expand Down Expand Up @@ -46,10 +46,10 @@ pub trait DeoxysBcInternal {
type TweakKeySize: ArraySize;

fn key_schedule(
tweak: &[u8; 16],
subkeys: &Array<[u8; 16], Self::SubkeysSize>,
) -> Array<[u8; 16], Self::SubkeysSize> {
let mut subtweakeys: Array<[u8; 16], Self::SubkeysSize> = Default::default();
tweak: &Tweak,
subkeys: &Array<DeoxysKey, Self::SubkeysSize>,
) -> Array<DeoxysKey, Self::SubkeysSize> {
let mut subtweakeys: Array<DeoxysKey, Self::SubkeysSize> = Default::default();
let mut tweak = *tweak;

// First key
Expand All @@ -59,7 +59,7 @@ pub trait DeoxysBcInternal {

// Other keys
for (stk, sk) in subtweakeys[1..].iter_mut().zip(subkeys[1..].iter()) {
h_substitution(&mut tweak);
h_substitution((&mut tweak).into());

for i in 0..16 {
stk[i] = sk[i] ^ tweak[i];
Expand All @@ -78,8 +78,8 @@ impl DeoxysBcInternal for DeoxysBc256 {
impl DeoxysBcType for DeoxysBc256 {
type KeySize = U16;

fn precompute_subkeys(key: &Array<u8, Self::KeySize>) -> Array<[u8; 16], Self::SubkeysSize> {
let mut subkeys: Array<[u8; 16], Self::SubkeysSize> = Default::default();
fn precompute_subkeys(key: &Array<u8, Self::KeySize>) -> Array<DeoxysKey, Self::SubkeysSize> {
let mut subkeys: Array<DeoxysKey, Self::SubkeysSize> = Default::default();

let mut tk2 = [0u8; 16];

Expand Down Expand Up @@ -116,8 +116,8 @@ impl DeoxysBcInternal for DeoxysBc384 {
impl DeoxysBcType for DeoxysBc384 {
type KeySize = U32;

fn precompute_subkeys(key: &Array<u8, Self::KeySize>) -> Array<[u8; 16], Self::SubkeysSize> {
let mut subkeys: Array<[u8; 16], Self::SubkeysSize> = Default::default();
fn precompute_subkeys(key: &Array<u8, Self::KeySize>) -> Array<DeoxysKey, Self::SubkeysSize> {
let mut subkeys: Array<DeoxysKey, Self::SubkeysSize> = Default::default();

let mut tk3 = [0u8; 16];
let mut tk2 = [0u8; 16];
Expand Down
38 changes: 22 additions & 16 deletions deoxys/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,12 @@ pub type Nonce<NonceSize> = Array<u8, NonceSize>;
/// Deoxys tags
pub type Tag = Array<u8, U16>;

type Block = Array<u8, U16>;

type Tweak = Array<u8, U16>;

type DeoxysKey = Array<u8, U16>;

/// Deoxys encryption modes.
/// This type contains the public API for a Deoxys mode, like Deoxys-I and Deoxys-II.
pub trait DeoxysMode<B>: modes::DeoxysModeInternal<B>
Expand All @@ -154,8 +160,8 @@ where
nonce: &Array<u8, Self::NonceSize>,
associated_data: &[u8],
buffer: &mut [u8],
subkeys: &Array<[u8; 16], B::SubkeysSize>,
) -> [u8; 16];
subkeys: &Array<DeoxysKey, B::SubkeysSize>,
) -> Tag;

/// Decrypts the data in place with the specified parameters
/// Returns an error if the tag verification fails
Expand All @@ -164,7 +170,7 @@ where
associated_data: &[u8],
buffer: &mut [u8],
tag: &Tag,
subkeys: &Array<[u8; 16], B::SubkeysSize>,
subkeys: &Array<DeoxysKey, B::SubkeysSize>,
) -> Result<(), aead::Error>;
}

Expand All @@ -175,13 +181,13 @@ pub trait DeoxysBcType: deoxys_bc::DeoxysBcInternal {
type KeySize: ArraySize;

/// Precompute the subkeys
fn precompute_subkeys(key: &Array<u8, Self::KeySize>) -> Array<[u8; 16], Self::SubkeysSize>;
fn precompute_subkeys(key: &Array<u8, Self::KeySize>) -> Array<DeoxysKey, Self::SubkeysSize>;

/// Encrypts a block of data in place.
fn encrypt_in_place(
block: &mut [u8; 16],
tweak: &[u8; 16],
subkeys: &Array<[u8; 16], Self::SubkeysSize>,
block: &mut Block,
tweak: &Tweak,
subkeys: &Array<DeoxysKey, Self::SubkeysSize>,
) {
let keys = Self::key_schedule(tweak, subkeys);

Expand All @@ -190,15 +196,15 @@ pub trait DeoxysBcType: deoxys_bc::DeoxysBcInternal {
}

for k in &keys[1..] {
aes::hazmat::cipher_round(block.into(), k.into());
aes::hazmat::cipher_round(block, k);
}
}

/// Decrypts a block of data in place.
fn decrypt_in_place(
block: &mut [u8; 16],
tweak: &[u8; 16],
subkeys: &Array<[u8; 16], Self::SubkeysSize>,
block: &mut Block,
tweak: &Tweak,
subkeys: &Array<DeoxysKey, Self::SubkeysSize>,
) {
let mut keys = Self::key_schedule(tweak, subkeys);

Expand All @@ -208,14 +214,14 @@ pub trait DeoxysBcType: deoxys_bc::DeoxysBcInternal {
*b ^= k;
}

aes::hazmat::inv_mix_columns(block.into());
aes::hazmat::inv_mix_columns(block);

for k in keys[..r - 1].iter_mut().rev() {
aes::hazmat::inv_mix_columns(k.into());
aes::hazmat::equiv_inv_cipher_round(block.into(), (&*k).into());
aes::hazmat::inv_mix_columns(k);
aes::hazmat::equiv_inv_cipher_round(block, k);
}

aes::hazmat::mix_columns(block.into());
aes::hazmat::mix_columns(block);
}
}

Expand All @@ -227,7 +233,7 @@ where
M: DeoxysMode<B>,
B: DeoxysBcType,
{
subkeys: Array<[u8; 16], B::SubkeysSize>,
subkeys: Array<DeoxysKey, B::SubkeysSize>,
mode: PhantomData<M>,
}

Expand Down
Loading