aboutsummaryrefslogtreecommitdiff
path: root/Additional_Implementations/Atmel_AVR.c
diff options
context:
space:
mode:
Diffstat (limited to 'Additional_Implementations/Atmel_AVR.c')
-rw-r--r--Additional_Implementations/Atmel_AVR.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/Additional_Implementations/Atmel_AVR.c b/Additional_Implementations/Atmel_AVR.c
new file mode 100644
index 000000000000..11cfdd8d74f8
--- /dev/null
+++ b/Additional_Implementations/Atmel_AVR.c
@@ -0,0 +1,77 @@
+#include <stdio.h>
+#include "skein.h"
+
+#define SKEIN_CODE_SIZE (1) /* instantiate code size routines */
+#define SKEIN_LOOP (111) /* unroll only 8 rounds */
+#define SKEIN_USE_ASM (512+1024) /* what to exclude here */
+#include "skein.c"
+#include "skein_block.c"
+
+/* for code size limitations, make "dummy" versions of unused block functions */
+#if SKEIN_USE_ASM & 256
+void Skein_256_Process_Block(Skein_256_Ctxt_t *ctx,const u08b_t *blkPtr,size_t blkCnt,size_t byteCntAdd) { }
+#endif
+#if SKEIN_USE_ASM & 512
+void Skein_512_Process_Block(Skein_512_Ctxt_t *ctx,const u08b_t *blkPtr,size_t blkCnt,size_t byteCntAdd) { }
+#endif
+#if SKEIN_USE_ASM & 1024
+void Skein1024_Process_Block(Skein1024_Ctxt_t *ctx,const u08b_t *blkPtr,size_t blkCnt,size_t byteCntAdd) { }
+#endif
+
+const u08b_t msg[1] =
+ {
+ 0
+ };
+
+int main(int argc,char *argv[])
+ {
+ u08b_t hash[1024/8];
+ u08b_t i,x;
+ static size_t aBytes,bBytes,uCount;
+
+#if !(SKEIN_USE_ASM & 256)
+ Skein_256_Ctxt_t ctx;
+
+ aBytes = 2*Skein_256_API_CodeSize();
+ bBytes = 2*Skein_256_Process_Block_CodeSize();
+ uCount = Skein_256_Unroll_Cnt();
+
+ Skein_256_Init (&ctx,256);
+ Skein_256_Update(&ctx,msg,sizeof(msg));
+ Skein_256_Final (&ctx,hash);
+
+ Skein_256_Process_Block(&ctx,msg,1,256);
+#endif
+
+#if !(SKEIN_USE_ASM & 512)
+ Skein_512_Ctxt_t ctx;
+
+ aBytes = 2*Skein_512_API_CodeSize();
+ bBytes = 2*Skein_512_Process_Block_CodeSize();
+ uCount = Skein_512_Unroll_Cnt();
+
+ Skein_512_Init (&ctx,512);
+ Skein_512_Update(&ctx,msg,sizeof(msg));
+ Skein_512_Final (&ctx,hash);
+
+ Skein_512_Process_Block(&ctx,msg,1,512);
+#endif
+
+#if !(SKEIN_USE_ASM & 1024)
+ Skein1024_Ctxt_t ctx;
+
+ aBytes = 2*Skein1024_API_CodeSize();
+ bBytes = 2*Skein1024_Process_Block_CodeSize();
+ uCount = Skein1024_Unroll_Cnt();
+
+ Skein1024_Init (&ctx,1024);
+ Skein1024_Update(&ctx,msg,sizeof(msg));
+ Skein1024_Final (&ctx,hash);
+
+ Skein1024_Process_Block(&ctx,msg,1,1024);
+#endif
+ printf("API size = %4d bytes. Block size = %4d bytes. Unroll=%d\n",
+ aBytes,bBytes,uCount);
+ for (i=x=0;i<5;i++)
+ printf("hash[%d] = %02X [%02X]\n",i,hash[i],x ^= hash[i]);
+ }