2017-04-03 2 views
0

Ich verwende CentOS 7 und OpenSSL v1.1.0.Create EVP_CIPHER_CTX Array

Da OpenSSL ihre API geändert hat, habe ich den folgenden Fehler: invalid use of incomplete type struct evp_cipher_ctx_st.

static void InitAESKey(AES_KEY_CTX* ctx, BYTE* keybytes, int numkeys) 
     { 
       BYTE* pBufIdx = keybytes; 
       for (int i = 0; i < numkeys; i++) 
       { 
         OTEXT_AES_KEY_INIT(ctx + i, pBufIdx); 
         pBufIdx += AES_KEY_BYTES; 
       } 
     } 

Während AES_KEY_CTX und OTEXT_AES_KEY_INIT sind Makros definiert:

#define AES_KEY_CTX EVP_CIPHER_CTX 
#define OTEXT_AES_KEY_INIT(ctx, buf) { \ 
     EVP_CIPHER_CTX_init(ctx); \ 
     EVP_EncryptInit_ex(ctx, EVP_aes_128_ecb(), NULL, buf, ZERO_IV); \ 
     } 

Ich habe versucht, das Makro #define AES_KEY_CTX EVP_CIPHER_CTX* zu ändern, aber der Fehler noch vorhanden.

+0

Verwenden [EVP Symmetrische Verschlüsselung und Entschlüsselung] (http://wiki.openssl.org/index .php/EVP_Symmetric_Encryption_and_Decryption). Bei Verwendung der EVP-Schnittstelle werden der Schlüssel und die IV im Aufruf von 'EVP_EncryptInit_ex' gesetzt. – jww

+0

@jww das, was ich benutze. Das Problem ist diese Operation 'ctx + i' – liorko

Antwort

0

Nachdem ich mit OpenSSL Benutzer E-Mail-Liste konsultiert, habe ich dies ändert, um den Code zu kompiliert:

#define AES_KEY_CTX *EVP_CIPHER_CTX; 
static void InitAESKey(AES_KEY_CTX* ctx, BYTE* keybytes, int numkeys) 
{ 
    BYTE* pBufIdx = keybytes; 
    for (int i = 0; i < numkeys; i++) 
    { 
     EVP_CIPHER_CTX_init(*(ctx + i)); 
     EVP_EncryptInit_ex(*(ctx + i), EVP_aes_128_ecb(), NULL, pBufIdx, ZERO_IV); 
     pBufIdx += AES_KEY_BYTES; 
    } 
}