=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/cipher.h,v retrieving revision 1.25.2.3 retrieving revision 1.26 diff -u -r1.25.2.3 -r1.26 --- src/usr.bin/ssh/cipher.h 2002/06/02 22:56:10 1.25.2.3 +++ src/usr.bin/ssh/cipher.h 2001/05/28 22:51:11 1.26 @@ -1,5 +1,3 @@ -/* $OpenBSD: cipher.h,v 1.25.2.3 2002/06/02 22:56:10 miod Exp $ */ - /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -34,10 +32,16 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* RCSID("$OpenBSD: cipher.h,v 1.26 2001/05/28 22:51:11 markus Exp $"); */ + #ifndef CIPHER_H #define CIPHER_H -#include +#include +#include +#include +#include +#include "rijndael.h" /* * Cipher types for SSH-1. New types can be added, but old types should not * be removed for compatibility. The maximum allowed value is 31. @@ -55,37 +59,60 @@ #define SSH_CIPHER_RESERVED 7 #define SSH_CIPHER_MAX 31 -#define CIPHER_ENCRYPT 1 -#define CIPHER_DECRYPT 0 - typedef struct Cipher Cipher; typedef struct CipherContext CipherContext; -struct Cipher; struct CipherContext { - int plaintext; - EVP_CIPHER_CTX evp; + union { + struct { + des_key_schedule key; + des_cblock iv; + } des; + struct { + des_key_schedule key1; + des_key_schedule key2; + des_key_schedule key3; + des_cblock iv1; + des_cblock iv2; + des_cblock iv3; + } des3; + struct { + struct bf_key_st key; + u_char iv[8]; + } bf; + struct { + CAST_KEY key; + u_char iv[8]; + } cast; + struct { + u4byte iv[4]; + rijndael_ctx enc; + rijndael_ctx dec; + } rijndael; + RC4_KEY rc4; + } u; Cipher *cipher; }; +struct Cipher { + char *name; + int number; /* for ssh1 only */ + u_int block_size; + u_int key_len; + void (*setkey)(CipherContext *, const u_char *, u_int); + void (*setiv)(CipherContext *, const u_char *, u_int); + void (*encrypt)(CipherContext *, u_char *, const u_char *, u_int); + void (*decrypt)(CipherContext *, u_char *, const u_char *, u_int); +}; -u_int cipher_mask_ssh1(int); -Cipher *cipher_by_name(const char *); -Cipher *cipher_by_number(int); -int cipher_number(const char *); -char *cipher_name(int); -int ciphers_valid(const char *); -void cipher_init(CipherContext *, Cipher *, const u_char *, u_int, - const u_char *, u_int, int); -void cipher_crypt(CipherContext *, u_char *, const u_char *, u_int); -void cipher_cleanup(CipherContext *); -void cipher_set_key_string(CipherContext *, Cipher *, const char *, int); -u_int cipher_blocksize(Cipher *); -u_int cipher_keylen(Cipher *); +u_int cipher_mask_ssh1(int client); +Cipher *cipher_by_name(const char *name); +Cipher *cipher_by_number(int id); +int cipher_number(const char *name); +char *cipher_name(int id); +int ciphers_valid(const char *names); +void cipher_init(CipherContext *, Cipher *, const u_char *, u_int, const u_char *, u_int); +void cipher_encrypt(CipherContext *context, u_char *dest, const u_char *src, u_int len); +void cipher_decrypt(CipherContext *context, u_char *dest, const u_char *src, u_int len); +void cipher_set_key_string(CipherContext *context, Cipher *cipher, const char *passphrase); -u_int cipher_get_number(Cipher *); -void cipher_get_keyiv(CipherContext *, u_char *, u_int); -void cipher_set_keyiv(CipherContext *, u_char *); -int cipher_get_keyiv_len(CipherContext *); -int cipher_get_keycontext(CipherContext *, u_char *); -void cipher_set_keycontext(CipherContext *, u_char *); #endif /* CIPHER_H */