@@ -664,10 +664,59 @@ static int ssl_tls13_write_psk_key_exchange_modes_ext( mbedtls_ssl_context *ssl,
664
664
ssl -> handshake -> extensions_present |= MBEDTLS_SSL_EXT_PSK_KEY_EXCHANGE_MODES ;
665
665
return ( 0 );
666
666
}
667
- #endif /* MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED */
667
+
668
+ /* Check if we have any PSK to offer, returns 0 if a PSK is available. */
669
+ MBEDTLS_CHECK_RETURN_CRITICAL
670
+ static int ssl_tls13_get_psk_to_offer (
671
+ const mbedtls_ssl_context * ssl ,
672
+ int * psk_type ,
673
+ const unsigned char * * psk , size_t * psk_len ,
674
+ const unsigned char * * psk_identity , size_t * psk_identity_len )
675
+ {
676
+ * psk = NULL ;
677
+ * psk_len = 0 ;
678
+ * psk_identity = NULL ;
679
+ * psk_identity_len = 0 ;
680
+ * psk_type = MBEDTLS_SSL_TLS1_3_PSK_EXTERNAL ;
681
+
682
+ #if defined(MBEDTLS_SSL_SESSION_TICKETS )
683
+ /* Check if a ticket has been configured. */
684
+ if ( ssl -> session_negotiate != NULL &&
685
+ ssl -> session_negotiate -> ticket != NULL )
686
+ {
687
+ #if defined(MBEDTLS_HAVE_TIME )
688
+ mbedtls_time_t now = mbedtls_time ( NULL );
689
+ if ( ssl -> session_negotiate -> ticket_received <= now &&
690
+ (uint64_t )( now - ssl -> session_negotiate -> ticket_received )
691
+ <= ssl -> session_negotiate -> ticket_lifetime )
692
+ {
693
+ * psk_type = MBEDTLS_SSL_TLS1_3_PSK_RESUMPTION ;
694
+ * psk = ssl -> session_negotiate -> resumption_key ;
695
+ * psk_len = ssl -> session_negotiate -> resumption_key_len ;
696
+ * psk_identity = ssl -> session_negotiate -> ticket ;
697
+ * psk_identity_len = ssl -> session_negotiate -> ticket_len ;
698
+ return ( 0 );
699
+ }
700
+ #endif /* MBEDTLS_HAVE_TIME */
701
+ MBEDTLS_SSL_DEBUG_MSG ( 3 , ( "ticket expired" ) );
702
+ }
703
+ #endif
704
+
705
+ /* Check if an external PSK has been configured. */
706
+ if ( ssl -> conf -> psk != NULL )
707
+ {
708
+ * psk = ssl -> conf -> psk ;
709
+ * psk_len = ssl -> conf -> psk_len ;
710
+ * psk_identity = ssl -> conf -> psk_identity ;
711
+ * psk_identity_len = ssl -> conf -> psk_identity_len ;
712
+ return ( 0 );
713
+ }
714
+
715
+ return ( MBEDTLS_ERR_ERROR_GENERIC_ERROR );
716
+ }
668
717
669
718
/*
670
- * mbedtls_ssl_tls13_write_pre_shared_key_ext () structure:
719
+ * mbedtls_ssl_tls13_write_identities_of_pre_shared_key_ext () structure:
671
720
*
672
721
* struct {
673
722
* opaque identity<1..2^16-1>;
@@ -689,9 +738,6 @@ static int ssl_tls13_write_psk_key_exchange_modes_ext( mbedtls_ssl_context *ssl,
689
738
* } PreSharedKeyExtension;
690
739
*
691
740
*/
692
-
693
- #if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED )
694
-
695
741
int mbedtls_ssl_tls13_write_identities_of_pre_shared_key_ext (
696
742
mbedtls_ssl_context * ssl ,
697
743
unsigned char * buf , unsigned char * end ,
@@ -725,9 +771,8 @@ int mbedtls_ssl_tls13_write_identities_of_pre_shared_key_ext(
725
771
* configured, offer that.
726
772
* - Otherwise, skip the PSK extension.
727
773
*/
728
-
729
- if ( mbedtls_ssl_get_psk_to_offer ( ssl , & psk_type , & psk , & psk_len ,
730
- & psk_identity , & psk_identity_len ) != 0 )
774
+ if ( ssl_tls13_get_psk_to_offer ( ssl , & psk_type , & psk , & psk_len ,
775
+ & psk_identity , & psk_identity_len ) != 0 )
731
776
{
732
777
MBEDTLS_SSL_DEBUG_MSG ( 3 , ( "skip pre_shared_key extensions" ) );
733
778
return ( 0 );
@@ -757,6 +802,26 @@ int mbedtls_ssl_tls13_write_identities_of_pre_shared_key_ext(
757
802
break ;
758
803
}
759
804
}
805
+ else
806
+ #if defined(MBEDTLS_SSL_SESSION_TICKETS )
807
+ if ( psk_type == MBEDTLS_SSL_TLS1_3_PSK_RESUMPTION )
808
+ {
809
+ #if defined(MBEDTLS_HAVE_TIME )
810
+ mbedtls_time_t now = mbedtls_time ( NULL );
811
+
812
+ obfuscated_ticket_age =
813
+ ( (uint32_t )( now - ssl -> session_negotiate -> ticket_received ) * 1000 )
814
+ + ssl -> session_negotiate -> ticket_age_add ;
815
+ #endif
816
+ }
817
+ else
818
+ #endif /* MBEDTLS_SSL_SESSION_TICKETS */
819
+ {
820
+ MBEDTLS_SSL_DEBUG_MSG ( 1 , ( "write_identities_of_pre_shared_key_ext: "
821
+ "should never happen" ) );
822
+ return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
823
+ }
824
+
760
825
761
826
ciphersuite_info = mbedtls_ssl_ciphersuite_from_id (
762
827
ssl -> session_negotiate -> ciphersuite );
@@ -831,8 +896,8 @@ int mbedtls_ssl_tls13_write_binders_of_pre_shared_key_ext(
831
896
unsigned char transcript [MBEDTLS_MD_MAX_SIZE ];
832
897
size_t transcript_len ;
833
898
834
- if ( mbedtls_ssl_get_psk_to_offer ( ssl , & psk_type , & psk , & psk_len ,
835
- & psk_identity , & psk_identity_len ) != 0 )
899
+ if ( ssl_tls13_get_psk_to_offer ( ssl , & psk_type , & psk , & psk_len ,
900
+ & psk_identity , & psk_identity_len ) != 0 )
836
901
{
837
902
return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
838
903
}
@@ -1266,15 +1331,15 @@ static int ssl_tls13_parse_server_pre_shared_key_ext( mbedtls_ssl_context *ssl,
1266
1331
size_t psk_len ;
1267
1332
const unsigned char * psk_identity ;
1268
1333
size_t psk_identity_len ;
1269
-
1334
+ int psk_type ;
1270
1335
1271
1336
/* Check which PSK we've offered.
1272
1337
*
1273
1338
* NOTE: Ultimately, we want to offer multiple PSKs, and in this
1274
1339
* case, we need to iterate over them here.
1275
1340
*/
1276
- if ( mbedtls_ssl_get_psk_to_offer ( ssl , NULL , & psk , & psk_len ,
1277
- & psk_identity , & psk_identity_len ) != 0 )
1341
+ if ( ssl_tls13_get_psk_to_offer ( ssl , & psk_type , & psk , & psk_len ,
1342
+ & psk_identity , & psk_identity_len ) != 0 )
1278
1343
{
1279
1344
/* If we haven't offered a PSK, the server must not send
1280
1345
* a PSK identity extension. */
@@ -1622,16 +1687,19 @@ static int ssl_tls13_postprocess_server_hello( mbedtls_ssl_context *ssl )
1622
1687
/* Only the pre_shared_key extension was received */
1623
1688
case MBEDTLS_SSL_EXT_PRE_SHARED_KEY :
1624
1689
handshake -> key_exchange_mode = MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK ;
1690
+ MBEDTLS_SSL_DEBUG_MSG ( 2 , ( "key exchange mode: psk" ) );
1625
1691
break ;
1626
1692
1627
1693
/* Only the key_share extension was received */
1628
1694
case MBEDTLS_SSL_EXT_KEY_SHARE :
1629
1695
handshake -> key_exchange_mode = MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL ;
1696
+ MBEDTLS_SSL_DEBUG_MSG ( 2 , ( "key exchange mode: ephemeral" ) );
1630
1697
break ;
1631
1698
1632
1699
/* Both the pre_shared_key and key_share extensions were received */
1633
1700
case ( MBEDTLS_SSL_EXT_PRE_SHARED_KEY | MBEDTLS_SSL_EXT_KEY_SHARE ):
1634
1701
handshake -> key_exchange_mode = MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL ;
1702
+ MBEDTLS_SSL_DEBUG_MSG ( 2 , ( "key exchange mode: psk_ephemeral" ) );
1635
1703
break ;
1636
1704
1637
1705
/* Neither pre_shared_key nor key_share extension was received */
@@ -1819,7 +1887,12 @@ static int ssl_tls13_parse_encrypted_extensions( mbedtls_ssl_context *ssl,
1819
1887
*/
1820
1888
switch ( extension_type )
1821
1889
{
1890
+ case MBEDTLS_TLS_EXT_SERVERNAME :
1891
+ MBEDTLS_SSL_DEBUG_MSG ( 3 , ( "found server_name extension" ) );
1892
+
1893
+ /* The server_name extension should be an empty extension */
1822
1894
1895
+ break ;
1823
1896
case MBEDTLS_TLS_EXT_SUPPORTED_GROUPS :
1824
1897
MBEDTLS_SSL_DEBUG_MSG ( 3 , ( "found extensions supported groups" ) );
1825
1898
break ;
@@ -2237,11 +2310,11 @@ static int ssl_tls13_write_client_finished( mbedtls_ssl_context *ssl )
2237
2310
if ( ret != 0 )
2238
2311
return ( ret );
2239
2312
2240
- ret = mbedtls_ssl_tls13_generate_resumption_master_secret ( ssl );
2313
+ ret = mbedtls_ssl_tls13_compute_resumption_master_secret ( ssl );
2241
2314
if ( ret != 0 )
2242
2315
{
2243
2316
MBEDTLS_SSL_DEBUG_RET ( 1 ,
2244
- "mbedtls_ssl_tls13_generate_resumption_master_secret " , ret );
2317
+ "mbedtls_ssl_tls13_compute_resumption_master_secret " , ret );
2245
2318
return ( ret );
2246
2319
}
2247
2320
@@ -2405,6 +2478,9 @@ static int ssl_tls13_parse_new_session_ticket( mbedtls_ssl_context *ssl,
2405
2478
return ( ret );
2406
2479
}
2407
2480
2481
+ /* session has been updated, allow export */
2482
+ session -> exported = 0 ;
2483
+
2408
2484
return ( 0 );
2409
2485
}
2410
2486
0 commit comments