summaryrefslogtreecommitdiff
path: root/cipher.h
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>1999-10-27 13:42:43 +1000
committerDamien Miller <djm@mindrot.org>1999-10-27 13:42:43 +1000
commitd4a8b7e34dd619a4debf9a206c81db26d1402ea6 (patch)
treea47d770a2f790f40d18b0982d4e55fa7cfb1fa3b /cipher.h
Initial revision
Diffstat (limited to 'cipher.h')
-rw-r--r--cipher.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/cipher.h b/cipher.h
new file mode 100644
index 000000000..4ecb8f8da
--- /dev/null
+++ b/cipher.h
@@ -0,0 +1,84 @@
1/*
2
3cipher.h
4
5Author: Tatu Ylonen <ylo@cs.hut.fi>
6
7Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
8 All rights reserved
9
10Created: Wed Apr 19 16:50:42 1995 ylo
11
12*/
13
14/* RCSID("$Id: cipher.h,v 1.1 1999/10/27 03:42:44 damien Exp $"); */
15
16#ifndef CIPHER_H
17#define CIPHER_H
18
19#include <openssl/des.h>
20#include <openssl/blowfish.h>
21
22/* Cipher types. New types can be added, but old types should not be removed
23 for compatibility. The maximum allowed value is 31. */
24#define SSH_CIPHER_NOT_SET -1 /* None selected (invalid number). */
25#define SSH_CIPHER_NONE 0 /* no encryption */
26#define SSH_CIPHER_IDEA 1 /* IDEA CFB */
27#define SSH_CIPHER_DES 2 /* DES CBC */
28#define SSH_CIPHER_3DES 3 /* 3DES CBC */
29#define SSH_CIPHER_TSS 4 /* TRI's Simple Stream encryption CBC */
30#define SSH_CIPHER_RC4 5 /* Alleged RC4 */
31#define SSH_CIPHER_BLOWFISH 6
32
33typedef struct {
34 unsigned int type;
35 union {
36 struct {
37 des_key_schedule key1;
38 des_key_schedule key2;
39 des_cblock iv2;
40 des_key_schedule key3;
41 des_cblock iv3;
42 } des3;
43 struct {
44 struct bf_key_st key;
45 unsigned char iv[8];
46 } bf;
47 } u;
48} CipherContext;
49
50/* Returns a bit mask indicating which ciphers are supported by this
51 implementation. The bit mask has the corresponding bit set of each
52 supported cipher. */
53unsigned int cipher_mask();
54
55/* Returns the name of the cipher. */
56const char *cipher_name(int cipher);
57
58/* Parses the name of the cipher. Returns the number of the corresponding
59 cipher, or -1 on error. */
60int cipher_number(const char *name);
61
62/* Selects the cipher to use and sets the key. If for_encryption is true,
63 the key is setup for encryption; otherwise it is setup for decryption. */
64void cipher_set_key(CipherContext *context, int cipher,
65 const unsigned char *key, int keylen, int for_encryption);
66
67/* Sets key for the cipher by computing the MD5 checksum of the passphrase,
68 and using the resulting 16 bytes as the key. */
69void cipher_set_key_string(CipherContext *context, int cipher,
70 const char *passphrase, int for_encryption);
71
72/* Encrypts data using the cipher. */
73void cipher_encrypt(CipherContext *context, unsigned char *dest,
74 const unsigned char *src, unsigned int len);
75
76/* Decrypts data using the cipher. */
77void cipher_decrypt(CipherContext *context, unsigned char *dest,
78 const unsigned char *src, unsigned int len);
79
80/* If and CRC-32 attack is detected this function is called. Defaults
81 * to fatal, changed to packet_disconnect in sshd and ssh. */
82extern void (*cipher_attack_detected)(const char *fmt, ...);
83
84#endif /* CIPHER_H */