xref: /dflybsd-src/sys/crypto/des/des.h (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino /*	$FreeBSD: src/sys/crypto/des/des.h,v 1.6 2002/03/20 05:13:51 alfred Exp $	*/
286d7f5d3SJohn Marino /*	$KAME: des.h,v 1.8 2001/09/10 04:03:57 itojun Exp $	*/
386d7f5d3SJohn Marino 
486d7f5d3SJohn Marino /* lib/des/des.h */
586d7f5d3SJohn Marino /* Copyright (C) 1995-1996 Eric Young (eay@mincom.oz.au)
686d7f5d3SJohn Marino  * All rights reserved.
786d7f5d3SJohn Marino  *
886d7f5d3SJohn Marino  * This file is part of an SSL implementation written
986d7f5d3SJohn Marino  * by Eric Young (eay@mincom.oz.au).
1086d7f5d3SJohn Marino  * The implementation was written so as to conform with Netscapes SSL
1186d7f5d3SJohn Marino  * specification.  This library and applications are
1286d7f5d3SJohn Marino  * FREE FOR COMMERCIAL AND NON-COMMERCIAL USE
1386d7f5d3SJohn Marino  * as long as the following conditions are aheared to.
1486d7f5d3SJohn Marino  *
1586d7f5d3SJohn Marino  * Copyright remains Eric Young's, and as such any Copyright notices in
1686d7f5d3SJohn Marino  * the code are not to be removed.  If this code is used in a product,
1786d7f5d3SJohn Marino  * Eric Young should be given attribution as the author of the parts used.
1886d7f5d3SJohn Marino  * This can be in the form of a textual message at program startup or
1986d7f5d3SJohn Marino  * in documentation (online or textual) provided with the package.
2086d7f5d3SJohn Marino  *
2186d7f5d3SJohn Marino  * Redistribution and use in source and binary forms, with or without
2286d7f5d3SJohn Marino  * modification, are permitted provided that the following conditions
2386d7f5d3SJohn Marino  * are met:
2486d7f5d3SJohn Marino  * 1. Redistributions of source code must retain the copyright
2586d7f5d3SJohn Marino  *    notice, this list of conditions and the following disclaimer.
2686d7f5d3SJohn Marino  * 2. Redistributions in binary form must reproduce the above copyright
2786d7f5d3SJohn Marino  *    notice, this list of conditions and the following disclaimer in the
2886d7f5d3SJohn Marino  *    documentation and/or other materials provided with the distribution.
2986d7f5d3SJohn Marino  * 3. All advertising materials mentioning features or use of this software
3086d7f5d3SJohn Marino  *    must display the following acknowledgement:
3186d7f5d3SJohn Marino  *    This product includes software developed by Eric Young (eay@mincom.oz.au)
3286d7f5d3SJohn Marino  *
3386d7f5d3SJohn Marino  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
3486d7f5d3SJohn Marino  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
3586d7f5d3SJohn Marino  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
3686d7f5d3SJohn Marino  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
3786d7f5d3SJohn Marino  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3886d7f5d3SJohn Marino  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3986d7f5d3SJohn Marino  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
4086d7f5d3SJohn Marino  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
4186d7f5d3SJohn Marino  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
4286d7f5d3SJohn Marino  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
4386d7f5d3SJohn Marino  * SUCH DAMAGE.
4486d7f5d3SJohn Marino  *
4586d7f5d3SJohn Marino  * The licence and distribution terms for any publically available version or
4686d7f5d3SJohn Marino  * derivative of this code cannot be changed.  i.e. this code cannot simply be
4786d7f5d3SJohn Marino  * copied and put under another distribution licence
4886d7f5d3SJohn Marino  * [including the GNU Public Licence.]
4986d7f5d3SJohn Marino  */
5086d7f5d3SJohn Marino 
5186d7f5d3SJohn Marino #ifndef HEADER_DES_H
5286d7f5d3SJohn Marino #define HEADER_DES_H
5386d7f5d3SJohn Marino 
5486d7f5d3SJohn Marino #ifdef  __cplusplus
5586d7f5d3SJohn Marino extern "C" {
5686d7f5d3SJohn Marino #endif
5786d7f5d3SJohn Marino 
5886d7f5d3SJohn Marino /* must be 32bit quantity */
5986d7f5d3SJohn Marino #define DES_LONG u_int32_t
6086d7f5d3SJohn Marino 
6186d7f5d3SJohn Marino typedef unsigned char des_cblock[8];
6286d7f5d3SJohn Marino typedef struct des_ks_struct
6386d7f5d3SJohn Marino 	{
6486d7f5d3SJohn Marino 	union   {
6586d7f5d3SJohn Marino 	des_cblock cblock;
6686d7f5d3SJohn Marino 	/* make sure things are correct size on machines with
6786d7f5d3SJohn Marino 	 * 8 byte longs */
6886d7f5d3SJohn Marino 	DES_LONG deslong[2];
6986d7f5d3SJohn Marino 	} ks;
7086d7f5d3SJohn Marino 	int weak_key;
7186d7f5d3SJohn Marino } des_key_schedule[16];
7286d7f5d3SJohn Marino 
7386d7f5d3SJohn Marino #define DES_KEY_SZ 	(sizeof(des_cblock))
7486d7f5d3SJohn Marino #define DES_SCHEDULE_SZ (sizeof(des_key_schedule))
7586d7f5d3SJohn Marino 
7686d7f5d3SJohn Marino #define DES_ENCRYPT	1
7786d7f5d3SJohn Marino #define DES_DECRYPT	0
7886d7f5d3SJohn Marino 
7986d7f5d3SJohn Marino #define DES_CBC_MODE	0
8086d7f5d3SJohn Marino #define DES_PCBC_MODE	1
8186d7f5d3SJohn Marino 
8286d7f5d3SJohn Marino extern int des_check_key;	/* defaults to false */
8386d7f5d3SJohn Marino 
8486d7f5d3SJohn Marino char *des_options(void);
8586d7f5d3SJohn Marino void des_ecb_encrypt(des_cblock *, des_cblock *, des_key_schedule, int);
8686d7f5d3SJohn Marino 
8786d7f5d3SJohn Marino void des_encrypt1(DES_LONG *, des_key_schedule, int);
8886d7f5d3SJohn Marino void des_encrypt2(DES_LONG *, des_key_schedule, int);
8986d7f5d3SJohn Marino void des_encrypt3(DES_LONG *, des_key_schedule, des_key_schedule,
9086d7f5d3SJohn Marino 		      des_key_schedule);
9186d7f5d3SJohn Marino void des_decrypt3(DES_LONG *, des_key_schedule, des_key_schedule,
9286d7f5d3SJohn Marino 		      des_key_schedule);
9386d7f5d3SJohn Marino 
9486d7f5d3SJohn Marino void des_ecb3_encrypt(des_cblock *, des_cblock *, des_key_schedule,
9586d7f5d3SJohn Marino 			  des_key_schedule, des_key_schedule, int);
9686d7f5d3SJohn Marino 
9786d7f5d3SJohn Marino void des_ncbc_encrypt(const unsigned char *, unsigned char *, long,
9886d7f5d3SJohn Marino 			  des_key_schedule, des_cblock *, int);
9986d7f5d3SJohn Marino 
10086d7f5d3SJohn Marino void des_ede3_cbc_encrypt(const unsigned char *, unsigned char *, long,
10186d7f5d3SJohn Marino 			  des_key_schedule, des_key_schedule,
10286d7f5d3SJohn Marino 			  des_key_schedule, des_cblock *, int);
10386d7f5d3SJohn Marino 
10486d7f5d3SJohn Marino void des_set_odd_parity(des_cblock *);
10586d7f5d3SJohn Marino void des_fixup_key_parity(des_cblock *);
10686d7f5d3SJohn Marino int des_is_weak_key(des_cblock *);
10786d7f5d3SJohn Marino int des_set_key(des_cblock *, des_key_schedule);
10886d7f5d3SJohn Marino int des_key_sched(des_cblock *, des_key_schedule);
10986d7f5d3SJohn Marino int des_set_key_checked(des_cblock *, des_key_schedule);
11086d7f5d3SJohn Marino void des_set_key_unchecked(des_cblock *, des_key_schedule);
11186d7f5d3SJohn Marino int des_check_key_parity(des_cblock *);
11286d7f5d3SJohn Marino 
11386d7f5d3SJohn Marino #ifdef  __cplusplus
11486d7f5d3SJohn Marino }
11586d7f5d3SJohn Marino #endif
11686d7f5d3SJohn Marino 
11786d7f5d3SJohn Marino #endif
118