=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/cipher.h,v retrieving revision 1.22.2.6 retrieving revision 1.23 diff -u -r1.22.2.6 -r1.23 --- src/usr.bin/ssh/cipher.h 2002/03/08 17:04:42 1.22.2.6 +++ src/usr.bin/ssh/cipher.h 2000/12/06 23:05:42 1.23 @@ -1,5 +1,3 @@ -/* $OpenBSD: cipher.h,v 1.22.2.6 2002/03/08 17:04:42 brad Exp $ */ - /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -34,10 +32,18 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* RCSID("$OpenBSD: cipher.h,v 1.23 2000/12/06 23:05:42 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,30 +61,59 @@ #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_cblock iv2; + des_key_schedule key3; + 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 { + u_char iv[16]; + rijndael_key enc; + rijndael_key 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 *); +unsigned 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); + #endif /* CIPHER_H */