【发布时间】:2015-03-23 12:39:12
【问题描述】:
在对从浏览器接收到的数据进行加密并应该通过PostMessage() 返回加密文本的 chrome NaCl 扩展中,我在为ciphertext 发送unsigned char* 的数据类型时遇到问题。 pp::Var 规范没有提到任何关于这种数据形式的内容。我尝试将unsigned char 转换为std::string,但没有找到合适的方法。我的代码sn-p如下:
if(action == "encryption")
{
pp::Var var_content = dict_message.Get("content");
if (!var_action.is_string())
return;
std::string content = var_content.AsString();
//encryption code starts here
const char *password = "password";
unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH];
int len = content.length()+EVP_MAX_BLOCK_LENGTH;
unsigned char *ciphertext = (unsigned char*)malloc(len*sizeof(unsigned char));
aes_init(password, (int)strlen(password), key, iv);
len = encrypt((unsigned char*)(content.c_str()), (int)strlen(content.c_str()), key, iv, ciphertext);
pp::Var var_reply(ciphertext);
PostMessage(var_reply);
free(ciphertext);
}
这会返回一个编译时错误:
crest.cc:55:15: error: calling a private constructor of class 'pp::Var'
pp::Var var_reply(ciphertext);
^
/home/kunal/Downloads/nacl_sdk/pepper_41/include/ppapi/cpp/var.h:318:3: note: declared private here
Var(void* non_scriptable_object_pointer);
^
1 error generated.
make: *** [pnacl/Release/crest.o] Error 1
【问题讨论】:
标签: c++ google-chrome-extension google-chrome-app google-nativeclient