1 /*****************************************************************************
2 
3 
4 
5 
6 Saleem N. Bhatti
7 February 1993
8 *****************************************************************************/
9 
10 #if !defined(_qfDES_h_)
11 #define      _qfDES_h_
12 
13 #if defined(__cplusplus)
14 extern "C" {
15 #endif
16 
17 /* what */
18 typedef enum {qfDES_encrypt, qfDES_decrypt} QFDES_what;
19 
20 /* mode */
21 typedef enum {qfDES_ecb, qfDES_cbc, qfDES_cfb, qfDES_ofb} QFDES_mode;
22 
23 /* parity */
24 typedef enum {qfDES_even, qfDES_odd} QFDES_parity;
25 
26 /* key/IV generation */
27 typedef enum {qfDES_key, qfDES_iv} QFDES_generate;
28 
29 
30 /* This does it all */
31 int qfDES (unsigned char *key, unsigned char *data, unsigned int size, const QFDES_what what, const QFDES_mode mode, unsigned char *initVec);
32 
33 /* Handy macros */
34 #define qfDES_ECB_e(_key, _data, _size) qfDES(_key, _data, _size, qfDES_encrypt, qfDES_ecb, (unsigned char *) 0)
35 #define qfDES_ECB_d(_key, _data, _size) qfDES(_key, _data, _size, qfDES_decrypt, qfDES_ecb, (unsigned char *) 0)
36 
37 #define qfDES_CBC_e(_key, _data, _size, _initVec) qfDES(_key, _data, _size, qfDES_encrypt, qfDES_cbc, _initVec)
38 #define qfDES_CBC_d(_key, _data, _size, _initVec) qfDES(_key, _data, _size, qfDES_decrypt, qfDES_cbc, _initVec)
39 
40 #define qfDES_CFB_e(_key, _data, _size, _initVec) qfDES(_key, _data, _size, qfDES_encrypt, qfDES_cfb, _initVec)
41 #define qfDES_CFB_d(_key, _data, _size, _initVec) qfDES(_key, _data, _size, qfDES_decrypt, qfDES_cfb, _initVec)
42 
43 #define qfDES_OFB_e(_key, _data, _size, _initVec) qfDES(_key, _data, _size, qfDES_encrypt, qfDES_ofb, _initVec)
44 #define qfDES_OFB_d(_key, _data, _size, _initVec) qfDES(_key, _data, _size, qfDES_decrypt, qfDES_ofb, _initVec)
45 
46 /* Padded [m|re]alloc() */
47 unsigned char    qfDES_setPad (unsigned char pad);
48 
49 #define qfDES_padSpace() qfDES_setPad((unsigned char) ' ')
50 #define qfDES_padZero() qfDES_setPad((unsigned char) '\0')
51 
52 /* The size of text in a qfDES_malloc()ed block */
53 #define qfDES_plainTextSize(_ptr, _size) (unsigned int) ((_size) - (unsigned int) (_ptr)[(_size) - 1])
54 
55 /* Keys */
56 void qfDES_setParity (unsigned char *ptr, unsigned int size, const QFDES_parity parity);
57 unsigned int qfDES_checkParity (unsigned char *ptr, unsigned int size, const QFDES_parity parity);
58 
59 unsigned char *qfDES_generate (const QFDES_generate what); /* returns a pointer to static memory */
60 
61 #define qfDES_generateKey() qfDES_generate(qfDES_key)
62 #define qfDES_generateIV() qfDES_generate(qfDES_iv)
63 
64 int qfDES_checkWeakKeys (unsigned char *key);
65 
66 #if defined(__cplusplus)
67 }
68 #endif
69 
70 #endif /* !_qfDES_h_ */
71