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

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.20    ! markus     35: /* RCSID("$OpenBSD: cipher.h,v 1.19 2000/09/07 20:27:50 deraadt 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.13      markus    100: unsigned int cipher_mask1();
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 */