X-Git-Url: http://andersk.mit.edu/gitweb/gssapi-openssh.git/blobdiff_plain/cdd66111973295c976f1a0bb57f571eba0513757..HEAD:/openssh/cipher.h diff --git a/openssh/cipher.h b/openssh/cipher.h index 74b3669..4533f5e 100644 --- a/openssh/cipher.h +++ b/openssh/cipher.h @@ -1,5 +1,3 @@ -/* $OpenBSD: cipher.h,v 1.34 2003/11/10 16:23:41 jakob 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.29 2001/08/23 11:31:59 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,18 +59,50 @@ #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 { + u_char iv[16]; + 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 *); @@ -75,17 +111,9 @@ 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(const Cipher *); -u_int cipher_keylen(const Cipher *); + const u_char *, u_int); +void cipher_encrypt(CipherContext *, u_char *, const u_char *, u_int); +void cipher_decrypt(CipherContext *, u_char *, const u_char *, u_int); +void cipher_set_key_string(CipherContext *, Cipher *, const char *); -u_int cipher_get_number(const Cipher *); -void cipher_get_keyiv(CipherContext *, u_char *, u_int); -void cipher_set_keyiv(CipherContext *, u_char *); -int cipher_get_keyiv_len(const CipherContext *); -int cipher_get_keycontext(const CipherContext *, u_char *); -void cipher_set_keycontext(CipherContext *, u_char *); #endif /* CIPHER_H */