When dealing with the `SignatureVerificationFilter`, similar issues arise 
due to the requirement of having the "tag" at either the beginning or end 
of the initial part of the pipeline. Adding the "tag" to the filename 
within a pipeline that starts with `FileSource` does not resolve this 
problem. Consequently, `FileSource` may attempt to load an incorrect file 
or, when using an `ifstream`, cause a compile-time type mismatch.

While attaching the "tag" to a file that already has it may seem logically 
sound, this approach can disrupt the functionality of certain files. For 
example, executable files cannot have the "tag" prepended, and appending 
the "tag" can lead to extraction tools generating errors about extra data, 
especially in the case of archives. Furthermore, this method renders simple 
hash checks invalid, especially if the hash was generated before the "tag" 
was added, as the file's content has been altered.
On Sunday, May 21, 2023 at 12:56:43 AM UTC-4 Tom wrote:

> Okay. 
>
> However, when I looked at the information provided in this link: 
> https://www.cryptopp.com/wiki/HashVerificationFilter#String_and_File_Sources, 
> it appears that the method suggested to avoid memory usage doesn't actually 
> achieve that goal, as the line FileSource fs("zero.dat", true); in the 
> verification step is performing as intended.
>
> Unfortunately, I am unable to use FileSource fs("zero.dat", false, new 
> HashVerificationFilter(sha256, new StringSink(digest))); or FileSource 
> fs("zero.dat", true... either, because it's unclear how to associate the 
> digest with the input file.
> On Saturday, May 20, 2023 at 6:48:40 PM UTC-4 Jeffrey Walton wrote:
>
>> On Sat, May 20, 2023 at 4:45 PM Jeffrey Walton <nolo...@gmail.com> 
>> wrote: 
>> > 
>> > On Sat, May 20, 2023 at 3:00 PM Tom <thoma...@gmail.com> wrote: 
>> > > 
>> > > calling `FileSource fs("zero.dat", true);` seems to allocate the 
>> memory. 
>> > 
>> > Try the overload which takes a std::istream reference: 
>> > https://www.cryptopp.com/wiki/FileSource 
>>
>> I took another look... The issue is you passed 'true' for 'pumpAll'. 
>> That reads the entire file, and puts it in an output buffer for the 
>> next filter. 
>>
>> Use 'false' instead, and then call 'PumpAll()' manually. Something 
>> like the example. Something like this should suffice: 
>>
>> FileSource fs("zero.dat", false, new Filter(..., new Sink(...))); 
>> fs.PumpAll(); 
>>
>> It should pump in 4k blocks. 
>>
>> Jeff 
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cryptopp-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/cryptopp-users/e13f1557-9234-4669-b0f9-aed8a6a6377cn%40googlegroups.com.

Reply via email to