aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2023-01-13 15:23:29 -0500
committerJohn Ericson <John.Ericson@Obsidian.Systems>2023-01-13 15:39:19 -0500
commita4164762178a0520b6998c864c7752d3497c40d2 (patch)
tree428d3de3acb76c4e2a2ba6e262c55b66c3792e37
parentfec527bba1fb08f2382db67d210965d895bd0371 (diff)
Move `ValidPathInfo` defintions to `path-info.cc`
Originally there was no `path-info.*`, then there was `path-info.hh`, then there was `path-info.cc`, but only for new things. Moving this stuff over makes everything consistent.
-rw-r--r--src/libstore/path-info.cc75
-rw-r--r--src/libstore/store-api.cc73
2 files changed, 75 insertions, 73 deletions
diff --git a/src/libstore/path-info.cc b/src/libstore/path-info.cc
index fda55b2b6..bd55a9d06 100644
--- a/src/libstore/path-info.cc
+++ b/src/libstore/path-info.cc
@@ -3,6 +3,80 @@
namespace nix {
+std::string ValidPathInfo::fingerprint(const Store & store) const
+{
+ if (narSize == 0)
+ throw Error("cannot calculate fingerprint of path '%s' because its size is not known",
+ store.printStorePath(path));
+ return
+ "1;" + store.printStorePath(path) + ";"
+ + narHash.to_string(Base32, true) + ";"
+ + std::to_string(narSize) + ";"
+ + concatStringsSep(",", store.printStorePathSet(references));
+}
+
+
+void ValidPathInfo::sign(const Store & store, const SecretKey & secretKey)
+{
+ sigs.insert(secretKey.signDetached(fingerprint(store)));
+}
+
+
+bool ValidPathInfo::isContentAddressed(const Store & store) const
+{
+ if (! ca) return false;
+
+ auto caPath = std::visit(overloaded {
+ [&](const TextHash & th) {
+ return store.makeTextPath(path.name(), th.hash, references);
+ },
+ [&](const FixedOutputHash & fsh) {
+ auto refs = references;
+ bool hasSelfReference = false;
+ if (refs.count(path)) {
+ hasSelfReference = true;
+ refs.erase(path);
+ }
+ return store.makeFixedOutputPath(fsh.method, fsh.hash, path.name(), refs, hasSelfReference);
+ }
+ }, *ca);
+
+ bool res = caPath == path;
+
+ if (!res)
+ printError("warning: path '%s' claims to be content-addressed but isn't", store.printStorePath(path));
+
+ return res;
+}
+
+
+size_t ValidPathInfo::checkSignatures(const Store & store, const PublicKeys & publicKeys) const
+{
+ if (isContentAddressed(store)) return maxSigs;
+
+ size_t good = 0;
+ for (auto & sig : sigs)
+ if (checkSignature(store, publicKeys, sig))
+ good++;
+ return good;
+}
+
+
+bool ValidPathInfo::checkSignature(const Store & store, const PublicKeys & publicKeys, const std::string & sig) const
+{
+ return verifyDetached(fingerprint(store), sig, publicKeys);
+}
+
+
+Strings ValidPathInfo::shortRefs() const
+{
+ Strings refs;
+ for (auto & r : references)
+ refs.push_back(std::string(r.to_string()));
+ return refs;
+}
+
+
ValidPathInfo ValidPathInfo::read(Source & source, const Store & store, unsigned int format)
{
return read(source, store, format, store.parseStorePath(readString(source)));
@@ -24,6 +98,7 @@ ValidPathInfo ValidPathInfo::read(Source & source, const Store & store, unsigned
return info;
}
+
void ValidPathInfo::write(
Sink & sink,
const Store & store,
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index f959dfd51..5130409d4 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -1210,79 +1210,6 @@ std::string showPaths(const PathSet & paths)
}
-std::string ValidPathInfo::fingerprint(const Store & store) const
-{
- if (narSize == 0)
- throw Error("cannot calculate fingerprint of path '%s' because its size is not known",
- store.printStorePath(path));
- return
- "1;" + store.printStorePath(path) + ";"
- + narHash.to_string(Base32, true) + ";"
- + std::to_string(narSize) + ";"
- + concatStringsSep(",", store.printStorePathSet(references));
-}
-
-
-void ValidPathInfo::sign(const Store & store, const SecretKey & secretKey)
-{
- sigs.insert(secretKey.signDetached(fingerprint(store)));
-}
-
-bool ValidPathInfo::isContentAddressed(const Store & store) const
-{
- if (! ca) return false;
-
- auto caPath = std::visit(overloaded {
- [&](const TextHash & th) {
- return store.makeTextPath(path.name(), th.hash, references);
- },
- [&](const FixedOutputHash & fsh) {
- auto refs = references;
- bool hasSelfReference = false;
- if (refs.count(path)) {
- hasSelfReference = true;
- refs.erase(path);
- }
- return store.makeFixedOutputPath(fsh.method, fsh.hash, path.name(), refs, hasSelfReference);
- }
- }, *ca);
-
- bool res = caPath == path;
-
- if (!res)
- printError("warning: path '%s' claims to be content-addressed but isn't", store.printStorePath(path));
-
- return res;
-}
-
-
-size_t ValidPathInfo::checkSignatures(const Store & store, const PublicKeys & publicKeys) const
-{
- if (isContentAddressed(store)) return maxSigs;
-
- size_t good = 0;
- for (auto & sig : sigs)
- if (checkSignature(store, publicKeys, sig))
- good++;
- return good;
-}
-
-
-bool ValidPathInfo::checkSignature(const Store & store, const PublicKeys & publicKeys, const std::string & sig) const
-{
- return verifyDetached(fingerprint(store), sig, publicKeys);
-}
-
-
-Strings ValidPathInfo::shortRefs() const
-{
- Strings refs;
- for (auto & r : references)
- refs.push_back(std::string(r.to_string()));
- return refs;
-}
-
-
Derivation Store::derivationFromPath(const StorePath & drvPath)
{
ensurePath(drvPath);