Utilizzo di flussi crittografici in C ++

Mi piacerebbe usare alcune operazioni di crittografia (principalmente hashsum di controllo degli integratori). Tuttavia ho problemi con la ricerca di documentazioni su come fare operazioni di tale forma:

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. Può essere una libreria diversa a condizione che sia compatibile con GPL-3 b) funzioni su GNU / Linux

PPS. Non insisto su crypto ++ ma vorrei avere un comportamento simile a IOStream per l’interoperabilità con altre librerie C ++.

Implementa il tuo istream usando crypto ++.

La class FileSource di crypto ++ prende std::istream& nel costruttore, quindi sembra che tu abbia finito.

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

MODIFICARE

se stai chiedendo how to use a hash function on istream in cryptopp , ecco un esempio tratto da cryptopp wiki , modificato da me per l’uso con 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; 

Questo leggerà il stream fino a eof, lo passerà attraverso un filtro hash e alla fine il risultato verrà inserito nella stringa digest .