MCPcopy
hub / github.com/borgbackup/borg / KeyManager

Class KeyManager

src/borg/crypto/keymanager.py:43–236  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

41
42
43class KeyManager:
44 def __init__(self, repository):
45 self.repository = repository
46 self.keyblob = None
47 self.keyblob_storage = None
48
49 manifest_chunk = repository.get_manifest()
50 manifest_data = RepoObj.extract_crypted_data(manifest_chunk)
51 key = identify_key(manifest_data)
52 self.keyblob_storage = key.STORAGE
53 if self.keyblob_storage == KeyBlobStorage.NO_STORAGE:
54 raise UnencryptedRepo()
55
56 def load_keyblob(self):
57 if self.keyblob_storage == KeyBlobStorage.KEYFILE:
58 k = CHPOKeyfileKey(self.repository)
59 target = k.find_key()
60 with open(target) as fd:
61 self.keyblob = "".join(fd.readlines()[1:])
62
63 elif self.keyblob_storage == KeyBlobStorage.REPO:
64 key_data = self.repository.load_key().decode()
65 if not key_data:
66 # if we got an empty key, it means there is no key.
67 loc = self.repository._location.canonical_path()
68 raise RepoKeyNotFoundError(loc) from None
69 self.keyblob = key_data
70
71 def store_keyblob(self, args):
72 if self.keyblob_storage == KeyBlobStorage.KEYFILE:
73 k = CHPOKeyfileKey(self.repository)
74 target = k.get_existing_or_new_target(args)
75
76 self.store_keyfile(target)
77 elif self.keyblob_storage == KeyBlobStorage.REPO:
78 self.repository.save_key(self.keyblob.encode("utf-8"))
79
80 def get_keyfile_data(self):
81 data = f"{CHPOKeyfileKey.FILE_ID} {bin_to_hex(self.repository.id)}\n"
82 data += self.keyblob
83 if not self.keyblob.endswith("\n"):
84 data += "\n"
85 return data
86
87 def store_keyfile(self, target):
88 with dash_open(target, "w") as fd:
89 fd.write(self.get_keyfile_data())
90
91 def export(self, path):
92 if path is None:
93 path = "-"
94
95 self.store_keyfile(path)
96
97 def export_qr(self, path):
98 if path is None:
99 path = "-"
100

Callers 2

do_key_exportMethod · 0.85
do_key_importMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected