Add the ability for s_client to send a KeyUpdate message
authorMatt Caswell <matt@openssl.org>
Thu, 9 Feb 2017 13:33:09 +0000 (13:33 +0000)
committerMatt Caswell <matt@openssl.org>
Fri, 17 Feb 2017 10:28:00 +0000 (10:28 +0000)
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2609)

apps/s_client.c

index 2db985daf329d2898f562d14e03bef5c03419d5a..a2ededcf0c02367569c92194a8f1f09521bb9bd3 100644 (file)
@@ -2291,7 +2291,8 @@ int s_client_main(int argc, char **argv)
         else
             timeoutp = NULL;
 
-        if (SSL_in_init(con) && !SSL_total_renegotiations(con)) {
+        if (SSL_in_init(con) && !SSL_total_renegotiations(con)
+                && SSL_get_key_update_type(con) == SSL_KEY_UPDATE_NONE) {
             in_init = 1;
             tty_on = 0;
         } else {
@@ -2606,6 +2607,15 @@ int s_client_main(int argc, char **argv)
                 SSL_renegotiate(con);
                 cbuf_len = 0;
             }
+
+            if ((!c_ign_eof) && ((cbuf[0] == 'K' || cbuf[0] == 'k' )
+                                 && cmdletters)) {
+                BIO_printf(bio_err, "KEYUPDATE\n");
+                SSL_key_update(con,
+                               cbuf[0] == 'K' ? SSL_KEY_UPDATE_REQUESTED
+                                              : SSL_KEY_UPDATE_NOT_REQUESTED);
+                cbuf_len = 0;
+            }
 #ifndef OPENSSL_NO_HEARTBEATS
             else if ((!c_ign_eof) && (cbuf[0] == 'B' && cmdletters)) {
                 BIO_printf(bio_err, "HEARTBEATING\n");