| 386 | |
| 387 | @classmethod |
| 388 | def detect(cls, repository, manifest_data, *, other=False): |
| 389 | key = cls(repository) |
| 390 | target = key.find_key() |
| 391 | prompt = "Enter passphrase for key %s: " % target |
| 392 | passphrase = Passphrase.env_passphrase(other=other) |
| 393 | if passphrase is None: |
| 394 | passphrase = Passphrase() |
| 395 | if not key.load(target, passphrase): |
| 396 | for retry in range(0, 3): |
| 397 | passphrase = Passphrase.getpass(prompt) |
| 398 | if key.load(target, passphrase): |
| 399 | break |
| 400 | Passphrase.display_debug_info(passphrase) |
| 401 | else: |
| 402 | raise PasswordRetriesExceeded |
| 403 | else: |
| 404 | if not key.load(target, passphrase): |
| 405 | Passphrase.display_debug_info(passphrase) |
| 406 | raise PassphraseWrong |
| 407 | key.init_ciphers(manifest_data) |
| 408 | key._passphrase = passphrase |
| 409 | return key |
| 410 | |
| 411 | def _load(self, key_data, passphrase): |
| 412 | try: |