Implement initial negotiation of EtM
Not implemented yet:
- actually using EtM
- conditions on renegotiation
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index c8b7fa2..e8f2b7f 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -1071,6 +1071,15 @@
SSL_DEBUG_MSG( 2, ( "=> encrypt buf" ) );
+#if defined(POLARSSL_SSL_ENCRYPT_THEN_MAC)
+ if( ssl->session_out != NULL &&
+ ssl->session_out->encrypt_then_mac == SSL_ETM_ENABLED )
+ {
+ // WIP
+ SSL_DEBUG_MSG( 3, ( "using encrypt then mac" ) );
+ }
+#endif
+
/*
* Add MAC before encrypt, except for AEAD modes
*/
@@ -3474,6 +3483,10 @@
memset( ssl-> in_ctr, 0, SSL_BUFFER_LEN );
memset( ssl->out_ctr, 0, SSL_BUFFER_LEN );
+#if defined(POLARSSL_SSL_ENCRYPT_THEN_MAC)
+ ssl->encrypt_then_mac = SSL_ETM_ENABLED;
+#endif
+
#if defined(POLARSSL_SSL_EXTENDED_MASTER_SECRET)
ssl->extended_ms = SSL_EXTENDED_MS_ENABLED;
#endif
@@ -4025,6 +4038,13 @@
}
#endif
+#if defined(POLARSSL_SSL_ENCRYPT_THEN_MAC)
+void ssl_set_encrypt_then_mac( ssl_context *ssl, char etm )
+{
+ ssl->encrypt_then_mac = etm;
+}
+#endif
+
#if defined(POLARSSL_SSL_EXTENDED_MASTER_SECRET)
void ssl_set_extended_master_secret( ssl_context *ssl, char ems )
{