--- openssh-7.9p1.orig/cipher-ctr-mt.c 2018-10-24 20:48:00.909255466 -0000
+++ openssh-7.9p1/cipher-ctr-mt.c 2018-10-24 20:48:17.378155144 -0000
@@ -46,7 +46,7 @@
-
+
/*-------------------- TUNABLES --------------------*/
/* maximum number of threads and queues */
-#define MAX_THREADS 32
-+#define MAX_THREADS 32
++#define MAX_THREADS 32
#define MAX_NUMKQ (MAX_THREADS * 2)
-
+
/* Number of pregen threads to use */
@@ -435,7 +435,7 @@
destp.u += AES_BLOCK_SIZE;
len -= AES_BLOCK_SIZE;
- ssh_ctr_inc(ctx->iv, AES_BLOCK_SIZE);
+ ssh_ctr_inc(c->aes_counter, AES_BLOCK_SIZE);
-
+
/* Increment read index, switch queues on rollover */
if ((ridx = (ridx + 1) % KQLEN) == 0) {
@@ -481,8 +481,6 @@
cipher_threads = sysconf(_SC_NPROCESSORS_ONLN) / 2;
#endif /*__linux__*/
@@ -505,11 +503,12 @@
- if (cipher_threads < 2)
+ if (cipher_threads < 2)
cipher_threads = 2;
-
+
- /* assure that we aren't trying to create more threads than we have in the struct */
- /* cipher_threads is half the total of allowable threads hence the odd looking math here */
+ /* assure that we aren't trying to create more threads */
+ /* total of allowable threads hence the odd looking math here */
if (cipher_threads * 2 > MAX_THREADS)
cipher_threads = MAX_THREADS / 2;
--
+-
+
/* set the number of keystream queues */
numkq = cipher_threads * 2;
-
+
@@ -551,16 +550,16 @@
}
-
+
if (iv != NULL) {
- memcpy(ctx->iv, iv, AES_BLOCK_SIZE);
+ memcpy(c->aes_counter, iv, AES_BLOCK_SIZE);
c->state |= HAVE_IV;
}
-
+
if (c->state == (HAVE_KEY | HAVE_IV)) {
/* Clear queues */
- memcpy(c->q[0].ctr, ctx->iv, AES_BLOCK_SIZE);
const EVP_CIPHER *
evp_aes_ctr_mt(void)
{
-+# if OPENSSL_VERSION_NUMBER >= 0x10100000UL
++# if OPENSSL_VERSION_NUMBER >= 0x10100000UL && !defined(LIBRESSL_VERSION_NUMBER)
+ static EVP_CIPHER *aes_ctr;
+ aes_ctr = EVP_CIPHER_meth_new(NID_undef, 16/*block*/, 16/*key*/);
+ EVP_CIPHER_meth_set_iv_length(aes_ctr, AES_BLOCK_SIZE);
+ return &aes_ctr;
+# endif /*OPENSSH_VERSION_NUMBER*/
}
-
+
#endif /* defined(WITH_OPENSSL) */