2016-01-22 3 views
0

В настоящее время я пишу приложение на C++ и хотел бы использовать GPGME для подписания сообщений, шифрования и управления ключами. Я знаю, что могу зашифровать данные таким образом:Шифрование гибкого количества данных с помощью 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 в качестве предела для чтения зашифрованных данных в моем буфере. Есть ли способ определить, как долго мой зашифрованный результат данных будет заранее (учитывая plaintex)? Или я должен принять статический предел?

ответ

1

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

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

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

(3) Проверьте наличие ошибок (мое предположение п < 0)

продолжаться до тех пор, пока не будут обработаны все данные, которые вы заинтересованы.

+0

Хороший намек. Я посмотрю на это. –

Смежные вопросы