⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cryptype.h

📁 Netscape公司提供的安全套接字层
💻 H
字号:
/*  *********************************************************************
    File: cryptype.h

    SSLRef 3.0 Final -- 11/19/96

    Copyright (c)1996 by Netscape Communications Corp.

    By retrieving this software you are bound by the licensing terms
    disclosed in the file "LICENSE.txt". Please read it, and if you don't
    accept the terms, delete this software.

    SSLRef 3.0 was developed by Netscape Communications Corp. of Mountain
    View, California <http://home.netscape.com/> and Consensus Development
    Corporation of Berkeley, California <http://www.consensus.com/>.

    *********************************************************************

    File: cryptype.h   Crypto structures and routines

    Types associated with cryptographic functionality, including hashes,
    symmetric ciphers, and cipher specs.

    ****************************************************************** */

#ifndef _CRYPTYPE_H_
#define _CRYPTYPE_H_ 1

#ifndef _SSL_H_
#include "ssl.h"
#endif /* _SSL_H_ */

#ifndef _ASN1TYPE_H_
#include "asn1type.h"
#endif /* _ASN1TYPE_H_ */

typedef enum
{   SSL_NULL_WITH_NULL_NULL =                   0x0000,
    SSL_RSA_WITH_NULL_MD5 =                     0x0001,
    SSL_RSA_WITH_NULL_SHA =                     0x0002,
    SSL_RSA_EXPORT_WITH_RC4_40_MD5 =            0x0003,
    SSL_RSA_WITH_RC4_128_MD5 =                  0x0004,
    SSL_RSA_WITH_RC4_128_SHA =                  0x0005,
    SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 =        0x0006,
    SSL_RSA_WITH_IDEA_CBC_SHA =                 0x0007,
    SSL_RSA_EXPORT_WITH_DES40_CBC_SHA =         0x0008,
    SSL_RSA_WITH_DES_CBC_SHA =                  0x0009,
    SSL_RSA_WITH_3DES_EDE_CBC_SHA =             0x000A,
    SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA =      0x000B,
    SSL_DH_DSS_WITH_DES_CBC_SHA =               0x000C,
    SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA =          0x000D,
    SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA =      0x000E,
    SSL_DH_RSA_WITH_DES_CBC_SHA =               0x000F,
    SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA =          0x0010,
    SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA =     0x0011,
    SSL_DHE_DSS_WITH_DES_CBC_SHA =              0x0012,
    SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA =         0x0013,
    SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA =     0x0014,
    SSL_DHE_RSA_WITH_DES_CBC_SHA =              0x0015,
    SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA =         0x0016,
    SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 =        0x0017,
    SSL_DH_anon_WITH_RC4_128_MD5 =              0x0018,
    SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA =     0x0019,
    SSL_DH_anon_WITH_DES_CBC_SHA =              0x001A,
    SSL_DH_anon_WITH_3DES_EDE_CBC_SHA =         0x001B,
    SSL_FORTEZZA_DMS_WITH_NULL_SHA =            0x001C,
    SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA =    0x001D,
    SSL_RSA_WITH_RC2_CBC_MD5 =                  0xFF80,     /* These are included to provide tags for */
    SSL_RSA_WITH_IDEA_CBC_MD5 =                 0xFF81,     /*  SSL 2 cipher kinds which are not specified */
    SSL_RSA_WITH_DES_CBC_MD5 =                  0xFF82,     /*  for SSL 3 */
    SSL_RSA_WITH_3DES_EDE_CBC_MD5 =             0xFF83,
    SSL_NO_SUCH_CIPHERSUITE =                   0xFFFF
} CipherSuite;

typedef enum
{   SSL2_RC4_128_WITH_MD5 =                 0x010080,
    SSL2_RC4_128_EXPORT_40_WITH_MD5 =       0x020080,
    SSL2_RC2_128_CBC_WITH_MD5 =             0x030080,
    SSL2_RC2_128_CBC_EXPORT40_WITH_MD5 =    0x040080,
    SSL2_IDEA_128_CBC_WITH_MD5 =            0x050080,
    SSL2_DES_64_CBC_WITH_MD5 =              0x060040,
    SSL2_DES_192_EDE3_CBC_WITH_MD5 =        0x0700C0
} SSL2CipherKind;

typedef struct
{   SSL2CipherKind  cipherKind;
    CipherSuite     cipherSuite;
} SSLCipherMapping;

typedef SSLErr (*HashInit)(SSLBuffer digestCtx);
typedef SSLErr (*HashUpdate)(SSLBuffer digestCtx, SSLBuffer data);
typedef SSLErr (*HashFinal)(SSLBuffer digestCtx, SSLBuffer digest);
typedef SSLErr (*HashClone)(SSLBuffer src, SSLBuffer dest);

typedef struct
{   uint32      contextSize;
    uint32      digestSize;
    uint32      macPadSize;
    HashInit    init;
    HashUpdate  update;
    HashFinal   final;
    HashClone   clone;
} HashReference;

extern HashReference SSLHashNull;
extern HashReference SSLHashMD5;
extern HashReference SSLHashSHA1;

typedef SSLErr (*SSLKeyFunc)(uint8 *key, uint8 *iv, void **cipherRef, SSLContext *ctx);
typedef SSLErr (*SSLCryptFunc)(SSLBuffer src, SSLBuffer dest, void *cipherRef, SSLContext *ctx);
typedef SSLErr (*SSLFinishFunc)(void *cipherRef, SSLContext *ctx);

typedef enum
{   NotExportable = 0,
    Exportable = 1
} Exportability;

typedef struct {
    uint8           keySize;            /* Sizes are in bytes */
    uint8           secretKeySize;
    uint8           ivSize;
    uint8           blockSize;
    SSLKeyFunc      initialize;
    SSLCryptFunc    encrypt;
    SSLCryptFunc    decrypt;
    SSLFinishFunc   finish;
} SSLSymmetricCipher;

#define MAX_DIGEST_SIZE 20          /* SHA digest size = 160 bits */
#define MAX_MAC_PADDING 48          /* MD5 MAC padding size = 48 bytes */
#define MASTER_SECRET_LEN 48        /* master secret = 3 x MD5 hashes concatenated */

typedef enum
{   SSL_NULL_auth,
    SSL_RSA,
    SSL_RSA_EXPORT,
    SSL_DH_DSS,
    SSL_DH_DSS_EXPORT,
    SSL_DH_RSA,
    SSL_DH_RSA_EXPORT,
    SSL_DHE_DSS,
    SSL_DHE_DSS_EXPORT,
    SSL_DHE_RSA,
    SSL_DHE_RSA_EXPORT,
    SSL_DH_anon,
    SSL_DH_anon_EXPORT,
    SSL_Fortezza
} KeyExchangeMethod;

typedef struct {
    CipherSuite         cipherSpec;
    Exportability       isExportable;
    KeyExchangeMethod   keyExchangeMethod;
    HashReference       *macAlgorithm;
    SSLSymmetricCipher  *cipher;
} SSLCipherSpec;

extern SSLCipherSpec KnownCipherSpecs[];
extern int CipherSpecCount;
extern SSLCipherMapping SSL2CipherMap[];
extern int SSL2CipherMapCount;
extern SSLCipherSpec SSL_NULL_WITH_NULL_NULL_CipherSpec;
extern uint8 SSLMACPad1[], SSLMACPad2[];

void    SSLInitMACPads(void);
SSLErr  ReadyHash(HashReference *ref, SSLBuffer *state, SSLContext *ctx);
SSLErr  CloneHashState(HashReference *ref, SSLBuffer state, SSLBuffer *newState, SSLContext *ctx);
SSLErr  FindCipherSpec(uint16 specID, SSLCipherSpec* *spec);

#endif /* _CRYPTYPE_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -