Порт функции с Golang на C++

В моих интересах портировать программу написанную на языке Go на C++. Все шло хорошо, пока не встретил данную функцию...

import (
    "crypto/aes"
    "crypto/cipher"
)

func AesGCMDecrypt(crypted, key, nounce []byte) ([]byte, error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return nil, err
    }
    blockMode, _ := cipher.NewGCM(block)
    origData, err := blockMode.Open(nil, nounce, crypted, nil)
    if err != nil{
        return nil, err
    }
    return origData, nil
}

Из названия функции все понятно, она производит расшифровку данных ключем AES методом GCM (не ругайтесь если не правильно сказал =) ). Я попытался реализовать это используя OpenSSL

std::string aes_gcm_decrypt(std::string crypted, std::string key, std::string nounce)
{
    int len;
    unsigned char output[128];
    EVP_CIPHER_CTX* ctx;
    ctx = EVP_CIPHER_CTX_new();
    EVP_DecryptInit_ex(ctx, EVP_aes_256_gcm(), NULL, NULL, NULL);
    EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, nounce.size(), NULL);
    EVP_DecryptInit_ex(ctx, NULL, NULL, (unsigned char*)key.c_str(), (unsigned char*)nounce.c_str());
    EVP_DecryptUpdate(ctx, output, &len, (unsigned char*)crypted.c_str(), crypted.size());
    if (EVP_DecryptFinal_ex(ctx, output + len, &len) <= 0)
    {
        return "fail";
    }
    return "success?";
}

Я не стал даже дописывать, EVP_DecryptFinal_ex кидает ошибку и делается return "fail".


Ответы (0 шт):