sess_crypt_blob can only crypt blobs whose size divides by 8
authorIsaac Boukris <iboukris@gmail.com>
Thu, 21 Nov 2019 14:13:19 +0000 (15:13 +0100)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 10 Dec 2019 00:30:31 +0000 (00:30 +0000)
Signed-off-by: Isaac Boukris <iboukris@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
libcli/auth/session.c

index 4af70d361af781bbeac9bb8b5b34ac21c3313854..43ce9d54fdc1cfbd75ebaf3ef39aea9e3fff2f53 100644 (file)
@@ -34,13 +34,16 @@ int sess_crypt_blob(DATA_BLOB *out, const DATA_BLOB *in, const DATA_BLOB *sessio
 {
        int i, k, rc;
 
+       if (in->length % 8 != 0) {
+               return GNUTLS_E_INVALID_REQUEST;
+       }
+
        for (i=0,k=0;
             i<in->length;
             i += 8, k += 7) {
                uint8_t bin[8], bout[8], key[7];
 
-               memset(bin, 0, 8);
-               memcpy(bin,  &in->data[i], MIN(8, in->length-i));
+               memcpy(bin,  &in->data[i], 8);
 
                if (k + 7 > session_key->length) {
                        k = (session_key->length - k);
@@ -52,7 +55,7 @@ int sess_crypt_blob(DATA_BLOB *out, const DATA_BLOB *in, const DATA_BLOB *sessio
                        return rc;
                }
 
-               memcpy(&out->data[i], bout, MIN(8, in->length-i));
+               memcpy(&out->data[i], bout, 8);
        }
        return 0;
 }