Hashing without relying on Qt?
Richard Kimberly Heck
rikiheck at lyx.org
Sun Oct 17 04:09:06 UTC 2021
On 10/16/21 17:15, Thibaut Cuvelier wrote:
> Dear list,
>
> In my last patch (21366155), I added a dependency from InsetText to Qt
> to be able to generate SHA hashes. The main goal is to have an
> almost-collision-free name-generation technique, which is a great
> useability enhancement, that's why I already pushed the patch.
> Collisions would be awful, because two different insets would have the
> same file name.
>
> I don't think Bernstein's hash (in Author.cpp) would fit the bill: it
> doesn't go to great lengths to avoid collisions (it has a lot for
> strings:
> https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed).
>
> UUID/GUID are mostly time-based or use cryptographic hash functions:
> they do not really depend on the content, but mostly on time, and I
> need that the file names remain constant in time (unless the LaTeX
> code that is compiled gets changed).
>
> CityHash would be enough, but that's another dependency to add to LyX
> (https://github.com/google/cityhash).
>
> The only solution I found without importing a large new dependency
> into LyX was to use Qt's QCryptographicHash, just like
> support/FileName.cpp. I know that LyX tries to have clear boundaries
> for dependencies, that's why I'm bringing the question to the list. Is
> the current solution acceptable? Maybe move some of the code to
> support/FileName.cpp?
Basically, the rule is to keep Qt dependencies that aren't in the
frontend in support. Just put some wrapper function in there, and
that'll be fine. Maybe in support/filetools?
Riki
More information about the lyx-devel
mailing list