Make that godforsaken algorithm impl compile
This commit is contained in:
@ -10,36 +10,36 @@ pub const DES_N_ROUNDS = 16;
|
||||
pub const DES_SUBKEY_SIZE = 48 / 8;
|
||||
|
||||
const DES_INITIAL_PERMUTATION = [_]u6{
|
||||
58, 50, 42, 35, 26, 18, 10, 2,
|
||||
60, 52, 44, 36, 28, 20, 12, 4,
|
||||
62, 54, 46, 38, 30, 22, 14, 6,
|
||||
64, 56, 48, 40, 32, 24, 16, 8,
|
||||
57, 49, 41, 33, 25, 17, 9, 1,
|
||||
59, 51, 43, 35, 27, 19, 11, 3,
|
||||
61, 53, 45, 37, 29, 21, 13, 5,
|
||||
63, 55, 47, 39, 31, 23, 15, 7,
|
||||
58 - 1, 50 - 1, 42 - 1, 35 - 1, 26 - 1, 18 - 1, 10 - 1, 2 - 1,
|
||||
60 - 1, 52 - 1, 44 - 1, 36 - 1, 28 - 1, 20 - 1, 12 - 1, 4 - 1,
|
||||
62 - 1, 54 - 1, 46 - 1, 38 - 1, 30 - 1, 22 - 1, 14 - 1, 6 - 1,
|
||||
64 - 1, 56 - 1, 48 - 1, 40 - 1, 32 - 1, 24 - 1, 16 - 1, 8 - 1,
|
||||
57 - 1, 49 - 1, 41 - 1, 33 - 1, 25 - 1, 17 - 1, 9 - 1, 1 - 1,
|
||||
59 - 1, 51 - 1, 43 - 1, 35 - 1, 27 - 1, 19 - 1, 11 - 1, 3 - 1,
|
||||
61 - 1, 53 - 1, 45 - 1, 37 - 1, 29 - 1, 21 - 1, 13 - 1, 5 - 1,
|
||||
63 - 1, 55 - 1, 47 - 1, 39 - 1, 31 - 1, 23 - 1, 15 - 1, 7 - 1,
|
||||
};
|
||||
|
||||
const DES_INV_INITIAL_PERMUTATION = [_]u6{
|
||||
40, 8, 48, 16, 56, 24, 64, 32,
|
||||
39, 7, 47, 15, 55, 23, 63, 31,
|
||||
38, 6, 46, 14, 54, 22, 62, 30,
|
||||
37, 5, 45, 13, 53, 21, 61, 29,
|
||||
36, 4, 44, 12, 52, 20, 60, 28,
|
||||
35, 3, 43, 11, 51, 19, 59, 27,
|
||||
34, 2, 42, 10, 50, 18, 58, 26,
|
||||
33, 1, 41, 9, 49, 17, 57, 25,
|
||||
40 - 1, 8 - 1, 48 - 1, 16 - 1, 56 - 1, 24 - 1, 64 - 1, 32 - 1,
|
||||
39 - 1, 7 - 1, 47 - 1, 15 - 1, 55 - 1, 23 - 1, 63 - 1, 31 - 1,
|
||||
38 - 1, 6 - 1, 46 - 1, 14 - 1, 54 - 1, 22 - 1, 62 - 1, 30 - 1,
|
||||
37 - 1, 5 - 1, 45 - 1, 13 - 1, 53 - 1, 21 - 1, 61 - 1, 29 - 1,
|
||||
36 - 1, 4 - 1, 44 - 1, 12 - 1, 52 - 1, 20 - 1, 60 - 1, 28 - 1,
|
||||
35 - 1, 3 - 1, 43 - 1, 11 - 1, 51 - 1, 19 - 1, 59 - 1, 27 - 1,
|
||||
34 - 1, 2 - 1, 42 - 1, 10 - 1, 50 - 1, 18 - 1, 58 - 1, 26 - 1,
|
||||
33 - 1, 1 - 1, 41 - 1, 9 - 1, 49 - 1, 17 - 1, 57 - 1, 25 - 1,
|
||||
};
|
||||
|
||||
const DES_BIT_SELECTION_TABLE_E = [_]u5{
|
||||
32, 1, 2, 3, 4, 5,
|
||||
4, 5, 6, 7, 8, 9,
|
||||
8, 9, 10, 11, 12, 13,
|
||||
12, 13, 14, 15, 16, 17,
|
||||
16, 17, 18, 19, 20, 21,
|
||||
20, 21, 22, 23, 24, 25,
|
||||
24, 25, 26, 27, 28, 29,
|
||||
28, 29, 30, 31, 32, 1,
|
||||
const DES_BIT_SELECTION_TABLE_E = [_]u6{
|
||||
32 - 1, 1 - 1, 2 - 1, 3 - 1, 4 - 1, 5 - 1,
|
||||
4 - 1, 5 - 1, 6 - 1, 7 - 1, 8 - 1, 9 - 1,
|
||||
8 - 1, 9 - 1, 10 - 1, 11 - 1, 12 - 1, 13 - 1,
|
||||
12 - 1, 13 - 1, 14 - 1, 15 - 1, 16 - 1, 17 - 1,
|
||||
16 - 1, 17 - 1, 18 - 1, 19 - 1, 20 - 1, 21 - 1,
|
||||
20 - 1, 21 - 1, 22 - 1, 23 - 1, 24 - 1, 25 - 1,
|
||||
24 - 1, 25 - 1, 26 - 1, 27 - 1, 28 - 1, 29 - 1,
|
||||
28 - 1, 29 - 1, 30 - 1, 31 - 1, 32 - 1, 1 - 1,
|
||||
};
|
||||
|
||||
const DES_S_BOXES = [8][64]u4{
|
||||
@ -53,11 +53,11 @@ const DES_S_BOXES = [8][64]u4{
|
||||
.{ 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 },
|
||||
};
|
||||
|
||||
const DES_PERMUTATION_FUNCTION_P = [_]u5{
|
||||
16, 7, 20, 21, 29, 12, 28, 17,
|
||||
1, 15, 23, 26, 5, 18, 31, 10,
|
||||
2, 8, 24, 14, 32, 27, 3, 9,
|
||||
19, 13, 30, 6, 22, 11, 4, 25,
|
||||
const DES_PERMUTATION_FUNCTION_P = [_]u6{
|
||||
16 - 1, 7 - 1, 20 - 1, 21 - 1, 29 - 1, 12 - 1, 28 - 1, 17 - 1,
|
||||
1 - 1, 15 - 1, 23 - 1, 26 - 1, 5 - 1, 18 - 1, 31 - 1, 10 - 1,
|
||||
2 - 1, 8 - 1, 24 - 1, 14 - 1, 32 - 1, 27 - 1, 3 - 1, 9 - 1,
|
||||
19 - 1, 13 - 1, 30 - 1, 6 - 1, 22 - 1, 11 - 1, 4 - 1, 25 - 1,
|
||||
};
|
||||
|
||||
const DES_KS_SHIFT_SCHEDULE = .{ 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 };
|
||||
@ -65,26 +65,26 @@ const DES_KS_SHIFT_SCHEDULE = .{ 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
|
||||
// ----------------------------------- ENCRYPTION/DECRYPTION ----------------------------------- //
|
||||
|
||||
pub fn des_encrypt_block(
|
||||
key: *const [DES_ENCODED_KEY_SIZE]u8,
|
||||
block_in: *const [DES_BLOCK_SIZE]u8,
|
||||
block_out: *[DES_BLOCK_SIZE]u8,
|
||||
key: *const [DES_ENCODED_KEY_SIZE]u8,
|
||||
) void {
|
||||
var state: [DES_BLOCK_SIZE]u8 = undefined;
|
||||
des_initial_permutation(block_in, &state);
|
||||
|
||||
var expanded_key = des_expand_key(key);
|
||||
defer @memset(&expanded_key, 0);
|
||||
defer @memset(&expanded_key, .{ 0, 0, 0, 0, 0, 0 });
|
||||
|
||||
for (0..DES_N_ROUNDS) |round|
|
||||
des_perform_round(&state, expanded_key[round]);
|
||||
des_perform_round(&state, &expanded_key[round]);
|
||||
|
||||
des_inv_initial_permutation(&state, block_out);
|
||||
}
|
||||
|
||||
pub fn des_decrypt_block(
|
||||
key: *const [DES_ENCODED_KEY_SIZE]u8,
|
||||
block_in: *const [DES_BLOCK_SIZE]u8,
|
||||
block_out: *[DES_BLOCK_SIZE]u8,
|
||||
key: *const [DES_ENCODED_KEY_SIZE]u8,
|
||||
) void {
|
||||
var state: [DES_BLOCK_SIZE]u8 = undefined;
|
||||
des_inv_initial_permutation(block_in, &state);
|
||||
@ -102,52 +102,58 @@ pub fn des_expand_key(key: *const [DES_ENCODED_KEY_SIZE]u8) [DES_N_ROUNDS][DES_S
|
||||
const cd = des_permuted_choice_1(key);
|
||||
|
||||
// Probably the least stupid software implementation that I could think of.
|
||||
var c_i = @as(u28, std.mem.readInt(u56, &cd, .big) >> 28);
|
||||
var d_i = @as(u28, std.mem.readInt(u56, &cd, .big) & 0xfffffff);
|
||||
var c_i: u28 = @truncate(std.mem.readInt(u56, &cd, .big) >> 28);
|
||||
var d_i: u28 = @truncate(std.mem.readInt(u56, &cd, .big));
|
||||
|
||||
var subkeys: [DES_N_ROUNDS][DES_SUBKEY_SIZE]u8 = undefined;
|
||||
|
||||
for (0..DES_N_ROUNDS) |i| {
|
||||
inline for (0..DES_N_ROUNDS) |i| {
|
||||
c_i = rotate_left(c_i, DES_KS_SHIFT_SCHEDULE[i]);
|
||||
d_i = rotate_left(d_i, DES_KS_SHIFT_SCHEDULE[i]);
|
||||
des_permuted_choice_2(c_i, d_i, &subkeys[i]);
|
||||
}
|
||||
|
||||
return subkeys;
|
||||
}
|
||||
|
||||
pub fn des_permuted_choice_1(key: *const [DES_ENCODED_KEY_SIZE]u8) [DES_TRUE_KEY_SIZE]u8 {
|
||||
const PC1 = .{
|
||||
57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36,
|
||||
63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4,
|
||||
57 - 1, 49 - 1, 41 - 1, 33 - 1, 25 - 1, 17 - 1, 9 - 1, 1 - 1, 58 - 1, 50 - 1, 42 - 1, 34 - 1, 26 - 1, 18 - 1,
|
||||
10 - 1, 2 - 1, 59 - 1, 51 - 1, 43 - 1, 35 - 1, 27 - 1, 19 - 1, 11 - 1, 3 - 1, 60 - 1, 52 - 1, 44 - 1, 36 - 1,
|
||||
63 - 1, 55 - 1, 47 - 1, 39 - 1, 31 - 1, 23 - 1, 15 - 1, 7 - 1, 62 - 1, 54 - 1, 46 - 1, 38 - 1, 30 - 1, 22 - 1,
|
||||
14 - 1, 6 - 1, 61 - 1, 53 - 1, 45 - 1, 37 - 1, 29 - 1, 21 - 1, 13 - 1, 5 - 1, 28 - 1, 20 - 1, 12 - 1, 4 - 1,
|
||||
};
|
||||
|
||||
var result: [DES_TRUE_KEY_SIZE]u8 = undefined;
|
||||
permute_bits(DES_TRUE_KEY_SIZE, key, &result, PC1);
|
||||
permute_bits(DES_TRUE_KEY_SIZE, key, &result, &PC1);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
pub fn des_permuted_choice_2(c: u28, d: u28, out: *[DES_SUBKEY_SIZE]u8) void {
|
||||
const PC2 = .{
|
||||
14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2,
|
||||
41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32,
|
||||
14 - 1, 17 - 1, 11 - 1, 24 - 1, 1 - 1, 5 - 1, 3 - 1, 28 - 1, 15 - 1, 6 - 1, 21 - 1, 10 - 1,
|
||||
23 - 1, 19 - 1, 12 - 1, 4 - 1, 26 - 1, 8 - 1, 16 - 1, 7 - 1, 27 - 1, 20 - 1, 13 - 1, 2 - 1,
|
||||
41 - 1, 52 - 1, 31 - 1, 37 - 1, 47 - 1, 55 - 1, 30 - 1, 40 - 1, 51 - 1, 45 - 1, 33 - 1, 48 - 1,
|
||||
44 - 1, 49 - 1, 39 - 1, 56 - 1, 34 - 1, 53 - 1, 46 - 1, 42 - 1, 50 - 1, 36 - 1, 29 - 1, 32 - 1,
|
||||
};
|
||||
|
||||
const cd = @as(u56, c) << 28 | @as(u56, d);
|
||||
const cd_bytes: [DES_TRUE_KEY_SIZE]u8 = undefined;
|
||||
var cd_bytes: [DES_TRUE_KEY_SIZE]u8 = undefined;
|
||||
std.mem.writeInt(u56, &cd_bytes, cd, .big);
|
||||
|
||||
permute_bits(DES_SUBKEY_SIZE, &cd_bytes, out, PC2);
|
||||
permute_bits(DES_SUBKEY_SIZE, &cd_bytes, out, &PC2);
|
||||
}
|
||||
|
||||
pub fn des_perform_round(state: *[DES_BLOCK_SIZE]u8, subkey: *[DES_SUBKEY_SIZE]u8) void {
|
||||
const f_output = des_cipher_function_f(state[DES_BLOCK_SIZE / 2 ..], subkey);
|
||||
const new_r = xor(DES_BLOCK_SIZE / 2, state[0 .. DES_BLOCK_SIZE / 2], f_output);
|
||||
var f_output = des_cipher_function_f(state[DES_BLOCK_SIZE / 2 ..], subkey);
|
||||
const new_r = xor(DES_BLOCK_SIZE / 2, state[0 .. DES_BLOCK_SIZE / 2], &f_output);
|
||||
|
||||
@memcpy(state[0 .. DES_BLOCK_SIZE / 2], state[DES_BLOCK_SIZE / 2 ..]);
|
||||
@memcpy(state[DES_BLOCK_SIZE / 2 ..], new_r[0..]);
|
||||
}
|
||||
|
||||
pub fn des_cipher_function_f(word: [DES_BLOCK_SIZE / 2]u8, subkey: *const [DES_SUBKEY_SIZE]u8) [DES_BLOCK_SIZE / 2]u8 {
|
||||
pub fn des_cipher_function_f(word: *const [DES_BLOCK_SIZE / 2]u8, subkey: *const [DES_SUBKEY_SIZE]u8) [DES_BLOCK_SIZE / 2]u8 {
|
||||
// The input word is expanded to 48 bits.
|
||||
var expanded_word: [DES_SUBKEY_SIZE]u8 = undefined;
|
||||
permute_bits(DES_SUBKEY_SIZE, word, &expanded_word, &DES_BIT_SELECTION_TABLE_E);
|
||||
@ -159,11 +165,11 @@ pub fn des_cipher_function_f(word: [DES_BLOCK_SIZE / 2]u8, subkey: *const [DES_S
|
||||
|
||||
inline for (0..8) |i| {
|
||||
var sbox_input: u6 = @as(u6, get_nth_bit(DES_SUBKEY_SIZE, &expanded_word, i * 6));
|
||||
for (1..6) |j| {
|
||||
inline for (1..6) |j| {
|
||||
sbox_input <<= 1;
|
||||
sbox_input |= @as(u6, get_nth_bit(DES_SUBKEY_SIZE, &expanded_word, i * 6 + j));
|
||||
}
|
||||
sbox_output[i / 2] |= DES_S_BOXES[i][sbox_input] << if (i % 2 == 0) 4 else 0;
|
||||
sbox_output[i / 2] |= @as(u8, DES_S_BOXES[i][sbox_input]) << if (i % 2 == 0) 4 else 0;
|
||||
}
|
||||
|
||||
var expansion_output: [DES_BLOCK_SIZE / 2]u8 = undefined;
|
||||
@ -173,49 +179,49 @@ pub fn des_cipher_function_f(word: [DES_BLOCK_SIZE / 2]u8, subkey: *const [DES_S
|
||||
}
|
||||
|
||||
pub fn des_initial_permutation(in: *const [DES_BLOCK_SIZE]u8, out: *[DES_BLOCK_SIZE]u8) void {
|
||||
permute_bits(DES_BLOCK_SIZE, in, out, DES_INITIAL_PERMUTATION);
|
||||
permute_bits(DES_BLOCK_SIZE, in[0..], out, &DES_INITIAL_PERMUTATION);
|
||||
}
|
||||
|
||||
pub fn des_inv_initial_permutation(in: *const [DES_BLOCK_SIZE]u8, out: *[DES_BLOCK_SIZE]u8) void {
|
||||
permute_bits(DES_BLOCK_SIZE, in, out, DES_INV_INITIAL_PERMUTATION);
|
||||
permute_bits(DES_BLOCK_SIZE, in[0..], out, &DES_INV_INITIAL_PERMUTATION);
|
||||
}
|
||||
|
||||
// ----------------------------------- HELPERS ----------------------------------- //
|
||||
|
||||
fn permute_bits(L: comptime_int, in: []u8, out: *[L]u8, key: [8 * L]u6) void {
|
||||
fn permute_bits(L: comptime_int, in: []const u8, out: *[L]u8, key: *const [8 * L]u6) void {
|
||||
for (0..8 * L) |i| {
|
||||
const pi = key[i];
|
||||
if (pi >= in.len * 8)
|
||||
@panic("Bit index out of range!");
|
||||
const bit = get_nth_bit(8, in, pi);
|
||||
set_nth_bit(8, out, pi, bit);
|
||||
set_nth_bit(L, out, @intCast(i), bit);
|
||||
}
|
||||
}
|
||||
|
||||
fn get_nth_bit(comptime L: u3, bytes: *const [L]u8, n: u6) u1 {
|
||||
if (L > 8 or n >= L * 8)
|
||||
fn get_nth_bit(comptime L: u4, bytes: []const u8, n: u6) u1 {
|
||||
if (L > 8 or n >= bytes.len * 8)
|
||||
@panic("Bit index out of range!");
|
||||
|
||||
const byte_idx = n / 8;
|
||||
const bit_idx = n % 8;
|
||||
|
||||
return @truncate(bytes[byte_idx] >> (7 - bit_idx));
|
||||
return @truncate(bytes[byte_idx] >> @intCast(7 - bit_idx));
|
||||
}
|
||||
|
||||
fn set_nth_bit(comptime L: u3, bytes: *const [8]u8, n: u6, bit: u1) void {
|
||||
if (n >= L * 8)
|
||||
fn set_nth_bit(comptime L: u4, bytes: []u8, n: u6, bit: u1) void {
|
||||
if (L > 8 or n >= bytes.len * 8)
|
||||
@panic("Bit index out of range!");
|
||||
|
||||
const byte_idx = n / 8;
|
||||
const bit_idx = n % 8;
|
||||
|
||||
if (bit == 1)
|
||||
bytes[byte_idx] |= (1 << (7 - bit_idx))
|
||||
bytes[byte_idx] |= (@as(u8, 1) << @intCast(7 - bit_idx))
|
||||
else
|
||||
bytes[byte_idx] &= ~(1 << (7 - bit_idx));
|
||||
bytes[byte_idx] &= ~(@as(u8, 1) << @intCast(7 - bit_idx));
|
||||
}
|
||||
|
||||
fn xor(L: comptime_int, a: [L]u8, b: [L]u8) [L]u8 {
|
||||
fn xor(L: comptime_int, a: *const [L]u8, b: *const [L]u8) [L]u8 {
|
||||
var result: [L]u8 = undefined;
|
||||
for (0..L) |i|
|
||||
result[i] = a[i] ^ b[i];
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
comptime {
|
||||
_ = .{
|
||||
@import("./primitive/blockcipher/aes.zig"),
|
||||
@import("./primitive/blockcipher/des.zig"),
|
||||
@import("./primitive/blockcipher/operation_modes.zig"),
|
||||
@import("./primitive/digest/sha.zig"),
|
||||
@import("./primitive/streamcipher/chacha20.zig"),
|
||||
|
||||
328
test/primitive/blockcipher/des.zig
Normal file
328
test/primitive/blockcipher/des.zig
Normal file
@ -0,0 +1,328 @@
|
||||
const std = @import("std");
|
||||
const testing = std.testing;
|
||||
|
||||
const des = @import("primitive").blockcipher.des;
|
||||
|
||||
test "DES ECB (NBS SP 500-20)" {
|
||||
const tests = [_]struct { key: u64, pt: u64, ct: u64 }{
|
||||
// Initial Permutation and Expansion test
|
||||
.{ .key = 0x0101010101010101, .pt = 0x95F8A5E5DD31D900, .ct = 0x8000000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xDD7F121CA5015619, .ct = 0x4000000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x2E8653104F3834EA, .ct = 0x2000000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x4BD388FF6CD81D4F, .ct = 0x1000000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x20B9E767B2FB1456, .ct = 0x0800000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x55579380D77138EF, .ct = 0x0400000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x6CC5DEFAAF04512F, .ct = 0x0200000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0D9F279BA5D87260, .ct = 0x0100000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xD9031B0271BD5A0A, .ct = 0x0080000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x424250B37C3DD951, .ct = 0x0040000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xB8061B7ECD9A21E5, .ct = 0x0020000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xF15D0F286B65BD28, .ct = 0x0010000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xADD0CC8D6E5DEBA1, .ct = 0x0008000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xE6D5F82752AD63D1, .ct = 0x0004000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xECBFE3BD3F591A5E, .ct = 0x0002000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xF356834379D165CD, .ct = 0x0001000000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x2B9F982F20037FA9, .ct = 0x0000800000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x889DE068A16F0BE6, .ct = 0x0000400000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xE19E275D846A1298, .ct = 0x0000200000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x329A8ED523D71AEC, .ct = 0x0000100000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xE7FCE22557D23C97, .ct = 0x0000080000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x12A9F5817FF2D65D, .ct = 0x0000040000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xA484C3AD38DC9C19, .ct = 0x0000020000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xFBE00A8A1EF8AD72, .ct = 0x0000010000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x750D079407521363, .ct = 0x0000008000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x64FEED9C724C2FAF, .ct = 0x0000004000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xF02B263B328E2B60, .ct = 0x0000002000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x9D64555A9A10B852, .ct = 0x0000001000000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xD106FF0BED5255D7, .ct = 0x0000000800000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xE1652C6B138C64A5, .ct = 0x0000000400000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xE428581186EC8F46, .ct = 0x0000000200000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xAEB5F5EDE22D1A36, .ct = 0x0000000100000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xE943D7568AEC0C5C, .ct = 0x0000000080000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xDF98C8276F54B04B, .ct = 0x0000000040000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xB160E4680F6C696F, .ct = 0x0000000020000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xFA0752B07D9C4AB8, .ct = 0x0000000010000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xCA3A2B036DBC8502, .ct = 0x0000000008000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x5E0905517BB59BCF, .ct = 0x0000000004000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x814EEB3B91D90726, .ct = 0x0000000002000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x4D49DB1532919C9F, .ct = 0x0000000001000000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x25EB5FC3F8CF0621, .ct = 0x0000000000800000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xAB6A20C0620D1C6F, .ct = 0x0000000000400000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x79E90DBC98F92CCA, .ct = 0x0000000000200000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x866ECEDD8072BB0E, .ct = 0x0000000000100000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x8B54536F2F3E64A8, .ct = 0x0000000000080000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xEA51D3975595B86B, .ct = 0x0000000000040000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xCAFFC6AC4542DE31, .ct = 0x0000000000020000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x8DD45A2DDF90796C, .ct = 0x0000000000010000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x1029D55E880EC2D0, .ct = 0x0000000000008000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x5D86CB23639DBEA9, .ct = 0x0000000000004000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x1D1CA853AE7C0C5F, .ct = 0x0000000000002000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xCE332329248F3228, .ct = 0x0000000000001000 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x8405D1ABE24FB942, .ct = 0x0000000000000800 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xE643D78090CA4207, .ct = 0x0000000000000400 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x48221B9937748A23, .ct = 0x0000000000000200 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xDD7C0BBD61FAFD54, .ct = 0x0000000000000100 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x2FBC291A570DB5C4, .ct = 0x0000000000000080 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xE07C30D7E4E26E12, .ct = 0x0000000000000040 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0953E2258E8E90A1, .ct = 0x0000000000000020 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x5B711BC4CEEBF2EE, .ct = 0x0000000000000010 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xCC083F1E6D9E85F6, .ct = 0x0000000000000008 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0xD2FD8867D50D2DFE, .ct = 0x0000000000000004 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x06E7EA22CE92708F, .ct = 0x0000000000000002 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x166B40B44ABA4BD6, .ct = 0x0000000000000001 },
|
||||
|
||||
// Inverse Permutation and Expansion test
|
||||
.{ .key = 0x0101010101010101, .pt = 0x8000000000000000, .ct = 0x95F8A5E5DD31D900 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x4000000000000000, .ct = 0xDD7F121CA5015619 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x2000000000000000, .ct = 0x2E8653104F3834EA },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x1000000000000000, .ct = 0x4BD388FF6CD81D4F },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0800000000000000, .ct = 0x20B9E767B2FB1456 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0400000000000000, .ct = 0x55579380D77138EF },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0200000000000000, .ct = 0x6CC5DEFAAF04512F },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0100000000000000, .ct = 0x0D9F279BA5D87260 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0080000000000000, .ct = 0xD9031B0271BD5A0A },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0040000000000000, .ct = 0x424250B37C3DD951 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0020000000000000, .ct = 0xB8061B7ECD9A21E5 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0010000000000000, .ct = 0xF15D0F286B65BD28 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0008000000000000, .ct = 0xADD0CC8D6E5DEBA1 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0004000000000000, .ct = 0xE6D5F82752AD63D1 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0002000000000000, .ct = 0xECBFE3BD3F591A5E },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0001000000000000, .ct = 0xF356834379D165CD },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000800000000000, .ct = 0x2B9F982F20037FA9 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000400000000000, .ct = 0x889DE068A16F0BE6 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000200000000000, .ct = 0xE19E275D846A1298 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000100000000000, .ct = 0x329A8ED523D71AEC },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000080000000000, .ct = 0xE7FCE22557D23C97 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000040000000000, .ct = 0x12A9F5817FF2D65D },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000020000000000, .ct = 0xA484C3AD38DC9C19 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000010000000000, .ct = 0xFBE00A8A1EF8AD72 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000008000000000, .ct = 0x750D079407521363 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000004000000000, .ct = 0x64FEED9C724C2FAF },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000002000000000, .ct = 0xF02B263B328E2B60 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000001000000000, .ct = 0x9D64555A9A10B852 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000800000000, .ct = 0xD106FF0BED5255D7 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000400000000, .ct = 0xE1652C6B138C64A5 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000200000000, .ct = 0xE428581186EC8F46 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000100000000, .ct = 0xAEB5F5EDE22D1A36 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000080000000, .ct = 0xE943D7568AEC0C5C },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000040000000, .ct = 0xDF98C8276F54B04B },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000020000000, .ct = 0xB160E4680F6C696F },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000010000000, .ct = 0xFA0752B07D9C4AB8 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000008000000, .ct = 0xCA3A2B036DBC8502 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000004000000, .ct = 0x5E0905517BB59BCF },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000002000000, .ct = 0x814EEB3B91D90726 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000001000000, .ct = 0x4D49DB1532919C9F },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000800000, .ct = 0x25EB5FC3F8CF0621 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000400000, .ct = 0xAB6A20C0620D1C6F },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000200000, .ct = 0x79E90DBC98F92CCA },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000100000, .ct = 0x866ECEDD8072BB0E },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000080000, .ct = 0x8B54536F2F3E64A8 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000040000, .ct = 0xEA51D3975595B86B },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000020000, .ct = 0xCAFFC6AC4542DE31 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000010000, .ct = 0x8DD45A2DDF90796C },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000008000, .ct = 0x1029D55E880EC2D0 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000004000, .ct = 0x5D86CB23639DBEA9 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000002000, .ct = 0x1D1CA853AE7C0C5F },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000001000, .ct = 0xCE332329248F3228 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000000800, .ct = 0x8405D1ABE24FB942 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000000400, .ct = 0xE643D78090CA4207 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000000200, .ct = 0x48221B9937748A23 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000000100, .ct = 0xDD7C0BBD61FAFD54 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000000080, .ct = 0x2FBC291A570DB5C4 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000000040, .ct = 0xE07C30D7E4E26E12 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000000020, .ct = 0x0953E2258E8E90A1 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000000010, .ct = 0x5B711BC4CEEBF2EE },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000000008, .ct = 0xCC083F1E6D9E85F6 },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000000004, .ct = 0xD2FD8867D50D2DFE },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000000002, .ct = 0x06E7EA22CE92708F },
|
||||
.{ .key = 0x0101010101010101, .pt = 0x0000000000000001, .ct = 0x166B40B44ABA4BD6 },
|
||||
|
||||
// Key Permutation tests
|
||||
.{ .key = 0x8001010101010101, .pt = 0x0000000000000000, .ct = 0x95A8D72813DAA94D },
|
||||
.{ .key = 0x4001010101010101, .pt = 0x0000000000000000, .ct = 0x0EEC1487DD8C26D5 },
|
||||
.{ .key = 0x2001010101010101, .pt = 0x0000000000000000, .ct = 0x7AD16FFB79C45926 },
|
||||
.{ .key = 0x1001010101010101, .pt = 0x0000000000000000, .ct = 0xD3746294CA6A6CF3 },
|
||||
.{ .key = 0x0801010101010101, .pt = 0x0000000000000000, .ct = 0x809F5F873C1FD761 },
|
||||
.{ .key = 0x0401010101010101, .pt = 0x0000000000000000, .ct = 0xC02FAFFEC989D1FC },
|
||||
.{ .key = 0x0201010101010101, .pt = 0x0000000000000000, .ct = 0x4615AA1D33E72F10 },
|
||||
.{ .key = 0x0180010101010101, .pt = 0x0000000000000000, .ct = 0x2055123350C00858 },
|
||||
.{ .key = 0x0140010101010101, .pt = 0x0000000000000000, .ct = 0xDF3B99D6577397C8 },
|
||||
.{ .key = 0x0120010101010101, .pt = 0x0000000000000000, .ct = 0x31FE17369B5288C9 },
|
||||
.{ .key = 0x0110010101010101, .pt = 0x0000000000000000, .ct = 0xDFDD3CC64DAE1642 },
|
||||
.{ .key = 0x0108010101010101, .pt = 0x0000000000000000, .ct = 0x178C83CE2B399D94 },
|
||||
.{ .key = 0x0104010101010101, .pt = 0x0000000000000000, .ct = 0x50F636324A9B7F80 },
|
||||
.{ .key = 0x0102010101010101, .pt = 0x0000000000000000, .ct = 0xA8468EE3BC18F06D },
|
||||
.{ .key = 0x0101800101010101, .pt = 0x0000000000000000, .ct = 0xA2DC9E92FD3CDE92 },
|
||||
.{ .key = 0x0101400101010101, .pt = 0x0000000000000000, .ct = 0xCAC09F797D031287 },
|
||||
.{ .key = 0x0101200101010101, .pt = 0x0000000000000000, .ct = 0x90BA680B22AEB525 },
|
||||
.{ .key = 0x0101100101010101, .pt = 0x0000000000000000, .ct = 0xCE7A24F350E280B6 },
|
||||
.{ .key = 0x0101080101010101, .pt = 0x0000000000000000, .ct = 0x882BFF0AA01A0B87 },
|
||||
.{ .key = 0x0101040101010101, .pt = 0x0000000000000000, .ct = 0x25610288924511C2 },
|
||||
.{ .key = 0x0101020101010101, .pt = 0x0000000000000000, .ct = 0xC71516C29C75D170 },
|
||||
.{ .key = 0x0101018001010101, .pt = 0x0000000000000000, .ct = 0x5199C29A52C9F059 },
|
||||
.{ .key = 0x0101014001010101, .pt = 0x0000000000000000, .ct = 0xC22F0A294A71F29F },
|
||||
.{ .key = 0x0101012001010101, .pt = 0x0000000000000000, .ct = 0xEE371483714C02EA },
|
||||
.{ .key = 0x0101011001010101, .pt = 0x0000000000000000, .ct = 0xA81FBD448F9E522F },
|
||||
.{ .key = 0x0101010801010101, .pt = 0x0000000000000000, .ct = 0x4F644C92E192DFED },
|
||||
.{ .key = 0x0101010401010101, .pt = 0x0000000000000000, .ct = 0x1AFA9A66A6DF92AE },
|
||||
.{ .key = 0x0101010201010101, .pt = 0x0000000000000000, .ct = 0xB3C1CC715CB879D8 },
|
||||
.{ .key = 0x0101010180010101, .pt = 0x0000000000000000, .ct = 0x19D032E64AB0BD8B },
|
||||
.{ .key = 0x0101010140010101, .pt = 0x0000000000000000, .ct = 0x3CFAA7A7DC8720DC },
|
||||
.{ .key = 0x0101010120010101, .pt = 0x0000000000000000, .ct = 0xB7265F7F447AC6F3 },
|
||||
.{ .key = 0x0101010110010101, .pt = 0x0000000000000000, .ct = 0x9DB73B3C0D163F54 },
|
||||
.{ .key = 0x0101010108010101, .pt = 0x0000000000000000, .ct = 0x8181B65BABF4A975 },
|
||||
.{ .key = 0x0101010104010101, .pt = 0x0000000000000000, .ct = 0x93C9B64042EAA240 },
|
||||
.{ .key = 0x0101010102010101, .pt = 0x0000000000000000, .ct = 0x5570530829705592 },
|
||||
.{ .key = 0x0101010101800101, .pt = 0x0000000000000000, .ct = 0x8638809E878787A0 },
|
||||
.{ .key = 0x0101010101400101, .pt = 0x0000000000000000, .ct = 0x41B9A79AF79AC208 },
|
||||
.{ .key = 0x0101010101200101, .pt = 0x0000000000000000, .ct = 0x7A9BE42F2009A892 },
|
||||
.{ .key = 0x0101010101100101, .pt = 0x0000000000000000, .ct = 0x29038D56BA6D2745 },
|
||||
.{ .key = 0x0101010101080101, .pt = 0x0000000000000000, .ct = 0x5495C6ABF1E5DF51 },
|
||||
.{ .key = 0x0101010101040101, .pt = 0x0000000000000000, .ct = 0xAE13DBD561488933 },
|
||||
.{ .key = 0x0101010101020101, .pt = 0x0000000000000000, .ct = 0x024D1FFA8904E389 },
|
||||
.{ .key = 0x0101010101018001, .pt = 0x0000000000000000, .ct = 0xD1399712F99BF02E },
|
||||
.{ .key = 0x0101010101014001, .pt = 0x0000000000000000, .ct = 0x14C1D7C1CFFEC79E },
|
||||
.{ .key = 0x0101010101012001, .pt = 0x0000000000000000, .ct = 0x1DE5279DAE3BED6F },
|
||||
.{ .key = 0x0101010101011001, .pt = 0x0000000000000000, .ct = 0xE941A33F85501303 },
|
||||
.{ .key = 0x0101010101010801, .pt = 0x0000000000000000, .ct = 0xDA99DBBC9A03F379 },
|
||||
.{ .key = 0x0101010101010401, .pt = 0x0000000000000000, .ct = 0xB7FC92F91D8E92E9 },
|
||||
.{ .key = 0x0101010101010201, .pt = 0x0000000000000000, .ct = 0xAE8E5CAA3CA04E85 },
|
||||
.{ .key = 0x0101010101010180, .pt = 0x0000000000000000, .ct = 0x9CC62DF43B6EED74 },
|
||||
.{ .key = 0x0101010101010140, .pt = 0x0000000000000000, .ct = 0xD863DBB5C59A91A0 },
|
||||
.{ .key = 0x0101010101010120, .pt = 0x0000000000000000, .ct = 0xA1AB2190545B91D7 },
|
||||
.{ .key = 0x0101010101010110, .pt = 0x0000000000000000, .ct = 0x0875041E64C570F7 },
|
||||
.{ .key = 0x0101010101010108, .pt = 0x0000000000000000, .ct = 0x5A594528BEBEF1CC },
|
||||
.{ .key = 0x0101010101010104, .pt = 0x0000000000000000, .ct = 0xFCDB3291DE21F0C0 },
|
||||
.{ .key = 0x0101010101010102, .pt = 0x0000000000000000, .ct = 0x869EFD7F9F265A09 },
|
||||
|
||||
// Test of right-shifts in Decryption
|
||||
.{ .key = 0x8001010101010101, .pt = 0x95A8D72813DAA94D, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x4001010101010101, .pt = 0x0EEC1487DD8C26D5, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x2001010101010101, .pt = 0x7AD16FFB79C45926, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x1001010101010101, .pt = 0xD3746294CA6A6CF3, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0801010101010101, .pt = 0x809F5F873C1FD761, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0401010101010101, .pt = 0xC02FAFFEC989D1FC, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0201010101010101, .pt = 0x4615AA1D33E72F10, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0180010101010101, .pt = 0x2055123350C00858, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0140010101010101, .pt = 0xDF3B99D6577397C8, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0120010101010101, .pt = 0x31FE17369B5288C9, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0110010101010101, .pt = 0xDFDD3CC64DAE1642, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0108010101010101, .pt = 0x178C83CE2B399D94, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0104010101010101, .pt = 0x50F636324A9B7F80, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0102010101010101, .pt = 0xA8468EE3BC18F06D, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101800101010101, .pt = 0xA2DC9E92FD3CDE92, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101400101010101, .pt = 0xCAC09F797D031287, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101200101010101, .pt = 0x90BA680B22AEB525, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101100101010101, .pt = 0xCE7A24F350E280B6, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101080101010101, .pt = 0x882BFF0AA01A0B87, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101040101010101, .pt = 0x25610288924511C2, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101020101010101, .pt = 0xC71516C29C75D170, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101018001010101, .pt = 0x5199C29A52C9F059, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101014001010101, .pt = 0xC22F0A294A71F29F, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101012001010101, .pt = 0xEE371483714C02EA, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101011001010101, .pt = 0xA81FBD448F9E522F, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010801010101, .pt = 0x4F644C92E192DFED, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010401010101, .pt = 0x1AFA9A66A6DF92AE, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010201010101, .pt = 0xB3C1CC715CB879D8, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010180010101, .pt = 0x19D032E64AB0BD8B, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010140010101, .pt = 0x3CFAA7A7DC8720DC, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010120010101, .pt = 0xB7265F7F447AC6F3, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010110010101, .pt = 0x9DB73B3C0D163F54, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010108010101, .pt = 0x8181B65BABF4A975, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010104010101, .pt = 0x93C9B64042EAA240, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010102010101, .pt = 0x5570530829705592, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101800101, .pt = 0x8638809E878787A0, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101400101, .pt = 0x41B9A79AF79AC208, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101200101, .pt = 0x7A9BE42F2009A892, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101100101, .pt = 0x29038D56BA6D2745, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101080101, .pt = 0x5495C6ABF1E5DF51, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101040101, .pt = 0xAE13DBD561488933, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101020101, .pt = 0x024D1FFA8904E389, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101018001, .pt = 0xD1399712F99BF02E, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101014001, .pt = 0x14C1D7C1CFFEC79E, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101012001, .pt = 0x1DE5279DAE3BED6F, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101011001, .pt = 0xE941A33F85501303, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101010801, .pt = 0xDA99DBBC9A03F379, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101010401, .pt = 0xB7FC92F91D8E92E9, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101010201, .pt = 0xAE8E5CAA3CA04E85, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101010180, .pt = 0x9CC62DF43B6EED74, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101010140, .pt = 0xD863DBB5C59A91A0, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101010120, .pt = 0xA1AB2190545B91D7, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101010110, .pt = 0x0875041E64C570F7, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101010108, .pt = 0x5A594528BEBEF1CC, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101010104, .pt = 0xFCDB3291DE21F0C0, .ct = 0x0000000000000000 },
|
||||
.{ .key = 0x0101010101010102, .pt = 0x869EFD7F9F265A09, .ct = 0x0000000000000000 },
|
||||
|
||||
// Data permutation test
|
||||
.{ .key = 0x1046913489980131, .pt = 0x0000000000000000, .ct = 0x88D55E54F54C97B4 },
|
||||
.{ .key = 0x1007103489988020, .pt = 0x0000000000000000, .ct = 0x0C0CC00C83EA48FD },
|
||||
.{ .key = 0x10071034C8980120, .pt = 0x0000000000000000, .ct = 0x83BC8EF3A6570183 },
|
||||
.{ .key = 0x1046103489988020, .pt = 0x0000000000000000, .ct = 0xDF725DCAD94EA2E9 },
|
||||
.{ .key = 0x1086911519190101, .pt = 0x0000000000000000, .ct = 0xE652B53B550BE8B0 },
|
||||
.{ .key = 0x1086911519580101, .pt = 0x0000000000000000, .ct = 0xAF527120C485CBB0 },
|
||||
.{ .key = 0x5107B01519580101, .pt = 0x0000000000000000, .ct = 0x0F04CE393DB926D5 },
|
||||
.{ .key = 0x1007B01519190101, .pt = 0x0000000000000000, .ct = 0xC9F00FFC74079067 },
|
||||
.{ .key = 0x3107915498080101, .pt = 0x0000000000000000, .ct = 0x7CFD82A593252B4E },
|
||||
.{ .key = 0x3107919498080101, .pt = 0x0000000000000000, .ct = 0xCB49A2F9E91363E3 },
|
||||
.{ .key = 0x10079115B9080140, .pt = 0x0000000000000000, .ct = 0x00B588BE70D23F56 },
|
||||
.{ .key = 0x3107911598080140, .pt = 0x0000000000000000, .ct = 0x406A9A6AB43399AE },
|
||||
.{ .key = 0x1007D01589980101, .pt = 0x0000000000000000, .ct = 0x6CB773611DCA9ADA },
|
||||
.{ .key = 0x9107911589980101, .pt = 0x0000000000000000, .ct = 0x67FD21C17DBB5D70 },
|
||||
.{ .key = 0x9107D01589190101, .pt = 0x0000000000000000, .ct = 0x9592CB4110430787 },
|
||||
.{ .key = 0x1007D01598980120, .pt = 0x0000000000000000, .ct = 0xA6B7FF68A318DDD3 },
|
||||
.{ .key = 0x1007940498190101, .pt = 0x0000000000000000, .ct = 0x4D102196C914CA16 },
|
||||
.{ .key = 0x0107910491190401, .pt = 0x0000000000000000, .ct = 0x2DFA9F4573594965 },
|
||||
.{ .key = 0x0107910491190101, .pt = 0x0000000000000000, .ct = 0xB46604816C0E0774 },
|
||||
.{ .key = 0x0107940491190401, .pt = 0x0000000000000000, .ct = 0x6E7E6221A4F34E87 },
|
||||
.{ .key = 0x19079210981A0101, .pt = 0x0000000000000000, .ct = 0xAA85E74643233199 },
|
||||
.{ .key = 0x1007911998190801, .pt = 0x0000000000000000, .ct = 0x2E5A19DB4D1962D6 },
|
||||
.{ .key = 0x10079119981A0801, .pt = 0x0000000000000000, .ct = 0x23A866A809D30894 },
|
||||
.{ .key = 0x1007921098190101, .pt = 0x0000000000000000, .ct = 0xD812D961F017D320 },
|
||||
.{ .key = 0x100791159819010B, .pt = 0x0000000000000000, .ct = 0x055605816E58608F },
|
||||
.{ .key = 0x1004801598190101, .pt = 0x0000000000000000, .ct = 0xABD88E8B1B7716F1 },
|
||||
.{ .key = 0x1004801598190102, .pt = 0x0000000000000000, .ct = 0x537AC95BE69DA1E1 },
|
||||
.{ .key = 0x1004801598190108, .pt = 0x0000000000000000, .ct = 0xAED0F6AE3C25CDD8 },
|
||||
.{ .key = 0x1002911498100104, .pt = 0x0000000000000000, .ct = 0xB3E35A5EE53E7B8D },
|
||||
.{ .key = 0x1002911598190104, .pt = 0x0000000000000000, .ct = 0x61C79C71921A2EF8 },
|
||||
.{ .key = 0x1002911598100201, .pt = 0x0000000000000000, .ct = 0xE2F5728F0995013C },
|
||||
.{ .key = 0x1002911698100101, .pt = 0x0000000000000000, .ct = 0x1AEAC39A61F0A464 },
|
||||
|
||||
// S-Box test
|
||||
.{ .key = 0x7CA110454A1A6E57, .pt = 0x01A1D6D039776742, .ct = 0x690F5B0D9A26939B },
|
||||
.{ .key = 0x0131D9619DC1376E, .pt = 0x5CD54CA83DEF57DA, .ct = 0x7A389D10354BD271 },
|
||||
.{ .key = 0x07A1133E4A0B2686, .pt = 0x0248D43806F67172, .ct = 0x868EBB51CAB4599A },
|
||||
.{ .key = 0x3849674C2602319E, .pt = 0x51454B582DDF440A, .ct = 0x7178876E01F19B2A },
|
||||
.{ .key = 0x04B915BA43FEB5B6, .pt = 0x42FD443059577FA2, .ct = 0xAF37FB421F8C4095 },
|
||||
.{ .key = 0x0113B970FD34F2CE, .pt = 0x059B5E0851CF143A, .ct = 0x86A560F10EC6D85B },
|
||||
.{ .key = 0x0170F175468FB5E6, .pt = 0x0756D8E0774761D2, .ct = 0x0CD3DA020021DC09 },
|
||||
.{ .key = 0x43297FAD38E373FE, .pt = 0x762514B829BF486A, .ct = 0xEA676B2CB7DB2B7A },
|
||||
.{ .key = 0x07A7137045DA2A16, .pt = 0x3BDD119049372802, .ct = 0xDFD64A815CAF1A0F },
|
||||
.{ .key = 0x04689104C2FD3B2F, .pt = 0x26955F6835AF609A, .ct = 0x5C513C9C4886C088 },
|
||||
.{ .key = 0x37D06BB516CB7546, .pt = 0x164D5E404F275232, .ct = 0x0A2AEEAE3FF4AB77 },
|
||||
.{ .key = 0x1F08260D1AC2465E, .pt = 0x6B056E18759F5CCA, .ct = 0xEF1BF03E5DFA575A },
|
||||
.{ .key = 0x584023641ABA6176, .pt = 0x004BD6EF09176062, .ct = 0x88BF0DB6D70DEE56 },
|
||||
.{ .key = 0x025816164629B007, .pt = 0x480D39006EE762F2, .ct = 0xA1F9915541020B56 },
|
||||
.{ .key = 0x49793EBC79B3258F, .pt = 0x437540C8698F3CFA, .ct = 0x6FBF1CAFCFFD0556 },
|
||||
.{ .key = 0x4FB05E1515AB73A7, .pt = 0x072D43A077075292, .ct = 0x2F22E49BAB7CA1AC },
|
||||
.{ .key = 0x49E95D6D4CA229BF, .pt = 0x02FE55778117F12A, .ct = 0x5A6B612CC26CCE4A },
|
||||
.{ .key = 0x018310DC409B26D6, .pt = 0x1D9D5C5018F728C2, .ct = 0x5F4C038ED12B2E41 },
|
||||
.{ .key = 0x1C587F1C13924FEF, .pt = 0x305532286D6F295A, .ct = 0x63FAC0D034D9F793 },
|
||||
};
|
||||
|
||||
var key: [des.DES_ENCODED_KEY_SIZE]u8 = undefined;
|
||||
var pt: [des.DES_BLOCK_SIZE]u8 = undefined;
|
||||
var ct: [des.DES_BLOCK_SIZE]u8 = undefined;
|
||||
var buffer: [des.DES_BLOCK_SIZE]u8 = undefined;
|
||||
|
||||
for (tests) |t| {
|
||||
std.mem.writeInt(u64, &key, t.key, .big);
|
||||
std.mem.writeInt(u64, &pt, t.pt, .big);
|
||||
std.mem.writeInt(u64, &ct, t.ct, .big);
|
||||
|
||||
// Test encryption.
|
||||
des.des_encrypt_block(&key, &pt, &buffer);
|
||||
try testing.expectEqualSlices(u8, &ct, &buffer);
|
||||
|
||||
// TODO: Test decryption.
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user