Я работаю над надстройкой Node, которая шифрует данные с помощью Windows DPAPI. Я передаю два Javascript Uint8Array коду C ++ с использованием NAN.
Вот как выглядит интерфейс машинописного текста:
export interface DpapiBindings{
protectData(dataToEncrypt: Uint8Array, optionalEntropy: Uint8Array, scope: string): Uint8Array
}
Затем я хотел бы создать узел: : Buffer в коде C ++:
void ProtectData( Nan::NAN_METHOD_ARGS_TYPE info)
{
v8::Isolate* isolate = info.GetIsolate();
//
auto buffer = node::Buffer::Data(info[0]);
auto len = node::Buffer::Length(info[0]);
DATA_BLOB entropyBlob;
entropyBlob.pbData = nullptr;
if (!info[1]->IsNull())
{
entropyBlob.pbData = reinterpret_cast<BYTE*>(node::Buffer::Data(info[1]));
entropyBlob.cbData = node::Buffer::Length(info[1]);
}
DATA_BLOB dataIn;
DATA_BLOB dataOut;
// initialize input data
dataIn.pbData = reinterpret_cast<BYTE*>(buffer);
dataIn.cbData = len;
success = CryptProtectData(
&dataIn,
nullptr,
entropyBlob.pbData ? &entropyBlob : nullptr,
nullptr,
nullptr,
flags,
&dataOut);
auto returnBuffer = Nan::CopyBuffer(reinterpret_cast<const char*>(dataOut.pbData), dataOut.cbData).ToLocalChecked();
LocalFree(dataOut.pbData);
info.GetReturnValue().Set(returnBuffer);
}
Я новичок в C ++, мой вопрос: при работе с node :: Buffer :: Data и node :: Buffer :: Length в коде C ++ и вызывая CryptProtectData, мне нужно беспокоиться о переполнении буфера? Если да, то как мне от него защититься? Должен ли я добавлять нулевой символ к buffer и len?