[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.26

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.26    ! markus     35: /* RCSID("$OpenBSD: cipher.h,v 1.25 2000/12/19 23:17:56 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.22      markus     44: #include "rijndael.h"
1.20      markus     45: /*
                     46:  * Cipher types for SSH-1.  New types can be added, but old types should not
                     47:  * be removed for compatibility.  The maximum allowed value is 31.
                     48:  */
                     49: #define SSH_CIPHER_SSH2                -3
1.17      markus     50: #define SSH_CIPHER_ILLEGAL     -2      /* No valid cipher selected. */
1.9       deraadt    51: #define SSH_CIPHER_NOT_SET     -1      /* None selected (invalid number). */
                     52: #define SSH_CIPHER_NONE                0       /* no encryption */
                     53: #define SSH_CIPHER_IDEA                1       /* IDEA CFB */
                     54: #define SSH_CIPHER_DES         2       /* DES CBC */
                     55: #define SSH_CIPHER_3DES                3       /* 3DES CBC */
                     56: #define SSH_CIPHER_BROKEN_TSS  4       /* TRI's Simple Stream encryption CBC */
                     57: #define SSH_CIPHER_BROKEN_RC4  5       /* Alleged RC4 */
1.1       deraadt    58: #define SSH_CIPHER_BLOWFISH    6
1.12      markus     59: #define SSH_CIPHER_RESERVED    7
1.20      markus     60: #define SSH_CIPHER_MAX         31
1.12      markus     61:
1.20      markus     62: typedef struct Cipher Cipher;
                     63: typedef struct CipherContext CipherContext;
1.1       deraadt    64:
1.20      markus     65: struct CipherContext {
1.9       deraadt    66:        union {
                     67:                struct {
1.20      markus     68:                        des_key_schedule key;
                     69:                        des_cblock iv;
                     70:                }       des;
                     71:                struct {
1.9       deraadt    72:                        des_key_schedule key1;
                     73:                        des_key_schedule key2;
1.26    ! markus     74:                        des_key_schedule key3;
        !            75:                        des_cblock iv1;
1.9       deraadt    76:                        des_cblock iv2;
                     77:                        des_cblock iv3;
                     78:                }       des3;
                     79:                struct {
                     80:                        struct bf_key_st key;
1.20      markus     81:                        u_char iv[8];
1.9       deraadt    82:                }       bf;
1.12      markus     83:                struct {
                     84:                        CAST_KEY key;
1.20      markus     85:                        u_char iv[8];
1.12      markus     86:                } cast;
1.22      markus     87:                struct {
1.24      markus     88:                        u4byte iv[4];
                     89:                        rijndael_ctx enc;
                     90:                        rijndael_ctx dec;
1.22      markus     91:                } rijndael;
1.12      markus     92:                RC4_KEY rc4;
1.9       deraadt    93:        }       u;
1.20      markus     94:        Cipher *cipher;
                     95: };
                     96: struct Cipher {
                     97:        char    *name;
                     98:        int     number;         /* for ssh1 only */
                     99:        u_int   block_size;
                    100:        u_int   key_len;
                    101:        void    (*setkey)(CipherContext *, const u_char *, u_int);
                    102:        void    (*setiv)(CipherContext *, const u_char *, u_int);
                    103:        void    (*encrypt)(CipherContext *, u_char *, const u_char *, u_int);
                    104:        void    (*decrypt)(CipherContext *, u_char *, const u_char *, u_int);
                    105: };
                    106:
1.25      markus    107: u_int cipher_mask_ssh1(int client);
1.20      markus    108: Cipher *cipher_by_name(const char *name);
                    109: Cipher *cipher_by_number(int id);
                    110: int cipher_number(const char *name);
                    111: char *cipher_name(int id);
                    112: int ciphers_valid(const char *names);
                    113: void cipher_init(CipherContext *, Cipher *, const u_char *, u_int, const u_char *, u_int);
                    114: void cipher_encrypt(CipherContext *context, u_char *dest, const u_char *src, u_int len);
                    115: void cipher_decrypt(CipherContext *context, u_char *dest, const u_char *src, u_int len);
                    116: void cipher_set_key_string(CipherContext *context, Cipher *cipher, const char *passphrase);
1.1       deraadt   117:
1.9       deraadt   118: #endif                         /* CIPHER_H */