]>
Commit | Line | Data |
---|---|---|
f028213f | 1 | /***************************************************************************** |
2 | * This file is part of iClassCipher. It is a reconstructon of the cipher engine | |
3 | * used in iClass, and RFID techology. | |
4 | * | |
5 | * The implementation is based on the work performed by | |
6 | * Flavio D. Garcia, Gerhard de Koning Gans, Roel Verdult and | |
7 | * Milosch Meriac in the paper "Dismantling IClass". | |
8 | * | |
9 | * Copyright (C) 2014 Martin Holst Swende | |
10 | * | |
11 | * This is free software: you can redistribute it and/or modify | |
12 | * it under the terms of the GNU General Public License version 2 as published | |
13 | * by the Free Software Foundation. | |
14 | * | |
15 | * This file is distributed in the hope that it will be useful, | |
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 | * GNU General Public License for more details. | |
19 | * | |
20 | * You should have received a copy of the GNU General Public License | |
21 | * along with IClassCipher. If not, see <http://www.gnu.org/licenses/>. | |
22 | ****************************************************************************/ | |
23 | ||
24 | #ifndef CIPHER_H | |
25 | #define CIPHER_H | |
26 | #include <stdint.h> | |
27 | ||
28 | /** | |
29 | * Definition 1 (Cipher state). A cipher state of iClass s is an element of F 40/2 | |
30 | * consisting of the following four components: | |
31 | * 1. the left register l = (l 0 . . . l 7 ) ∈ F 8/2 ; | |
32 | * 2. the right register r = (r 0 . . . r 7 ) ∈ F 8/2 ; | |
33 | * 3. the top register t = (t 0 . . . t 15 ) ∈ F 16/2 . | |
34 | * 4. the bottom register b = (b 0 . . . b 7 ) ∈ F 8/2 . | |
35 | **/ | |
36 | typedef struct { | |
37 | uint8_t l; | |
38 | uint8_t r; | |
39 | uint8_t b; | |
40 | uint16_t t; | |
41 | } State; | |
42 | ||
43 | void printarr(char * name, uint8_t* arr, int len); | |
44 | int calc_iclass_mac(uint8_t *cc_nr_p, int length, uint8_t *div_key_p, uint8_t *mac); | |
45 | ||
46 | #endif // CIPHER_H |