1
0
mirror of https://github.com/libssh2/libssh2.git synced 2025-11-20 02:42:09 +03:00

openssl: move shared AES-CTR code into misc

This commit is contained in:
Thomas
2017-02-10 20:39:01 +01:00
committed by Marc Hoersken
parent b3f9557f52
commit e378d2e30a
3 changed files with 38 additions and 9 deletions

View File

@@ -643,3 +643,31 @@ void *_libssh2_calloc(LIBSSH2_SESSION* session, size_t size)
} }
return p; return p;
} }
/* XOR operation on buffers input1 and input2, result in output.
It is safe to use an input buffer as the output buffer. */
void _libssh2_xor_data(unsigned char *output,
const unsigned char *input1,
const unsigned char *input2,
size_t length)
{
size_t i;
for (i = 0; i < length; i++)
*output++ = *input1++ ^ *input2++;
}
/* Increments an AES CTR buffer to prepare it for use with the
next AES block. */
void _libssh2_aes_ctr_increment(unsigned char *ctr,
size_t length)
{
if (length == 0)
return;
size_t i = (length - 1);
while (ctr[i]++ == 0xFF) {
if (i == 0)
break;
i--;
}
}

View File

@@ -93,4 +93,11 @@ int __cdecl _libssh2_gettimeofday(struct timeval *tp, void *tzp);
#endif #endif
#endif #endif
void _libssh2_xor_data(unsigned char *output,
const unsigned char *input1,
const unsigned char *input2,
size_t length);
void _libssh2_aes_ctr_increment(unsigned char *ctr, size_t length);
#endif /* _LIBSSH2_MISC_H */ #endif /* _LIBSSH2_MISC_H */

View File

@@ -43,6 +43,7 @@
#ifdef LIBSSH2_OPENSSL /* compile only if we build with openssl */ #ifdef LIBSSH2_OPENSSL /* compile only if we build with openssl */
#include <string.h> #include <string.h>
#include "misc.h"
#ifndef EVP_MAX_BLOCK_LENGTH #ifndef EVP_MAX_BLOCK_LENGTH
#define EVP_MAX_BLOCK_LENGTH 32 #define EVP_MAX_BLOCK_LENGTH 32
@@ -364,15 +365,8 @@ aes_ctr_do_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
return 0; return 0;
} }
for (i = 0; i < 16; i++) _libssh2_xor_data(out, in, b1, AES_BLOCK_SIZE);
*out++ = *in++ ^ b1[i]; _libssh2_aes_ctr_increment(c->ctr, AES_BLOCK_SIZE);
i = 15;
while (c->ctr[i]++ == 0xFF) {
if (i == 0)
break;
i--;
}
return 1; return 1;
} }