@@ -69,7 +69,7 @@ const uint8_t ssl_prot_prefs[NUM_PROTOCOLS] =
69
69
#elif CONFIG_SSL_PROT_MEDIUM /* medium security, medium speed */
70
70
{ SSL_AES128_SHA256 , SSL_AES256_SHA256 , SSL_AES256_SHA , SSL_AES128_SHA };
71
71
#else /* CONFIG_SSL_PROT_HIGH */ /* high security, low speed */
72
- { SSL_AES256_SHA , SSL_AES128_SHA256 , SSL_AES_256_SHA , SSL_AES128_SHA };
72
+ { SSL_AES256_SHA256 , SSL_AES128_SHA256 , SSL_AES256_SHA , SSL_AES128_SHA };
73
73
#endif
74
74
75
75
/**
@@ -640,7 +640,7 @@ static void add_hmac_digest(SSL *ssl, int mode, uint8_t *hmac_header,
640
640
const uint8_t * buf , int buf_len , uint8_t * hmac_buf )
641
641
{
642
642
int hmac_len = buf_len + 8 + SSL_RECORD_SIZE ;
643
- uint8_t * t_buf = (uint8_t * )alloca (buf_len );
643
+ uint8_t * t_buf = (uint8_t * )alloca (buf_len + 100 );
644
644
645
645
memcpy (t_buf , (mode == SSL_SERVER_WRITE || mode == SSL_CLIENT_WRITE ) ?
646
646
ssl -> write_sequence : ssl -> read_sequence , 8 );
@@ -683,7 +683,7 @@ static void add_hmac_digest(SSL *ssl, int mode, uint8_t *hmac_header,
683
683
*/
684
684
static int verify_digest (SSL * ssl , int mode , const uint8_t * buf , int read_len )
685
685
{
686
- uint8_t hmac_buf [SHA256_SIZE ];
686
+ uint8_t hmac_buf [128 ];
687
687
int hmac_offset ;
688
688
689
689
if (ssl -> cipher_info -> padding_size )
@@ -738,12 +738,22 @@ static int verify_digest(SSL *ssl, int mode, const uint8_t *buf, int read_len)
738
738
*/
739
739
void add_packet (SSL * ssl , const uint8_t * pkt , int len )
740
740
{
741
- if (ssl -> version >= SSL_PROTOCOL_VERSION_TLS1_2 ) // TLS1.2
741
+ // TLS1.2
742
+ if (ssl -> version >= SSL_PROTOCOL_VERSION_TLS1_2 || ssl -> version == 0 )
742
743
{
743
744
SHA256_Update (& ssl -> dc -> sha256_ctx , pkt , len );
745
+ #if 0
746
+ uint8_t buf [128 ];
747
+ SHA256_CTX sha256_ctx = ssl -> dc -> sha256_ctx ; // interim copy
748
+ SHA256_Final (buf , & sha256_ctx );
749
+ print_blob ("handshake" , buf , 8 );
750
+ #endif
751
+
744
752
}
745
- else // TLS1.0/1.0
753
+
754
+ if (ssl -> version < SSL_PROTOCOL_VERSION_TLS1_2 || ssl -> version == 0 )
746
755
{
756
+ uint8_t q [128 ];
747
757
MD5_Update (& ssl -> dc -> md5_ctx , pkt , len );
748
758
SHA1_Update (& ssl -> dc -> sha1_ctx , pkt , len );
749
759
}
@@ -870,7 +880,7 @@ static void prf(SSL *ssl, const uint8_t *sec, int sec_len,
870
880
*/
871
881
void generate_master_secret (SSL * ssl , const uint8_t * premaster_secret )
872
882
{
873
- uint8_t buf [128 ]; /* needs to be > 13+32+32 in size */
883
+ uint8_t buf [128 ];
874
884
//print_blob("premaster secret", premaster_secret, 48);
875
885
strcpy ((char * )buf , "master secret" );
876
886
memcpy (& buf [13 ], ssl -> dc -> client_random , SSL_RANDOM_SIZE );
@@ -903,10 +913,11 @@ static void generate_key_block(SSL *ssl,
903
913
* Calculate the digest used in the finished message. This function also
904
914
* doubles up as a certificate verify function.
905
915
*/
906
- void finished_digest (SSL * ssl , const char * label , uint8_t * digest )
916
+ int finished_digest (SSL * ssl , const char * label , uint8_t * digest )
907
917
{
908
918
uint8_t mac_buf [128 ];
909
919
uint8_t * q = mac_buf ;
920
+ int dgst_len ;
910
921
911
922
if (label )
912
923
{
@@ -919,17 +930,7 @@ void finished_digest(SSL *ssl, const char *label, uint8_t *digest)
919
930
SHA256_CTX sha256_ctx = ssl -> dc -> sha256_ctx ; // interim copy
920
931
SHA256_Final (q , & sha256_ctx );
921
932
q += SHA256_SIZE ;
922
-
923
- if (label )
924
- {
925
- prf (ssl , ssl -> dc -> master_secret , SSL_SECRET_SIZE ,
926
- mac_buf , (int )(q - mac_buf ), digest ,
927
- SSL_FINISHED_HASH_SIZE );
928
- }
929
- else // for use in a certificate verify
930
- {
931
- memcpy (digest , mac_buf , SHA256_SIZE );
932
- }
933
+ dgst_len = (int )(q - mac_buf );
933
934
}
934
935
else // TLS1.0/1.1
935
936
{
@@ -941,23 +942,26 @@ void finished_digest(SSL *ssl, const char *label, uint8_t *digest)
941
942
942
943
SHA1_Final (q , & sha1_ctx );
943
944
q += SHA1_SIZE ;
945
+ dgst_len = (int )(q - mac_buf );
946
+ }
944
947
945
- if (label )
946
- {
947
- prf (ssl , ssl -> dc -> master_secret , SSL_SECRET_SIZE ,
948
- mac_buf , (int )(q - mac_buf ), digest , SSL_FINISHED_HASH_SIZE );
949
- }
950
- else /* for use in a certificate verify */
951
- {
952
- memcpy (digest , mac_buf , MD5_SIZE + SHA1_SIZE );
953
- }
948
+ if (label )
949
+ {
950
+ prf (ssl , ssl -> dc -> master_secret , SSL_SECRET_SIZE ,
951
+ mac_buf , dgst_len , digest , SSL_FINISHED_HASH_SIZE );
952
+ }
953
+ else /* for use in a certificate verify */
954
+ {
955
+ memcpy (digest , mac_buf , dgst_len );
954
956
}
955
957
956
958
#if 0
957
959
printf ("label: %s\n" , label );
958
- print_blob ("mac_buf" , mac_buf , q - mac_buf );
960
+ print_blob ("mac_buf" , mac_buf , dgst_len );
959
961
print_blob ("finished digest" , digest , SSL_FINISHED_HASH_SIZE );
960
962
#endif
963
+
964
+ return dgst_len ;
961
965
}
962
966
963
967
/**
@@ -1190,19 +1194,18 @@ static int set_key_block(SSL *ssl, int is_write)
1190
1194
return -1 ;
1191
1195
1192
1196
/* only do once in a handshake */
1193
- if (ssl -> dc -> bm_proc_index == 0 )
1197
+ if (! ssl -> dc -> key_block_generated )
1194
1198
{
1195
- #if 0
1196
- print_blob ("client" , ssl -> dc -> client_random , 32 );
1197
- print_blob ("server" , ssl -> dc -> server_random , 32 );
1198
- print_blob ("master" , ssl -> dc -> master_secret , SSL_SECRET_SIZE );
1199
- #endif
1200
1199
generate_key_block (ssl , ssl -> dc -> client_random , ssl -> dc -> server_random ,
1201
1200
ssl -> dc -> master_secret , ssl -> dc -> key_block ,
1202
1201
ciph_info -> key_block_size );
1203
1202
#if 0
1203
+ print_blob ("master" , ssl -> dc -> master_secret , SSL_SECRET_SIZE );
1204
1204
print_blob ("keyblock" , ssl -> dc -> key_block , ciph_info -> key_block_size );
1205
+ print_blob ("client random" , ssl -> dc -> client_random , 32 );
1206
+ print_blob ("server random" , ssl -> dc -> server_random , 32 );
1205
1207
#endif
1208
+ ssl -> dc -> key_block_generated = 1 ;
1206
1209
}
1207
1210
1208
1211
q = ssl -> dc -> key_block ;
@@ -1229,6 +1232,12 @@ static int set_key_block(SSL *ssl, int is_write)
1229
1232
q += ciph_info -> iv_size ;
1230
1233
memcpy (server_iv , q , ciph_info -> iv_size );
1231
1234
q += ciph_info -> iv_size ;
1235
+ #if 0
1236
+ print_blob ("client key" , client_key , ciph_info -> key_size );
1237
+ print_blob ("server key" , server_key , ciph_info -> key_size );
1238
+ print_blob ("client iv" , client_iv , ciph_info -> iv_size );
1239
+ print_blob ("server iv" , server_iv , ciph_info -> iv_size );
1240
+ #endif
1232
1241
1233
1242
// free(is_write ? ssl->encrypt_ctx : ssl->decrypt_ctx);
1234
1243
@@ -2285,6 +2294,10 @@ EXP_FUNC void STDCALL ssl_display_error(int error_code)
2285
2294
printf ("\n" );
2286
2295
}
2287
2296
2297
+ /**
2298
+ * Debugging routine to display alerts.
2299
+ */
2300
+
2288
2301
/**
2289
2302
* Debugging routine to display alerts.
2290
2303
*/
0 commit comments