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.