Você pode querer dar uma olhada no Como misturar C e C ++ seção do FAQ do C ++.
Eu tenho tentado usar a biblioteca RSA C em um aplicativo C ++ (já que parece ser a maneira correta de fazê-lo, devido à falta de uma implementação C ++ [oficial: OpenSSL] "oficial"). A coisa é, sempre que eu tento compilar um código de teste:
#include <iostream>
#include <openssl/rsa.h>
#include <openssl/engine.h>
#include <unistd.h>
using namespace std;
int main(int argc, char *argv[]) {
RSA *myKeyPair = RSA_generate_key(2048, 65537, NULL, NULL);
unsigned char *to;
unsigned char *totwo;
if (myKeyPair == NULL) {
cout << "ERROR 1" << endl;
return 0;
}
to = (unsigned char *) malloc(RSA_size(myKeyPair) - 11);
if (RSA_private_encrypt(13, (const unsigned char *)"Hello World!", to, myKeyPair, RSA_PKCS1_PADDING) == -1) {
cout << "ERROR 2" << endl;
return 0;
}
cout << to << endl;
totwo = (unsigned char *) malloc(RSA_size(myKeyPair) - 11);
if (RSA_public_decrypt(13, to, totwo, myKeyPair, RSA_PKCS1_PADDING) == -1) {
cout << "ERROR 3" << endl;
return 0;
}
cout << totwo;
free(to);
free(totwo);
RSA_free(myKeyPair);
return 0;
}
Recebo erros de referência indefinidos para todas as funções RSA_ * (observe que estou vinculando a -lssl). Para torná-lo ainda mais estranho, compilar o mesmo código usando o GCC faz o trabalho (bem, é claro, ele não será compilado por causa das referências lib C ++, mas o ponto é que eu não tenho referência indefinida para funções RSA ).
Alguma idéia de como fazer isso? (sem recorrer a qualquer outro lib?).
Você pode querer dar uma olhada no Como misturar C e C ++ seção do FAQ do C ++.