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

Private GIT Repository
update scprng
[Cipher_code.git] / Arduino / libraries / AESLib-master / 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
38 #ifndef VOID_FPT
39 #define VOID_FPT
40 typedef void(*void_fpt)(void);
41 #endif
42
43 typedef void(*bc_init1_fpt)(void*, void*);
44 typedef void(*bc_init2_fpt)(void*, uint16_t,void*);
45 typedef void(*bc_enc1_fpt)(void*, void*);
46 typedef void(*bc_enc2_fpt)(void*, void*, void*);
47 typedef void(*bc_dec1_fpt)(void*, void*);
48 typedef void(*bc_dec2_fpt)(void*, void*, void*);
49 typedef void(*bc_free_fpt)(void*);
50
51 typedef union{
52         void_fpt  initvoid;
53         bc_init1_fpt init1;
54         bc_init2_fpt init2;
55 } bc_init_fpt;
56
57 typedef union{
58         void_fpt  encvoid;
59         bc_enc1_fpt enc1;
60         bc_enc2_fpt enc2;
61 } bc_enc_fpt;
62
63 typedef union{
64         void_fpt  decvoid;
65         bc_dec1_fpt dec1;
66         bc_dec2_fpt dec2;
67 } bc_dec_fpt;
68
69 #define BC_INIT_TYPE   0x01
70 #define BC_INIT_TYPE_1 0x00 /* for fix keylength */
71 #define BC_INIT_TYPE_2 0x01 /* keylength is passed as second parameter */
72
73 #define BC_ENC_TYPE    0x02
74 #define BC_ENC_TYPE_1  0x00
75 #define BC_ENC_TYPE_2  0x02
76 #
77 #define BC_DEC_TYPE    0x04
78 #define BC_DEC_TYPE_1  0x00
79 #define BC_DEC_TYPE_2  0x04
80
81 #define BCDESC_TYPE_BLOCKCIPHER 0x01
82
83 typedef struct {
84         uint8_t  type; /* 1==blockcipher */
85         uint8_t  flags;
86         PGM_P    name;
87         uint16_t ctxsize_B;
88         uint16_t blocksize_b;
89         bc_init_fpt init;
90         bc_enc_fpt  enc;
91         bc_dec_fpt  dec;
92         bc_free_fpt free;
93         PGM_VOID_P valid_keysize_desc;
94 } bcdesc_t; /* blockcipher descriptor type */
95
96 typedef struct{
97         bcdesc_t* desc_ptr;
98         uint16_t  keysize;
99         void*     ctx;
100 } bcgen_ctx_t;
101
102 #endif /* BLOCKCIPHER_DESCRIPTOR_H_ */
103