3 #ifndef BLOWFISH__H_INCLUDED
4 #define BLOWFISH__H_INCLUDED
8 #define BLOWFISH_BLOCKBYTES 8
9 #define BLOWFISH_MAXKEYBYTES 56
10 #define BLOWFISH__N 16
11 #define BLOWFISH__PSIZE BLOWFISH__N+2
13 typedef uint32_t blowfish__p
[BLOWFISH__PSIZE
];
14 typedef uint32_t blowfish__s
[4][256];
16 struct blowfish_expandedkey
{
21 /* It's ok to pass the [_cbc]_(en|de)crypt functions the same
22 * input and output pointers.
25 void blowfish_loadkey(struct blowfish_expandedkey
*ek
,
26 const uint8_t *key
, int keybytes
);
27 void blowfish_encrypt(const struct blowfish_expandedkey
*ek
,
28 const uint8_t plain
[BLOWFISH_BLOCKBYTES
],
29 uint8_t cipher
[BLOWFISH_BLOCKBYTES
]);
30 void blowfish_decrypt(const struct blowfish_expandedkey
*ek
,
31 const uint8_t cipher
[BLOWFISH_BLOCKBYTES
],
32 uint8_t plain
[BLOWFISH_BLOCKBYTES
]);
34 struct blowfish_cbc_state
{
35 struct blowfish_expandedkey ek
;
36 uint32_t chainl
, chainr
;
39 void blowfish_cbc_setiv(struct blowfish_cbc_state
*cs
,
40 const uint8_t iv
[BLOWFISH_BLOCKBYTES
]);
41 void blowfish_cbc_encrypt(struct blowfish_cbc_state
*cs
,
42 const uint8_t plain
[BLOWFISH_BLOCKBYTES
],
43 uint8_t cipher
[BLOWFISH_BLOCKBYTES
]);
44 void blowfish_cbc_decrypt(struct blowfish_cbc_state
*cs
,
45 const uint8_t cipher
[BLOWFISH_BLOCKBYTES
],
46 uint8_t plain
[BLOWFISH_BLOCKBYTES
]);