]> AND Private Git Repository - Cipher_code.git/blob - Arduino/libraries/AESLib-master_old/blockcipher_descriptor.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
update of one round with last modifs
[Cipher_code.git] / Arduino / libraries / AESLib-master_old / blockcipher_descriptor.h
1 /* blockcipher_descriptor.h */
2 /*
3     This file is part of the AVR-Crypto-Lib.
4     Copyright (C) 2008  Daniel Otte (daniel.otte@rub.de)
5
6     This program is free software: you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation, either version 3 of the License, or
9     (at your option) any later version.
10
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19 /**
20  * \file                blockcipher_descriptor.h
21  * \author              Daniel Otte 
22  * \date                2009-02-04
23  * 
24  * \license         GPLv3 or later
25  * 
26  */
27
28 #ifndef BLOCKCIPHER_DESCRIPTOR_H_
29 #define BLOCKCIPHER_DESCRIPTOR_H_
30 #include <stdint.h>
31 #if (defined(AVR))
32 #include <avr\pgmspace.h>
33 #else
34 #include <pgmspace.h>
35 #endif
36
37 #ifndef VOID_FPT
38 #define VOID_FPT
39 typedef void(*void_fpt)(void);
40 #endif
41
42 typedef void(*bc_init1_fpt)(void*, void*);
43 typedef void(*bc_init2_fpt)(void*, uint16_t,void*);
44 typedef void(*bc_enc1_fpt)(void*, void*);
45 typedef void(*bc_enc2_fpt)(void*, void*, void*);
46 typedef void(*bc_dec1_fpt)(void*, void*);
47 typedef void(*bc_dec2_fpt)(void*, void*, void*);
48 typedef void(*bc_free_fpt)(void*);
49
50 typedef union{
51         void_fpt  initvoid;
52         bc_init1_fpt init1;
53         bc_init2_fpt init2;
54 } bc_init_fpt;
55
56 typedef union{
57         void_fpt  encvoid;
58         bc_enc1_fpt enc1;
59         bc_enc2_fpt enc2;
60 } bc_enc_fpt;
61
62 typedef union{
63         void_fpt  decvoid;
64         bc_dec1_fpt dec1;
65         bc_dec2_fpt dec2;
66 } bc_dec_fpt;
67
68 #define BC_INIT_TYPE   0x01
69 #define BC_INIT_TYPE_1 0x00 /* for fix keylength */
70 #define BC_INIT_TYPE_2 0x01 /* keylength is passed as second parameter */
71
72 #define BC_ENC_TYPE    0x02
73 #define BC_ENC_TYPE_1  0x00
74 #define BC_ENC_TYPE_2  0x02
75 #
76 #define BC_DEC_TYPE    0x04
77 #define BC_DEC_TYPE_1  0x00
78 #define BC_DEC_TYPE_2  0x04
79
80 #define BCDESC_TYPE_BLOCKCIPHER 0x01
81
82 typedef struct {
83         uint8_t  type; /* 1==blockcipher */
84         uint8_t  flags;
85         PGM_P    name;
86         uint16_t ctxsize_B;
87         uint16_t blocksize_b;
88         bc_init_fpt init;
89         bc_enc_fpt  enc;
90         bc_dec_fpt  dec;
91         bc_free_fpt free;
92         PGM_VOID_P valid_keysize_desc;
93 } bcdesc_t; /* blockcipher descriptor type */
94
95 typedef struct{
96         bcdesc_t* desc_ptr;
97         uint16_t  keysize;
98         void*     ctx;
99 } bcgen_ctx_t;
100
101 #endif /* BLOCKCIPHER_DESCRIPTOR_H_ */
102