Шифрование гибкого объема данных с помощью GPGME

В настоящее время я пишу приложение на C ++ и хотел бы использовать GPGME для подписи сообщений, шифрования и управления ключами. Я знаю, что могу зашифровать данные следующим образом:

    err = gpgme_op_encrypt(mContext, recipients,...);
if(err) {
// .. error handling
}
result = gpgme_op_encrypt_result(mContext);
if(result->invalid_recipients){
//error handling
}

nbytes = gpgme_data_seek(encrypted_text, 0, SEEK_SET);
if(nbytes == -1) {
//error handling
}
buffer = malloc(MAXLEN);
nbytes = gpgme_data_read(encrypted_text, buffer, MAXLEN);

Но, как можно видеть, мне пришлось бы использовать MAXLEN в качестве ограничения для чтения зашифрованных данных в моем буфере. Есть ли способ определить, как долго будет зашифрован результат моих данных (с учетом открытого текста)? Или мне придется принять статический предел?

0

Решение

Я не знаком с этим конкретным API, но gpgme_data_seek а также gpgme_data_read звоните, похоже, они могут вести себя как read() а также seek() из файловой системы ввода / вывода.

(1) Просто выделите столько буфера, сколько сможете (скажем, N).

(2) Позвонить n=gpgme_data_read(...,N) до тех пор N!=n,

(3) Проверьте наличие ошибок (я думаю, что n<0)

продолжайте, пока не обработаете все интересующие вас данные.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]