aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2015-05-24 16:44:40 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2015-05-24 16:44:40 +0300
commit315098f2da4f0d4990b432ad7a932a2918af1dfb (patch)
tree5400b525c2b02bdb890ec2a9eb643eab6f9549c2 /src
parentadd state-to-block conversion function (diff)
downloadaes-tools-315098f2da4f0d4990b432ad7a932a2918af1dfb.tar.gz
aes-tools-315098f2da4f0d4990b432ad7a932a2918af1dfb.zip
add block formatting/printing functions
Diffstat (limited to 'src')
-rw-r--r--src/common.c138
1 files changed, 126 insertions, 12 deletions
diff --git a/src/common.c b/src/common.c
index f4020db..c15da4e 100644
--- a/src/common.c
+++ b/src/common.c
@@ -12,32 +12,146 @@
#include <stdio.h>
-AesBlock make_aes_block(int highest, int high, int low, int lowest)
+AesBlock128 make_aes_block128(int hi3, int hi2, int lo1, int lo0)
{
- return _mm_set_epi32(highest, high, low, lowest);
+ return _mm_set_epi32(hi3, hi2, lo1, lo0);
}
-AesState aes_block_to_state(AesBlock block)
+AesBlock192 make_aes_block192(int hi5, int hi4, int lo3, int lo2, int lo1, int lo0)
{
- AesState state;
- _mm_storeu_si128((__m128i*) &state.bytes, block);
- return state;
+ AesBlock192 result;
+ result.hi = make_aes_block128( 0, 0, hi5, hi4);
+ result.lo = make_aes_block128(lo3, lo2, lo1, lo0);
+ return result;
}
-AesBlock aes_state_to_block(AesState state)
+AesBlock256 make_aes_block256(int hi7, int hi6, int hi5, int hi4, int lo3, int lo2, int lo1, int lo0)
{
- return _mm_loadu_si128((__m128i*) &state.bytes);
+ AesBlock256 result;
+ result.hi = make_aes_block128(hi7, hi6, hi5, hi4);
+ result.lo = make_aes_block128(lo3, lo2, lo1, lo0);
+ return result;
}
-void print_aes_block(AesBlock block)
+AesBlockString128 format_aes_block128(AesBlock128* block)
+{
+ int i;
+ char *cursor;
+ AesBlockString128 result;
+
+ for (i = 0, cursor = result.str; i < 16; ++i, cursor += 2)
+ sprintf(cursor, "%02x", *((unsigned char*) block + 15 - i));
+
+ *cursor = '\0';
+ return result;
+}
+
+AesBlockString192 format_aes_block192(AesBlock192* block)
+{
+ int i;
+ char *cursor;
+ AesBlockString192 result;
+
+ for (i = 0, cursor = result.str; i < 24; ++i, cursor += 2)
+ sprintf(cursor, "%02x", *((unsigned char*) block + 15 - i));
+
+ *cursor = '\0';
+ return result;
+}
+
+AesBlockString256 format_aes_block256(AesBlock256* block)
+{
+ int i;
+ char *cursor;
+ AesBlockString256 result;
+
+ for (i = 0, cursor = result.str; i < 32; ++i, cursor += 2)
+ sprintf(cursor, "%02x", *((unsigned char*) block + 15 - i));
+
+ *cursor = '\0';
+ return result;
+}
+
+AesBlockString128 format_aes_block128_fips_style(AesBlock128* block)
+{
+ int i;
+ char *cursor;
+ AesBlockString128 result;
+
+ for (i = 0, cursor = result.str; i < 16; ++i, cursor += 2)
+ sprintf(cursor, "%02x", *((unsigned char*) block + i));
+
+ *cursor = '\0';
+ return result;
+}
+
+AesBlockString192 format_aes_block192_fips_style(AesBlock192* block)
+{
+ int i;
+ char *cursor;
+ AesBlockString192 result;
+
+ for (i = 0, cursor = result.str; i < 24; ++i, cursor += 2)
+ sprintf(cursor, "%02x", *((unsigned char*) block + i));
+
+ *cursor = '\0';
+ return result;
+}
+
+AesBlockString256 format_aes_block256_fips_style(AesBlock256* block)
+{
+ int i;
+ char *cursor;
+ AesBlockString256 result;
+
+ for (i = 0, cursor = result.str; i < 32; ++i, cursor += 2)
+ sprintf(cursor, "%02x", *((unsigned char*) block + i));
+
+ *cursor = '\0';
+ return result;
+}
+
+void print_aes_block128(AesBlock128* block)
+{
+ printf("%s\n", format_aes_block128(block).str);
+}
+
+void print_aes_block192(AesBlock192* block)
+{
+ printf("%s\n", format_aes_block192(block).str);
+}
+
+void print_aes_block256(AesBlock256* block)
+{
+ printf("%s\n", format_aes_block256(block).str);
+}
+
+void print_aes_block128_fips_style(AesBlock128* block)
+{
+ printf("%s\n", format_aes_block128_fips_style(block).str);
+}
+
+void print_aes_block192_fips_style(AesBlock192* block)
+{
+ printf("%s\n", format_aes_block192_fips_style(block).str);
+}
+
+void print_aes_block256_fips_style(AesBlock256* block)
+{
+ printf("%s\n", format_aes_block256_fips_style(block).str);
+}
+
+void print_aes_block128_fips_matrix_style(AesBlock128* block)
{
int i, j;
- AesState state = aes_block_to_state(block);
+ __declspec(align(16)) unsigned char bytes[4][4];
+
+ _mm_store_si128((AesBlock128*) bytes, *block);
for (i = 0; i < 4; ++i)
{
for (j = 0; j < 3; ++j)
- printf("%02x ", state.bytes[j][i]);
- printf("%02x\n", state.bytes[3][i]);
+ printf("%02x ", bytes[j][i]);
+ printf("%02x\n", bytes[3][i]);
}
}