blowfish.h 1.95 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* blowfish.h
 *
 * Blowfish block cipher.
 */

/* nettle, low-level cryptographics library
 *
 * Copyright (C) 1998, 2001 FSF, Ray Dassen, Niels Mller
 *  
 * The nettle library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or (at your
 * option) any later version.
 * 
Niels Möller's avatar
Niels Möller committed
15
 * The nettle library is distributed in the hope that it will be useful, but
16
17
18
19
20
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
 * License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
Niels Möller's avatar
Niels Möller committed
21
 * along with the nettle library; see the file COPYING.LIB.  If not, write to
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 * MA 02111-1307, USA.
 */
 
#ifndef NETTLE_BLOWFISH_H_INCLUDED
#define NETTLE_BLOWFISH_H_INCLUDED

#include <stdint.h>

#define BLOWFISH_BLOCK_SIZE 8

/* Variable key size between 64 and 448 bits. */
#define BLOWFISH_MIN_KEY_SIZE 8
#define BLOWFISH_MAX_KEY_SIZE 32

/* Default to 128 bits */
#define BLOWFISH_KEY_SIZE 16

#define _BLOWFISH_ROUNDS 16

enum blowfish_error { BLOWFISH_OK, BLOWFISH_WEAK_KEY };

struct blowfish_ctx
{
46
  uint32_t s[4][256];
47
  uint32_t p[_BLOWFISH_ROUNDS+2];
48
49
50
  enum blowfish_error status;
};

Niels Möller's avatar
Niels Möller committed
51
52
53
/* On success, returns 1 and sets ctx->status to BLOWFISH_OK (zero).
 * On error, returns 0 and sets ctx->status to BLOWFISH_WEAK_KEY. */
int
54
55
56
57
58
59
60
61
62
63
64
65
66
blowfish_set_key(struct blowfish_ctx *ctx,
                 unsigned length, const uint8_t *key);

void
blowfish_encrypt(struct blowfish_ctx *ctx,
                 unsigned length, uint8_t *dst,
                 const uint8_t *src);
void
blowfish_decrypt(struct blowfish_ctx *ctx,
                 unsigned length, uint8_t *dst,
                 const uint8_t *src);

#endif /* NETTLE_BLOWFISH_H_INCLUDED */