diff options
Diffstat (limited to 'third_party/nix/src/libutil')
-rw-r--r-- | third_party/nix/src/libutil/hash.cc | 4 | ||||
-rw-r--r-- | third_party/nix/src/libutil/hash.hh | 6 |
2 files changed, 10 insertions, 0 deletions
diff --git a/third_party/nix/src/libutil/hash.cc b/third_party/nix/src/libutil/hash.cc index 426096e73af8..9d14ad9dfe14 100644 --- a/third_party/nix/src/libutil/hash.cc +++ b/third_party/nix/src/libutil/hash.cc @@ -158,6 +158,10 @@ bool Hash::IsValidBase32(absl::string_view s) { return true; } +std::string Hash::ToStorePathHash() const { + return compressHash(*this, kStorePathHashSize).to_string(Base32, false); +} + static std::string printHash32(const Hash& hash) { assert(hash.hashSize); size_t len = hash.base32Len(); diff --git a/third_party/nix/src/libutil/hash.hh b/third_party/nix/src/libutil/hash.hh index 4d52702aee75..6fbeec5b47fb 100644 --- a/third_party/nix/src/libutil/hash.hh +++ b/third_party/nix/src/libutil/hash.hh @@ -8,6 +8,9 @@ namespace nix { +// Size of the hashes rendered in store paths, in bytes +constexpr unsigned int kStorePathHashSize = 20; + MakeError(BadHash, Error); // TODO(grfn): Replace this with the hash type enum from the daemon proto so we @@ -90,6 +93,9 @@ struct Hash { /* Returns whether the passed string contains entirely valid base32 characters. */ static bool IsValidBase32(absl::string_view s); + + // Convert this Hash to the format expected in store paths + [[nodiscard]] std::string ToStorePathHash() const; }; /* Print a hash in base-16 if it's MD5, or base-32 otherwise. */ |