00001
00027 #ifndef POLARSSL_SSL_CIPHERSUITES_H
00028 #define POLARSSL_SSL_CIPHERSUITES_H
00029
00030 #include "pk.h"
00031 #include "cipher.h"
00032 #include "md.h"
00033
00034 #ifdef __cplusplus
00035 extern "C" {
00036 #endif
00037
00038
00039
00040
00041 #define TLS_RSA_WITH_NULL_MD5 0x01
00042 #define TLS_RSA_WITH_NULL_SHA 0x02
00044 #define TLS_RSA_WITH_RC4_128_MD5 0x04
00045 #define TLS_RSA_WITH_RC4_128_SHA 0x05
00046 #define TLS_RSA_WITH_DES_CBC_SHA 0x09
00048 #define TLS_RSA_WITH_3DES_EDE_CBC_SHA 0x0A
00049
00050 #define TLS_DHE_RSA_WITH_DES_CBC_SHA 0x15
00051 #define TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 0x16
00052
00053 #define TLS_PSK_WITH_NULL_SHA 0x2C
00054 #define TLS_DHE_PSK_WITH_NULL_SHA 0x2D
00055 #define TLS_RSA_PSK_WITH_NULL_SHA 0x2E
00056 #define TLS_RSA_WITH_AES_128_CBC_SHA 0x2F
00057
00058 #define TLS_DHE_RSA_WITH_AES_128_CBC_SHA 0x33
00059 #define TLS_RSA_WITH_AES_256_CBC_SHA 0x35
00060 #define TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x39
00061
00062 #define TLS_RSA_WITH_NULL_SHA256 0x3B
00063 #define TLS_RSA_WITH_AES_128_CBC_SHA256 0x3C
00064 #define TLS_RSA_WITH_AES_256_CBC_SHA256 0x3D
00066 #define TLS_RSA_WITH_CAMELLIA_128_CBC_SHA 0x41
00067 #define TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x45
00068
00069 #define TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 0x67
00070 #define TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 0x6B
00072 #define TLS_RSA_WITH_CAMELLIA_256_CBC_SHA 0x84
00073 #define TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x88
00074
00075 #define TLS_PSK_WITH_RC4_128_SHA 0x8A
00076 #define TLS_PSK_WITH_3DES_EDE_CBC_SHA 0x8B
00077 #define TLS_PSK_WITH_AES_128_CBC_SHA 0x8C
00078 #define TLS_PSK_WITH_AES_256_CBC_SHA 0x8D
00079
00080 #define TLS_DHE_PSK_WITH_RC4_128_SHA 0x8E
00081 #define TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x8F
00082 #define TLS_DHE_PSK_WITH_AES_128_CBC_SHA 0x90
00083 #define TLS_DHE_PSK_WITH_AES_256_CBC_SHA 0x91
00084
00085 #define TLS_RSA_PSK_WITH_RC4_128_SHA 0x92
00086 #define TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x93
00087 #define TLS_RSA_PSK_WITH_AES_128_CBC_SHA 0x94
00088 #define TLS_RSA_PSK_WITH_AES_256_CBC_SHA 0x95
00089
00090 #define TLS_RSA_WITH_AES_128_GCM_SHA256 0x9C
00091 #define TLS_RSA_WITH_AES_256_GCM_SHA384 0x9D
00092 #define TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 0x9E
00093 #define TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 0x9F
00095 #define TLS_PSK_WITH_AES_128_GCM_SHA256 0xA8
00096 #define TLS_PSK_WITH_AES_256_GCM_SHA384 0xA9
00097 #define TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 0xAA
00098 #define TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 0xAB
00099 #define TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 0xAC
00100 #define TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 0xAD
00102 #define TLS_PSK_WITH_AES_128_CBC_SHA256 0xAE
00103 #define TLS_PSK_WITH_AES_256_CBC_SHA384 0xAF
00104 #define TLS_PSK_WITH_NULL_SHA256 0xB0
00105 #define TLS_PSK_WITH_NULL_SHA384 0xB1
00107 #define TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 0xB2
00108 #define TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 0xB3
00109 #define TLS_DHE_PSK_WITH_NULL_SHA256 0xB4
00110 #define TLS_DHE_PSK_WITH_NULL_SHA384 0xB5
00112 #define TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 0xB6
00113 #define TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 0xB7
00114 #define TLS_RSA_PSK_WITH_NULL_SHA256 0xB8
00115 #define TLS_RSA_PSK_WITH_NULL_SHA384 0xB9
00117 #define TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xBA
00118 #define TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xBE
00120 #define TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 0xC0
00121 #define TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0xC4
00123 #define TLS_ECDHE_ECDSA_WITH_NULL_SHA 0xC006
00124 #define TLS_ECDHE_ECDSA_WITH_RC4_128_SHA 0xC007
00125 #define TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA 0xC008
00126 #define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0xC009
00127 #define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0xC00A
00129 #define TLS_ECDHE_RSA_WITH_NULL_SHA 0xC010
00130 #define TLS_ECDHE_RSA_WITH_RC4_128_SHA 0xC011
00131 #define TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA 0xC012
00132 #define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 0xC013
00133 #define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 0xC014
00135 #define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 0xC023
00136 #define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 0xC024
00138 #define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0xC027
00139 #define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 0xC028
00141 #define TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0xC02B
00142 #define TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0xC02C
00144 #define TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0xC02F
00145 #define TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0xC030
00147 #define TLS_ECDHE_PSK_WITH_RC4_128_SHA 0xC033
00148 #define TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA 0xC034
00149 #define TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA 0xC035
00150 #define TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA 0xC036
00151 #define TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 0xC037
00152 #define TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 0xC038
00153 #define TLS_ECDHE_PSK_WITH_NULL_SHA 0xC039
00154 #define TLS_ECDHE_PSK_WITH_NULL_SHA256 0xC03A
00155 #define TLS_ECDHE_PSK_WITH_NULL_SHA384 0xC03B
00157 #define TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0xC072
00158 #define TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0xC073
00159 #define TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0xC076
00160 #define TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 0xC077
00162 #define TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256 0xC07A
00163 #define TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384 0xC07B
00164 #define TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 0xC07C
00165 #define TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 0xC07D
00166 #define TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 0xC086
00167 #define TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 0xC087
00168 #define TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256 0xC08A
00169 #define TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384 0xC08B
00171 #define TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256 0xC08D
00172 #define TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384 0xC08F
00173 #define TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256 0xC090
00174 #define TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384 0xC091
00175 #define TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256 0xC092
00176 #define TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384 0xC093
00178 #define TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256 0xC094
00179 #define TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384 0xC095
00180 #define TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0xC096
00181 #define TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0xC097
00182 #define TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 0xC098
00183 #define TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 0xC099
00184 #define TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0xC09A
00185 #define TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0xC09B
00187 typedef enum {
00188 POLARSSL_KEY_EXCHANGE_NONE = 0,
00189 POLARSSL_KEY_EXCHANGE_RSA,
00190 POLARSSL_KEY_EXCHANGE_DHE_RSA,
00191 POLARSSL_KEY_EXCHANGE_ECDHE_RSA,
00192 POLARSSL_KEY_EXCHANGE_ECDHE_ECDSA,
00193 POLARSSL_KEY_EXCHANGE_PSK,
00194 POLARSSL_KEY_EXCHANGE_DHE_PSK,
00195 POLARSSL_KEY_EXCHANGE_RSA_PSK,
00196 POLARSSL_KEY_EXCHANGE_ECDHE_PSK,
00197 } key_exchange_type_t;
00198
00199 typedef struct _ssl_ciphersuite_t ssl_ciphersuite_t;
00200
00201 #define POLARSSL_CIPHERSUITE_WEAK 0x01
00202
00206 struct _ssl_ciphersuite_t
00207 {
00208 int id;
00209 const char * name;
00210
00211 cipher_type_t cipher;
00212 md_type_t mac;
00213 key_exchange_type_t key_exchange;
00214
00215 int min_major_ver;
00216 int min_minor_ver;
00217 int max_major_ver;
00218 int max_minor_ver;
00219
00220 unsigned char flags;
00221 };
00222
00223 const int *ssl_list_ciphersuites( void );
00224
00225 const ssl_ciphersuite_t *ssl_ciphersuite_from_string( const char *ciphersuite_name );
00226 const ssl_ciphersuite_t *ssl_ciphersuite_from_id( int ciphersuite_id );
00227
00228 #if defined(POLARSSL_PK_C)
00229 pk_type_t ssl_get_ciphersuite_sig_pk_alg( const ssl_ciphersuite_t *info );
00230 #endif
00231
00232 int ssl_ciphersuite_uses_ec( const ssl_ciphersuite_t *info );
00233 int ssl_ciphersuite_uses_psk( const ssl_ciphersuite_t *info );
00234
00235 #ifdef __cplusplus
00236 }
00237 #endif
00238
00239 #endif