[BACK]Return to cipher.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Annotation of src/usr.bin/ssh/cipher.h, Revision 1.21

1.1       deraadt     1: /*
1.9       deraadt     2:  * Author: Tatu Ylonen <ylo@cs.hut.fi>
                      3:  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
                      4:  *                    All rights reserved
1.16      markus      5:  *
1.19      deraadt     6:  * As far as I am concerned, the code I have written for this software
                      7:  * can be used freely for any purpose.  Any derived versions of this
                      8:  * software must be clearly marked as such, and if the derived work is
                      9:  * incompatible with the protocol description in the RFC file, it must be
                     10:  * called by a name other than "ssh" or "Secure Shell".
1.20      markus     11:  *
                     12:  * Copyright (c) 2000 Markus Friedl.  All rights reserved.
                     13:  *
                     14:  * Redistribution and use in source and binary forms, with or without
                     15:  * modification, are permitted provided that the following conditions
                     16:  * are met:
                     17:  * 1. Redistributions of source code must retain the above copyright
                     18:  *    notice, this list of conditions and the following disclaimer.
                     19:  * 2. Redistributions in binary form must reproduce the above copyright
                     20:  *    notice, this list of conditions and the following disclaimer in the
                     21:  *    documentation and/or other materials provided with the distribution.
                     22:  *
                     23:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     24:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     25:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     26:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     27:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     28:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     29:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     30:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     31:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     32:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1.9       deraadt    33:  */
1.1       deraadt    34:
1.21    ! markus     35: /* RCSID("$OpenBSD: cipher.h,v 1.20 2000/10/11 20:27:23 markus Exp $"); */
1.1       deraadt    36:
                     37: #ifndef CIPHER_H
                     38: #define CIPHER_H
                     39:
1.15      markus     40: #include <openssl/des.h>
                     41: #include <openssl/blowfish.h>
                     42: #include <openssl/rc4.h>
                     43: #include <openssl/cast.h>
1.20      markus     44: /*
                     45:  * Cipher types for SSH-1.  New types can be added, but old types should not
                     46:  * be removed for compatibility.  The maximum allowed value is 31.
                     47:  */
                     48: #define SSH_CIPHER_SSH2                -3
1.17      markus     49: #define SSH_CIPHER_ILLEGAL     -2      /* No valid cipher selected. */
1.9       deraadt    50: #define SSH_CIPHER_NOT_SET     -1      /* None selected (invalid number). */
                     51: #define SSH_CIPHER_NONE                0       /* no encryption */
                     52: #define SSH_CIPHER_IDEA                1       /* IDEA CFB */
                     53: #define SSH_CIPHER_DES         2       /* DES CBC */
                     54: #define SSH_CIPHER_3DES                3       /* 3DES CBC */
                     55: #define SSH_CIPHER_BROKEN_TSS  4       /* TRI's Simple Stream encryption CBC */
                     56: #define SSH_CIPHER_BROKEN_RC4  5       /* Alleged RC4 */
1.1       deraadt    57: #define SSH_CIPHER_BLOWFISH    6
1.12      markus     58: #define SSH_CIPHER_RESERVED    7
1.20      markus     59: #define SSH_CIPHER_MAX         31
1.12      markus     60:
1.20      markus     61: typedef struct Cipher Cipher;
                     62: typedef struct CipherContext CipherContext;
1.1       deraadt    63:
1.20      markus     64: struct CipherContext {
1.9       deraadt    65:        union {
                     66:                struct {
1.20      markus     67:                        des_key_schedule key;
                     68:                        des_cblock iv;
                     69:                }       des;
                     70:                struct {
1.9       deraadt    71:                        des_key_schedule key1;
                     72:                        des_key_schedule key2;
                     73:                        des_cblock iv2;
                     74:                        des_key_schedule key3;
                     75:                        des_cblock iv3;
                     76:                }       des3;
                     77:                struct {
                     78:                        struct bf_key_st key;
1.20      markus     79:                        u_char iv[8];
1.9       deraadt    80:                }       bf;
1.12      markus     81:                struct {
                     82:                        CAST_KEY key;
1.20      markus     83:                        u_char iv[8];
1.12      markus     84:                } cast;
                     85:                RC4_KEY rc4;
1.9       deraadt    86:        }       u;
1.20      markus     87:        Cipher *cipher;
                     88: };
                     89: struct Cipher {
                     90:        char    *name;
                     91:        int     number;         /* for ssh1 only */
                     92:        u_int   block_size;
                     93:        u_int   key_len;
                     94:        void    (*setkey)(CipherContext *, const u_char *, u_int);
                     95:        void    (*setiv)(CipherContext *, const u_char *, u_int);
                     96:        void    (*encrypt)(CipherContext *, u_char *, const u_char *, u_int);
                     97:        void    (*decrypt)(CipherContext *, u_char *, const u_char *, u_int);
                     98: };
                     99:
1.21    ! markus    100: unsigned int cipher_mask_ssh1(int client);
1.20      markus    101: Cipher *cipher_by_name(const char *name);
                    102: Cipher *cipher_by_number(int id);
                    103: int cipher_number(const char *name);
                    104: char *cipher_name(int id);
                    105: int ciphers_valid(const char *names);
                    106: void cipher_init(CipherContext *, Cipher *, const u_char *, u_int, const u_char *, u_int);
                    107: void cipher_encrypt(CipherContext *context, u_char *dest, const u_char *src, u_int len);
                    108: void cipher_decrypt(CipherContext *context, u_char *dest, const u_char *src, u_int len);
                    109: void cipher_set_key_string(CipherContext *context, Cipher *cipher, const char *passphrase);
1.1       deraadt   110:
1.9       deraadt   111: #endif                         /* CIPHER_H */