📄 ssl.h
字号:
/****************************************************************************
* *
* SSL v3/TLS Definitions Header File *
* Copyright Peter Gutmann 1998-2004 *
* *
****************************************************************************/
#ifndef _SSL_DEFINED
#define _SSL_DEFINED
/* Default SSL port */
#define SSL_PORT 443
/* SSL constants */
#define ID_SIZE 1 /* ID byte */
#define UINT16_SIZE 2 /* 16 bits */
#define LENGTH_SIZE 3 /* 24 bits */
#define SEQNO_SIZE 8 /* 64 bits */
#define VERSIONINFO_SIZE 2 /* 0x03, 0x0n */
#define ALERTINFO_SIZE 2 /* level + description */
#define SSL_HEADER_SIZE 5 /* Type, version, length */
#define SSL_NONCE_SIZE 32 /* Size of client/svr nonce */
#define SSL_SECRET_SIZE 48 /* Size of premaster/master secret */
#define MD5MAC_SIZE 16 /* Size of MD5 proto-HMAC/dual hash */
#define SHA1MAC_SIZE 20 /* Size of SHA-1 proto-HMAC/dual hash */
#define TLS_HASHEDMAC_SIZE 12 /* Size of TLS PRF( MD5 + SHA1 ) */
#define SESSIONID_SIZE 16 /* Size of session ID */
#define MAX_SESSIONID_SIZE 32 /* Max.allowed session ID size */
#define MAX_KEYBLOCK_SIZE ( ( 20 + 32 + 16 ) * 2 )/* HMAC-SHA1 + AES */
#define MIN_PACKET_SIZE 4 /* Minimum SSL packet size */
#define MAX_PACKET_SIZE 16384 /* Maximum SSL packet size */
/* The number of entries in the SSL session cache and the maximum amount of
time that an entry is retained in the cache. Note that when changing the
SESSIONCACHE_SIZE value you need to also change MAX_ALLOC_SIZE in
sec_mem.c to allow the allocation of such large amounts of secure
memory */
#if defined( CONFIG_CONSERVE_MEMORY )
#define SESSIONCACHE_SIZE 128
#else
#define SESSIONCACHE_SIZE 1024
#endif /* CONFIG_CONSERVE_MEMORY */
#define SESSIONCACHE_TIMEOUT 3600
/* SSL packet/buffer size information. The extra packet size is somewhat
large because it can contains the packet header (5 bytes), IV (0/8/16
bytes), MAC (16/20 bytes), and cipher block padding (up to 256 bytes) */
#define EXTRA_PACKET_SIZE 512
/* By default, cryptlib uses RSA key transport, which is supported by all
servers. It's also possible to use DH key agreement, however this isn't
supported by all servers (particularly Microsoft ones) and has a
considerably higher cryptographic overhead than RSA, requiring a DH
(pseudo-)private key operation on both client and server as well as a
standard RSA private-key operation on the server. To use DH cipher
suites in preference to RSA ones, uncomment the following */
/* #define PREFER_DH_SUITES */
/* SSL protocol-specific flags that augment the general session flags. The
alert-sent flag is required because we're required to send a close alert
when shutting down to prevent a truncation attack, however lower-level
code may have already sent an alert so we have to remember not to send it
twice */
#define SSL_PFLAG_NONE 0x0 /* No protocol-specific flags */
#define SSL_PFLAG_ALERTSENT 0x1 /* Close alert sent */
/* SSL message types */
#define SSL_MSG_CHANGE_CIPHER_SPEC 20
#define SSL_MSG_ALERT 21
#define SSL_MSG_HANDSHAKE 22
#define SSL_MSG_APPLICATION_DATA 23
#define SSL_MSG_FIRST 20
#define SSL_MSG_LAST 23
/* Special-case expected packet-type values that are passed to
readPacketSSL() to handle situations where more than one packet type is
valid. The first handshake packet from the client or server is treated
specially in that both the version number info is taken from this packet,
and the packet itself may have to be treated specially because although
the client handshake is supposed to be a v3 handshake, the first
handshake packet is often a hacked v2 one with forwards-compatibility
kludges */
#define SSL_MSG_FIRST_HANDSHAKE 0xFF
#define SSL_MSG_V2HANDSHAKE 0x80
/* SSL handshake message subtypes */
#define SSL_HAND_CLIENT_HELLO 0x01
#define SSL_HAND_SERVER_HELLO 0x02
#define SSL_HAND_CERTIFICATE 0x0B
#define SSL_HAND_SERVER_KEYEXCHANGE 0x0C
#define SSL_HAND_SERVER_CERTREQUEST 0x0D
#define SSL_HAND_SERVER_HELLODONE 0x0E
#define SSL_HAND_CLIENT_CERTVERIFY 0x0F
#define SSL_HAND_CLIENT_KEYEXCHANGE 0x10
#define SSL_HAND_FINISHED 0x14
/* SSL alert levels and types */
#define SSL_ALERTLEVEL_WARNING 1
#define SSL_ALERTLEVEL_FATAL 2
#define SSL_ALERT_CLOSE_NOTIFY 0
#define SSL_ALERT_UNEXPECTED_MESSAGE 10
#define SSL_ALERT_BAD_RECORD_MAC 20
#define TLS_ALERT_DECRYPTION_FAILED 21
#define TLS_ALERT_RECORD_OVERFLOW 22
#define SSL_ALERT_DECOMPRESSION_FAILURE 30
#define SSL_ALERT_HANDSHAKE_FAILURE 40
#define SSL_ALERT_NO_CERTIFICATE 41
#define SSL_ALERT_BAD_CERTIFICATE 42
#define SSL_ALERT_UNSUPPORTED_CERTIFICATE 43
#define SSL_ALERT_CERTIFICATE_REVOKED 44
#define SSL_ALERT_CERTIFICATE_EXPIRED 45
#define SSL_ALERT_CERTIFICATE_UNKNOWN 46
#define SSL_ALERT_ILLEGAL_PARAMETER 47
#define TLS_ALERT_UNKNOWN_CA 48
#define TLS_ALERT_ACCESS_DENIED 49
#define TLS_ALERT_DECODE_ERROR 50
#define TLS_ALERT_DECRYPT_ERROR 51
#define TLS_ALERT_EXPORT_RESTRICTION 60
#define TLS_ALERT_PROTOCOL_VERSION 70
#define TLS_ALERT_INSUFFICIENT_SECURITY 71
#define TLS_ALERT_INTERNAL_ERROR 80
#define TLS_ALERT_USER_CANCELLED 90
#define TLS_ALERT_NO_RENEGOTIATION 100
#define TLS_ALERT_UNSUPPORTED_EXTENSION 110
#define TLS_ALERT_CERTIFICATE_UNOBTAINABLE 111
#define TLS_ALERT_UNRECOGNIZED_NAME 112
#define TLS_ALERT_BAD_CERTIFICATE_STATUS_RESPONSE 113
#define TLS_ALERT_BAD_CERTIFICATE_HASH_VALUE 114
#define TLS_ALERT_UNKNOWN_PSK_IDENTITY 115
/* SSL cipher suites */
typedef enum {
/* SSLv3 cipher suites (0-10) */
SSL_NULL_WITH_NULL, SSL_RSA_WITH_NULL_MD5, SSL_RSA_WITH_NULL_SHA,
SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_WITH_RC4_128_MD5,
SSL_RSA_WITH_RC4_128_SHA, SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5,
SSL_RSA_WITH_IDEA_CBC_SHA, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA,
SSL_RSA_WITH_DES_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA,
/* TLS (RFC 2246) DH cipher suites (11-22) */
TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA, TLS_DH_DSS_WITH_DES_CBC_SHA,
TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA, TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA,
TLS_DH_RSA_WITH_DES_CBC_SHA, TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA,
TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, TLS_DHE_DSS_WITH_DES_CBC_SHA,
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,
TLS_DHE_RSA_WITH_DES_CBC_SHA, TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,
/* TLS (RFC 2246) anon-DH cipher suites (23-27) */
TLS_DH_anon_EXPORT_WITH_RC4_40_MD5, TLS_DH_anon_WITH_RC4_128_MD5,
TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA, TLS_DH_anon_WITH_DES_CBC_SHA,
TLS_DH_anon_WITH_3DES_EDE_CBC_SHA,
/* TLS (RFC 2246) reserved cipher suites (28-29, used for Fortezza in
SSLv3) */
TLS_reserved_1, TLS_reserved_2,
/* TLS with Kerberos (RFC 2712) suites (30-43) */
TLS_KRB5_WITH_DES_CBC_SHA, TLS_KRB5_WITH_3DES_EDE_CBC_SHA,
TLS_KRB5_WITH_RC4_128_SHA, TLS_KRB5_WITH_IDEA_CBC_SHA,
TLS_KRB5_WITH_DES_CBC_MD5, TLS_KRB5_WITH_3DES_EDE_CBC_MD5,
TLS_KRB5_WITH_RC4_128_MD5, TLS_KRB5_WITH_IDEA_CBC_MD5,
TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA, TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA,
TLS_KRB5_EXPORT_WITH_RC4_40_SHA, TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5,
TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5, TLS_KRB5_EXPORT_WITH_RC4_40_MD5,
/* Unknown suites (44-46) */
/* TLS (post-2246) cipher suites (47-58) */
TLS_RSA_WITH_AES_128_CBC_SHA = 0x2F, TLS_DH_DSS_WITH_AES_128_CBC_SHA,
TLS_DH_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA,
TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DH_anon_WITH_AES_128_CBC_SHA,
TLS_RSA_WITH_AES_256_CBC_SHA, TLS_DH_DSS_WITH_AES_256_CBC_SHA,
TLS_DH_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA,
TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DH_anon_WITH_AES_256_CBC_SHA,
/* Unknown suites (59-137) */
/* TLS-PSK cipher suites (138-149) */
TLS_PSK_WITH_RC4_128_SHA = 138, TLS_PSK_WITH_3DES_EDE_CBC_SHA,
TLS_PSK_WITH_AES_128_CBC_SHA, TLS_PSK_WITH_AES_256_CBC_SHA,
TLS_DHE_PSK_WITH_RC4_128_SHA, TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA,
TLS_DHE_PSK_WITH_AES_128_CBC_SHA, TLS_DHE_PSK_WITH_AES_256_CBC_SHA,
TLS_RSA_PSK_WITH_RC4_128_SHA, TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA,
TLS_RSA_PSK_WITH_AES_128_CBC_SHA, TLS_RSA_PSK_WITH_AES_256_CBC_SHA,
SSL_LAST
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -