Skip to content

Commit

Permalink
Added debug flag to program and updated test.sh to cover more testcases
Browse files Browse the repository at this point in the history
  • Loading branch information
jvdsn committed May 26, 2021
1 parent e396d35 commit 108c979
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 41 deletions.
10 changes: 10 additions & 0 deletions src/main.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import logging
from argparse import ArgumentParser
from pathlib import Path

import external_encodings
from code_generator.bit_packed import BitPackedCodeGenerator
Expand All @@ -22,8 +23,13 @@
parser.add_argument("--key-size", nargs="?", type=int, default=256, choices=[64, 96, 128, 192, 256], help="the key size in bits of the Speck implementation (default: %(default)i)")
parser.add_argument("--output-dir", nargs="?", default=".", help="the directory to output the C files to (default: %(default)s)")
parser.add_argument("--self-equivalences", nargs="?", default="affine", choices=["affine", "linear"], help="the type of self-equivalences to use (default: %(default)s)")
parser.add_argument("--debug", action="store_true", help="log debug messages")

args = parser.parse_args()

if args.debug:
logging.basicConfig(format='%(asctime)s.%(msecs)03d %(levelname)s %(message)s', datefmt='%Y-%m-%d,%H:%M:%S', level=logging.DEBUG)

word_size = args.block_size // 2

white_box_speck = WhiteBoxSpeck(args.block_size, args.key_size, list(map(lambda k: int(k, 16), args.key)))
Expand All @@ -41,6 +47,10 @@
logging.debug(f"Generating matrices and vectors using {args.self_equivalences} self-equivalences...")
matrices, vectors = white_box_speck.affine_layers(input_external_encoding, output_external_encoding, self_equivalence_provider)

if args.output_dir:
# Make sure the output directory exists.
Path(args.output_dir).mkdir(parents=True, exist_ok=True)

logging.debug("Generating default code...")
with open(args.output_dir + "/default_white_box_speck.c", "w") as f:
f.write(DefaultCodeGenerator().generate_code(matrices, vectors))
Expand Down
72 changes: 31 additions & 41 deletions test.sh
Original file line number Diff line number Diff line change
@@ -1,41 +1,31 @@
#!/bin/sh

python src/main.py --block-size 128 --key-size 256 1f1e1d1c1b1a1918 1716151413121110 0f0e0d0c0b0a0908 0706050403020100
gcc -o inverse_input_external_encoding inverse_input_external_encoding.c
gcc -o inverse_output_external_encoding inverse_output_external_encoding.c

gcc -o speck default_white_box_speck.c
./inverse_output_external_encoding $(./speck $(./inverse_input_external_encoding 65736f6874206e49 202e72656e6f6f70))
rm speck

gcc -o speck sparse_matrix_white_box_speck.c
./inverse_output_external_encoding $(./speck $(./inverse_input_external_encoding 65736f6874206e49 202e72656e6f6f70))
rm speck

gcc -o speck inlined_white_box_speck.c
./inverse_output_external_encoding $(./speck $(./inverse_input_external_encoding 65736f6874206e49 202e72656e6f6f70))
rm speck

gcc -o speck bit_packed_white_box_speck.c
./inverse_output_external_encoding $(./speck $(./inverse_input_external_encoding 65736f6874206e49 202e72656e6f6f70))
rm speck

gcc -o speck inlined_bit_packed_white_box_speck.c
./inverse_output_external_encoding $(./speck $(./inverse_input_external_encoding 65736f6874206e49 202e72656e6f6f70))
rm speck

gcc -o speck -march=native simd_white_box_speck.c
./inverse_output_external_encoding $(./speck $(./inverse_input_external_encoding 65736f6874206e49 202e72656e6f6f70))
rm speck

rm inverse_input_external_encoding
rm inverse_output_external_encoding

rm inverse_input_external_encoding.c
rm inverse_output_external_encoding.c
rm default_white_box_speck.c
rm sparse_matrix_white_box_speck.c
rm inlined_white_box_speck.c
rm bit_packed_white_box_speck.c
rm inlined_bit_packed_white_box_speck.c
rm simd_white_box_speck.c
#!/bin/bash

BLOCK_SIZES=(32 64 64 128 128 128)
KEY_SIZES=(64 96 128 128 192 256)
# From Speck test vectors.
KEYS=("1918 1110 0908 0100" "13121110 0b0a0908 03020100" "1b1a1918 13121110 0b0a0908 03020100" "0f0e0d0c0b0a0908 0706050403020100" "1716151413121110 0f0e0d0c0b0a0908 0706050403020100" "1f1e1d1c1b1a1918 1716151413121110 0f0e0d0c0b0a0908 0706050403020100")
PLAINTEXTS=("6574 694c" "74614620 736e6165" "3b726574 7475432d" "6c61766975716520 7469206564616d20" "7261482066656968 43206f7420746e65" "65736f6874206e49 202e72656e6f6f70")
CIPHERTEXTS=("a868 42f2" "9f7952ec 4175946c" "8c6fa548 454e028b" "a65d985179783265 7860fedf5c570d18" "1be4cf3a13135566 f9bc185de03c1886" "4109010405c0f53e 4eeeb48d9c188f43")

STRATEGIES=("default_white_box_speck.c" "sparse_matrix_white_box_speck.c" "inlined_white_box_speck.c" "bit_packed_white_box_speck.c" "inlined_bit_packed_white_box_speck.c" "simd_white_box_speck.c")

for ((i = 0; i < ${#BLOCK_SIZES[@]}; i++)); do
echo "Testing Speck${BLOCK_SIZES[i]}/${KEY_SIZES[i]} with key '${KEYS[i]}'"
python src/main.py --block-size ${BLOCK_SIZES[i]} --key-size ${KEY_SIZES[i]} --debug ${KEYS[i]}

gcc -o inverse_input_external_encoding inverse_input_external_encoding.c
gcc -o inverse_output_external_encoding inverse_output_external_encoding.c

for strategy in "${STRATEGIES[@]}"; do
gcc -march=native -o speck $strategy
ciphertext=$(./inverse_output_external_encoding $(./speck $(./inverse_input_external_encoding ${PLAINTEXTS[i]})))
echo "Expected '${CIPHERTEXTS[i]}', got '$ciphertext'"
rm speck
rm $strategy
done

rm inverse_input_external_encoding
rm inverse_output_external_encoding
rm inverse_input_external_encoding.c
rm inverse_output_external_encoding.c
done

0 comments on commit 108c979

Please sign in to comment.