Использование криптографических потоков в C ++ - PullRequest
3 голосов
/ 12 января 2011

Я хотел бы использовать некоторые криптографические операции (в основном, хэш-суммы проверки целостности). Однако у меня есть проблемы с поиском документации выполнения операций такой формы:

bool read(std::istream &in) {
    hasher hv(in);
    // Do some operations on hv as if it was std::istream
    hash_type h = hv.finish ();
    hash_type h2 = read_hash(in);
    return h == h2;
}

PS. Это может быть другая библиотека, если она а) совместима с GPL-3 б) работает на GNU / Linux

PPS. Я не настаиваю на crypto ++, однако хотел бы иметь поведение, подобное IOStream, для взаимодействия с другими библиотеками C ++.

Ответы [ 2 ]

6 голосов
/ 12 января 2011

crypto ++ * FileSource класс занимает std::istream& в конструкторе, так что кажется, что вы сделали.

FileSource (std::istream &in, bool pumpAll, 
    BufferedTransformation *attachment=NULL)

РЕДАКТИРОВАТЬ

если вы спрашиваете how to use a hash function on istream in cryptopp, вот пример, взятый из cryptopp wiki , модифицированный мной для использования с istream:

#include "sha.h"
#include "files.h"

std::string digest;

CryptoPP::SHA256 hash;

CryptoPP::FileSource(in, true,   // true here means consume all input at once 
   new CryptoPP::HashFilter(hash,
         new CryptoPP::StringSink(digest)));

std::cout << digest << std::endl;

Это будет читать поток in доeof, пропустите его через фильтр hash и, наконец, результат будет в строке digest.

0 голосов
/ 12 января 2011

Реализация собственного istream с использованием crypto ++.

...