1 |
/* $OpenBSD: cipher.h,v 1.34 2003/11/10 16:23:41 jakob Exp $ */ |
/* $OpenBSD: cipher.h,v 1.34 2003/11/10 16:23:41 jakob Exp $ */ |
2 |
|
|
3 |
/* |
/* |
4 |
* Author: Tatu Ylonen <ylo@cs.hut.fi> |
* Author: Tatu Ylonen <ylo@cs.hut.fi> |
5 |
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
6 |
* All rights reserved |
* All rights reserved |
7 |
* |
* |
8 |
* As far as I am concerned, the code I have written for this software |
* As far as I am concerned, the code I have written for this software |
9 |
* can be used freely for any purpose. Any derived versions of this |
* can be used freely for any purpose. Any derived versions of this |
10 |
* software must be clearly marked as such, and if the derived work is |
* software must be clearly marked as such, and if the derived work is |
11 |
* incompatible with the protocol description in the RFC file, it must be |
* incompatible with the protocol description in the RFC file, it must be |
12 |
* called by a name other than "ssh" or "Secure Shell". |
* called by a name other than "ssh" or "Secure Shell". |
13 |
* |
* |
14 |
* Copyright (c) 2000 Markus Friedl. All rights reserved. |
* Copyright (c) 2000 Markus Friedl. All rights reserved. |
15 |
* |
* |
16 |
* Redistribution and use in source and binary forms, with or without |
* Redistribution and use in source and binary forms, with or without |
17 |
* modification, are permitted provided that the following conditions |
* modification, are permitted provided that the following conditions |
18 |
* are met: |
* are met: |
19 |
* 1. Redistributions of source code must retain the above copyright |
* 1. Redistributions of source code must retain the above copyright |
20 |
* notice, this list of conditions and the following disclaimer. |
* notice, this list of conditions and the following disclaimer. |
21 |
* 2. Redistributions in binary form must reproduce the above copyright |
* 2. Redistributions in binary form must reproduce the above copyright |
22 |
* notice, this list of conditions and the following disclaimer in the |
* notice, this list of conditions and the following disclaimer in the |
23 |
* documentation and/or other materials provided with the distribution. |
* documentation and/or other materials provided with the distribution. |
24 |
* |
* |
25 |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
26 |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
27 |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
28 |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
29 |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
30 |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
31 |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
32 |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
33 |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
34 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
35 |
*/ |
*/ |
36 |
|
|
37 |
#ifndef CIPHER_H |
#ifndef CIPHER_H |
38 |
#define CIPHER_H |
#define CIPHER_H |
39 |
|
|
40 |
#include <openssl/evp.h> |
#include <openssl/evp.h> |
41 |
/* |
/* |
42 |
* 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 |
43 |
* be removed for compatibility. The maximum allowed value is 31. |
* be removed for compatibility. The maximum allowed value is 31. |
44 |
*/ |
*/ |
45 |
#define SSH_CIPHER_SSH2 -3 |
#define SSH_CIPHER_SSH2 -3 |
46 |
#define SSH_CIPHER_ILLEGAL -2 /* No valid cipher selected. */ |
#define SSH_CIPHER_ILLEGAL -2 /* No valid cipher selected. */ |
47 |
#define SSH_CIPHER_NOT_SET -1 /* None selected (invalid number). */ |
#define SSH_CIPHER_NOT_SET -1 /* None selected (invalid number). */ |
48 |
#define SSH_CIPHER_NONE 0 /* no encryption */ |
#define SSH_CIPHER_NONE 0 /* no encryption */ |
49 |
#define SSH_CIPHER_IDEA 1 /* IDEA CFB */ |
#define SSH_CIPHER_IDEA 1 /* IDEA CFB */ |
50 |
#define SSH_CIPHER_DES 2 /* DES CBC */ |
#define SSH_CIPHER_DES 2 /* DES CBC */ |
51 |
#define SSH_CIPHER_3DES 3 /* 3DES CBC */ |
#define SSH_CIPHER_3DES 3 /* 3DES CBC */ |
52 |
#define SSH_CIPHER_BROKEN_TSS 4 /* TRI's Simple Stream encryption CBC */ |
#define SSH_CIPHER_BROKEN_TSS 4 /* TRI's Simple Stream encryption CBC */ |
53 |
#define SSH_CIPHER_BROKEN_RC4 5 /* Alleged RC4 */ |
#define SSH_CIPHER_BROKEN_RC4 5 /* Alleged RC4 */ |
54 |
#define SSH_CIPHER_BLOWFISH 6 |
#define SSH_CIPHER_BLOWFISH 6 |
55 |
#define SSH_CIPHER_RESERVED 7 |
#define SSH_CIPHER_RESERVED 7 |
56 |
|
|
57 |
#ifndef SSH_CIPHER_MAX |
#ifndef SSH_CIPHER_MAX |
58 |
#define SSH_CIPHER_MAX 31 |
#define SSH_CIPHER_MAX 31 |
59 |
#endif |
#endif |
60 |
|
|
61 |
#define CIPHER_ENCRYPT 1 |
#define CIPHER_ENCRYPT 1 |
62 |
#define CIPHER_DECRYPT 0 |
#define CIPHER_DECRYPT 0 |
63 |
|
|
64 |
typedef struct Cipher Cipher; |
typedef struct Cipher Cipher; |
65 |
typedef struct CipherContext CipherContext; |
typedef struct CipherContext CipherContext; |
66 |
|
|
67 |
struct Cipher; |
struct Cipher; |
68 |
struct CipherContext { |
struct CipherContext { |
69 |
int plaintext; |
int plaintext; |
70 |
EVP_CIPHER_CTX evp; |
EVP_CIPHER_CTX evp; |
71 |
Cipher *cipher; |
Cipher *cipher; |
72 |
}; |
}; |
73 |
|
|
74 |
u_int cipher_mask_ssh1(int); |
u_int cipher_mask_ssh1(int); |
75 |
Cipher *cipher_by_name(const char *); |
Cipher *cipher_by_name(const char *); |
76 |
Cipher *cipher_by_number(int); |
Cipher *cipher_by_number(int); |
77 |
int cipher_number(const char *); |
int cipher_number(const char *); |
78 |
char *cipher_name(int); |
char *cipher_name(int); |
79 |
int ciphers_valid(const char *); |
int ciphers_valid(const char *); |
80 |
void cipher_init(CipherContext *, Cipher *, const u_char *, u_int, |
void cipher_init(CipherContext *, Cipher *, const u_char *, u_int, |
81 |
const u_char *, u_int, int); |
const u_char *, u_int, int); |
82 |
void cipher_crypt(CipherContext *, u_char *, const u_char *, u_int); |
void cipher_crypt(CipherContext *, u_char *, const u_char *, u_int); |
83 |
void cipher_cleanup(CipherContext *); |
void cipher_cleanup(CipherContext *); |
84 |
void cipher_set_key_string(CipherContext *, Cipher *, const char *, int); |
void cipher_set_key_string(CipherContext *, Cipher *, const char *, int); |
85 |
u_int cipher_blocksize(const Cipher *); |
u_int cipher_blocksize(const Cipher *); |
86 |
u_int cipher_keylen(const Cipher *); |
u_int cipher_keylen(const Cipher *); |
87 |
|
|
88 |
u_int cipher_get_number(const Cipher *); |
u_int cipher_get_number(const Cipher *); |
89 |
void cipher_get_keyiv(CipherContext *, u_char *, u_int); |
void cipher_get_keyiv(CipherContext *, u_char *, u_int); |
90 |
void cipher_set_keyiv(CipherContext *, u_char *); |
void cipher_set_keyiv(CipherContext *, u_char *); |
91 |
int cipher_get_keyiv_len(const CipherContext *); |
int cipher_get_keyiv_len(const CipherContext *); |
92 |
int cipher_get_keycontext(const CipherContext *, u_char *); |
int cipher_get_keycontext(const CipherContext *, u_char *); |
93 |
void cipher_set_keycontext(CipherContext *, u_char *); |
void cipher_set_keycontext(CipherContext *, u_char *); |
94 |
|
|
95 |
void cipher_init_SSH2( |
void cipher_init_SSH2( |
96 |
EVP_CIPHER_CTX *evp, |
EVP_CIPHER_CTX *evp, |
97 |
const u_char *key, u_int keylen, |
const u_char *key, u_int keylen, |
98 |
const u_char *iv, u_int ivlen, |
const u_char *iv, u_int ivlen, |
99 |
int encrypt, |
int encrypt, |
100 |
const EVP_CIPHER *type, |
const EVP_CIPHER *type, |
101 |
int discard_len, |
int discard_len, |
102 |
PTInstVar pvar |
PTInstVar pvar |
103 |
); |
); |
104 |
|
|
105 |
#endif /* CIPHER_H */ |
#endif /* CIPHER_H */ |