use new RCSID macro to prevent Id keyword from being optimized out
[freeradius.git] / src / modules / rlm_eap / types / rlm_eap_psk / BlockCipher.h
1 /**\r
2  * BlockCipher.h\r
3  *\r
4  * A simple abstraction for the basic functionality of a block cipher engine.\r
5  *\r
6  * @author Paulo S. L. M. Barreto\r
7  *\r
8  * @version 2.0\r
9  *\r
10  * This software is hereby placed in the public domain.\r
11  *\r
12  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS\r
13  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
14  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
15  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE\r
16  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
17  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
18  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\r
19  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
20  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\r
21  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
22  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
23  */\r
24 #ifndef __BLOCKCIPHER_H\r
25 #define __BLOCKCIPHER_H\r
26 \r
27 #include <freeradius-devel/ident.h>\r
28 RCSIDH(BlockCipher_h, "$Id$")\r
29 \r
30 #include "/usr/include/sys/types.h"\r
31 \r
32 #ifndef USUAL_TYPES\r
33 #define USUAL_TYPES\r
34 typedef unsigned char   byte;\r
35 //typedef unsigned long   uint;   /* assuming sizeof(uint) == 4 */\r
36 #endif /* USUAL_TYPES */\r
37 \r
38 #define DIR_NONE    0\r
39 #define DIR_ENCRYPT 1\r
40 #define DIR_DECRYPT 2\r
41 #define DIR_BOTH    (DIR_ENCRYPT | DIR_DECRYPT) /* both directions */\r
42 \r
43 class BlockCipher {\r
44 public:\r
45 \r
46     /**\r
47      * Cipher's block size in bits.\r
48      */\r
49     virtual uint blockBits() const = 0;\r
50 \r
51     /**\r
52      * Cipher's block size in bytes.\r
53      */\r
54         virtual uint blockSize() const = 0;\r
55 \r
56     /**\r
57      * Cipher's key size in bits.\r
58      */\r
59         virtual uint keyBits() const = 0;\r
60 \r
61     /**\r
62      * Cipher's key size in bytes.\r
63      */\r
64     virtual uint keySize() const = 0;\r
65 \r
66     /**\r
67      * Setup the key schedule for encryption, decryption, or both.\r
68      *\r
69      * @param   cipherKey   the cipher key.\r
70      * @param   keyBits     size of the cipher key in bits.\r
71      * @param   direction   cipher direction (DIR_ENCRYPT, DIR_DECRYPT, or DIR_BOTH).\r
72      */\r
73     virtual void makeKey(const byte *cipherKey, uint keyBits, uint dir) = 0;\r
74 \r
75     /**\r
76      * Encrypt exactly one block of plaintext.\r
77      *\r
78      * @param   pt          plaintext block.\r
79      * @param   ct          ciphertext block.\r
80      */\r
81     virtual void encrypt(const byte *pt, byte *ct) = 0;\r
82 \r
83     /**\r
84      * Decrypt exactly one block of ciphertext.\r
85      *\r
86      * @param   ct          ciphertext block.\r
87      * @param   pt          plaintext block.\r
88      */\r
89     virtual void decrypt(const byte *ct, byte *pt) = 0;\r
90 \r
91 };\r
92 \r
93 #endif /* __BLOCKCIPHER_H */\r