]> git.cryptolib.org Git - avr-crypto-lib.git/blob - shacal1_enc.c
82fb722d8981f00a993685fef6fe41ded7a43d54
[avr-crypto-lib.git] / shacal1_enc.c
1 /**
2  * \file        shacal1_enc.c
3  * \author      Daniel Otte
4  * \date        2008-05-06
5  * \par License:
6  * GPL
7  * \brief SHACAL1 encryption only implementation.
8  * 
9  */
10
11 #include <stdint.h>
12 #include <string.h>
13 #include "sha1.h"
14 #include "shacal1_enc.h"
15
16 void shacal1_enc(void* buffer, void* key, uint16_t keysize_b){
17         sha1_ctx_t ctx, t_ctx;
18         uint8_t i;
19         memcpy(t_ctx.h, buffer, SHA1_HASH_BITS/8);
20         
21         uint8_t keybuffer[SHA1_BLOCK_BITS/8];
22         memset(keybuffer, 0, SHA1_BLOCK_BITS/8);
23         if(keysize_b>SHA1_BLOCK_BITS)
24                 keysize_b=SHA1_BLOCK_BITS;
25         memcpy(keybuffer, key, (keysize_b+7)/8);
26         
27         memcpy(t_ctx.h, buffer, SHA1_HASH_BITS/8);
28         sha1_ctx2hash((sha1_hash_t*)(&(ctx.h[0])), &t_ctx);
29         memcpy(t_ctx.h, ctx.h, SHA1_HASH_BITS/8);
30         sha1_nextBlock(&ctx, keybuffer);
31         for(i=0; i<5; ++i)
32                 ctx.h[i] -= t_ctx.h[i];
33         sha1_ctx2hash(buffer, &ctx);
34 }
35
36