/* Private header file of libSSL.
 * Various and sundry protocol constants. DON'T CHANGE THESE. These
 * values are defined by the SSL 3.0 protocol specification.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef __ssl3proto_h_
#define __ssl3proto_h_

typedef PRUint8 SSL3Opaque;

typedef PRUint16 SSL3ProtocolVersion;
/* version numbers are defined in sslproto.h */

typedef PRUint16 ssl3CipherSuite;
/* The cipher suites are defined in sslproto.h */

#define MAX_CERT_TYPES			10
#define MAX_COMPRESSION_METHODS		10
#define MAX_MAC_LENGTH			64
#define MAX_PADDING_LENGTH		64
#define MAX_KEY_LENGTH			64
#define EXPORT_KEY_LENGTH		 5
#define SSL3_RANDOM_LENGTH		32

#define SSL3_RECORD_HEADER_LENGTH	 5

/* SSL3_RECORD_HEADER_LENGTH + epoch/sequence_number */
#define DTLS_RECORD_HEADER_LENGTH       13

#define MAX_FRAGMENT_LENGTH		16384
     
typedef enum {
    content_change_cipher_spec = 20, 
    content_alert              = 21,
    content_handshake          = 22, 
    content_application_data   = 23
} SSL3ContentType;

typedef struct {
    SSL3ContentType     type;
    SSL3ProtocolVersion version;
    PRUint16            length;
    SECItem             fragment;
} SSL3Plaintext;

typedef struct {
    SSL3ContentType     type;
    SSL3ProtocolVersion version;
    PRUint16            length;
    SECItem             fragment;
} SSL3Compressed;

typedef struct {
    SECItem    content;
    SSL3Opaque MAC[MAX_MAC_LENGTH];
} SSL3GenericStreamCipher;

typedef struct {
    SECItem    content;
    SSL3Opaque MAC[MAX_MAC_LENGTH];
    PRUint8    padding[MAX_PADDING_LENGTH];
    PRUint8    padding_length;
} SSL3GenericBlockCipher;

typedef enum { change_cipher_spec_choice = 1 } SSL3ChangeCipherSpecChoice;

typedef struct {
    SSL3ChangeCipherSpecChoice choice;
} SSL3ChangeCipherSpec;

typedef enum { alert_warning = 1, alert_fatal = 2 } SSL3AlertLevel;

typedef enum {
    close_notify            = 0,
    unexpected_message      = 10,
    bad_record_mac          = 20,
    decryption_failed_RESERVED = 21,	/* do not send; see RFC 5246 */
    record_overflow         = 22,	/* TLS only */
    decompression_failure   = 30,
    handshake_failure       = 40,
    no_certificate          = 41,	/* SSL3 only, NOT TLS */
    bad_certificate         = 42,
    unsupported_certificate = 43,
    certificate_revoked     = 44,
    certificate_expired     = 45,
    certificate_unknown     = 46,
    illegal_parameter       = 47,

/* All alerts below are TLS only. */
    unknown_ca              = 48,
    access_denied           = 49,
    decode_error            = 50,
    decrypt_error           = 51,
    export_restriction      = 60,
    protocol_version        = 70,
    insufficient_security   = 71,
    internal_error          = 80,
    inappropriate_fallback  = 86,	/* could also be sent for SSLv3 */
    user_canceled           = 90,
    no_renegotiation        = 100,

/* Alerts for client hello extensions */
    unsupported_extension           = 110,
    certificate_unobtainable        = 111,
    unrecognized_name               = 112,
    bad_certificate_status_response = 113,
    bad_certificate_hash_value      = 114,
    no_application_protocol         = 120

} SSL3AlertDescription;

typedef struct {
    SSL3AlertLevel       level;
    SSL3AlertDescription description;
} SSL3Alert;

typedef enum {
    hello_request	= 0, 
    client_hello	= 1, 
    server_hello	= 2,
    hello_verify_request = 3,
    new_session_ticket	= 4,
    certificate 	= 11, 
    server_key_exchange = 12,
    certificate_request	= 13, 
    server_hello_done	= 14,
    certificate_verify	= 15, 
    client_key_exchange	= 16, 
    finished		= 20,
    certificate_status  = 22,
    next_proto		= 67,
    encrypted_extensions= 203
} SSL3HandshakeType;

typedef struct {
    PRUint8 empty;
} SSL3HelloRequest;
     
typedef struct {
    SSL3Opaque rand[SSL3_RANDOM_LENGTH];
} SSL3Random;
     
typedef struct {
    SSL3Opaque id[32];
    PRUint8 length;
} SSL3SessionID;
     
typedef struct {
    SSL3ProtocolVersion   client_version;
    SSL3Random            random;
    SSL3SessionID         session_id;
    SECItem               cipher_suites;
    PRUint8                 cm_count;
    SSLCompressionMethod  compression_methods[MAX_COMPRESSION_METHODS];
} SSL3ClientHello;
     
typedef struct  {
    SSL3ProtocolVersion   server_version;
    SSL3Random            random;
    SSL3SessionID         session_id;
    ssl3CipherSuite       cipher_suite;
    SSLCompressionMethod  compression_method;
} SSL3ServerHello;
     
typedef struct {
    SECItem list;
} SSL3Certificate;

/* SSL3SignType moved to ssl.h */

/* The SSL key exchange method used */     
typedef enum {
    kea_null, 
    kea_rsa, 
    kea_rsa_export,
    kea_rsa_export_1024,
    kea_dh_dss, 
    kea_dh_dss_export, 
    kea_dh_rsa, 
    kea_dh_rsa_export,
    kea_dhe_dss, 
    kea_dhe_dss_export, 
    kea_dhe_rsa, 
    kea_dhe_rsa_export,
    kea_dh_anon, 
    kea_dh_anon_export, 
    kea_rsa_fips,
    kea_ecdh_ecdsa,
    kea_ecdhe_ecdsa,
    kea_ecdh_rsa,
    kea_ecdhe_rsa,
    kea_ecdh_anon
} SSL3KeyExchangeAlgorithm;
     
typedef struct {
    SECItem modulus;
    SECItem exponent;
} SSL3ServerRSAParams;

typedef struct {
    SECItem p;
    SECItem g;
    SECItem Ys;
} SSL3ServerDHParams;

typedef struct {
    union {
	SSL3ServerDHParams dh;
	SSL3ServerRSAParams rsa;
    } u;
} SSL3ServerParams;

/* This enum reflects HashAlgorithm enum from
 * https://tools.ietf.org/html/rfc5246#section-7.4.1.4.1
 *
 * When updating, be sure to also update ssl3_TLSHashAlgorithmToOID. */
enum {
    tls_hash_md5 = 1,
    tls_hash_sha1 = 2,
    tls_hash_sha224 = 3,
    tls_hash_sha256 = 4,
    tls_hash_sha384 = 5,
    tls_hash_sha512 = 6
};

/* This enum reflects SignatureAlgorithm enum from
 * https://tools.ietf.org/html/rfc5246#section-7.4.1.4.1 */
typedef enum {
    tls_sig_rsa = 1,
    tls_sig_dsa = 2,
    tls_sig_ecdsa = 3
} TLSSignatureAlgorithm;

typedef struct {
    SECOidTag hashAlg;
    TLSSignatureAlgorithm sigAlg;
} SSL3SignatureAndHashAlgorithm;

/* SSL3HashesIndividually contains a combination MD5/SHA1 hash, as used in TLS
 * prior to 1.2. */
typedef struct {
    PRUint8 md5[16];
    PRUint8 sha[20];
} SSL3HashesIndividually;

/* SSL3Hashes contains an SSL hash value. The digest is contained in |u.raw|
 * which, if |hashAlg==SEC_OID_UNKNOWN| is also a SSL3HashesIndividually
 * struct. */
typedef struct {
    unsigned int len;
    SECOidTag hashAlg;
    union {
	PRUint8 raw[64];
	SSL3HashesIndividually s;
    } u;
} SSL3Hashes;

typedef struct {
    union {
	SSL3Opaque anonymous;
	SSL3Hashes certified;
    } u;
} SSL3ServerKeyExchange;
     
typedef enum {
    ct_RSA_sign 	=  1, 
    ct_DSS_sign 	=  2, 
    ct_RSA_fixed_DH 	=  3,
    ct_DSS_fixed_DH 	=  4, 
    ct_RSA_ephemeral_DH =  5, 
    ct_DSS_ephemeral_DH =  6,
    ct_ECDSA_sign	=  64, 
    ct_RSA_fixed_ECDH	=  65, 
    ct_ECDSA_fixed_ECDH	=  66 

} SSL3ClientCertificateType;
     
typedef SECItem *SSL3DistinquishedName;

typedef struct {
    SSL3Opaque client_version[2];
    SSL3Opaque random[46];
} SSL3RSAPreMasterSecret;
     
typedef SECItem SSL3EncryptedPreMasterSecret;


typedef SSL3Opaque SSL3MasterSecret[48];

typedef enum { implicit, explicit } SSL3PublicValueEncoding;
     
typedef struct {
    union {
	SSL3Opaque implicit;
	SECItem    explicit;
    } dh_public;
} SSL3ClientDiffieHellmanPublic;
     
typedef struct {
    union {
	SSL3EncryptedPreMasterSecret  rsa;
	SSL3ClientDiffieHellmanPublic diffie_helman;
    } exchange_keys;
} SSL3ClientKeyExchange;

typedef SSL3Hashes SSL3PreSignedCertificateVerify;

typedef SECItem SSL3CertificateVerify;

typedef enum {
    sender_client = 0x434c4e54,
    sender_server = 0x53525652
} SSL3Sender;

typedef SSL3HashesIndividually SSL3Finished;   

typedef struct {
    SSL3Opaque verify_data[12];
} TLSFinished;

/*
 * TLS extension related data structures and constants.
 */ 

/* SessionTicket extension related data structures. */

/* NewSessionTicket handshake message. */
typedef struct {
    PRUint32 received_timestamp;
    PRUint32 ticket_lifetime_hint;
    SECItem  ticket;
} NewSessionTicket;

typedef enum {
    CLIENT_AUTH_ANONYMOUS   = 0,
    CLIENT_AUTH_CERTIFICATE = 1
} ClientAuthenticationType;

typedef struct {
    ClientAuthenticationType client_auth_type;
    union {
	SSL3Opaque *certificate_list;
    } identity;
} ClientIdentity;

#define SESS_TICKET_KEY_NAME_LEN       16
#define SESS_TICKET_KEY_NAME_PREFIX    "NSS!"
#define SESS_TICKET_KEY_NAME_PREFIX_LEN 4
#define SESS_TICKET_KEY_VAR_NAME_LEN   12

typedef struct {
    unsigned char *key_name;
    unsigned char *iv;
    SECItem encrypted_state;
    unsigned char *mac;
} EncryptedSessionTicket;

#define TLS_EX_SESS_TICKET_MAC_LENGTH       32

#define TLS_STE_NO_SERVER_NAME        -1

#endif /* __ssl3proto_h_ */
