Simplify ssl_get_message somewhat.

It still places the current message all over the place, but remove the
bizarre init_num/error/ok split. Now callers get the message length out
of init_num, which mirrors init_msg. Also fix some signedness.

Change-Id: Ic2e97b6b99e234926504ff217b8aedae85ba6596
Reviewed-on: https://boringssl-review.googlesource.com/8690
Reviewed-by: David Benjamin <davidben@google.com>
diff --git a/ssl/s3_both.c b/ssl/s3_both.c
index 42ec70e..b5c2ed5 100644
--- a/ssl/s3_both.c
+++ b/ssl/s3_both.c
@@ -261,15 +261,11 @@
 }
 
 int ssl3_get_finished(SSL *ssl) {
-  int al, finished_len, ok;
-  long message_len;
-  uint8_t *p;
-
-  message_len = ssl->method->ssl_get_message(ssl, SSL3_MT_FINISHED,
-                                             ssl_dont_hash_message, &ok);
-
-  if (!ok) {
-    return message_len;
+  int al;
+  int ret = ssl->method->ssl_get_message(ssl, SSL3_MT_FINISHED,
+                                         ssl_dont_hash_message);
+  if (ret <= 0) {
+    return ret;
   }
 
   /* Snapshot the finished hash before incorporating the new message. */
@@ -278,17 +274,15 @@
     goto err;
   }
 
-  p = ssl->init_msg;
-  finished_len = ssl->s3->tmp.peer_finish_md_len;
-
-  if (finished_len != message_len) {
+  size_t finished_len = ssl->s3->tmp.peer_finish_md_len;
+  if (finished_len != ssl->init_num) {
     al = SSL_AD_DECODE_ERROR;
     OPENSSL_PUT_ERROR(SSL, SSL_R_BAD_DIGEST_LENGTH);
     goto f_err;
   }
 
   int finished_ret =
-      CRYPTO_memcmp(p, ssl->s3->tmp.peer_finish_md, finished_len);
+      CRYPTO_memcmp(ssl->init_msg, ssl->s3->tmp.peer_finish_md, finished_len);
 #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
   finished_ret = 0;
 #endif
@@ -516,12 +510,8 @@
   return 1;
 }
 
-/* Obtain handshake message of message type |msg_type| (any if |msg_type| ==
- * -1). */
-long ssl3_get_message(SSL *ssl, int msg_type,
-                      enum ssl_hash_message_t hash_message, int *ok) {
-  *ok = 0;
-
+int ssl3_get_message(SSL *ssl, int msg_type,
+                     enum ssl_hash_message_t hash_message) {
 again:
   if (ssl->server && !ssl->s3->v2_hello_done) {
     /* Bypass the record layer for the first message to handle V2ClientHello. */
@@ -601,8 +591,7 @@
     return -1;
   }
 
-  *ok = 1;
-  return ssl->init_num;
+  return 1;
 }
 
 int ssl3_hash_current_message(SSL *ssl) {