summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_ciph.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/ssl_ciph.c')
-rw-r--r--src/lib/libssl/ssl_ciph.c77
1 files changed, 69 insertions, 8 deletions
diff --git a/src/lib/libssl/ssl_ciph.c b/src/lib/libssl/ssl_ciph.c
index f63163f26c..cdd8dde128 100644
--- a/src/lib/libssl/ssl_ciph.c
+++ b/src/lib/libssl/ssl_ciph.c
@@ -68,7 +68,9 @@
68#define SSL_ENC_IDEA_IDX 4 68#define SSL_ENC_IDEA_IDX 4
69#define SSL_ENC_eFZA_IDX 5 69#define SSL_ENC_eFZA_IDX 5
70#define SSL_ENC_NULL_IDX 6 70#define SSL_ENC_NULL_IDX 6
71#define SSL_ENC_NUM_IDX 7 71#define SSL_ENC_AES128_IDX 7
72#define SSL_ENC_AES256_IDX 8
73#define SSL_ENC_NUM_IDX 9
72 74
73static const EVP_CIPHER *ssl_cipher_methods[SSL_ENC_NUM_IDX]={ 75static const EVP_CIPHER *ssl_cipher_methods[SSL_ENC_NUM_IDX]={
74 NULL,NULL,NULL,NULL,NULL,NULL, 76 NULL,NULL,NULL,NULL,NULL,NULL,
@@ -98,8 +100,10 @@ typedef struct cipher_order_st
98 } CIPHER_ORDER; 100 } CIPHER_ORDER;
99 101
100static const SSL_CIPHER cipher_aliases[]={ 102static const SSL_CIPHER cipher_aliases[]={
101 /* Don't include eNULL unless specifically enabled */ 103 /* Don't include eNULL unless specifically enabled.
102 {0,SSL_TXT_ALL, 0,SSL_ALL & ~SSL_eNULL, SSL_ALL ,0,0,0,SSL_ALL,SSL_ALL}, /* must be first */ 104 * Similarly, don't include AES in ALL because these ciphers are not yet official. */
105 {0,SSL_TXT_ALL, 0,SSL_ALL & ~SSL_eNULL & ~SSL_AES, SSL_ALL ,0,0,0,SSL_ALL,SSL_ALL}, /* must be first */
106 {0,SSL_TXT_kKRB5,0,SSL_kKRB5,0,0,0,0,SSL_MKEY_MASK,0}, /* VRS Kerberos5 */
103 {0,SSL_TXT_kRSA,0,SSL_kRSA, 0,0,0,0,SSL_MKEY_MASK,0}, 107 {0,SSL_TXT_kRSA,0,SSL_kRSA, 0,0,0,0,SSL_MKEY_MASK,0},
104 {0,SSL_TXT_kDHr,0,SSL_kDHr, 0,0,0,0,SSL_MKEY_MASK,0}, 108 {0,SSL_TXT_kDHr,0,SSL_kDHr, 0,0,0,0,SSL_MKEY_MASK,0},
105 {0,SSL_TXT_kDHd,0,SSL_kDHd, 0,0,0,0,SSL_MKEY_MASK,0}, 109 {0,SSL_TXT_kDHd,0,SSL_kDHd, 0,0,0,0,SSL_MKEY_MASK,0},
@@ -108,6 +112,7 @@ static const SSL_CIPHER cipher_aliases[]={
108 {0,SSL_TXT_DH, 0,SSL_DH, 0,0,0,0,SSL_MKEY_MASK,0}, 112 {0,SSL_TXT_DH, 0,SSL_DH, 0,0,0,0,SSL_MKEY_MASK,0},
109 {0,SSL_TXT_EDH, 0,SSL_EDH, 0,0,0,0,SSL_MKEY_MASK|SSL_AUTH_MASK,0}, 113 {0,SSL_TXT_EDH, 0,SSL_EDH, 0,0,0,0,SSL_MKEY_MASK|SSL_AUTH_MASK,0},
110 114
115 {0,SSL_TXT_aKRB5,0,SSL_aKRB5,0,0,0,0,SSL_AUTH_MASK,0}, /* VRS Kerberos5 */
111 {0,SSL_TXT_aRSA,0,SSL_aRSA, 0,0,0,0,SSL_AUTH_MASK,0}, 116 {0,SSL_TXT_aRSA,0,SSL_aRSA, 0,0,0,0,SSL_AUTH_MASK,0},
112 {0,SSL_TXT_aDSS,0,SSL_aDSS, 0,0,0,0,SSL_AUTH_MASK,0}, 117 {0,SSL_TXT_aDSS,0,SSL_aDSS, 0,0,0,0,SSL_AUTH_MASK,0},
113 {0,SSL_TXT_aFZA,0,SSL_aFZA, 0,0,0,0,SSL_AUTH_MASK,0}, 118 {0,SSL_TXT_aFZA,0,SSL_aFZA, 0,0,0,0,SSL_AUTH_MASK,0},
@@ -122,12 +127,14 @@ static const SSL_CIPHER cipher_aliases[]={
122 {0,SSL_TXT_IDEA,0,SSL_IDEA, 0,0,0,0,SSL_ENC_MASK,0}, 127 {0,SSL_TXT_IDEA,0,SSL_IDEA, 0,0,0,0,SSL_ENC_MASK,0},
123 {0,SSL_TXT_eNULL,0,SSL_eNULL,0,0,0,0,SSL_ENC_MASK,0}, 128 {0,SSL_TXT_eNULL,0,SSL_eNULL,0,0,0,0,SSL_ENC_MASK,0},
124 {0,SSL_TXT_eFZA,0,SSL_eFZA, 0,0,0,0,SSL_ENC_MASK,0}, 129 {0,SSL_TXT_eFZA,0,SSL_eFZA, 0,0,0,0,SSL_ENC_MASK,0},
130 {0,SSL_TXT_AES, 0,SSL_AES, 0,0,0,0,SSL_ENC_MASK,0},
125 131
126 {0,SSL_TXT_MD5, 0,SSL_MD5, 0,0,0,0,SSL_MAC_MASK,0}, 132 {0,SSL_TXT_MD5, 0,SSL_MD5, 0,0,0,0,SSL_MAC_MASK,0},
127 {0,SSL_TXT_SHA1,0,SSL_SHA1, 0,0,0,0,SSL_MAC_MASK,0}, 133 {0,SSL_TXT_SHA1,0,SSL_SHA1, 0,0,0,0,SSL_MAC_MASK,0},
128 {0,SSL_TXT_SHA, 0,SSL_SHA, 0,0,0,0,SSL_MAC_MASK,0}, 134 {0,SSL_TXT_SHA, 0,SSL_SHA, 0,0,0,0,SSL_MAC_MASK,0},
129 135
130 {0,SSL_TXT_NULL,0,SSL_NULL, 0,0,0,0,SSL_ENC_MASK,0}, 136 {0,SSL_TXT_NULL,0,SSL_NULL, 0,0,0,0,SSL_ENC_MASK,0},
137 {0,SSL_TXT_KRB5,0,SSL_KRB5, 0,0,0,0,SSL_AUTH_MASK|SSL_MKEY_MASK,0},
131 {0,SSL_TXT_RSA, 0,SSL_RSA, 0,0,0,0,SSL_AUTH_MASK|SSL_MKEY_MASK,0}, 138 {0,SSL_TXT_RSA, 0,SSL_RSA, 0,0,0,0,SSL_AUTH_MASK|SSL_MKEY_MASK,0},
132 {0,SSL_TXT_ADH, 0,SSL_ADH, 0,0,0,0,SSL_AUTH_MASK|SSL_MKEY_MASK,0}, 139 {0,SSL_TXT_ADH, 0,SSL_ADH, 0,0,0,0,SSL_AUTH_MASK|SSL_MKEY_MASK,0},
133 {0,SSL_TXT_FZA, 0,SSL_FZA, 0,0,0,0,SSL_AUTH_MASK|SSL_MKEY_MASK|SSL_ENC_MASK,0}, 140 {0,SSL_TXT_FZA, 0,SSL_FZA, 0,0,0,0,SSL_AUTH_MASK|SSL_MKEY_MASK|SSL_ENC_MASK,0},
@@ -160,6 +167,10 @@ static void load_ciphers(void)
160 EVP_get_cipherbyname(SN_rc2_cbc); 167 EVP_get_cipherbyname(SN_rc2_cbc);
161 ssl_cipher_methods[SSL_ENC_IDEA_IDX]= 168 ssl_cipher_methods[SSL_ENC_IDEA_IDX]=
162 EVP_get_cipherbyname(SN_idea_cbc); 169 EVP_get_cipherbyname(SN_idea_cbc);
170 ssl_cipher_methods[SSL_ENC_AES128_IDX]=
171 EVP_get_cipherbyname(SN_aes_128_cbc);
172 ssl_cipher_methods[SSL_ENC_AES256_IDX]=
173 EVP_get_cipherbyname(SN_aes_256_cbc);
163 174
164 ssl_digest_methods[SSL_MD_MD5_IDX]= 175 ssl_digest_methods[SSL_MD_MD5_IDX]=
165 EVP_get_digestbyname(SN_md5); 176 EVP_get_digestbyname(SN_md5);
@@ -220,6 +231,14 @@ int ssl_cipher_get_evp(SSL_SESSION *s, const EVP_CIPHER **enc,
220 case SSL_eNULL: 231 case SSL_eNULL:
221 i=SSL_ENC_NULL_IDX; 232 i=SSL_ENC_NULL_IDX;
222 break; 233 break;
234 case SSL_AES:
235 switch(c->alg_bits)
236 {
237 case 128: i=SSL_ENC_AES128_IDX; break;
238 case 256: i=SSL_ENC_AES256_IDX; break;
239 default: i=-1; break;
240 }
241 break;
223 default: 242 default:
224 i= -1; 243 i= -1;
225 break; 244 break;
@@ -282,15 +301,18 @@ static unsigned long ssl_cipher_get_disabled(void)
282 unsigned long mask; 301 unsigned long mask;
283 302
284 mask = SSL_kFZA; 303 mask = SSL_kFZA;
285#ifdef NO_RSA 304#ifdef OPENSSL_NO_RSA
286 mask |= SSL_aRSA|SSL_kRSA; 305 mask |= SSL_aRSA|SSL_kRSA;
287#endif 306#endif
288#ifdef NO_DSA 307#ifdef OPENSSL_NO_DSA
289 mask |= SSL_aDSS; 308 mask |= SSL_aDSS;
290#endif 309#endif
291#ifdef NO_DH 310#ifdef OPENSSL_NO_DH
292 mask |= SSL_kDHr|SSL_kDHd|SSL_kEDH|SSL_aDH; 311 mask |= SSL_kDHr|SSL_kDHd|SSL_kEDH|SSL_aDH;
293#endif 312#endif
313#ifdef OPENSSL_NO_KRB5
314 mask |= SSL_kKRB5|SSL_aKRB5;
315#endif
294 316
295#ifdef SSL_FORBID_ENULL 317#ifdef SSL_FORBID_ENULL
296 mask |= SSL_eNULL; 318 mask |= SSL_eNULL;
@@ -302,6 +324,7 @@ static unsigned long ssl_cipher_get_disabled(void)
302 mask |= (ssl_cipher_methods[SSL_ENC_RC2_IDX ] == NULL) ? SSL_RC2 :0; 324 mask |= (ssl_cipher_methods[SSL_ENC_RC2_IDX ] == NULL) ? SSL_RC2 :0;
303 mask |= (ssl_cipher_methods[SSL_ENC_IDEA_IDX] == NULL) ? SSL_IDEA:0; 325 mask |= (ssl_cipher_methods[SSL_ENC_IDEA_IDX] == NULL) ? SSL_IDEA:0;
304 mask |= (ssl_cipher_methods[SSL_ENC_eFZA_IDX] == NULL) ? SSL_eFZA:0; 326 mask |= (ssl_cipher_methods[SSL_ENC_eFZA_IDX] == NULL) ? SSL_eFZA:0;
327 mask |= (ssl_cipher_methods[SSL_ENC_AES128_IDX] == NULL) ? SSL_AES:0;
305 328
306 mask |= (ssl_digest_methods[SSL_MD_MD5_IDX ] == NULL) ? SSL_MD5 :0; 329 mask |= (ssl_digest_methods[SSL_MD_MD5_IDX ] == NULL) ? SSL_MD5 :0;
307 mask |= (ssl_digest_methods[SSL_MD_SHA1_IDX] == NULL) ? SSL_SHA1:0; 330 mask |= (ssl_digest_methods[SSL_MD_SHA1_IDX] == NULL) ? SSL_SHA1:0;
@@ -336,6 +359,9 @@ static void ssl_cipher_collect_ciphers(const SSL_METHOD *ssl_method,
336 list[list_num].prev = NULL; 359 list[list_num].prev = NULL;
337 list[list_num].active = 0; 360 list[list_num].active = 0;
338 list_num++; 361 list_num++;
362#ifdef KSSL_DEBUG
363 printf("\t%d: %s %lx %lx\n",i,c->name,c->id,c->algorithms);
364#endif /* KSSL_DEBUG */
339 /* 365 /*
340 if (!sk_push(ca_list,(char *)c)) goto err; 366 if (!sk_push(ca_list,(char *)c)) goto err;
341 */ 367 */
@@ -738,6 +764,9 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method,
738 * it is used for allocation. 764 * it is used for allocation.
739 */ 765 */
740 num_of_ciphers = ssl_method->num_ciphers(); 766 num_of_ciphers = ssl_method->num_ciphers();
767#ifdef KSSL_DEBUG
768 printf("ssl_create_cipher_list() for %d ciphers\n", num_of_ciphers);
769#endif /* KSSL_DEBUG */
741 list = (CIPHER_ORDER *)OPENSSL_malloc(sizeof(CIPHER_ORDER) * num_of_ciphers); 770 list = (CIPHER_ORDER *)OPENSSL_malloc(sizeof(CIPHER_ORDER) * num_of_ciphers);
742 if (list == NULL) 771 if (list == NULL)
743 { 772 {
@@ -872,8 +901,12 @@ char *SSL_CIPHER_description(SSL_CIPHER *cipher, char *buf, int len)
872 char *ver,*exp; 901 char *ver,*exp;
873 char *kx,*au,*enc,*mac; 902 char *kx,*au,*enc,*mac;
874 unsigned long alg,alg2,alg_s; 903 unsigned long alg,alg2,alg_s;
904#ifdef KSSL_DEBUG
905 static char *format="%-23s %s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s%s AL=%lx\n";
906#else
875 static char *format="%-23s %s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s%s\n"; 907 static char *format="%-23s %s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s%s\n";
876 908#endif /* KSSL_DEBUG */
909
877 alg=cipher->algorithms; 910 alg=cipher->algorithms;
878 alg_s=cipher->algo_strength; 911 alg_s=cipher->algo_strength;
879 alg2=cipher->algorithm2; 912 alg2=cipher->algorithm2;
@@ -901,6 +934,10 @@ char *SSL_CIPHER_description(SSL_CIPHER *cipher, char *buf, int len)
901 case SSL_kDHd: 934 case SSL_kDHd:
902 kx="DH/DSS"; 935 kx="DH/DSS";
903 break; 936 break;
937 case SSL_kKRB5: /* VRS */
938 case SSL_KRB5: /* VRS */
939 kx="KRB5";
940 break;
904 case SSL_kFZA: 941 case SSL_kFZA:
905 kx="Fortezza"; 942 kx="Fortezza";
906 break; 943 break;
@@ -922,6 +959,10 @@ char *SSL_CIPHER_description(SSL_CIPHER *cipher, char *buf, int len)
922 case SSL_aDH: 959 case SSL_aDH:
923 au="DH"; 960 au="DH";
924 break; 961 break;
962 case SSL_aKRB5: /* VRS */
963 case SSL_KRB5: /* VRS */
964 au="KRB5";
965 break;
925 case SSL_aFZA: 966 case SSL_aFZA:
926 case SSL_aNULL: 967 case SSL_aNULL:
927 au="None"; 968 au="None";
@@ -955,6 +996,15 @@ char *SSL_CIPHER_description(SSL_CIPHER *cipher, char *buf, int len)
955 case SSL_eNULL: 996 case SSL_eNULL:
956 enc="None"; 997 enc="None";
957 break; 998 break;
999 case SSL_AES:
1000 switch(cipher->strength_bits)
1001 {
1002 case 128: enc="AESdraft(128)"; break;
1003 case 192: enc="AESdraft(192)"; break;
1004 case 256: enc="AESdraft(256)"; break;
1005 default: enc="AESdraft(?""?""?)"; break;
1006 }
1007 break;
958 default: 1008 default:
959 enc="unknown"; 1009 enc="unknown";
960 break; 1010 break;
@@ -982,7 +1032,11 @@ char *SSL_CIPHER_description(SSL_CIPHER *cipher, char *buf, int len)
982 else if (len < 128) 1032 else if (len < 128)
983 return("Buffer too small"); 1033 return("Buffer too small");
984 1034
1035#ifdef KSSL_DEBUG
1036 BIO_snprintf(buf,len,format,cipher->name,ver,kx,au,enc,mac,exp,alg);
1037#else
985 BIO_snprintf(buf,len,format,cipher->name,ver,kx,au,enc,mac,exp); 1038 BIO_snprintf(buf,len,format,cipher->name,ver,kx,au,enc,mac,exp);
1039#endif /* KSSL_DEBUG */
986 return(buf); 1040 return(buf);
987 } 1041 }
988 1042
@@ -1053,6 +1107,10 @@ int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm)
1053 SSL_COMP *comp; 1107 SSL_COMP *comp;
1054 STACK_OF(SSL_COMP) *sk; 1108 STACK_OF(SSL_COMP) *sk;
1055 1109
1110 if (cm == NULL || cm->type == NID_undef)
1111 return 1;
1112
1113 MemCheck_off();
1056 comp=(SSL_COMP *)OPENSSL_malloc(sizeof(SSL_COMP)); 1114 comp=(SSL_COMP *)OPENSSL_malloc(sizeof(SSL_COMP));
1057 comp->id=id; 1115 comp->id=id;
1058 comp->method=cm; 1116 comp->method=cm;
@@ -1062,10 +1120,13 @@ int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm)
1062 sk=ssl_comp_methods; 1120 sk=ssl_comp_methods;
1063 if ((sk == NULL) || !sk_SSL_COMP_push(sk,comp)) 1121 if ((sk == NULL) || !sk_SSL_COMP_push(sk,comp))
1064 { 1122 {
1123 MemCheck_on();
1065 SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD,ERR_R_MALLOC_FAILURE); 1124 SSLerr(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD,ERR_R_MALLOC_FAILURE);
1066 return(0); 1125 return(0);
1067 } 1126 }
1068 else 1127 else
1128 {
1129 MemCheck_on();
1069 return(1); 1130 return(1);
1131 }
1070 } 1132 }
1071