cast128.h 1.9 KB
Newer Older
Niels Möller's avatar
Niels Möller committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
/* cast128.h
 *
 * The CAST-128 block cipher.
 */

/*	CAST-128 in C
 *	Written by Steve Reid <sreid@sea-to-sky.net>
 *	100% Public Domain - no warranty
 *	Released 1997.10.11
 */

/* nettle, low-level cryptographics library
 *
 * Copyright (C) 2001 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.
 * 
 * The nettle library is distributed in the hope that it will be useful, but
 * 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
27
 * along with the nettle library; see the file COPYING.LIB.  If not, write to
Niels Möller's avatar
Niels Möller committed
28 29 30 31 32 33 34
 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 * MA 02111-1307, USA.
 */
 
#ifndef NETTLE_CAST128_H_INCLUDED
#define NETTLE_CAST128_H_INCLUDED

Niels Möller's avatar
Niels Möller committed
35
#include <inttypes.h>
Niels Möller's avatar
Niels Möller committed
36

37 38 39 40 41
/* Name mangling */
#define cast128_set_key nettle_cast128_set_key
#define cast128_encrypt nettle_cast128_encrypt
#define cast128_decrypt nettle_cast128_decrypt

Niels Möller's avatar
Niels Möller committed
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
#define CAST128_BLOCK_SIZE 8

/* Variable key size between 40 and 128. */
#define CAST128_MIN_KEY_SIZE 5
#define CAST128_MAX_KEY_SIZE 16

#define CAST128_KEY_SIZE 16

struct cast128_ctx
{
  uint32_t keys[32];  /* Key, after expansion */
  unsigned rounds;    /* Number of rounds to use, 12 or 16 */
};

void
cast128_set_key(struct cast128_ctx *ctx,
		unsigned length, const uint8_t *key);

void
cast128_encrypt(struct cast128_ctx *ctx,
		unsigned length, uint8_t *dst,
		const uint8_t *src);
void
cast128_decrypt(struct cast128_ctx *ctx,
		unsigned length, uint8_t *dst,
		const uint8_t *src);

#endif /* NETTLE_CAST128_H_INCLUDED */