version 1.25.2.1, 2001/09/27 19:03:54 |
version 1.25.2.2, 2002/03/09 00:20:44 |
|
|
|
/* $OpenBSD$ */ |
|
|
/* |
/* |
* Author: Tatu Ylonen <ylo@cs.hut.fi> |
* Author: Tatu Ylonen <ylo@cs.hut.fi> |
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
|
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
*/ |
|
|
/* RCSID("$OpenBSD$"); */ |
|
|
|
#ifndef CIPHER_H |
#ifndef CIPHER_H |
#define CIPHER_H |
#define CIPHER_H |
|
|
#include <openssl/des.h> |
#include <openssl/evp.h> |
#include <openssl/blowfish.h> |
|
#include <openssl/rc4.h> |
|
#include <openssl/cast.h> |
|
#include "rijndael.h" |
|
/* |
/* |
* Cipher types for SSH-1. New types can be added, but old types should not |
* 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. |
* be removed for compatibility. The maximum allowed value is 31. |
|
|
#define SSH_CIPHER_RESERVED 7 |
#define SSH_CIPHER_RESERVED 7 |
#define SSH_CIPHER_MAX 31 |
#define SSH_CIPHER_MAX 31 |
|
|
|
#define CIPHER_ENCRYPT 1 |
|
#define CIPHER_DECRYPT 0 |
|
|
typedef struct Cipher Cipher; |
typedef struct Cipher Cipher; |
typedef struct CipherContext CipherContext; |
typedef struct CipherContext CipherContext; |
|
|
|
struct Cipher; |
struct CipherContext { |
struct CipherContext { |
union { |
int plaintext; |
struct { |
EVP_CIPHER_CTX evp; |
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; |
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); |
u_int cipher_mask_ssh1(int); |
Cipher *cipher_by_name(const char *); |
Cipher *cipher_by_name(const char *); |
|
|
char *cipher_name(int); |
char *cipher_name(int); |
int ciphers_valid(const char *); |
int ciphers_valid(const char *); |
void cipher_init(CipherContext *, Cipher *, const u_char *, u_int, |
void cipher_init(CipherContext *, Cipher *, const u_char *, u_int, |
const u_char *, u_int); |
const u_char *, u_int, int); |
void cipher_encrypt(CipherContext *, u_char *, const u_char *, u_int); |
void cipher_crypt(CipherContext *, u_char *, const u_char *, u_int); |
void cipher_decrypt(CipherContext *, u_char *, const u_char *, u_int); |
void cipher_cleanup(CipherContext *); |
void cipher_set_key_string(CipherContext *, Cipher *, const char *); |
void cipher_set_key_string(CipherContext *, Cipher *, const char *, int); |
|
u_int cipher_blocksize(Cipher *); |
|
u_int cipher_keylen(Cipher *); |
#endif /* CIPHER_H */ |
#endif /* CIPHER_H */ |