cipher.h revision 57429
1/* 2 * 3 * cipher.h 4 * 5 * Author: Tatu Ylonen <ylo@cs.hut.fi> 6 * 7 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 8 * All rights reserved 9 * 10 * Created: Wed Apr 19 16:50:42 1995 ylo 11 * 12 */ 13 14/* RCSID("$Id: cipher.h,v 1.10 1999/11/24 19:53:46 markus Exp $"); */ 15 16#ifndef CIPHER_H 17#define CIPHER_H 18 19#include <ssl/des.h> 20#include <ssl/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_BROKEN_TSS 4 /* TRI's Simple Stream encryption CBC */ 30#define SSH_CIPHER_BROKEN_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. 53 */ 54unsigned int cipher_mask(); 55 56/* Returns the name of the cipher. */ 57const char *cipher_name(int cipher); 58 59/* 60 * Parses the name of the cipher. Returns the number of the corresponding 61 * cipher, or -1 on error. 62 */ 63int cipher_number(const char *name); 64 65/* 66 * Selects the cipher to use and sets the key. If for_encryption is true, 67 * the key is setup for encryption; otherwise it is setup for decryption. 68 */ 69void 70cipher_set_key(CipherContext * context, int cipher, 71 const unsigned char *key, int keylen, int for_encryption); 72 73/* 74 * Sets key for the cipher by computing the MD5 checksum of the passphrase, 75 * and using the resulting 16 bytes as the key. 76 */ 77void 78cipher_set_key_string(CipherContext * context, int cipher, 79 const char *passphrase, int for_encryption); 80 81/* Encrypts data using the cipher. */ 82void 83cipher_encrypt(CipherContext * context, unsigned char *dest, 84 const unsigned char *src, unsigned int len); 85 86/* Decrypts data using the cipher. */ 87void 88cipher_decrypt(CipherContext * context, unsigned char *dest, 89 const unsigned char *src, unsigned int len); 90 91/* 92 * If and CRC-32 attack is detected this function is called. Defaults to 93 * fatal, changed to packet_disconnect in sshd and ssh. 94 */ 95extern void (*cipher_attack_detected) (const char *fmt, ...); 96 97#endif /* CIPHER_H */ 98