X-Git-Url: https://git.distorted.org.uk/u/mdw/catacomb/blobdiff_plain/b7e9df9cae301938fde97061ef73a3ea37a6ad40..b2776fdf2a98ea586bbdad50eca4ed95e967b0d7:/gcipher.h diff --git a/gcipher.h b/gcipher.h index b8c34bf..5682738 100644 --- a/gcipher.h +++ b/gcipher.h @@ -1,13 +1,13 @@ /* -*-c-*- * - * $Id: gcipher.h,v 1.2 2000/06/17 10:56:00 mdw Exp $ + * $Id: gcipher.h,v 1.5 2004/04/21 00:37:32 mdw Exp $ * * Generic symmetric cipher interface * * (c) 1999 Straylight/Edgeware */ -/*----- Licensing notice --------------------------------------------------* +/*----- Licensing notice --------------------------------------------------* * * This file is part of Catacomb. * @@ -15,29 +15,18 @@ * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. - * + * * Catacomb 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 Library General Public License for more details. - * + * * You should have received a copy of the GNU Library General Public * License along with Catacomb; if not, write to the Free * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. */ -/*----- Revision history --------------------------------------------------* - * - * $Log: gcipher.h,v $ - * Revision 1.2 2000/06/17 10:56:00 mdw - * New key size interface. - * - * Revision 1.1 1999/12/10 23:16:01 mdw - * Generic interface. - * - */ - #ifndef CATACOMB_GCIPHER_H #define CATACOMB_GCIPHER_H @@ -51,6 +40,10 @@ #include +#ifndef CATACOMB_KEYSZ_H +# include "keysz.h" +#endif + /*----- Generic symmetric cipher interface --------------------------------*/ typedef struct gcipher { @@ -75,50 +68,26 @@ typedef struct gccipher { gcipher *(*init)(const void */*k*/, size_t /*sz*/); } gccipher; -/*----- Key size management -----------------------------------------------*/ +#define GC_INIT(cc, k, sz) (cc)->init((k), (sz)) +#define GC_CLASS(cc) (cc)->ops->c +#define GC_ENCRYPT(c, s, t, sz) (c)->ops->encrypt((c), (s), (t), (sz)) +#define GC_DECRYPT(c, s, t, sz) (c)->ops->decrypt((c), (s), (t), (sz)) +#define GC_DESTROY(c) (c)->ops->destroy((c)) +#define GC_SETIV(c, iv) (c)->ops->setiv((c), (iv)) +#define GC_BDRY(c) (c)->ops->bdry((c)) -/* --- Key size type constants --- * - * - * A key size limitation is an array of bytes. The first byte describes the - * kind of limitation on the key size %$k$%; the rest are argument bytes - * %$a_i$%, for %$i \ge 0$%. In all cases, %$a_0$% is the `recommended' key - * size. - * - * * @KSZ_ANY@ means there is no restriction. - * - * * @KSZ_RANGE@ requires that %$k \ge a_1$%, %$k \equiv 0 \pmod{a_3}$%, - * and, if %$a_2 \ne 0$%, %$k \le a_2$%. - * - * * @KSZ_SET@ requires that %$k \in {\,a_i\,}$%. - */ +/*----- Tables ------------------------------------------------------------*/ -enum { - KSZ_ANY, /* Allows any key at all */ - KSZ_RANGE, /* Allows keys within a range */ - KSZ_SET /* Allows specific sizes of keys */ -}; +extern const gccipher *const gciphertab[]; -/* --- @keysz@ --- * +/* --- @gcipher_byname@ --- * * - * Arguments: @size_t sz@ = a proposed key size, or zero - * @const octet *ksz@ = pointer to key size table + * Arguments: @const char *p@ = pointer to name string * - * Returns: See below. - * - * Use: Returns a sensible key size. If @sz@ is nonzero, it is - * interpreted as an amount (in bytes) of key material which the - * caller has available, and the return value is either the - * largest allowable key size less than or equal to the caller's - * size, or zero if there is no valid key length small enough. - * If @sz@ is zero, the function returns a `recommended' key - * size. + * Returns: The named cipher class, or null. */ -extern size_t keysz(size_t /*sz*/, const octet */*ksz*/); - -#define KSZ_CHECK(pre, sz) (keysz((sz), pre##_keysz) == (sz)) -#define KSZ_ASSERT(pre, sz) \ - assert(((void)"Bad key size for " #pre, KSZ_CHECK(pre, sz))) +extern const gccipher *gcipher_byname(const char */*p*/); /*----- That's all, folks -------------------------------------------------*/