032d431a1d6d6fe31749fb281c030e4825eab62d
Marco Ricci Update copyright notices to...

Marco Ricci authored 2 months ago

1) # SPDX-FileCopyrightText: 2025 Marco Ricci <software@the13thletter.info>
Marco Ricci Import initial project files

Marco Ricci authored 10 months ago

2) #
Marco Ricci Update copyright notices to...

Marco Ricci authored 2 months ago

3) # SPDX-License-Identifier: Zlib
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

4) 
5) from __future__ import annotations
6) 
7) import base64
8) import contextlib
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

9) import copy
Marco Ricci Add test fixture for manual...

Marco Ricci authored 5 months ago

10) import enum
Marco Ricci Test exporter data loading...

Marco Ricci authored 6 months ago

11) import importlib.util
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

12) import json
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 3 months ago

13) import logging
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

14) import os
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 3 months ago

15) import re
Marco Ricci Add test fixture for manual...

Marco Ricci authored 5 months ago

16) import shlex
Marco Ricci Add missing tests for rewor...

Marco Ricci authored 6 months ago

17) import stat
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 5 months ago

18) import sys
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 6 months ago

19) import tempfile
20) import zipfile
Marco Ricci Support Python 3.10 and PyP...

Marco Ricci authored 8 months ago

21) from typing import TYPE_CHECKING
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

22) 
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

23) import hypothesis
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 7 months ago

24) import pytest
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

25) from hypothesis import strategies
Marco Ricci Clean up testing machinery...

Marco Ricci authored 6 months ago

26) from typing_extensions import NamedTuple, Self, assert_never
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 7 months ago

27) 
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

28) from derivepassphrase import _types, cli, ssh_agent, vault
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

29) 
30) __all__ = ()
31) 
32) if TYPE_CHECKING:
Marco Ricci Fix user interface errors i...

Marco Ricci authored 3 months ago

33)     import socket
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 3 months ago

34)     from collections.abc import Callable, Iterator, Mapping, Sequence
Marco Ricci Fix usage of `mypy --python...

Marco Ricci authored 2 months ago

35)     from contextlib import AbstractContextManager
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 7 months ago

36) 
37)     import click.testing
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

38)     from typing_extensions import Any
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 7 months ago

39) 
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

40) 
41) class SSHTestKey(NamedTuple):
42)     public_key: bytes | str
43)     public_key_data: bytes
44)     private_key: bytes
45)     private_key_blob: bytes | None = None
46)     expected_signature: bytes | None = None
47)     derived_passphrase: bytes | str | None = None
48) 
49)     def is_suitable(self) -> bool:
50)         return vault.Vault.is_suitable_ssh_key(self.public_key_data)
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

51) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

52) 
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

53) class ValidationSettings(NamedTuple):
54)     allow_unknown_settings: bool
55) 
56) 
57) class VaultTestConfig(NamedTuple):
58)     config: Any
59)     comment: str
60)     validation_settings: ValidationSettings | None
61) 
62) 
63) TEST_CONFIGS: list[VaultTestConfig] = [
64)     VaultTestConfig(None, 'not a dict', None),
65)     VaultTestConfig({}, 'missing required keys', None),
66)     VaultTestConfig(
67)         {'global': None, 'services': {}}, 'bad config value: global', None
68)     ),
69)     VaultTestConfig(
70)         {'global': {'key': 123}, 'services': {}},
71)         'bad config value: global.key',
72)         None,
73)     ),
74)     VaultTestConfig(
75)         {'global': {'phrase': 'abc', 'key': '...'}, 'services': {}},
76)         '',
77)         None,
78)     ),
79)     VaultTestConfig({'services': None}, 'bad config value: services', None),
80)     VaultTestConfig(
81)         {'services': {'1': {}, 2: {}}}, 'bad config value: services."2"', None
82)     ),
83)     VaultTestConfig(
84)         {'services': {'1': {}, '2': 2}}, 'bad config value: services."2"', None
85)     ),
86)     VaultTestConfig(
87)         {'services': {'sv': {'notes': ['sentinel', 'list']}}},
88)         'bad config value: services.sv.notes',
89)         None,
90)     ),
91)     VaultTestConfig(
92)         {'services': {'sv': {'notes': 'blah blah blah'}}}, '', None
93)     ),
94)     VaultTestConfig(
95)         {'services': {'sv': {'length': '200'}}},
96)         'bad config value: services.sv.length',
97)         None,
98)     ),
99)     VaultTestConfig(
100)         {'services': {'sv': {'length': 0.5}}},
101)         'bad config value: services.sv.length',
102)         None,
103)     ),
104)     VaultTestConfig(
105)         {'services': {'sv': {'length': ['sentinel', 'list']}}},
106)         'bad config value: services.sv.length',
107)         None,
108)     ),
109)     VaultTestConfig(
110)         {'services': {'sv': {'length': -10}}},
111)         'bad config value: services.sv.length',
112)         None,
113)     ),
114)     VaultTestConfig(
115)         {'services': {'sv': {'lower': '10'}}},
116)         'bad config value: services.sv.lower',
117)         None,
118)     ),
119)     VaultTestConfig(
120)         {'services': {'sv': {'upper': -10}}},
121)         'bad config value: services.sv.upper',
122)         None,
123)     ),
124)     VaultTestConfig(
125)         {'services': {'sv': {'number': ['sentinel', 'list']}}},
126)         'bad config value: services.sv.number',
127)         None,
128)     ),
129)     VaultTestConfig(
130)         {
131)             'global': {'phrase': 'my secret phrase'},
132)             'services': {'sv': {'length': 10}},
133)         },
134)         '',
135)         None,
136)     ),
137)     VaultTestConfig(
138)         {'services': {'sv': {'length': 10, 'phrase': '...'}}}, '', None
139)     ),
140)     VaultTestConfig(
141)         {'services': {'sv': {'length': 10, 'key': '...'}}}, '', None
142)     ),
143)     VaultTestConfig(
144)         {'services': {'sv': {'upper': 10, 'key': '...'}}}, '', None
145)     ),
146)     VaultTestConfig(
147)         {'services': {'sv': {'phrase': 'abc', 'key': '...'}}}, '', None
148)     ),
149)     VaultTestConfig(
150)         {
151)             'global': {'phrase': 'abc'},
152)             'services': {'sv': {'phrase': 'abc', 'length': 10}},
153)         },
154)         '',
155)         None,
156)     ),
157)     VaultTestConfig(
158)         {
159)             'global': {'key': '...'},
160)             'services': {'sv': {'phrase': 'abc', 'length': 10}},
161)         },
162)         '',
163)         None,
164)     ),
Marco Ricci Fix missing consideration o...

Marco Ricci authored 5 months ago

165)     VaultTestConfig(
166)         {
167)             'global': {'key': '...'},
168)             'services': {'sv': {'phrase': 'abc', 'key': '...', 'length': 10}},
169)         },
170)         '',
171)         None,
172)     ),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

173)     VaultTestConfig(
174)         {
175)             'global': {'key': '...'},
176)             'services': {
177)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
178)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
179)             },
180)         },
181)         '',
182)         None,
183)     ),
184)     VaultTestConfig(
185)         {
186)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
187)             'services': {
188)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
189)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
190)             },
191)         },
192)         '',
193)         None,
194)     ),
195)     VaultTestConfig(
196)         {
197)             'global': {'key': '...', 'unicode_normalization_form': True},
198)             'services': {},
199)         },
200)         'bad config value: global.unicode_normalization_form',
201)         None,
202)     ),
203)     VaultTestConfig(
204)         {
205)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
206)             'services': {
207)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
208)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
209)             },
210)         },
211)         '',
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 2 months ago

212)         ValidationSettings(True),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

213)     ),
214)     VaultTestConfig(
215)         {
216)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
217)             'services': {
218)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
219)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
220)             },
221)         },
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 2 months ago

222)         'extension/unknown key: .global.unicode_normalization_form',
223)         ValidationSettings(False),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

224)     ),
225)     VaultTestConfig(
226)         {
227)             'global': {'key': '...', 'unknown_key': True},
228)             'services': {
229)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
230)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
231)             },
232)         },
233)         '',
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 2 months ago

234)         ValidationSettings(True),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

235)     ),
236)     VaultTestConfig(
237)         {
238)             'global': {'key': '...', 'unknown_key': True},
239)             'services': {
240)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
241)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
242)             },
243)         },
244)         'unknown key: .global.unknown_key',
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 2 months ago

245)         ValidationSettings(False),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

246)     ),
247)     VaultTestConfig(
248)         {
249)             'global': {'key': '...'},
250)             'services': {
251)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
252)                 'sv2': {
253)                     'length': 10,
254)                     'repeat': 1,
255)                     'lower': 1,
256)                     'unknown_key': True,
257)                 },
258)             },
259)         },
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 2 months ago

260)         'unknown key: .services.sv2.unknown_key',
261)         ValidationSettings(False),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

262)     ),
263)     VaultTestConfig(
264)         {
265)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
266)             'services': {
267)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
268)                 'sv2': {
269)                     'length': 10,
270)                     'repeat': 1,
271)                     'lower': 1,
272)                     'unknown_key': True,
273)                 },
274)             },
275)         },
276)         '',
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 2 months ago

277)         ValidationSettings(True),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

278)     ),
279)     VaultTestConfig(
280)         {
281)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
282)             'services': {
283)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
284)                 'sv2': {
285)                     'length': 10,
286)                     'repeat': 1,
287)                     'lower': 1,
288)                     'unknown_key': True,
289)                 },
290)             },
291)         },
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 2 months ago

292)         '',
293)         ValidationSettings(True),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

294)     ),
295)     VaultTestConfig(
296)         {
297)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
298)             'services': {
299)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
300)                 'sv2': {
301)                     'length': 10,
302)                     'repeat': 1,
303)                     'lower': 1,
304)                     'unknown_key': True,
305)                 },
306)             },
307)         },
Marco Ricci Retire `allow_derivepassphr...

Marco Ricci authored 2 months ago

308)         '',
309)         ValidationSettings(True),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

310)     ),
311) ]
312) 
313) 
314) def is_valid_test_config(conf: VaultTestConfig, /) -> bool:
315)     """Return true if the test config is valid.
316) 
317)     Args:
318)         conf: The test config to check.
319) 
320)     """
321)     return not conf.comment and conf.validation_settings in {
322)         None,
323)         (True, True),
324)     }
325) 
326) 
327) def _test_config_ids(val: VaultTestConfig) -> Any:  # pragma: no cover
328)     """pytest id function for VaultTestConfig objects."""
329)     assert isinstance(val, VaultTestConfig)
330)     return val[1] or (val[0], val[1], val[2])
331) 
332) 
Marco Ricci Move vault service config g...

Marco Ricci authored 5 months ago

333) @strategies.composite
334) def vault_full_service_config(draw: strategies.DrawFn) -> dict[str, int]:
Marco Ricci Overhaul the state machine...

Marco Ricci authored 3 months ago

335)     repeat = draw(strategies.integers(min_value=0, max_value=10))
Marco Ricci Move vault service config g...

Marco Ricci authored 5 months ago

336)     lower = draw(strategies.integers(min_value=0, max_value=10))
337)     upper = draw(strategies.integers(min_value=0, max_value=10))
338)     number = draw(strategies.integers(min_value=0, max_value=10))
Marco Ricci Overhaul the state machine...

Marco Ricci authored 3 months ago

339)     space = draw(strategies.integers(min_value=0, max_value=repeat))
Marco Ricci Move vault service config g...

Marco Ricci authored 5 months ago

340)     dash = draw(strategies.integers(min_value=0, max_value=10))
341)     symbol = draw(strategies.integers(min_value=0, max_value=10))
342)     length = draw(
343)         strategies.integers(
344)             min_value=max(1, lower + upper + number + space + dash + symbol),
345)             max_value=70,
346)         )
347)     )
348)     hypothesis.assume(lower + upper + number + dash + symbol > 0)
349)     hypothesis.assume(lower + upper + number + space + symbol > 0)
350)     hypothesis.assume(repeat >= space)
351)     return {
352)         'lower': lower,
353)         'upper': upper,
354)         'number': number,
355)         'space': space,
356)         'dash': dash,
357)         'symbol': symbol,
358)         'repeat': repeat,
359)         'length': length,
360)     }
361) 
362) 
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

363) def is_smudgable_vault_test_config(conf: VaultTestConfig) -> bool:
364)     """Check whether this vault test config can be effectively smudged.
365) 
366)     A "smudged" test config is one where falsy values (in the JavaScript
367)     sense) can be replaced by other falsy values without changing the
368)     meaning of the config.
369) 
370)     Args:
371)         conf: A test config to check.
372) 
373)     Returns:
374)         True if the test config can be smudged, False otherwise.
375) 
376)     """
377)     config = conf.config
378)     return bool(
379)         isinstance(config, dict)
380)         and ('global' not in config or isinstance(config['global'], dict))
381)         and ('services' in config and isinstance(config['services'], dict))
382)         and all(isinstance(x, dict) for x in config['services'].values())
383)         and (config['services'] or config.get('global'))
384)     )
385) 
386) 
387) @strategies.composite
388) def smudged_vault_test_config(
389)     draw: strategies.DrawFn,
390)     config: Any = strategies.sampled_from(TEST_CONFIGS).filter(  # noqa: B008
391)         is_smudgable_vault_test_config
392)     ),
393) ) -> Any:
394)     """Hypothesis strategy to replace falsy values with other falsy values.
395) 
396)     Uses [`_types.js_truthiness`][] internally, which is tested
397)     separately by
398)     [`tests.test_derivepassphrase_types.test_100_js_truthiness`][].
399) 
400)     Args:
401)         draw:
402)             The hypothesis draw function.
403)         config:
404)             A strategy which generates [`VaultTestConfig`][] objects.
405) 
406)     Returns:
407)         A new [`VaultTestConfig`][] where some falsy values have been
408)         replaced or added.
409) 
410)     """
411) 
412)     falsy = (None, False, 0, 0.0, '', float('nan'))
413)     falsy_no_str = (None, False, 0, 0.0, float('nan'))
414)     falsy_no_zero = (None, False, '', float('nan'))
415)     conf = draw(config)
416)     hypothesis.assume(is_smudgable_vault_test_config(conf))
417)     obj = copy.deepcopy(conf.config)
418)     services: list[dict[str, Any]] = list(obj['services'].values())
419)     if 'global' in obj:
420)         services.append(obj['global'])
421)     assert all(isinstance(x, dict) for x in services), (
422)         'is_smudgable_vault_test_config guard failed to '
423)         'ensure each setings dict is a dict'
424)     )
425)     for service in services:
426)         for key in ('phrase',):
427)             value = service.get(key)
428)             if not _types.js_truthiness(value) and value != '':
429)                 service[key] = draw(strategies.sampled_from(falsy_no_str))
430)         for key in (
431)             'notes',
432)             'key',
433)             'length',
434)             'repeat',
435)         ):
436)             value = service.get(key)
437)             if not _types.js_truthiness(value):
438)                 service[key] = draw(strategies.sampled_from(falsy))
439)         for key in (
440)             'lower',
441)             'upper',
442)             'number',
443)             'space',
444)             'dash',
445)             'symbol',
446)         ):
447)             value = service.get(key)
448)             if not _types.js_truthiness(value) and value != 0:
449)                 service[key] = draw(strategies.sampled_from(falsy_no_zero))
450)     hypothesis.assume(obj != conf.config)
451)     return VaultTestConfig(obj, conf.comment, conf.validation_settings)
452) 
453) 
Marco Ricci Add test fixture for manual...

Marco Ricci authored 5 months ago

454) class KnownSSHAgent(str, enum.Enum):
455)     UNKNOWN: str = '(unknown)'
456)     Pageant: str = 'Pageant'
457)     OpenSSHAgent: str = 'OpenSSHAgent'
458) 
459) 
460) class SpawnedSSHAgentInfo(NamedTuple):
461)     agent_type: KnownSSHAgent
462)     client: ssh_agent.SSHAgentClient
463)     isolated: bool
464) 
465) 
Marco Ricci Let the `running_ssh_agent`...

Marco Ricci authored 3 months ago

466) class RunningSSHAgentInfo(NamedTuple):
467)     socket: str
468)     agent_type: KnownSSHAgent
469) 
470) 
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

471) ALL_KEYS: Mapping[str, SSHTestKey] = {
472)     'ed25519': SSHTestKey(
473)         private_key=rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

474) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
475) QyNTUxOQAAACCBeIFoJtYCSF8P/zJIb+TBMIncHGpFBgnpCQ/7whJpdgAAAKDweO7H8Hju
476) xwAAAAtzc2gtZWQyNTUxOQAAACCBeIFoJtYCSF8P/zJIb+TBMIncHGpFBgnpCQ/7whJpdg
477) AAAEAbM/A869nkWZbe2tp3Dm/L6gitvmpH/aRZt8sBII3ExYF4gWgm1gJIXw//Mkhv5MEw
478) idwcakUGCekJD/vCEml2AAAAG3Rlc3Qga2V5IHdpdGhvdXQgcGFzc3BocmFzZQEC
479) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

480) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

481)         private_key_blob=bytes.fromhex("""
Marco Ricci Add principal support for u...

Marco Ricci authored 5 months ago

482)             00 00 00 0b 73 73 68 2d 65 64 32 35 35 31 39
483)             00 00 00 20
484)             81 78 81 68 26 d6 02 48 5f 0f ff 32 48 6f e4 c1
485)             30 89 dc 1c 6a 45 06 09 e9 09 0f fb c2 12 69 76
486)             00 00 00 40
487)             1b 33 f0 3c eb d9 e4 59 96 de da da 77 0e 6f cb
488)             ea 08 ad be 6a 47 fd a4 59 b7 cb 01 20 8d c4 c5
489)             81 78 81 68 26 d6 02 48 5f 0f ff 32 48 6f e4 c1
490)             30 89 dc 1c 6a 45 06 09 e9 09 0f fb c2 12 69 76
491)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69 74
492)             68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
493) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

494)         public_key=rb"""ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIF4gWgm1gJIXw//Mkhv5MEwidwcakUGCekJD/vCEml2 test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 months ago

495) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

496)         public_key_data=bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

497)             00 00 00 0b 73 73 68 2d 65 64 32 35 35 31 39
498)             00 00 00 20
499)             81 78 81 68 26 d6 02 48 5f 0f ff 32 48 6f e4 c1
500)             30 89 dc 1c 6a 45 06 09 e9 09 0f fb c2 12 69 76
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

501) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

502)         expected_signature=bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

503)             00 00 00 0b 73 73 68 2d 65 64 32 35 35 31 39
504)             00 00 00 40
505)             f0 98 19 80 6c 1a 97 d5 26 03 6e cc e3 65 8f 86
506)             66 07 13 19 13 09 21 33 33 f9 e4 36 53 1d af fd
507)             0d 08 1f ec f8 73 9b 8c 5f 55 39 16 7c 53 54 2c
508)             1e 52 bb 30 ed 7f 89 e2 2f 69 51 55 d8 9e a6 02
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

509)         """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

510)         derived_passphrase=rb'8JgZgGwal9UmA27M42WPhmYHExkTCSEzM/nkNlMdr/0NCB/s+HObjF9VORZ8U1QsHlK7MO1/ieIvaVFV2J6mAg==',
511)     ),
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

512)     # Currently only supported by PuTTY (which is deficient in other
513)     # niceties of the SSH agent and the agent's client).
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

514)     'ed448': SSHTestKey(
515)         private_key=rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

516) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAASgAAAAlz
517) c2gtZWQ0NDgAAAA54vZy009Wu8wExjvEb3hqtLz1GO/+d5vmGUbErWQ4AUO9mYLT
518) zHJHc2m4s+yWzP29Cc3EcxizLG8AAAAA8BdhfCcXYXwnAAAACXNzaC1lZDQ0OAAA
519) ADni9nLTT1a7zATGO8RveGq0vPUY7/53m+YZRsStZDgBQ72ZgtPMckdzabiz7JbM
520) /b0JzcRzGLMsbwAAAAByM7GIMRvWJB3YD6SIpAF2uudX4ozZe0X917wPwiBrs373
521) 9TM1n94Nib6hrxGNmCk2iBQDe2KALPgA4vZy009Wu8wExjvEb3hqtLz1GO/+d5vm
522) GUbErWQ4AUO9mYLTzHJHc2m4s+yWzP29Cc3EcxizLG8AAAAAG3Rlc3Qga2V5IHdp
523) dGhvdXQgcGFzc3BocmFzZQECAwQFBgcICQ==
524) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

525) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

526)         private_key_blob=bytes.fromhex("""
Marco Ricci Add principal support for u...

Marco Ricci authored 5 months ago

527)             00 00 00 09 73 73 68 2d 65 64 34 34 38
528)             00 00 00 39 e2 f6 72 d3 4f 56 bb cc 04
529)             c6 3b c4 6f 78 6a b4 bc f5 18 ef fe 77 9b e6 19
530)             46 c4 ad 64 38 01 43 bd 99 82 d3 cc 72 47 73 69
531)             b8 b3 ec 96 cc fd bd 09 cd c4 73 18 b3 2c 6f 00
532)             00 00 00 72 33 b1
533)             88 31 1b d6 24 1d d8 0f a4 88 a4 01 76 ba e7 57
534)             e2 8c d9 7b 45 fd d7 bc 0f c2 20 6b b3 7e f7 f5
535)             33 35 9f de 0d 89 be a1 af 11 8d 98 29 36 88 14
536)             03 7b 62 80 2c f8 00 e2 f6 72 d3 4f 56 bb cc 04
537)             c6 3b c4 6f 78 6a b4 bc f5 18 ef fe 77 9b e6 19
538)             46 c4 ad 64 38 01 43 bd 99 82 d3 cc 72 47 73 69
539)             b8 b3 ec 96 cc fd bd 09 cd c4 73 18 b3 2c 6f 00
540)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
541)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
542) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

543)         public_key=rb"""ssh-ed448 AAAACXNzaC1lZDQ0OAAAADni9nLTT1a7zATGO8RveGq0vPUY7/53m+YZRsStZDgBQ72ZgtPMckdzabiz7JbM/b0JzcRzGLMsbwA= test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 months ago

544) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

545)         public_key_data=bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

546)             00 00 00 09 73 73 68 2d 65 64 34 34 38
Marco Ricci Add principal support for u...

Marco Ricci authored 5 months ago

547)             00 00 00 39 e2 f6 72 d3 4f 56 bb cc 04
548)             c6 3b c4 6f 78 6a b4 bc f5 18 ef fe 77 9b e6 19
549)             46 c4 ad 64 38 01 43 bd 99 82 d3 cc 72 47 73 69
550)             b8 b3 ec 96 cc fd bd 09 cd c4 73 18 b3 2c 6f 00
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

551)         """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

552)         expected_signature=bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

553)             00 00 00 09 73 73 68 2d 65 64 34 34 38
554)             00 00 00 72 06 86
555)             f4 64 a4 a6 ba d9 c3 22 c4 93 49 99 fc 11 de 67
556)             97 08 f2 d8 b7 3c 2c 13 e7 c5 1c 1e 92 a6 0e d8
557)             2f 6d 81 03 82 00 e3 72 e4 32 6d 72 d2 6d 32 84
558)             3f cc a9 1e 57 2c 00 9a b3 99 de 45 da ce 2e d1
559)             db e5 89 f3 35 be 24 58 90 c6 ca 04 f0 db 88 80
560)             db bd 77 7c 80 20 7f 3a 48 61 f6 1f ae a9 5e 53
561)             7b e0 9d 93 1e ea dc eb b5 cd 56 4c ea 8f 08 00
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

562)         """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

563)         derived_passphrase=rb'Bob0ZKSmutnDIsSTSZn8Ed5nlwjy2Lc8LBPnxRwekqYO2C9tgQOCAONy5DJtctJtMoQ/zKkeVywAmrOZ3kXazi7R2+WJ8zW+JFiQxsoE8NuIgNu9d3yAIH86SGH2H66pXlN74J2THurc67XNVkzqjwgA',
564)     ),
565)     'rsa': SSHTestKey(
566)         private_key=rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

567) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
568) NhAAAAAwEAAQAAAYEAsaHu6Xs4cVsuDSNJlMCqoPVgmDgEviI8TfXmHKqX3JkIqI3LsvV7
569) Ijf8WCdTveEq7CkuZhImtsR52AOEVAoU8mDXDNr+nJ5wUPzf1UIaRjDe0lcXW4SlF01hQs
570) G4wYDuqxshwelraB/L3e0zhD7fjYHF8IbFsqGlFHWEwOtlfhhfbxJsTGguLm4A8/gdEJD5
571) 2rkqDcZpIXCHtJbCzW9aQpWcs/PDw5ylwl/3dB7jfxyfrGz4O3QrzsqhWEsip97mOmwl6q
572) CHbq8V8x9zu89D/H+bG5ijqxhijbjcVUW3lZfw/97gy9J6rG31HNar5H8GycLTFwuCFepD
573) mTEpNgQLKoe8ePIEPq4WHhFUovBdwlrOByUKKqxreyvWt5gkpTARz+9Lt8OjBO3rpqK8sZ
574) VKH3sE3de2RJM3V9PJdmZSs2b8EFK3PsUGdlMPM9pn1uk4uIItKWBmooOynuD8Ll6aPwuW
575) AFn3l8nLLyWdrmmEYzHWXiRjQJxy1Bi5AbHMOWiPAAAFkDPkuBkz5LgZAAAAB3NzaC1yc2
576) EAAAGBALGh7ul7OHFbLg0jSZTAqqD1YJg4BL4iPE315hyql9yZCKiNy7L1eyI3/FgnU73h
577) KuwpLmYSJrbEedgDhFQKFPJg1wza/pyecFD839VCGkYw3tJXF1uEpRdNYULBuMGA7qsbIc
578) Hpa2gfy93tM4Q+342BxfCGxbKhpRR1hMDrZX4YX28SbExoLi5uAPP4HRCQ+dq5Kg3GaSFw
579) h7SWws1vWkKVnLPzw8OcpcJf93Qe438cn6xs+Dt0K87KoVhLIqfe5jpsJeqgh26vFfMfc7
580) vPQ/x/mxuYo6sYYo243FVFt5WX8P/e4MvSeqxt9RzWq+R/BsnC0xcLghXqQ5kxKTYECyqH
581) vHjyBD6uFh4RVKLwXcJazgclCiqsa3sr1reYJKUwEc/vS7fDowTt66aivLGVSh97BN3Xtk
582) STN1fTyXZmUrNm/BBStz7FBnZTDzPaZ9bpOLiCLSlgZqKDsp7g/C5emj8LlgBZ95fJyy8l
583) na5phGMx1l4kY0CcctQYuQGxzDlojwAAAAMBAAEAAAF/cNVYT+Om4x9+SItcz5bOByGIOj
584) yWUH8f9rRjnr5ILuwabIDgvFaVG+xM1O1hWADqzMnSEcknHRkTYEsqYPykAtxFvjOFEh70
585) 6qRUJ+fVZkqRGEaI3oWyWKTOhcCIYImtONvb0LOv/HQ2H2AXCoeqjST1qr/xSuljBtcB8u
586) wxs3EqaO1yU7QoZpDcMX9plH7Rmc9nNfZcgrnktPk2deX2+Y/A5tzdVgG1IeqYp6CBMLNM
587) uhL0OPdDehgBoDujx+rhkZ1gpo1wcULIM94NL7VSHBPX0Lgh9T+3j1HVP+YnMAvhfOvfct
588) LlbJ06+TYGRAMuF2LPCAZM/m0FEyAurRgWxAjLXm+4kp2GAJXlw82deDkQ+P8cHNT6s9ZH
589) R5YSy3lpZ35594ZMOLR8KqVvhgJGF6i9019BiF91SDxjE+sp6dNGfN8W+64tHdDv2a0Mso
590) +8Qjyx7sTpi++EjLU8Iy73/e4B8qbXMyheyA/UUfgMtNKShh6sLlrD9h2Sm9RFTuEAAADA
591) Jh3u7WfnjhhKZYbAW4TsPNXDMrB0/t7xyAQgFmko7JfESyrJSLg1cO+QMOiDgD7zuQ9RSp
592) NIKdPsnIna5peh979mVjb2HgnikjyJECmBpLdwZKhX7MnIvgKw5lnQXHboEtWCa1N58l7f
593) srzwbi9pFUuUp9dShXNffmlUCjDRsVLbK5C6+iaIQyCWFYK8mc6dpNkIoPKf+Xg+EJCIFQ
594) oITqeu30Gc1+M+fdZc2ghq0b6XLthh/uHEry8b68M5KglMAAAAwQDw1i+IdcvPV/3u/q9O
595) /kzLpKO3tbT89sc1zhjZsDNjDAGluNr6n38iq/XYRZu7UTL9BG+EgFVfIUV7XsYT5e+BPf
596) 13VS94rzZ7maCsOlULX+VdMO2zBucHIoec9RUlRZrfB21B2W7YGMhbpoa5lN3lKJQ7afHo
597) dXZUMp0cTFbOmbzJgSzO2/NE7BhVwmvcUzTDJGMMKuxBO6w99YKDKRKm0PNLFDz26rWm9L
598) dNS2MVfVuPMTpzT26HQG4pFageq9cAAADBALzRBXdZF8kbSBa5MTUBVTTzgKQm1C772gJ8
599) T01DJEXZsVtOv7mUC1/m/by6Hk4tPyvDBuGj9hHq4N7dPqGutHb1q5n0ADuoQjRW7BXw5Q
600) vC2EAD91xexdorIA5BgXU+qltBqzzBVzVtF7+jOZOjfzOlaTX9I5I5veyeTaTxZj1XXUzi
601) btBNdMEJJp7ifucYmoYAAwE7K+VlWagDEK2y8Mte9y9E+N0uO2j+h85sQt/UIb2iE/vhcg
602) Bgp6142WnSCQAAABt0ZXN0IGtleSB3aXRob3V0IHBhc3NwaHJhc2UB
603) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

604) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

605)         private_key_blob=bytes.fromhex("""
Marco Ricci Add principal support for u...

Marco Ricci authored 5 months ago

606)             00 00 00 07 73 73 68 2d 72 73 61
607)             00 00 01 81 00
608)             b1 a1 ee e9 7b 38 71 5b 2e 0d 23 49 94 c0 aa a0
609)             f5 60 98 38 04 be 22 3c 4d f5 e6 1c aa 97 dc 99
610)             08 a8 8d cb b2 f5 7b 22 37 fc 58 27 53 bd e1 2a
611)             ec 29 2e 66 12 26 b6 c4 79 d8 03 84 54 0a 14 f2
612)             60 d7 0c da fe 9c 9e 70 50 fc df d5 42 1a 46 30
613)             de d2 57 17 5b 84 a5 17 4d 61 42 c1 b8 c1 80 ee
614)             ab 1b 21 c1 e9 6b 68 1f cb dd ed 33 84 3e df 8d
615)             81 c5 f0 86 c5 b2 a1 a5 14 75 84 c0 eb 65 7e 18
616)             5f 6f 12 6c 4c 68 2e 2e 6e 00 f3 f8 1d 10 90 f9
617)             da b9 2a 0d c6 69 21 70 87 b4 96 c2 cd 6f 5a 42
618)             95 9c b3 f3 c3 c3 9c a5 c2 5f f7 74 1e e3 7f 1c
619)             9f ac 6c f8 3b 74 2b ce ca a1 58 4b 22 a7 de e6
620)             3a 6c 25 ea a0 87 6e af 15 f3 1f 73 bb cf 43 fc
621)             7f 9b 1b 98 a3 ab 18 62 8d b8 dc 55 45 b7 95 97
622)             f0 ff de e0 cb d2 7a ac 6d f5 1c d6 ab e4 7f 06
623)             c9 c2 d3 17 0b 82 15 ea 43 99 31 29 36 04 0b 2a
624)             87 bc 78 f2 04 3e ae 16 1e 11 54 a2 f0 5d c2 5a
625)             ce 07 25 0a 2a ac 6b 7b 2b d6 b7 98 24 a5 30 11
626)             cf ef 4b b7 c3 a3 04 ed eb a6 a2 bc b1 95 4a 1f
627)             7b 04 dd d7 b6 44 93 37 57 d3 c9 76 66 52 b3 66
628)             fc 10 52 b7 3e c5 06 76 53 0f 33 da 67 d6 e9 38
629)             b8 82 2d 29 60 66 a2 83 b2 9e e0 fc 2e 5e 9a 3f
630)             0b 96 00 59 f7 97 c9 cb 2f 25 9d ae 69 84 63 31
631)             d6 5e 24 63 40 9c 72 d4 18 b9 01 b1 cc 39 68 8f
632)             00 00 00 03 01 00 01
633)             00 00 01 7f
634)             70 d5 58 4f e3 a6 e3 1f 7e 48 8b 5c cf 96 ce
635)             07 21 88 3a 3c 96 50 7f 1f f6 b4 63 9e be 48 2e
636)             ec 1a 6c 80 e0 bc 56 95 1b ec 4c d4 ed 61 58 00
637)             ea cc c9 d2 11 c9 27 1d 19 13 60 4b 2a 60 fc a4
638)             02 dc 45 be 33 85 12 1e f4 ea a4 54 27 e7 d5 66
639)             4a 91 18 46 88 de 85 b2 58 a4 ce 85 c0 88 60 89
640)             ad 38 db db d0 b3 af fc 74 36 1f 60 17 0a 87 aa
641)             8d 24 f5 aa bf f1 4a e9 63 06 d7 01 f2 ec 31 b3
642)             71 2a 68 ed 72 53 b4 28 66 90 dc 31 7f 69 94 7e
643)             d1 99 cf 67 35 f6 5c 82 b9 e4 b4 f9 36 75 e5 f6
644)             f9 8f c0 e6 dc dd 56 01 b5 21 ea 98 a7 a0 81 30
645)             b3 4c ba 12 f4 38 f7 43 7a 18 01 a0 3b a3 c7 ea
646)             e1 91 9d 60 a6 8d 70 71 42 c8 33 de 0d 2f b5 52
647)             1c 13 d7 d0 b8 21 f5 3f b7 8f 51 d5 3f e6 27 30
648)             0b e1 7c eb df 72 d2 e5 6c 9d 3a f9 36 06 44 03
649)             2e 17 62 cf 08 06 4c fe 6d 05 13 20 2e ad 18 16
650)             c4 08 cb 5e 6f b8 92 9d 86 00 95 e5 c3 cd 9d 78
651)             39 10 f8 ff 1c 1c d4 fa b3 d6 47 47 96 12 cb 79
652)             69 67 7e 79 f7 86 4c 38 b4 7c 2a a5 6f 86 02 46
653)             17 a8 bd d3 5f 41 88 5f 75 48 3c 63 13 eb 29 e9
654)             d3 46 7c df 16 fb ae 2d 1d d0 ef d9 ad 0c b2 8f
655)             bc 42 3c b1 ee c4 e9 8b ef 84 8c b5 3c 23 2e f7
656)             fd ee 01 f2 a6 d7 33 28 5e c8 0f d4 51 f8 0c b4
657)             d2 92 86 1e ac 2e 5a c3 f6 1d 92 9b d4 45 4e e1
658)             00 00 00 c0
659)             26 1d ee ed 67 e7 8e 18 4a 65 86 c0 5b 84 ec 3c
660)             d5 c3 32 b0 74 fe de f1 c8 04 20 16 69 28 ec 97
661)             c4 4b 2a c9 48 b8 35 70 ef 90 30 e8 83 80 3e f3
662)             b9 0f 51 4a 93 48 29 d3 ec 9c 89 da e6 97 a1 f7
663)             bf 66 56 36 f6 1e 09 e2 92 3c 89 10 29 81 a4 b7
664)             70 64 a8 57 ec c9 c8 be 02 b0 e6 59 d0 5c 76 e8
665)             12 d5 82 6b 53 79 f2 5e df b2 bc f0 6e 2f 69 15
666)             4b 94 a7 d7 52 85 73 5f 7e 69 54 0a 30 d1 b1 52
667)             db 2b 90 ba fa 26 88 43 20 96 15 82 bc 99 ce 9d
668)             a4 d9 08 a0 f2 9f f9 78 3e 10 90 88 15 0a 08 4e
669)             a7 ae df 41 9c d7 e3 3e 7d d6 5c da 08 6a d1 be
670)             97 2e d8 61 fe e1 c4 af 2f 1b eb c3 39 2a 09 4c
671)             00 00 00 c1 00
672)             f0 d6 2f 88 75 cb cf 57 fd ee fe af 4e fe 4c cb
673)             a4 a3 b7 b5 b4 fc f6 c7 35 ce 18 d9 b0 33 63 0c
674)             01 a5 b8 da fa 9f 7f 22 ab f5 d8 45 9b bb 51 32
675)             fd 04 6f 84 80 55 5f 21 45 7b 5e c6 13 e5 ef 81
676)             3d fd 77 55 2f 78 af 36 7b 99 a0 ac 3a 55 0b 5f
677)             e5 5d 30 ed b3 06 e7 07 22 87 9c f5 15 25 45 9a
678)             df 07 6d 41 d9 6e d8 18 c8 5b a6 86 b9 94 dd e5
679)             28 94 3b 69 f1 e8 75 76 54 32 9d 1c 4c 56 ce 99
680)             bc c9 81 2c ce db f3 44 ec 18 55 c2 6b dc 53 34
681)             c3 24 63 0c 2a ec 41 3b ac 3d f5 82 83 29 12 a6
682)             d0 f3 4b 14 3c f6 ea b5 a6 f4 b7 4d 4b 63 15 7d
683)             5b 8f 31 3a 73 4f 6e 87 40 6e 29 15 a8 1e ab d7
684)             00 00 00 c1 00
685)             bc d1 05 77 59 17 c9 1b 48 16 b9 31 35 01 55 34
686)             f3 80 a4 26 d4 2e fb da 02 7c 4f 4d 43 24 45 d9
687)             b1 5b 4e bf b9 94 0b 5f e6 fd bc ba 1e 4e 2d 3f
688)             2b c3 06 e1 a3 f6 11 ea e0 de dd 3e a1 ae b4 76
689)             f5 ab 99 f4 00 3b a8 42 34 56 ec 15 f0 e5 0b c2
690)             d8 40 03 f7 5c 5e c5 da 2b 20 0e 41 81 75 3e aa
691)             5b 41 ab 3c c1 57 35 6d 17 bf a3 39 93 a3 7f 33
692)             a5 69 35 fd 23 92 39 bd ec 9e 4d a4 f1 66 3d 57
693)             5d 4c e2 6e d0 4d 74 c1 09 26 9e e2 7e e7 18 9a
694)             86 00 03 01 3b 2b e5 65 59 a8 03 10 ad b2 f0 cb
695)             5e f7 2f 44 f8 dd 2e 3b 68 fe 87 ce 6c 42 df d4
696)             21 bd a2 13 fb e1 72 00 60 a7 ad 78 d9 69 d2 09
697)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
698)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
699) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

700)         public_key=rb"""ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCxoe7pezhxWy4NI0mUwKqg9WCYOAS+IjxN9eYcqpfcmQiojcuy9XsiN/xYJ1O94SrsKS5mEia2xHnYA4RUChTyYNcM2v6cnnBQ/N/VQhpGMN7SVxdbhKUXTWFCwbjBgO6rGyHB6WtoH8vd7TOEPt+NgcXwhsWyoaUUdYTA62V+GF9vEmxMaC4ubgDz+B0QkPnauSoNxmkhcIe0lsLNb1pClZyz88PDnKXCX/d0HuN/HJ+sbPg7dCvOyqFYSyKn3uY6bCXqoIdurxXzH3O7z0P8f5sbmKOrGGKNuNxVRbeVl/D/3uDL0nqsbfUc1qvkfwbJwtMXC4IV6kOZMSk2BAsqh7x48gQ+rhYeEVSi8F3CWs4HJQoqrGt7K9a3mCSlMBHP70u3w6ME7eumoryxlUofewTd17ZEkzdX08l2ZlKzZvwQUrc+xQZ2Uw8z2mfW6Ti4gi0pYGaig7Ke4PwuXpo/C5YAWfeXycsvJZ2uaYRjMdZeJGNAnHLUGLkBscw5aI8= test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 months ago

701) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

702)         public_key_data=bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

703)             00 00 00 07 73 73 68 2d 72 73 61
704)             00 00 00 03 01 00 01
705)             00 00 01 81 00
706)             b1 a1 ee e9 7b 38 71 5b 2e 0d 23 49 94 c0 aa a0
707)             f5 60 98 38 04 be 22 3c 4d f5 e6 1c aa 97 dc 99
708)             08 a8 8d cb b2 f5 7b 22 37 fc 58 27 53 bd e1 2a
709)             ec 29 2e 66 12 26 b6 c4 79 d8 03 84 54 0a 14 f2
710)             60 d7 0c da fe 9c 9e 70 50 fc df d5 42 1a 46 30
711)             de d2 57 17 5b 84 a5 17 4d 61 42 c1 b8 c1 80 ee
712)             ab 1b 21 c1 e9 6b 68 1f cb dd ed 33 84 3e df 8d
713)             81 c5 f0 86 c5 b2 a1 a5 14 75 84 c0 eb 65 7e 18
714)             5f 6f 12 6c 4c 68 2e 2e 6e 00 f3 f8 1d 10 90 f9
715)             da b9 2a 0d c6 69 21 70 87 b4 96 c2 cd 6f 5a 42
716)             95 9c b3 f3 c3 c3 9c a5 c2 5f f7 74 1e e3 7f 1c
717)             9f ac 6c f8 3b 74 2b ce ca a1 58 4b 22 a7 de e6
718)             3a 6c 25 ea a0 87 6e af 15 f3 1f 73 bb cf 43 fc
719)             7f 9b 1b 98 a3 ab 18 62 8d b8 dc 55 45 b7 95 97
720)             f0 ff de e0 cb d2 7a ac 6d f5 1c d6 ab e4 7f 06
721)             c9 c2 d3 17 0b 82 15 ea 43 99 31 29 36 04 0b 2a
722)             87 bc 78 f2 04 3e ae 16 1e 11 54 a2 f0 5d c2 5a
723)             ce 07 25 0a 2a ac 6b 7b 2b d6 b7 98 24 a5 30 11
724)             cf ef 4b b7 c3 a3 04 ed eb a6 a2 bc b1 95 4a 1f
725)             7b 04 dd d7 b6 44 93 37 57 d3 c9 76 66 52 b3 66
726)             fc 10 52 b7 3e c5 06 76 53 0f 33 da 67 d6 e9 38
727)             b8 82 2d 29 60 66 a2 83 b2 9e e0 fc 2e 5e 9a 3f
728)             0b 96 00 59 f7 97 c9 cb 2f 25 9d ae 69 84 63 31
729)             d6 5e 24 63 40 9c 72 d4 18 b9 01 b1 cc 39 68 8f
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

730) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

731)         expected_signature=bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

732)             00 00 00 07 73 73 68 2d 72 73 61
733)             00 00 01 80
734)             a2 10 7c 2e f6 bb 53 a8 74 2a a1 19 99 ad 81 be
735)             79 9c ed d6 9d 09 4e 6e c5 18 48 33 90 77 99 68
736)             f7 9e 03 5a cd 4e 18 eb 89 7d 85 a2 ee ae 4a 92
737)             f6 6f ce b9 fe 86 7f 2a 6b 31 da 6e 1a fe a2 a5
738)             88 b8 44 7f a1 76 73 b3 ec 75 b5 d0 a6 b9 15 97
739)             65 09 13 7d 94 21 d1 fb 5d 0f 8b 23 04 77 c2 c3
740)             55 22 b1 a0 09 8a f5 38 2a d6 7f 1b 87 29 a0 25
741)             d3 25 6f cb 64 61 07 98 dc 14 c5 84 f8 92 24 5e
742)             50 11 6b 49 e5 f0 cc 29 cb 29 a9 19 d8 a7 71 1f
743)             91 0b 05 b1 01 4b c2 5f 00 a5 b6 21 bf f8 2c 9d
744)             67 9b 47 3b 0a 49 6b 79 2d fc 1d ec 0c b0 e5 27
745)             22 d5 a9 f8 d3 c3 f9 df 48 68 e9 fb ef 3c dc 26
746)             bf cf ea 29 43 01 a6 e3 c5 51 95 f4 66 6d 8a 55
747)             e2 47 ec e8 30 45 4c ae 47 e7 c9 a4 21 8b 64 ba
748)             b6 88 f6 21 f8 73 b9 cb 11 a1 78 75 92 c6 5a e5
749)             64 fe ed 42 d9 95 99 e6 2b 6f 3c 16 3c 28 74 a4
750)             72 2f 0d 3f 2c 33 67 aa 35 19 8e e7 b5 11 2f b3
751)             f7 6a c5 02 e2 6f a3 42 e3 62 19 99 03 ea a5 20
752)             e7 a1 e3 bc c8 06 a3 b5 7c d6 76 5d df 6f 60 46
753)             83 2a 08 00 d6 d3 d9 a4 c1 41 8c f8 60 56 45 81
754)             da 3b a2 16 1f 9e 4e 75 83 17 da c3 53 c3 3e 19
755)             a4 1b bc d2 29 b8 78 61 2b 78 e6 b1 52 b0 d5 ec
756)             de 69 2c 48 62 d9 fd d1 9b 6b b0 49 db d3 ff 38
757)             e7 10 d9 2d ce 9f 0d 5e 09 7b 37 d2 7b c3 bf ce
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

758) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

759)         derived_passphrase=rb'ohB8Lva7U6h0KqEZma2Bvnmc7dadCU5uxRhIM5B3mWj3ngNazU4Y64l9haLurkqS9m/Ouf6GfyprMdpuGv6ipYi4RH+hdnOz7HW10Ka5FZdlCRN9lCHR+10PiyMEd8LDVSKxoAmK9Tgq1n8bhymgJdMlb8tkYQeY3BTFhPiSJF5QEWtJ5fDMKcspqRnYp3EfkQsFsQFLwl8ApbYhv/gsnWebRzsKSWt5Lfwd7Ayw5Sci1an408P530ho6fvvPNwmv8/qKUMBpuPFUZX0Zm2KVeJH7OgwRUyuR+fJpCGLZLq2iPYh+HO5yxGheHWSxlrlZP7tQtmVmeYrbzwWPCh0pHIvDT8sM2eqNRmO57URL7P3asUC4m+jQuNiGZkD6qUg56HjvMgGo7V81nZd329gRoMqCADW09mkwUGM+GBWRYHaO6IWH55OdYMX2sNTwz4ZpBu80im4eGEreOaxUrDV7N5pLEhi2f3Rm2uwSdvT/zjnENktzp8NXgl7N9J7w7/O',
760)     ),
761)     'dsa1024': SSHTestKey(
762)         private_key=rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

763) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsQAAAAdzc2gtZH
764) NzAAAAgQC7KAZXqBGNVLBQPrcMYAoNW54BhD8aIhe7BDWYzJcsaMt72VKSkguZ8+XR7nRa
765) 0C/ZsBi+uJp0dpxy9ZMTOWX4u5YPMeQcXEdGExZIfimGqSOAsy6fCld2IfJZJZExcCmhe9
766) Ssjsd3YSAPJRluOXFQc95MZoR5hMwlIDD8QzrE7QAAABUA99nOZOgd7aHMVGoXpUEBcn7H
767) ossAAACALr2Ag3hxM3rKdxzVUw8fX0VVPXO+3+Kr8hGe0Kc/7NwVaBVL1GQ8fenBuWynpA
768) UbH0wo3h1wkB/8hX6p+S8cnu5rIBlUuVNwLw/bIYohK98LfqTYK/V+g6KD+8m34wvEiXZm
769) qywY54n2bksch1Nqvj/tNpLzExSx/XS0kSM1aigAAACAbQNRPcVEuGDrEcf+xg5tgAejPX
770) BPXr/Jss+Chk64km3mirMYjAWyWYtVcgT+7hOYxtYRin8LyMLqKRmqa0Q5UrvDfChgLhvs
771) G9YSb/Mpw5qm8PiHSafwhkaz/te3+8hKogqoe7sd+tCF06IpJr5k70ACiNtRGqssNF8Elr
772) l1efYAAAH4swlfVrMJX1YAAAAHc3NoLWRzcwAAAIEAuygGV6gRjVSwUD63DGAKDVueAYQ/
773) GiIXuwQ1mMyXLGjLe9lSkpILmfPl0e50WtAv2bAYvriadHaccvWTEzll+LuWDzHkHFxHRh
774) MWSH4phqkjgLMunwpXdiHyWSWRMXApoXvUrI7Hd2EgDyUZbjlxUHPeTGaEeYTMJSAw/EM6
775) xO0AAAAVAPfZzmToHe2hzFRqF6VBAXJ+x6LLAAAAgC69gIN4cTN6yncc1VMPH19FVT1zvt
776) /iq/IRntCnP+zcFWgVS9RkPH3pwblsp6QFGx9MKN4dcJAf/IV+qfkvHJ7uayAZVLlTcC8P
777) 2yGKISvfC36k2Cv1foOig/vJt+MLxIl2ZqssGOeJ9m5LHIdTar4/7TaS8xMUsf10tJEjNW
778) ooAAAAgG0DUT3FRLhg6xHH/sYObYAHoz1wT16/ybLPgoZOuJJt5oqzGIwFslmLVXIE/u4T
779) mMbWEYp/C8jC6ikZqmtEOVK7w3woYC4b7BvWEm/zKcOapvD4h0mn8IZGs/7Xt/vISqIKqH
780) u7HfrQhdOiKSa+ZO9AAojbURqrLDRfBJa5dXn2AAAAFQDJHfenj4EJ9WkehpdJatPBlqCW
781) 0gAAABt0ZXN0IGtleSB3aXRob3V0IHBhc3NwaHJhc2UBAgMEBQYH
782) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

783) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

784)         private_key_blob=bytes.fromhex("""
Marco Ricci Add principal support for u...

Marco Ricci authored 5 months ago

785)             00 00 00 07 73 73 68 2d 64 73 73
786)             00 00 00 81 00
787)             bb 28 06 57 a8 11 8d 54 b0 50 3e b7 0c 60 0a 0d
788)             5b 9e 01 84 3f 1a 22 17 bb 04 35 98 cc 97 2c 68
789)             cb 7b d9 52 92 92 0b 99 f3 e5 d1 ee 74 5a d0 2f
790)             d9 b0 18 be b8 9a 74 76 9c 72 f5 93 13 39 65 f8
791)             bb 96 0f 31 e4 1c 5c 47 46 13 16 48 7e 29 86 a9
792)             23 80 b3 2e 9f 0a 57 76 21 f2 59 25 91 31 70 29
793)             a1 7b d4 ac 8e c7 77 61 20 0f 25 19 6e 39 71 50
794)             73 de 4c 66 84 79 84 cc 25 20 30 fc 43 3a c4 ed
795)             00 00 00 15 00 f7 d9 ce 64
796)             e8 1d ed a1 cc 54 6a 17 a5 41 01 72 7e c7 a2 cb
797)             00 00 00 80
798)             2e bd 80 83 78 71 33 7a ca 77 1c d5 53 0f 1f 5f
799)             45 55 3d 73 be df e2 ab f2 11 9e d0 a7 3f ec dc
800)             15 68 15 4b d4 64 3c 7d e9 c1 b9 6c a7 a4 05 1b
801)             1f 4c 28 de 1d 70 90 1f fc 85 7e a9 f9 2f 1c 9e
802)             ee 6b 20 19 54 b9 53 70 2f 0f db 21 8a 21 2b df
803)             0b 7e a4 d8 2b f5 7e 83 a2 83 fb c9 b7 e3 0b c4
804)             89 76 66 ab 2c 18 e7 89 f6 6e 4b 1c 87 53 6a be
805)             3f ed 36 92 f3 13 14 b1 fd 74 b4 91 23 35 6a 28
806)             00 00 00 80
807)             6d 03 51 3d c5 44 b8 60 eb 11 c7 fe c6 0e 6d 80
808)             07 a3 3d 70 4f 5e bf c9 b2 cf 82 86 4e b8 92 6d
809)             e6 8a b3 18 8c 05 b2 59 8b 55 72 04 fe ee 13 98
810)             c6 d6 11 8a 7f 0b c8 c2 ea 29 19 aa 6b 44 39 52
811)             bb c3 7c 28 60 2e 1b ec 1b d6 12 6f f3 29 c3 9a
812)             a6 f0 f8 87 49 a7 f0 86 46 b3 fe d7 b7 fb c8 4a
813)             a2 0a a8 7b bb 1d fa d0 85 d3 a2 29 26 be 64 ef
814)             40 02 88 db 51 1a ab 2c 34 5f 04 96 b9 75 79 f6
815)             00 00 00 15 00 c9 1d f7 a7
816)             8f 81 09 f5 69 1e 86 97 49 6a d3 c1 96 a0 96 d2
817)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
818)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
819) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

820)         public_key=rb"""ssh-dss AAAAB3NzaC1kc3MAAACBALsoBleoEY1UsFA+twxgCg1bngGEPxoiF7sENZjMlyxoy3vZUpKSC5nz5dHudFrQL9mwGL64mnR2nHL1kxM5Zfi7lg8x5BxcR0YTFkh+KYapI4CzLp8KV3Yh8lklkTFwKaF71KyOx3dhIA8lGW45cVBz3kxmhHmEzCUgMPxDOsTtAAAAFQD32c5k6B3tocxUahelQQFyfseiywAAAIAuvYCDeHEzesp3HNVTDx9fRVU9c77f4qvyEZ7Qpz/s3BVoFUvUZDx96cG5bKekBRsfTCjeHXCQH/yFfqn5Lxye7msgGVS5U3AvD9shiiEr3wt+pNgr9X6DooP7ybfjC8SJdmarLBjnifZuSxyHU2q+P+02kvMTFLH9dLSRIzVqKAAAAIBtA1E9xUS4YOsRx/7GDm2AB6M9cE9ev8myz4KGTriSbeaKsxiMBbJZi1VyBP7uE5jG1hGKfwvIwuopGaprRDlSu8N8KGAuG+wb1hJv8ynDmqbw+IdJp/CGRrP+17f7yEqiCqh7ux360IXToikmvmTvQAKI21Eaqyw0XwSWuXV59g== test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 months ago

821) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

822)         public_key_data=bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

823)             00 00 00 07 73 73 68 2d 64 73 73
824)             00 00 00 81 00
825)             bb 28 06 57 a8 11 8d 54 b0 50 3e b7 0c 60 0a 0d
826)             5b 9e 01 84 3f 1a 22 17 bb 04 35 98 cc 97 2c 68
827)             cb 7b d9 52 92 92 0b 99 f3 e5 d1 ee 74 5a d0 2f
828)             d9 b0 18 be b8 9a 74 76 9c 72 f5 93 13 39 65 f8
829)             bb 96 0f 31 e4 1c 5c 47 46 13 16 48 7e 29 86 a9
830)             23 80 b3 2e 9f 0a 57 76 21 f2 59 25 91 31 70 29
831)             a1 7b d4 ac 8e c7 77 61 20 0f 25 19 6e 39 71 50
832)             73 de 4c 66 84 79 84 cc 25 20 30 fc 43 3a c4 ed
833)             00 00 00 15 00 f7 d9 ce 64
834)             e8 1d ed a1 cc 54 6a 17 a5 41 01 72 7e c7 a2 cb
835)             00 00 00 80
836)             2e bd 80 83 78 71 33 7a ca 77 1c d5 53 0f 1f 5f
837)             45 55 3d 73 be df e2 ab f2 11 9e d0 a7 3f ec dc
838)             15 68 15 4b d4 64 3c 7d e9 c1 b9 6c a7 a4 05 1b
839)             1f 4c 28 de 1d 70 90 1f fc 85 7e a9 f9 2f 1c 9e
840)             ee 6b 20 19 54 b9 53 70 2f 0f db 21 8a 21 2b df
841)             0b 7e a4 d8 2b f5 7e 83 a2 83 fb c9 b7 e3 0b c4
842)             89 76 66 ab 2c 18 e7 89 f6 6e 4b 1c 87 53 6a be
843)             3f ed 36 92 f3 13 14 b1 fd 74 b4 91 23 35 6a 28
844)             00 00 00 80
845)             6d 03 51 3d c5 44 b8 60 eb 11 c7 fe c6 0e 6d 80
846)             07 a3 3d 70 4f 5e bf c9 b2 cf 82 86 4e b8 92 6d
847)             e6 8a b3 18 8c 05 b2 59 8b 55 72 04 fe ee 13 98
848)             c6 d6 11 8a 7f 0b c8 c2 ea 29 19 aa 6b 44 39 52
849)             bb c3 7c 28 60 2e 1b ec 1b d6 12 6f f3 29 c3 9a
850)             a6 f0 f8 87 49 a7 f0 86 46 b3 fe d7 b7 fb c8 4a
851)             a2 0a a8 7b bb 1d fa d0 85 d3 a2 29 26 be 64 ef
852)             40 02 88 db 51 1a ab 2c 34 5f 04 96 b9 75 79 f6
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

853) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

854)         expected_signature=None,
855)         derived_passphrase=None,
856)     ),
857)     'ecdsa256': SSHTestKey(
858)         private_key=rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

859) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS
860) 1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTLbU0zDwsk2Dvp+VYIrsNVf5gWwz2S
861) 3SZ8TbxiQRkpnGSVqyIoHJOJc+NQItAa7xlJ/8Z6gfz57Z3apUkaMJm6AAAAuKeY+YinmP
862) mIAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMttTTMPCyTYO+n5
863) Vgiuw1V/mBbDPZLdJnxNvGJBGSmcZJWrIigck4lz41Ai0BrvGUn/xnqB/PntndqlSRowmb
864) oAAAAhAKIl/3n0pKVIxpZkXTGtii782Qr4yIcvHdpxjO/QsIqKAAAAG3Rlc3Qga2V5IHdp
865) dGhvdXQgcGFzc3BocmFzZQECAwQ=
866) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

867) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

868)         private_key_blob=bytes.fromhex("""
Marco Ricci Add principal support for u...

Marco Ricci authored 5 months ago

869)             00 00 00 13 65 63 64
870)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 32 35 36
871)             00 00 00 08 6e 69 73 74 70 32 35 36
872)             00 00 00 41 04
873)             cb 6d 4d 33 0f 0b 24 d8 3b e9 f9 56 08 ae c3 55
874)             7f 98 16 c3 3d 92 dd 26 7c 4d bc 62 41 19 29 9c
875)             64 95 ab 22 28 1c 93 89 73 e3 50 22 d0 1a ef 19
876)             49 ff c6 7a 81 fc f9 ed 9d da a5 49 1a 30 99 ba
877)             00 00 00 21 00
878)             a2 25 ff 79 f4 a4 a5 48 c6 96 64 5d 31 ad 8a 2e
879)             fc d9 0a f8 c8 87 2f 1d da 71 8c ef d0 b0 8a 8a
880)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
881)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
882) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

883)         public_key=rb"""ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMttTTMPCyTYO+n5Vgiuw1V/mBbDPZLdJnxNvGJBGSmcZJWrIigck4lz41Ai0BrvGUn/xnqB/PntndqlSRowmbo= test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 months ago

884) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

885)         public_key_data=bytes.fromhex("""
Marco Ricci Add an ecdsa-sha2-nistp521...

Marco Ricci authored 3 months ago

886)             00 00 00 13 65 63 64
887)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 32 35 36
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

888)             00 00 00 08 6e 69 73 74 70 32 35 36
889)             00 00 00 41 04
890)             cb 6d 4d 33 0f 0b 24 d8 3b e9 f9 56 08 ae c3 55
891)             7f 98 16 c3 3d 92 dd 26 7c 4d bc 62 41 19 29 9c
892)             64 95 ab 22 28 1c 93 89 73 e3 50 22 d0 1a ef 19
893)             49 ff c6 7a 81 fc f9 ed 9d da a5 49 1a 30 99 ba
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

894) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

895)         expected_signature=None,
896)         derived_passphrase=None,
897)     ),
898)     'ecdsa384': SSHTestKey(
899)         private_key=rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

900) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAiAAAABNlY2RzYS
901) 1zaGEyLW5pc3RwMzg0AAAACG5pc3RwMzg0AAAAYQSgkOjkAvq7v5vHuj3KBL4/EAWcn5hZ
902) DyKcbyV0eBMGFq7hKXQlZqIahLVqeMR0QqmkxNJ2rly2VHcXneq3vZ+9fIsWCOdYk5WP3N
903) ZPzv911Xn7wbEkC7QndD5zKlm4pBUAAADomhj+IZoY/iEAAAATZWNkc2Etc2hhMi1uaXN0
904) cDM4NAAAAAhuaXN0cDM4NAAAAGEEoJDo5AL6u7+bx7o9ygS+PxAFnJ+YWQ8inG8ldHgTBh
905) au4Sl0JWaiGoS1anjEdEKppMTSdq5ctlR3F53qt72fvXyLFgjnWJOVj9zWT87/ddV5+8Gx
906) JAu0J3Q+cypZuKQVAAAAMQD5sTy8p+B1cn/DhOmXquui1BcxvASqzzevkBlbQoBa73y04B
907) 2OdqVOVRkwZWRROz0AAAAbdGVzdCBrZXkgd2l0aG91dCBwYXNzcGhyYXNlAQIDBA==
908) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

909) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

910)         private_key_blob=bytes.fromhex("""
Marco Ricci Add principal support for u...

Marco Ricci authored 5 months ago

911)             00 00 00 13 65 63 64
912)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 33 38 34
913)             00 00 00 08 6e 69 73 74 70 33 38 34
914)             00 00 00 61 04
915)             a0 90 e8 e4 02 fa bb bf 9b c7 ba 3d ca 04 be 3f
916)             10 05 9c 9f 98 59 0f 22 9c 6f 25 74 78 13 06 16
917)             ae e1 29 74 25 66 a2 1a 84 b5 6a 78 c4 74 42 a9
918)             a4 c4 d2 76 ae 5c b6 54 77 17 9d ea b7 bd 9f bd
919)             7c 8b 16 08 e7 58 93 95 8f dc d6 4f ce ff 75 d5
920)             79 fb c1 b1 24 0b b4 27 74 3e 73 2a 59 b8 a4 15
921)             00 00 00 31 00
922)             f9 b1 3c bc a7 e0 75 72 7f c3 84 e9 97 aa eb a2
923)             d4 17 31 bc 04 aa cf 37 af 90 19 5b 42 80 5a ef
924)             7c b4 e0 1d 8e 76 a5 4e 55 19 30 65 64 51 3b 3d
925)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
926)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
927) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

928)         public_key=rb"""ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBKCQ6OQC+ru/m8e6PcoEvj8QBZyfmFkPIpxvJXR4EwYWruEpdCVmohqEtWp4xHRCqaTE0nauXLZUdxed6re9n718ixYI51iTlY/c1k/O/3XVefvBsSQLtCd0PnMqWbikFQ== test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 months ago

929) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

930)         public_key_data=bytes.fromhex("""
Marco Ricci Add an ecdsa-sha2-nistp521...

Marco Ricci authored 3 months ago

931)             00 00 00 13 65 63 64
932)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 33 38 34
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

933)             00 00 00 08 6e 69 73 74 70 33 38 34
934)             00 00 00 61 04
935)             a0 90 e8 e4 02 fa bb bf 9b c7 ba 3d ca 04 be 3f
936)             10 05 9c 9f 98 59 0f 22 9c 6f 25 74 78 13 06 16
937)             ae e1 29 74 25 66 a2 1a 84 b5 6a 78 c4 74 42 a9
938)             a4 c4 d2 76 ae 5c b6 54 77 17 9d ea b7 bd 9f bd
939)             7c 8b 16 08 e7 58 93 95 8f dc d6 4f ce ff 75 d5
940)             79 fb c1 b1 24 0b b4 27 74 3e 73 2a 59 b8 a4 15
Marco Ricci Add an ecdsa-sha2-nistp521...

Marco Ricci authored 3 months ago

941) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

942)         expected_signature=None,
943)         derived_passphrase=None,
944)     ),
945)     'ecdsa521': SSHTestKey(
946)         private_key=rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Add an ecdsa-sha2-nistp521...

Marco Ricci authored 3 months ago

947) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAArAAAABNlY2RzYS
948) 1zaGEyLW5pc3RwNTIxAAAACG5pc3RwNTIxAAAAhQQASVOdwDznmlcGqiLvFtYeVtrAEiVz
949) iIfsL7jEM8Utu/m8WSkPFQtjwqdFw+WfZ0mi6qMbEFgi/ELzZSKVteCSbcMAhqAkOMFKiD
950) u4bxvsM6bT02Ru7q2yT41ySyGhUD0QySBnI6Ckt/wnQ1TEpj8zDKiRErxs9e6QLGElNRkz
951) LPMs+mMAAAEY2FXeh9hV3ocAAAATZWNkc2Etc2hhMi1uaXN0cDUyMQAAAAhuaXN0cDUyMQ
952) AAAIUEAElTncA855pXBqoi7xbWHlbawBIlc4iH7C+4xDPFLbv5vFkpDxULY8KnRcPln2dJ
953) ouqjGxBYIvxC82UilbXgkm3DAIagJDjBSog7uG8b7DOm09Nkbu6tsk+NckshoVA9EMkgZy
954) OgpLf8J0NUxKY/MwyokRK8bPXukCxhJTUZMyzzLPpjAAAAQSFqUmKK7lGQzxT6GKZSLDju
955) U3otwLYnuj+/5AdzuB/zotu95UdFv9I2DNXzd9E4WAyz6IqBBNcsMkxrzHAdqsYDAAAAG3
956) Rlc3Qga2V5IHdpdGhvdXQgcGFzc3BocmFzZQ==
957) -----END OPENSSH PRIVATE KEY-----
958) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

959)         private_key_blob=bytes.fromhex("""
Marco Ricci Add an ecdsa-sha2-nistp521...

Marco Ricci authored 3 months ago

960)             00 00 00 13 65 63 64
961)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 35 32 31
962)             00 00 00 08 6e 69 73 74 70 35 32 31
963)             00 00 00 85 04 00 49 53 9d
964)             c0 3c e7 9a 57 06 aa 22 ef 16 d6 1e 56 da c0 12
965)             25 73 88 87 ec 2f b8 c4 33 c5 2d bb f9 bc 59 29
966)             0f 15 0b 63 c2 a7 45 c3 e5 9f 67 49 a2 ea a3 1b
967)             10 58 22 fc 42 f3 65 22 95 b5 e0 92 6d c3 00 86
968)             a0 24 38 c1 4a 88 3b b8 6f 1b ec 33 a6 d3 d3 64
969)             6e ee ad b2 4f 8d 72 4b 21 a1 50 3d 10 c9 20 67
970)             23 a0 a4 b7 fc 27 43 54 c4 a6 3f 33 0c a8 91 12
971)             bc 6c f5 ee 90 2c 61 25 35 19 33 2c f3 2c fa 63
972)             00 00 00 41 21
973)             6a 52 62 8a ee 51 90 cf 14 fa 18 a6 52 2c 38 ee
974)             53 7a 2d c0 b6 27 ba 3f bf e4 07 73 b8 1f f3 a2
975)             db bd e5 47 45 bf d2 36 0c d5 f3 77 d1 38 58 0c
976)             b3 e8 8a 81 04 d7 2c 32 4c 6b cc 70 1d aa c6 03
977)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
978)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
979) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

980)         public_key=rb"""ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBABJU53APOeaVwaqIu8W1h5W2sASJXOIh+wvuMQzxS27+bxZKQ8VC2PCp0XD5Z9nSaLqoxsQWCL8QvNlIpW14JJtwwCGoCQ4wUqIO7hvG+wzptPTZG7urbJPjXJLIaFQPRDJIGcjoKS3/CdDVMSmPzMMqJESvGz17pAsYSU1GTMs8yz6Yw== test key without passphrase
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 months ago

981) """,
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

982)         public_key_data=bytes.fromhex("""
Marco Ricci Add an ecdsa-sha2-nistp521...

Marco Ricci authored 3 months ago

983)             00 00 00 13 65 63 64
984)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 32 35 36
985)             00 00 00 08 6e 69 73 74 70 35 32 31
986)             00 00 00 85 04 00 49 53 9d
987)             c0 3c e7 9a 57 06 aa 22 ef 16 d6 1e 56 da c0 12
988)             25 73 88 87 ec 2f b8 c4 33 c5 2d bb f9 bc 59 29
989)             0f 15 0b 63 c2 a7 45 c3 e5 9f 67 49 a2 ea a3 1b
990)             10 58 22 fc 42 f3 65 22 95 b5 e0 92 6d c3 00 86
991)             a0 24 38 c1 4a 88 3b b8 6f 1b ec 33 a6 d3 d3 64
992)             6e ee ad b2 4f 8d 72 4b 21 a1 50 3d 10 c9 20 67
993)             23 a0 a4 b7 fc 27 43 54 c4 a6 3f 33 0c a8 91 12
994)             bc 6c f5 ee 90 2c 61 25 35 19 33 2c f3 2c fa 63
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

995) """),
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

996)         expected_signature=None,
997)         derived_passphrase=None,
998)     ),
999) }
1000) SUPPORTED_KEYS: Mapping[str, SSHTestKey] = {
1001)     k: v for k, v in ALL_KEYS.items() if v.is_suitable()
1002) }
1003) UNSUITABLE_KEYS: Mapping[str, SSHTestKey] = {
1004)     k: v for k, v in ALL_KEYS.items() if not v.is_suitable()
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1005) }
1006) 
1007) DUMMY_SERVICE = 'service1'
Marco Ricci Clean up testing machinery...

Marco Ricci authored 6 months ago

1008) DUMMY_PASSPHRASE = 'my secret passphrase'
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

1009) DUMMY_KEY1 = SUPPORTED_KEYS['ed25519'].public_key_data
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1010) DUMMY_KEY1_B64 = base64.standard_b64encode(DUMMY_KEY1).decode('ASCII')
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

1011) DUMMY_KEY2 = SUPPORTED_KEYS['rsa'].public_key_data
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1012) DUMMY_KEY2_B64 = base64.standard_b64encode(DUMMY_KEY2).decode('ASCII')
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

1013) DUMMY_KEY3 = SUPPORTED_KEYS['ed448'].public_key_data
Marco Ricci Avoid crashing when overrid...

Marco Ricci authored 7 months ago

1014) DUMMY_KEY3_B64 = base64.standard_b64encode(DUMMY_KEY3).decode('ASCII')
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

1015) DUMMY_CONFIG_SETTINGS = {
1016)     'length': 10,
1017)     'upper': 1,
1018)     'lower': 1,
1019)     'repeat': 5,
1020)     'number': 1,
1021)     'space': 1,
1022)     'dash': 1,
1023)     'symbol': 1,
1024) }
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1025) DUMMY_RESULT_PASSPHRASE = b'.2V_QJkd o'
1026) DUMMY_RESULT_KEY1 = b'E<b<{ -7iG'
1027) DUMMY_PHRASE_FROM_KEY1_RAW = (
1028)     b'\x00\x00\x00\x0bssh-ed25519'
1029)     b'\x00\x00\x00@\xf0\x98\x19\x80l\x1a\x97\xd5&\x03n'
1030)     b'\xcc\xe3e\x8f\x86f\x07\x13\x19\x13\t!33\xf9\xe46S'
1031)     b'\x1d\xaf\xfd\r\x08\x1f\xec\xf8s\x9b\x8c_U9\x16|ST,'
1032)     b'\x1eR\xbb0\xed\x7f\x89\xe2/iQU\xd8\x9e\xa6\x02'
1033) )
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 months ago

1034) DUMMY_PHRASE_FROM_KEY1 = b'8JgZgGwal9UmA27M42WPhmYHExkTCSEzM/nkNlMdr/0NCB/s+HObjF9VORZ8U1QsHlK7MO1/ieIvaVFV2J6mAg=='
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1035) 
Marco Ricci Move exporter command-line...

Marco Ricci authored 6 months ago

1036) VAULT_MASTER_KEY = 'vault key'
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 months ago

1037) VAULT_V02_CONFIG = 'P7xeh5y4jmjpJ2pFq4KUcTVoaE9ZOEkwWmpVTURSSWQxbGt6emN4aFE4eFM3anVPbDRNTGpOLzY3eDF5aE1YTm5LNWh5Q1BwWTMwM3M5S083MWRWRFlmOXNqSFJNcStGMWFOS3c2emhiOUNNenZYTmNNMnZxaUErdlRoOGF2ZHdGT1ZLNTNLOVJQcU9jWmJrR3g5N09VcVBRZ0ZnSFNUQy9HdFVWWnFteVhRVkY3MHNBdnF2ZWFEbFBseWRGelE1c3BFTnVUckRQdWJSL29wNjFxd2Y2ZVpob3VyVzRod3FKTElTenJ1WTZacTJFOFBtK3BnVzh0QWVxcWtyWFdXOXYyenNQeFNZbWt1MDU2Vm1kVGtISWIxWTBpcWRFbyswUVJudVVhZkVlNVpGWDA4WUQ2Q2JTWW81SnlhQ2Zxa3cxNmZoQjJES0Uyd29rNXpSck5iWVBrVmEwOXFya1NpMi9saU5LL3F0M3N3MjZKekNCem9ER2svWkZ0SUJLdmlHRno0VlQzQ3pqZTBWcTM3YmRiNmJjTkhqUHZoQ0NxMW1ldW1XOFVVK3pQMEtUMkRMVGNvNHFlOG40ck5KcGhsYXg1b1VzZ1NYU1B2T3RXdEkwYzg4NWE3YWUzOWI1MDI0MThhMWZjODQ3MDA2OTJmNDQ0MDkxNGFiNmRlMGQ2YjZiNjI5NGMwN2IwMmI4MGZi'
Marco Ricci Move exporter command-line...

Marco Ricci authored 6 months ago

1038) VAULT_V02_CONFIG_DATA = {
1039)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 6 months ago

1040)         'phrase': DUMMY_PASSPHRASE.rstrip('\n'),
Marco Ricci Move exporter command-line...

Marco Ricci authored 6 months ago

1041)     },
1042)     'services': {
1043)         '(meta)': {
1044)             'notes': 'This config was originally in v0.2 format.',
1045)         },
1046)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
1047)     },
1048) }
Marco Ricci Fix formatting, some covera...

Marco Ricci authored 2 months ago

1049) VAULT_V03_CONFIG = 'sBPBrr8BFHPxSJkV/A53zk9zwDQHFxLe6UIusCVvzFQre103pcj5xxmE11lMTA0U2QTYjkhRXKkH5WegSmYpAnzReuRsYZlWWp6N4kkubf+twZ9C3EeggPm7as2Af4TICHVbX4uXpIHeQJf9y1OtqrO+SRBrgPBzgItoxsIxebxVKgyvh1CZQOSkn7BIzt9xKhDng3ubS4hQ91fB0QCumlldTbUl8tj4Xs5JbvsSlUMxRlVzZ0OgAOrSsoWELXmsp6zXFa9K6wIuZa4wQuMLQFHiA64JO1CR3I+rviWCeMlbTOuJNx6vMB5zotKJqA2hIUpN467TQ9vI4g/QTo40m5LT2EQKbIdTvBQAzcV4lOcpr5Lqt4LHED5mKvm/4YfpuuT3I3XCdWfdG5SB7ciiB4Go+xQdddy3zZMiwm1fEwIB8XjFf2cxoJdccLQ2yxf+9diedBP04EsMHrvxKDhQ7/vHl7xF2MMFTDKl3WFd23vvcjpR1JgNAKYprG/e1p/7'
Marco Ricci Move exporter command-line...

Marco Ricci authored 6 months ago

1050) VAULT_V03_CONFIG_DATA = {
1051)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 6 months ago

1052)         'phrase': DUMMY_PASSPHRASE.rstrip('\n'),
Marco Ricci Move exporter command-line...

Marco Ricci authored 6 months ago

1053)     },
1054)     'services': {
1055)         '(meta)': {
1056)             'notes': 'This config was originally in v0.3 format.',
1057)         },
1058)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
1059)     },
1060) }
1061) VAULT_STOREROOM_CONFIG_ZIPPED = b"""
1062) UEsDBBQAAAAIAJ1WGVnTVFGT0gAAAOYAAAAFAAAALmtleXMFwclSgzAAANC7n9GrBzBldcYDE5Al
1063) EKbFAvGWklBAtqYsBcd/973fw8LFox76w/vb34tzhD5OATeEAk6tJ6Fbp3WrvkJO7l0KIjtxCLfY
1064) ORm8ScEDPbNkyVwGLmZNTuQzXPMl/GnLO0I2PmUhRcxSj2Iy6PUy57up4thL6zndYwtyORpyCTGy
1065) ibbjIeq/K/9atsHkl680nwsKFVk1i97gbGhG4gC5CMS8aUx8uebuToRCDsAT61UQVp0yEjw1bhm1
1066) 6UPWzM2wyfMGMyY1ox5HH/9QSwMEFAAAAAgAnVYZWd1pX+EFAwAA1AMAAAIAAAAwMA3ON7abQAAA
1067) wP4fwy0FQUR3ZASLYEkCOnKOEtHPd7e7KefPr71YP800/vqN//3hAywvUaCcTYb6TbKS/kYcVnvG
1068) wGA5N8ksjpFNCu5BZGu953GdoVnOfN6PNXoluWOS2JzO23ELNJ2m9nDn0uDhwC39VHJT1pQdejIw
1069) CovQTEWmBH53FJufhNSZKQG5s1fMcw9hqn3NbON6wRDquOjLe/tqWkG1yiQDSF5Ail8Wd2UaA7vo
1070) 40QorG1uOBU7nPlDx/cCTDpSqwTZDkkAt6Zy9RT61NUZqHSMIgKMerj3njXOK+1q5sA/upSGvMrN
1071) 7/JpSEhcmu7GDvQJ8TyLos6vPCSmxO6RRG3X4BLpqHkTgeqHz+YDZwTV+6y5dvSmTSsCP5uPCmi+
1072) 7r9irZ1m777iL2R8NFH0QDIo1GFsy1NrUvWq4TGuvVIbkHrML5mFdR6ajNhRjL/6//1crYAMLHxo
1073) qkjGz2Wck2dmRd96mFFAfdQ1/BqDgi6X/KRwHL9VmhpdjcKJhuE04xLYgTCyKLv8TkFfseNAbN3N
1074) 7KvVW7QVF97W50pzXzy3Ea3CatNQkJ1DnkR0vc0dsHd1Zr0o1acUaAa65B2yjYXCk3TFlMo9TNce
1075) OWBXzJrpaZ4N7bscdwCF9XYesSMpxBDpwyCIVyJ8tHZVf/iS4pE6u+XgvD42yef+ujhM/AyboqPk
1076) sFNV/XoNpmWIySdkTMmwu72q1GfPqr01ze/TzCVrCe0KkFcZhe77jrLPOnRCIarF2c9MMHNfmguU
1077) A0tJ8HodQb/zehL6C9KSiNWfG+NlK1Dro1sGKhiJETLMFru272CNlwQJmzTHuKAXuUvJmQCfmLfL
1078) EPrxoE08fu+v6DKnSopnG8GTkbscPZ+K5q2kC6m7pCizKO1sLKG7fMBRnJxnel/vmpY2lFCB4ADy
1079) no+dvqBl6z3X/ji9AFXC9X8HRd+8u57OS1zV4OhiVd7hMy1U8F5qbIBms+FS6QbL9NhIb2lFN4VO
1080) 3+ITZz1sPJBl68ZgJWOV6O4F5cAHGKl/UEsDBBQAAAAIAJ1WGVn9pqLBygEAACsCAAACAAAAMDMN
1081) z8mWa0AAANB9f0ZvLZQhyDsnC0IMJShDBTuzJMZoktLn/ft79w/u7/dWvZb7OHz/Yf5+yYUBMTNK
1082) RrCI1xIQs67d6yI6bM75waX0gRLdKMGyC5O2SzBLs57V4+bqxo5xI2DraLTVeniUXLxkLyjRnC4u
1083) 24Vp+7p+ppt9DlVNNZp7rskQDOe47mbgViNeE5oXpg/oDgTcfQYNvt8V0OoyKbIiNymOW/mB3hze
1084) D1EHqTWQvFZB5ANGpLMM0U10xWYAClzuVJXKm/n/8JgVaobY38IjzxXyk4iPkQUuYtws73Kan871
1085) R3mZa7/j0pO6Wu0LuoV+czp9yZEH/SU42lCgjEsZ9Mny3tHaF09QWU4oB7HI+LBhKnFJ9c0bHEky
1086) OooHgzgTIa0y8fbpst30PEUwfUAS+lYzPXG3y+QUiy5nrJFPb0IwESd9gIIOVSfZK63wvD5ueoxj
1087) O9bn2gutSFT6GO17ibguhXtItAjPbZWfyyQqHRyeBcpT7qbzQ6H1Of5clEqVdNcetAg8ZMKoWTbq
1088) /vSSQ2lpkEqT0tEQo7zwKBzeB37AysB5hhDCPn1gUTER6d+1S4dzwO7HhDf9kG+3botig2Xm1Dz9
1089) A1BLAwQUAAAACACdVhlZs14oCcgBAAArAgAAAgAAADA5BcHJkqIwAADQe39GXz2wE5gqDxAGQRZF
1090) QZZbDIFG2YwIga7593nv93sm9N0M/fcf4d+XcUlVE+kvustz3BU7FjHOaW+u6TRsfNKzLh74mO1w
1091) IXUlM/2sGKKuY5sYrW5N+oGqit2zLBYv57mFvH/S8pWGYDGzUnU1CdTL3B4Yix+Hk8E/+m0cSi2E
1092) dnAibw1brWVXM++8iYcUg84TMbJXntFYCyrNw1NF+008I02PeH4C8oDID6fIoKvsw3p7WJJ/I9Yp
1093) a6oJzlJiP5JGxRxZPj50N6EMtzNB+tZoIGxgtOFVpiJ05yMQFztY6I6LKIgvXW/s919GIjGshqdM
1094) XVPFxaKG4p9Iux/xazf48FY8O7SMmbQC1VsXIYo+7eSpIY67VzrCoh41wXPklOWS6CV8RR/JBSqq
1095) 8lHkcz8L21lMCOrVR1Cs0ls4HLIhUkqr9YegTJ67VM7xevUsgOI7BkPDldiulRgX+sdPheCyCacu
1096) e7/b/nk0SXWF7ZBxsR1awYqwkFKz41/1bZDsETsmd8n1DHycGIvRULv3yYhKcvWQ4asAMhP1ks5k
1097) AgOcrM+JFvpYA86Ja8HCqCg8LihEI1e7+m8F71Lpavv/UEsDBBQAAAAIAJ1WGVnKO2Ji+AEAAGsC
1098) AAACAAAAMWENx7dyo0AAANDen+GWAonMzbggLsJakgGBOhBLlGBZsjz373eve7+fKyJTM/Sff85/
1099) P5QMwMFfAWipfXwvFPWU582cd3t7JVV5pBV0Y1clL4eKUd0w1m1M5JrkgW5PlfpOVedgABSe4zPY
1100) LnSIZVuen5Eua9QY8lQ7rxW7YIqeajhgLfL54BIcY90fd8ANixlcM8V23Z03U35Txba0BbSguc0f
1101) NRF83cWp+7rOYgNO9wWLs915oQmWAqAtqRYCiWlgAtxYFg0MnNS4/G80FvFmQTh0cjwcF1xEVPeW
1102) l72ky84PEA0QMgRtQW+HXWtE0/vQTtNKzvNqPfrGZCldL5nk9PWhhPEQ/azyW11bz2eB+aM0g0r7
1103) 0/5YkO9er10YonsBT1rEn0lfBXDHwtwbxG2bdqELTuEtX2+OEih7K43rN2EvpXX47azaNpe/drIz
1104) wgAdhpfZ/mZwaGFX0c7r5HCTnroNRi5Bx/vu7m1A7Nt1dix4Gl/aPLCWQzpwmdIMJDiqD1RGpc5v
1105) +pDLrpfhZOVhLjAPSQ0V7mm/XNSca8oIsDjwdvR438RQCU56mrlypklS4/tJAe0JZNZIgBmJszjG
1106) AFbsmNYTJ9GmULB9lXmTWmrME592S285iWU5SsJcE1s+3oQw9QrvWB+e3bGAd9e+VFmFqr6+/gFQ
1107) SwECHgMUAAAACACdVhlZ01RRk9IAAADmAAAABQAAAAAAAAABAAAApIEAAAAALmtleXNQSwECHgMU
1108) AAAACACdVhlZ3Wlf4QUDAADUAwAAAgAAAAAAAAABAAAApIH1AAAAMDBQSwECHgMUAAAACACdVhlZ
1109) /aaiwcoBAAArAgAAAgAAAAAAAAABAAAApIEaBAAAMDNQSwECHgMUAAAACACdVhlZs14oCcgBAAAr
1110) AgAAAgAAAAAAAAABAAAApIEEBgAAMDlQSwECHgMUAAAACACdVhlZyjtiYvgBAABrAgAAAgAAAAAA
1111) AAABAAAApIHsBwAAMWFQSwUGAAAAAAUABQDzAAAABAoAAAAA
1112) """
1113) VAULT_STOREROOM_CONFIG_DATA = {
1114)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 6 months ago

1115)         'phrase': DUMMY_PASSPHRASE.rstrip('\n'),
Marco Ricci Move exporter command-line...

Marco Ricci authored 6 months ago

1116)     },
1117)     'services': {
1118)         '(meta)': {
1119)             'notes': 'This config was originally in storeroom format.',
1120)         },
1121)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
1122)     },
1123) }
1124) 
Marco Ricci Add more tests of the store...

Marco Ricci authored 6 months ago

1125) _VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED_JAVASCRIPT_SOURCE = """
1126) // Executed in the top-level directory of the vault project code, in Node.js.
1127) const storeroom = require('storeroom')
1128) const Store = require('./lib/store.js')
Marco Ricci Add remaining tests to the...

Marco Ricci authored 5 months ago

1129) let store = new Store(storeroom.createFileAdapter('./broken-dir'), 'vault key')
Marco Ricci Add more tests of the store...

Marco Ricci authored 6 months ago

1130) await store._storeroom.put('/services/array/', ['entry1','entry2'])
1131) // The resulting "broken-dir" was then zipped manually.
1132) """
1133) VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED = b"""
1134) UEsDBBQAAgAIAHijH1kjc0ql0gAAAOYAAAAFAAAALmtleXMFwclygjAAANB7P8Mrh7LIYmd6oGxC
1135) HKwTJJgbNpBKCpGAhNTpv/e952ZpxHTjw+bN+HuJJABEikvHecD0pLgpgYKWjue0CZGk19mKF+4f
1136) 0AoLrXKh+ckk13nmxVk/KFE28eEHkBgJTISvRUVMQ0N5aRapLgWs/M7NSXV7qs0s2aIEstUG5FHv
1137) fo/HKjpdUJMGK86vs2rOJFGyrx9ZK4iWW+LefwSTYxhYOlWpb0PpgXsV4dHNTz5skcJqpPUudZf9
1138) jCFD0vxChL6ajm0P0prY+z9QSwMEFAACAAgAeKMfWX4L7vDYAQAAPwIAAAIAAAAwNQXByZKiMAAA
1139) 0Ht/Rl85sIR1qvqAouxbJAG8kWYxgCKICEzNv897f7+XanrR4fH9h//3pVdF8qmVeWjW+STwSbak
1140) 4e3CS00h2AcrQIcghm0lOcrLdJfuaOFqg5zEsW9lTbJMtIId5ezNGM9jPKaxeriXXm45pGuHCwFP
1141) /gmcXKWGeU3sHfj93iIf6p0xrfQIGGJOvayKjzypUqb99Bllo9IwNP2FZjxmBWDw0NRzJrxr/4Qj
1142) qp4ted4f91ZaR8+64C0BJBzDngElJEFLdA2WBcip2R/VZIG219WT3JlkbFrYSjhHWeb47igytTpo
1143) USPjEJWVol0cVpD6iX1/mGM2BpHAFa+fLx3trXgbXaVmjyZVzUKDh/XqnovnLs529UGYCAdj8Xnx
1144) vWwfWclm5uIB8cHbElx6G82Zs8RQnkDsyGVDbNaMOO7lMQF7o1Uy7Q9GuSWcFMK4KBAbcwm4l8RY
1145) +2ema46H3/S31IW1LOFpoZxjwyBS69dWS7/ulVxJfbuydMvZMeWpmerjUHnKaQdumibSeSOXh+zg
1146) XU6w6SsKAjHWXCTjRehWmyNnI7z3+epr1RzUlnDcUMiYQ/seaNefgNx4jIbOw92FC2hxnZOJupK9
1147) M1WVdH3+8x9QSwMEFAACAAgAeKMfWUXRU2i7AQAAFwIAAAIAAAAxYQ3QyZZjUAAA0H19Rm2zCGLs
1148) c2rxzDMxBTtTEA8hnqlO/3v3/YT7+71W86cdh+8/+N8vUMGNNAjWlNHgsyBlwCpgBd/a2rrW0qwg
1149) p/CmvT4PTpwjHztJ2T10Jc2Fc8O7eHQb9MawAbxSKscxFAjz5wnJviaOMT5kEIZS+ibU6GgqU61P
1150) lbeYRIiNCfK1VeHMFCpUhZ1ipnh50kux5N2jph5aMvc+HOR3lQgx9MJpMzQ2oNxSfEm7wZ5s0GYb
1151) Bgy2xwaEMXNRnbzlbijZJi0M7yXNKS7nS1uFMtsapEc204YOBbOY4VK6L/9jS2ez56ybGkQPfn6+
1152) QCwTqvkR5ieuRhF0zcoPLld+OUlI0RfEPnYHKEG7gtSya/Z1Hh77Xq4ytJHdr7WmXt7BUFA8Sffm
1153) obXI31UOyVNLW0y4WMKDWq+atKGbU5BDUayoITMqvCteAZfJvnR4kZftMaFEG5ln7ptpdzpl10m3
1154) G2rgUwTjPBJKomnOtJpdwm1tXm6IMPQ6IPy7oMDC5JjrmxAPXwdPnY/i07Go6EKSYjbkj8vdj/BR
1155) rAMe2wnzdJaRhKv8kPVG1VqNdzm6xLb/Cf8AUEsDBBQAAgAIAHijH1kaCPeauQEAABcCAAACAAAA
1156) MWUFwTmyokAAAND8H+OnBAKyTpVBs8iOIG2zZM0OigJCg07N3ee9v7+kmt/d6/n7h/n3AyJEvoaD
1157) gtd8f4RxATnaHVeGNjyuolVVL+mY8Tms5ldfgYseNYMzRYJj3+i3iUgqlT5D1r7j1Bh5qVzi14X0
1158) jpuH7DBKeeot2jWI5mPubptvV567pX2U3OC6ccxWmyo2Dd3ehUkbPP4uiDgWDZzFg/fFETIawMng
1159) ahWHB2cfc2bM2kugNhWLS4peUBp36UWqMpF6+sLeUxAVZ24u08MDNMpNk81VDgiftnfBTBBhBGm0
1160) RNpzxMMOPnCx3RRFgttiJTydfkB9MeZ9pvxP9jUm/fndQfJI83CsBxcEWhbjzlEparc3VS2s4LjR
1161) 3Xafw3HLSlPqylHOWK2vc2ZJoObwqrCaFRg7kz1+z08SGu8pe0EHaII6FSxL7VM+rfVgpc1045Ut
1162) 6ayCQ0TwRL5m4oMYkZbFnivCBTY3Cdji2SQ+gh8m3A6YkFxXUH0Vz9Is8JZaLFyi24GjyZZ9rGuk
1163) Y6w53oLyTF/fSzG24ghCDZ6pOgB5qyfk4z2mUmH7pwxNCoHZ1oaxeTSn039QSwECHgMUAAIACAB4
1164) ox9ZI3NKpdIAAADmAAAABQAAAAAAAAABAAAApIEAAAAALmtleXNQSwECHgMUAAIACAB4ox9Zfgvu
1165) 8NgBAAA/AgAAAgAAAAAAAAABAAAApIH1AAAAMDVQSwECHgMUAAIACAB4ox9ZRdFTaLsBAAAXAgAA
1166) AgAAAAAAAAABAAAApIHtAgAAMWFQSwECHgMUAAIACAB4ox9ZGgj3mrkBAAAXAgAAAgAAAAAAAAAB
1167) AAAApIHIBAAAMWVQSwUGAAAAAAQABADDAAAAoQYAAAAA
1168) """
1169) 
Marco Ricci Add remaining tests to the...

Marco Ricci authored 5 months ago

1170) _VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED2_JAVASCRIPT_SOURCE = """
1171) // Executed in the top-level directory of the vault project code, in Node.js.
1172) const storeroom = require('storeroom')
1173) const Store = require('./lib/store.js')
1174) let store = new Store(storeroom.createFileAdapter('./broken-dir'), 'vault key')
1175) await store._storeroom.put('/services/array/', 'not a directory index')
1176) // The resulting "broken-dir" was then zipped manually.
1177) """
1178) VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED2 = b"""
1179) UEsDBAoAAAAAAM6NSVmrcHdV5gAAAOYAAAAFAAAALmtleXN7InZlcnNpb24iOjF9CkV3ZS9LZkJp
1180) L0V0OUcrZmxYM3gxaFU4ZjE4YlE3S253bHoxN0IxSDE3cUhVOGdWK2RpWWY5MTdFZ0YrSStidEpZ
1181) VXBzWVZVck45OC9uLzdsZnl2NUdGVEg2NWZxVy93YjlOc2MxeEZ4ck43Q3p4eTZ5MVAxZzFPb2VK
1182) b0RZU3J6YXlwT0E2M3pidmk0ZTRiREMyNXhPTXl5NHBoMDFGeGdnQmpSNnpUcmR2UDk2UlZQd0I5
1183) WitOZkZWZUlXT1NQN254ZFNYMGdFbkZ4SDBmWDkzNTFaTTZnPVBLAwQKAAAAAADOjUlZJg3/BhcC
1184) AAAXAgAAAgAAADBieyJ2ZXJzaW9uIjoxfQpBVXJJMjNDQ2VpcW14cUZRMlV4SUpBaUoxNEtyUzh2
1185) SXpIa2xROURBaFRlVHNFMmxPVUg4WUhTcUk1cXRGSHBqY3c1WkRkZmRtUlEwQXVGRjllY3lkam14
1186) dDdUemRYLzNmNFUvTGlVV2dLRmQ1K1FEN3BlVlE1bWpqeHNlUEpHTDlhTWlKaGxSUVB4SmtUbjBx
1187) U2poM1RUT0ZZbVAzV0JkdlUyWnF2RzhaSDk2cU1WcnZsQ0dMRmZTc2svVXlvcHZKdENONUVXcTRZ
1188) SDUwNFNiejFIUVhWd2RjejlrS1BuR3J6SVA4ZmZtZnhXQ0U0TmtLb0ZPQXZuNkZvS3FZdGlGbFE9
1189) PQpBVXBMUVMrMG9VeEZTeCtxbTB3SUtyM1MvTVJxYWJJTFlEUnY0aHlBMVE2TGR2Nlk0UmJ0enVz
1190) NzRBc0cxbVhhenlRU2hlZVowdk0xM2ZyTFA4YlV0VHBaRyszNXF1eUhLM2NaWVJRZUxKM0JzejZz
1191) b0xaQjNZTkpNenFxTTQrdzM1U0FZZ2lMU1NkN05NeWVrTHNhRUIzRDFOajlTRk85K3NGNEpFMWVL
1192) UXpNMkltNk9qOUNVQjZUSTV3UitibksxN1BnY2RaeTZUMVRMWElVREVxcDg4dWdsWmRFTVcrNU9k
1193) aE5ZbXEzZERWVWV4UnJpM1AwUmVBSi9KMGdJNkNoUUE9PVBLAwQKAAAAAADOjUlZTNfdphcCAAAX
1194) AgAAAgAAADBmeyJ2ZXJzaW9uIjoxfQpBWVJqOVpIUktGUEVKOHM2YVY2TkRoTk5jQlZ5cGVYUmdz
1195) cnBldFQ0cGhJRGROWFdGYzRia0daYkJxMngwRDFkcVNjYWk5UzEveDZ2K28zRE0rVEF2OVE3ZFVR
1196) QWVKR3RmRkhJZDZxWW0ybEdNSnF5WTRNWm14aE9YdXliend0V3Q4Mnhvb041QTZNcWpINmxKQllD
1197) UUN3ZEJjb3RER0EwRnlnVTEzeHV2WnIzT1puZnFFRGRqbzMxNkw5aExDN1RxMTYwUHpBOXJOSDMz
1198) ZkNBcUhIVXZiYlFQQWErekw1d3dEN3FlWkY2MHdJaEwvRmk5L3JhNGJDcHZRNC9ORWpRd3c9PQpB
1199) WWNGUDB1Y2xMMHh3ZDM2UXZXbm4wWXFsOU5WV0s3c05CMTdjdmM3N3VDZ0J2OE9XYkR5UHk5d05h
1200) R2NQQzdzcVdZdHpZRlBHR0taVjhVUzA1YTVsV1BabDNGVFNuQXNtekxPelBlcFZxaitleDU3aEsx
1201) QnV1bHkrUCtYQkE0YUtsaDM3c0RJL3I0UE1BVlJuMDNoSDJ5dEhDMW9PbjF0V1M5Q1NLV1pSMThh
1202) djdTT0RBMVBNRnFYTmZKZVNTaVJiQ2htbDdOcFVLbjlXSGJZandybDlqN0JSdy9kWjhNQldCb3Ns
1203) Nlc1dGZtdnJMVHhGRFBXYUgzSUp0T0czMEI1M3c9PVBLAwQKAAAAAADOjUlZn9rNID8CAAA/AgAA
1204) AgAAADFkeyJ2ZXJzaW9uIjoxfQpBYWFBb3lqaGljVDZ4eXh1c0U0RVlDZCtxbE81Z0dEYTBNSFVS
1205) MmgrSW9QMHV4UkY3b1BRS2czOHlQUEN3Ny9MYVJLQ0dQZ0RyZ2RpTWJTeUwzZ3ZNMFhseVpVMVBW
1206) QVJvNEFETU9lbXgrOWhtS0hjQWNKMG5EeW5oSkhGYTYyb2xyQUNxekZzblhKNVBSeEVTVzVEbUh0
1207) Ui9nRm5Wa1FvalhyVW4ybmpYMjVVanZQaXhlMU96Y0daMmQ0MjdVTGdnY1hqMkhSdjJiZldDNDUw
1208) SGFXS3FDckZlYWlrQ2xkUUM2WGV3SkxZUjdvQUY3UjVha2ttK3M2MXNCRTVCaTg0QmJLWHluc1NG
1209) ejE0TXFrd2JMK1VMYVk9CkFUT3dqTUFpa3Q4My9NTW5KRXQ2b3EyNFN4KzJKNDc2K2gyTmEzbHUr
1210) MDg0cjlBT25aaUk0TmlYV0N1Q0lzakEzcTBwUHFJS1VXZHlPQW9uM2VHY0huZUppWUtVYllBaUJI
1211) MVNmbnhQQkMzZkFMRklybkQ4Y0VqeGpPcUFUaTQ5dE1mRmtib0dNQ3dEdFY0V3NJL0tLUlRCOFd1
1212) MnNXK2J0V3QzVWlvZG9ZeUVLTDk3ekNNemZqdGptejF4SDhHTXY5WDVnaG9NSW5RQVNvYlRreVZ4
1213) dWo5YnlDazdNbU0vK21ZL3AwZE9oYVY0Nncwcm04UGlvWEtzdzR4bXB3ditDWC9PRXV3Uy9meDJT
1214) Y0lOQnNuYVRiWT1QSwECHgMKAAAAAADOjUlZq3B3VeYAAADmAAAABQAAAAAAAAAAAAAApIEAAAAA
1215) LmtleXNQSwECHgMKAAAAAADOjUlZJg3/BhcCAAAXAgAAAgAAAAAAAAAAAAAApIEJAQAAMGJQSwEC
1216) HgMKAAAAAADOjUlZTNfdphcCAAAXAgAAAgAAAAAAAAAAAAAApIFAAwAAMGZQSwECHgMKAAAAAADO
1217) jUlZn9rNID8CAAA/AgAAAgAAAAAAAAAAAAAApIF3BQAAMWRQSwUGAAAAAAQABADDAAAA1gcAAAAA
1218) """
1219) 
1220) _VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED3_JAVASCRIPT_SOURCE = """
1221) // Executed in the top-level directory of the vault project code, in Node.js.
1222) const storeroom = require('storeroom')
1223) const Store = require('./lib/store.js')
1224) let store = new Store(storeroom.createFileAdapter('./broken-dir'), 'vault key')
1225) await store._storeroom.put('/services/array/', [null, 1, true, [], {}])
1226) // The resulting "broken-dir" was then zipped manually.
1227) """
1228) VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED3 = b"""
1229) UEsDBAoAAAAAAEOPSVnVlcff5gAAAOYAAAAFAAAALmtleXN7InZlcnNpb24iOjF9CkV4dVBHUDBi
1230) YkxrUVdvWnV5ZUJQRy8xdmM2MCt6MThOa3BsS09ydFAvUTVnQmxkYVpIOG10dTE5VWZFNGdGRGRj
1231) eHJtWUd4eXZDZFNqcVlOaDh4cTlzM3VydkdRTWFwcnhtdlZGZUxoSW4zZnVlTDAweEk0ZmlLenZN
1232) MmthUlRsNWNORGh3eUNlWVk4dzhBcXNhYjNyVWVsOEE0eVQ0cHU2d2tmQ3dTWUdqeG5HR29EcWJK
1233) VnVJVWNpZVBEcU9PTzU2b0MyMG9lT01adFVkTUtxV28zYnFZPVBLAwQKAAAAAABDj0lZ77OVHxcC
1234) AAAXAgAAAgAAADBjeyJ2ZXJzaW9uIjoxfQpBZllFQVVobEkyU2lZeGlrdWh0RzRNbUN3L1V2THBN
1235) VVhwVlB0NlRwdzRyNGdocVJhbGZWZ0hxUHFtbTczSnltdFFrNnZnR2JRdUpiQmVlYjYwOHNrMGk4
1236) ZFJVZjNwdlc2SnUyejljQkdwOG5mTFpTdlNad1lLN09UK2gzSDNDcmoxbXNicEZUcHVldW81NXc1
1237) dGdYMnBuWXNWTVcrczdjaHEyMUIya2lIVEZrdGt1MXlaRzhPYkVUQjNCOFNGODVVbi9CUjFEMHJ1
1238) ME9zOWl4ZWM2VmNTMitTZndtNnNtSlk2ZW9ZNTJzOGJNRGdYMndjQ0srREdkOEo2VWp0NG5OQVE9
1239) PQpBUWlPRnRZcmJybWUycEwxRFpGT1BjU0RHOUN2cVkvbHhTWGIwaVJUdmtIWFc2bEtHL0p4RUtU
1240) d3RTc0RTeDhsMTUvaHRmbWpOQ2tuTzhLVEFoKzhRQm5FbjZ0a2x5Y3BmeEIrTUxLRjFCM1Q1bjcv
1241) T0VUMExMdmgxU2k1bnRRNXhTUHZZNWtXeUMyZjhXUXFZb3FSNU5JVENMeDV6dWNsQ3dGb2kvVXc4
1242) OWNNWjM1MHBSbThzUktJbjJFeDUrQ1JwS3ZHdnBHbFJaTmk5VHZmVkNic1FCalR3MC9aeklTdzVQ
1243) NW9BVWE2U1ExUVFnNHg4VUNkY0s2QUNLaFluY0d4TVE9PVBLAwQKAAAAAABDj0lZGk9LVj8CAAA/
1244) AgAAAgAAADE0eyJ2ZXJzaW9uIjoxfQpBY1g2NVpMUWk4ck9pUlIyWGEwQlFHQVhQVWF2aHNJVGVY
1245) c2dzRk9OUmFTRzJCQlg0SGxJRHpwRUd5aDUrZ2czZVRwWDFNOERua3pMeTVzcWRkMFpmK3padTgz
1246) Qm52Y1JPREVIVDllUW91YUtPTWltdlRYanNuSXAxUHo5VGY1TlRkRjNJVTd2V1lhUDg4WTI5NG1i
1247) c1VVL2RKVTZqZ3ZDbUw2cE1VZ28xUU12bGJnaVp3cDV1RDFQZXlrSXdKVWdJSEgxTEpnYi9xU2tW
1248) c25leW1XY1RXR0NobzRvZGx3S2hJWmFCelhvNFhlN2U1V2I2VHA3Rkk5VUpVcmZIRTAvcVdrZUZE
1249) VmxlazY3cUx3ZFZXcU9DdFk9CkFhSGR0QjhydmQ0U3N4ZmJ5eU1OOHIzZEoxeHA5NmFIRTQvalNi
1250) Z05hZWttaDkyb2ROM1F4MUlqYXZsYVkxeEt1eFF3KzlwTHFIcTF5a1JSRjQzL2RVWGFIRk5UU0NX
1251) OVFsdmd3KzMwa1ZhSEdXRllvbFRnRWE4djQ3b3VrbGlmc01PZGM0YVNKb2R4ZUFJcVc3Q1cwdDVR
1252) b2RUbWREUXpqc3phZkQ4R2VOd2NFQjdGMHI2RzNoZEJlQndxd3Z6eENVYnpSUmU5bEQ3NjQ3RFp1
1253) bEo1U3c4amlvV0paTW40NlZhV3BYUXk4UnNva3hHaW00WUpybUZIQ2JkVU9qSWJsUmQ1Z3VhUDNU
1254) M0NxeHRPdC94b1BhOD1QSwMECgAAAAAAQ49JWVJM8QYXAgAAFwIAAAIAAAAxNnsidmVyc2lvbiI6
1255) MX0KQVlCWDF6M21qUlQrand4M2FyNkFpemxnalJZbUM0ZHg5NkxVQVBTVHNMWXJKVHFtWnd5N0Jy
1256) OFlCcElVamorMHdlT3lNaUtLVnFwaER3RXExNWFqUmlSZUVEQURTVHZwWmlLZUlnZjR5elUzZXNP
1257) eDJ2U2J1bXhTK0swUGZVa2tsSy9TRmRiU3EvUHFMRjBDRTVCMXNyKzJLYTB2WlJmak94R3VFeFRD
1258) RXozN0ZlWDNNR3NCNkhZVHEzaUJWcUR6NVB6eHpCWWM5Kyt6RitLS1RnMVp2NGRtRmVQTC9JSEY5
1259) WnV6TWlqRXdCRkE3WnJ0dkRqd3ZYcWtsMVpsR0c4eUV3PT0KQVhUWkRLVnNleldpR1RMUVZqa2hX
1260) bXBnK05MYlM0M2MxZEpvK2xGcC9yWUJYZkw3Wll5cGdjWE5IWXNzd01nc2VSSTAzNmt6bGZkdGNa
1261) bTdiUUN6M2JuQmZ6ZlorZFFuT2Y5STVSU2l0QzB2UmsydkQrOFdwbmRPSzNucGY5S0VpWklOSzVq
1262) TEZGTTJDTkNmQzBabXNRUlF3T0k2N3l5ZHhjVnFDMXBnWHV6QXRXamlsSUpnN0p6eUtsY3BJUGJu
1263) SUc0UzRSUlhIdW1wZnpoeWFZWkd6T0FDamRSYTZIMWJxYkJkZXFaSHMvQXJvM25mVjdlbjhxSUE5
1264) aVUrbnNweXFnPT1QSwECHgMKAAAAAABDj0lZ1ZXH3+YAAADmAAAABQAAAAAAAAAAAAAApIEAAAAA
1265) LmtleXNQSwECHgMKAAAAAABDj0lZ77OVHxcCAAAXAgAAAgAAAAAAAAAAAAAApIEJAQAAMGNQSwEC
1266) HgMKAAAAAABDj0lZGk9LVj8CAAA/AgAAAgAAAAAAAAAAAAAApIFAAwAAMTRQSwECHgMKAAAAAABD
1267) j0lZUkzxBhcCAAAXAgAAAgAAAAAAAAAAAAAApIGfBQAAMTZQSwUGAAAAAAQABADDAAAA1gcAAAAA
1268) """
1269) 
1270) _VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED4_JAVASCRIPT_SOURCE = """
1271) // Executed in the top-level directory of the vault project code, in Node.js.
1272) const storeroom = require('storeroom')
1273) const Store = require('./lib/store.js')
1274) let store = new Store(storeroom.createFileAdapter('./broken-dir'), 'vault key')
1275) await store._storeroom.put('/dir/subdir/', [])
1276) await store._storeroom.put('/dir/', [])
1277) // The resulting "broken-dir" was then zipped manually.
1278) """
1279) VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED4 = b"""
1280) UEsDBAoAAAAAAE+5SVloORS+5gAAAOYAAAAFAAAALmtleXN7InZlcnNpb24iOjF9CkV6dWRoNkRQ
1281) YTlNSWFabHZ5TytVYTFuamhjV2hIaTFBU0lKYW5zcXBxVlA0blN2V0twUzdZOUc2bjFSbi8vUnVM
1282) VitwcHp5SC9RQk83R0hFenNVMzdCUzFwUmVVeGhxUVlVTE56OXZvQ0crM1ZaL3VncU44dDJiU05m
1283) Nyt5K3hiNng2aVlFUmNZYTJ0UkhzZVdIc0laTE9ha2lDb0lRVGV3cndwYjVMM2pnd0E3SXBzaDkz
1284) QkxHSzM5dXNYNmo0R0I2WkRUeW5JcGk4V3JkbDhnWVZCN0tVPVBLAwQKAAAAAABPuUlZ663uUhcC
1285) AAAXAgAAAgAAADAzeyJ2ZXJzaW9uIjoxfQpBV2wzS2gzd21ZSFVZZU1RR3BLSVowdVd1VXFna09h
1286) YmRjNzNYYXVsZTNtVS9sN2Zvd1AyS21jbFp3ZDM5V3lYVzRTcEw4R0l4YStDZW51S3V0Wm5nb0FR
1287) bWlnaUJUbkFaais5TENCcGNIWlZNY2RBVkgxKzBFNGpsanZ1UkVwZ0tPS05LZjRsTUl1QnZ4VmFB
1288) ZkdwNHJYNEZ4MmpPSlk1Y3NQZzBBRFBoZVAwN29GWVQ3alorSUNEK1AxNGZPdWpwMGRUeDRrTDIy
1289) LzlqalRDNXBCNVF5NW5iOUx3Zk5DUWViSUVpaTZpbU0vRmFrK1dtV05tMndqMERSTEc4RHY3ZkE9
1290) PQpBU0c3NTNGTVVwWmxjK3E1YXRzcC93OUNqN2JPOFlpY24wZHg2UGloTmwzUS9WSjVVeGJmU3l0
1291) ZDFDNDBRU2xXeTJqOTJDWUd3VER6eEdBMXVnb0FCYi9kTllTelVwbHJFb3BuUVphYXdsdTVwV2x0
1292) Y1E5WTcveWN4S2E4b0JaaGY3RkFYcGo2c01wUW9zNzI5VFVabFd4UmI4VFRtN2FrVnR1OXcvYXlK
1293) RS9reDh4ZUYxSGJlc3Q4N1IxTGg2ODd3dS9XVUN2ZjNXYXo1VjNnZWY0RnpUTXg0bkpqSlZOd0U0
1294) SzAxUTlaVzQ0bmVvbExPUVI1MkZDeDZvbml3RW9tenc9PVBLAwQKAAAAAABPuUlZRXky4CsCAAAr
1295) AgAAAgAAADEweyJ2ZXJzaW9uIjoxfQpBWmlYWVlvNUdCY2d5dkFRaGtyK2ZjUkdVSkdabDd2dE5w
1296) T2Mrd1VzbXJhQWhRN3dKdlYraGhKcTlrcWNKQnBWU0gyUTBTTVVhb29iNjBJM1NYNUNtTkJRU2FH
1297) M3prd0Y0T2F4TnpCZUh0NFlpaDd4Y3p2ak4xR0hISDJQYW0xam05K09ja3JLVmNMVURtNXRKb2ZC
1298) Z1E4Q2NwMGZMVkdEaURjNWF0MjVMc2piQVcvNkZFSnJ5VVBHWis4UVdYRmlWMGdtVVZybVc3VUFy
1299) dGhJQitWNTdZS1BORi95Nng2OU43UTFQbmp1cUczdlpybzljMEJ3d012NWoyc3BMMTJHcTdzTDZE
1300) alB1d0dHbnB2MkVZQTFLbmc9CkFTdjQwUkgzRmxzbGVlU1NjRlZNRmh3dEx6eEYxK2xpcmxEL29X
1301) alJLQ05qVWZhUVpJTWpqMWRoVkhOakNUTWhWZ1ZONkl3b04xTnFOMEV6cmdhaTFBWnNiMm9UczYw
1302) QkI1UGh0U0hhQ2U2WllUeE1JemFPS2FIK0w2eHhtaXIrTlQxNTRXS0x5amJMams3MU1na3Nwa0Yy
1303) WDBJMnlaWW5IUUM0bmdEL24yZzRtSVI2Q1hWL0JOUXNzeTBEeXdGLzN6eGRRYWw5cFBtVk1qYnFu
1304) cHY5SFNqRTg4S25naVpBWFhJWU1OVGF2L3Q3Y3dEWGdNekhKTlU0Y2xnVUtIQVZ3QT09UEsDBAoA
1305) AAAAAE+5SVkPfKx9FwIAABcCAAACAAAAMWR7InZlcnNpb24iOjF9CkFYbHNLRzQwZG5ibTJvcXdY
1306) U2ZrSWp3Mmxpa0lDS3hVOXU3TU52VkZ1NEJ2R1FVVitSVVdsS3MxL25TSlBtM2U2OTRvVHdoeDFo
1307) RFF3U0M5U0QvbXd5bnpjSTloUnRCUWVXMkVMOVU5L1ZGcHFsVWY3Z1ZOMHZ0ZWpXYnV4QnhsZlRD
1308) Tys4SFBwU2Zaa2VOUld5R2JNdzBFSU9LTmxRYjk3OUF0c1g3THR0NytaTkJnakZHYkZxaHdwa3kx
1309) WUNDVng1UmNZZ2tma2ZjWnVncGpzc1RzNVFvK1p3QXBEcDZ4V3JjSHMxUDhvNktBRzAwcjZZbkNM
1310) N2ErU1dwZmVNTUJhZz09CkFadVF0cFZMWmVvb292NkdyQlpnb3B6VmRGUXBlK1h6QXZuZ2dPVnZM
1311) VWtCYVF2akl5K1VLdXVUVlFoQ1JiMVp6dGZQL2dsNnoxOEsyZW5sQlo2bGJTZnoxTlBWeUVzYXB3
1312) dDVpUVh4azd5UkJlZks1cFlsNTduUXlmcFZQbzlreFpnOVdHTkV3NVJ5MkExemhnNGl6TWxLRmJh
1313) UjZFZ0FjQ3NFOXAveGRLa29ZNjhOUlZmNXJDM3lMQjc3ZWgyS1hCUld2WDNZcE9XdW00OGtsbmtI
1314) akJjMFpiQmUrT3NZb3d5cXpoRFA2ZGQxRlFnMlFjK09vc3B4V0sycld4M01HZz09UEsBAh4DCgAA
1315) AAAAT7lJWWg5FL7mAAAA5gAAAAUAAAAAAAAAAAAAAKSBAAAAAC5rZXlzUEsBAh4DCgAAAAAAT7lJ
1316) Weut7lIXAgAAFwIAAAIAAAAAAAAAAAAAAKSBCQEAADAzUEsBAh4DCgAAAAAAT7lJWUV5MuArAgAA
1317) KwIAAAIAAAAAAAAAAAAAAKSBQAMAADEwUEsBAh4DCgAAAAAAT7lJWQ98rH0XAgAAFwIAAAIAAAAA
1318) AAAAAAAAAKSBiwUAADFkUEsFBgAAAAAEAAQAwwAAAMIHAAAAAA==
1319) """
1320) 
Marco Ricci Move exporter command-line...

Marco Ricci authored 6 months ago

1321) CANNOT_LOAD_CRYPTOGRAPHY = (
Marco Ricci Replace strings in `derivep...

Marco Ricci authored 2 months ago

1322)     "Cannot load the required Python module 'cryptography'."
Marco Ricci Move exporter command-line...

Marco Ricci authored 6 months ago

1323) )
1324) 
Marco Ricci Test exporter data loading...

Marco Ricci authored 6 months ago

1325) skip_if_cryptography_support = pytest.mark.skipif(
1326)     importlib.util.find_spec('cryptography') is not None,
1327)     reason='cryptography support available; cannot test "no support" scenario',
1328) )
1329) skip_if_no_cryptography_support = pytest.mark.skipif(
1330)     importlib.util.find_spec('cryptography') is None,
1331)     reason='no "cryptography" support',
1332) )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

1333) 
Marco Ricci Actually correctly implemen...

Marco Ricci authored 3 months ago

1334) 
1335) def hypothesis_settings_coverage_compatible(
1336)     f: Any = None,
1337) ) -> Any:
1338)     settings = (
1339)         hypothesis.settings(
1340)             # Running under coverage with the Python tracer increases
1341)             # running times 40-fold, on my machines.  Sadly, not every
1342)             # Python version offers the C tracer, so sometimes the Python
1343)             # tracer is used anyway.
1344)             deadline=(
1345)                 40 * deadline
1346)                 if (deadline := hypothesis.settings().deadline) is not None
1347)                 else None
1348)             ),
1349)             stateful_step_count=32,
1350)             suppress_health_check=(hypothesis.HealthCheck.too_slow,),
1351)         )
1352)         if sys.gettrace() is not None
Marco Ricci Fix hypothesis settings for...

Marco Ricci authored 2 months ago

1353)         else hypothesis.settings(
1354)             stateful_step_count=32,
1355)             suppress_health_check=(hypothesis.HealthCheck.too_slow,),
1356)         )
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 5 months ago

1357)     )
Marco Ricci Actually correctly implemen...

Marco Ricci authored 3 months ago

1358)     return settings if f is None else settings(f)
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 5 months ago

1359) 
Marco Ricci Actually correctly implemen...

Marco Ricci authored 3 months ago

1360) 
1361) def hypothesis_settings_coverage_compatible_with_caplog(
1362)     f: Any = None,
1363) ) -> Any:
1364)     parent_settings = hypothesis_settings_coverage_compatible()
1365)     settings = hypothesis.settings(
1366)         parent=parent_settings,
1367)         suppress_health_check={
1368)             hypothesis.HealthCheck.function_scoped_fixture,
1369)         }
1370)         | set(parent_settings.suppress_health_check),
1371)     )
1372)     return settings if f is None else settings(f)
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 3 months ago

1373) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1374) 
Marco Ricci Move storeroom helper types...

Marco Ricci authored 2 months ago

1375) def list_keys(self: Any = None) -> list[_types.SSHKeyCommentPair]:
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 7 months ago

1376)     del self  # Unused.
Marco Ricci Move storeroom helper types...

Marco Ricci authored 2 months ago

1377)     Pair = _types.SSHKeyCommentPair  # noqa: N806
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

1378)     return [
1379)         Pair(value.public_key_data, f'{key} test key'.encode('ASCII'))
1380)         for key, value in ALL_KEYS.items()
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

1381)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1382) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

1383) 
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

1384) def sign(
1385)     self: Any, key: bytes | bytearray, message: bytes | bytearray
1386) ) -> bytes:
1387)     del self  # Unused.
1388)     assert message == vault.Vault._UUID
1389)     for value in SUPPORTED_KEYS.values():
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

1390)         if value.public_key_data == key:  # pragma: no branch
1391)             assert value.expected_signature is not None
1392)             return value.expected_signature
Marco Ricci Align behavior with vault c...

Marco Ricci authored 5 months ago

1393)     raise AssertionError
1394) 
1395) 
Marco Ricci Move storeroom helper types...

Marco Ricci authored 2 months ago

1396) def list_keys_singleton(self: Any = None) -> list[_types.SSHKeyCommentPair]:
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 7 months ago

1397)     del self  # Unused.
Marco Ricci Move storeroom helper types...

Marco Ricci authored 2 months ago

1398)     Pair = _types.SSHKeyCommentPair  # noqa: N806
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

1399)     list1 = [
Marco Ricci Convert `tests.SSHTestKey`...

Marco Ricci authored 2 months ago

1400)         Pair(value.public_key_data, f'{key} test key'.encode('ASCII'))
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

1401)         for key, value in SUPPORTED_KEYS.items()
1402)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1403)     return list1[:1]
1404) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

1405) 
Marco Ricci Move storeroom helper types...

Marco Ricci authored 2 months ago

1406) def suitable_ssh_keys(conn: Any) -> Iterator[_types.SSHKeyCommentPair]:
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 7 months ago

1407)     del conn  # Unused.
Marco Ricci Move storeroom helper types...

Marco Ricci authored 2 months ago

1408)     Pair = _types.SSHKeyCommentPair  # noqa: N806
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1409)     yield from [
Marco Ricci Move `sequin` and `ssh_agen...

Marco Ricci authored 7 months ago

1410)         Pair(DUMMY_KEY1, b'no comment'),
1411)         Pair(DUMMY_KEY2, b'a comment'),
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1412)     ]
1413) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

1414) 
Marco Ricci Fix user interface errors i...

Marco Ricci authored 3 months ago

1415) def phrase_from_key(
1416)     key: bytes,
1417)     /,
1418)     *,
1419)     conn: ssh_agent.SSHAgentClient | socket.socket | None = None,
1420) ) -> bytes:
1421)     del conn
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1422)     if key == DUMMY_KEY1:  # pragma: no branch
1423)         return DUMMY_PHRASE_FROM_KEY1
1424)     raise KeyError(key)  # pragma: no cover
1425) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

1426) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1427) @contextlib.contextmanager
1428) def isolated_config(
Marco Ricci Clean up testing machinery...

Marco Ricci authored 6 months ago

1429)     monkeypatch: pytest.MonkeyPatch,
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

1430)     runner: click.testing.CliRunner,
Marco Ricci Introduce a central user co...

Marco Ricci authored 2 months ago

1431)     main_config_str: str | None = None,
Marco Ricci Fix typing issues in mypy s...

Marco Ricci authored 7 months ago

1432) ) -> Iterator[None]:
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 7 months ago

1433)     prog_name = cli.PROG_NAME
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1434)     env_name = prog_name.replace(' ', '_').upper() + '_PATH'
Marco Ricci Refactor code to run under...

Marco Ricci authored 3 months ago

1435)     # Use parenthesized context manager expressions once Python 3.9
1436)     # becomes unsupported.
1437)     with contextlib.ExitStack() as stack:
1438)         stack.enter_context(runner.isolated_filesystem())
1439)         stack.enter_context(cli.StandardCLILogging.ensure_standard_logging())
1440)         stack.enter_context(
1441)             cli.StandardCLILogging.ensure_standard_warnings_logging()
1442)         )
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1443)         monkeypatch.setenv('HOME', os.getcwd())
1444)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1445)         monkeypatch.delenv(env_name, raising=False)
Marco Ricci Rename the configuration fi...

Marco Ricci authored 6 months ago

1446)         config_dir = cli._config_filename(subsystem=None)
1447)         os.makedirs(config_dir, exist_ok=True)
Marco Ricci Introduce a central user co...

Marco Ricci authored 2 months ago

1448)         if isinstance(main_config_str, str):
1449)             with open(
1450)                 cli._config_filename('user configuration'),
1451)                 'w',
1452)                 encoding='UTF-8',
1453)             ) as outfile:
1454)                 outfile.write(main_config_str)
Marco Ricci Modularize test helpers to...

Marco Ricci authored 6 months ago

1455)         yield
1456) 
1457) 
1458) @contextlib.contextmanager
1459) def isolated_vault_config(
1460)     monkeypatch: pytest.MonkeyPatch,
1461)     runner: click.testing.CliRunner,
Marco Ricci Introduce a central user co...

Marco Ricci authored 2 months ago

1462)     vault_config: Any,
1463)     main_config_str: str | None = None,
Marco Ricci Modularize test helpers to...

Marco Ricci authored 6 months ago

1464) ) -> Iterator[None]:
Marco Ricci Introduce a central user co...

Marco Ricci authored 2 months ago

1465)     with isolated_config(
1466)         monkeypatch=monkeypatch, runner=runner, main_config_str=main_config_str
1467)     ):
Marco Ricci Rename the configuration fi...

Marco Ricci authored 6 months ago

1468)         config_filename = cli._config_filename(subsystem='vault')
1469)         with open(config_filename, 'w', encoding='UTF-8') as outfile:
Marco Ricci Introduce a central user co...

Marco Ricci authored 2 months ago

1470)             json.dump(vault_config, outfile)
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1471)         yield
1472) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 7 months ago

1473) 
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 6 months ago

1474) @contextlib.contextmanager
1475) def isolated_vault_exporter_config(
1476)     monkeypatch: pytest.MonkeyPatch,
1477)     runner: click.testing.CliRunner,
1478)     vault_config: str | bytes | None = None,
1479)     vault_key: str | None = None,
1480) ) -> Iterator[None]:
1481)     if TYPE_CHECKING:
Marco Ricci Fix usage of `mypy --python...

Marco Ricci authored 2 months ago

1482)         chdir: Callable[..., AbstractContextManager]
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 6 months ago

1483)     else:
1484)         try:
Marco Ricci Fix usage of `mypy --python...

Marco Ricci authored 2 months ago

1485)             chdir = contextlib.chdir  # type: ignore[attr]
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 6 months ago

1486)         except AttributeError:
1487) 
1488)             @contextlib.contextmanager
Marco Ricci Move exporter command-line...

Marco Ricci authored 6 months ago

1489)             def chdir(newpath: str) -> Iterator[None]:  # pragma: no branch
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 6 months ago

1490)                 oldpath = os.getcwd()
1491)                 os.chdir(newpath)
1492)                 yield
1493)                 os.chdir(oldpath)
1494) 
1495)     with runner.isolated_filesystem():
1496)         monkeypatch.setenv('HOME', os.getcwd())
1497)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1498)         monkeypatch.delenv('VAULT_PATH', raising=False)
1499)         monkeypatch.delenv('VAULT_KEY', raising=False)
1500)         monkeypatch.delenv('LOGNAME', raising=False)
1501)         monkeypatch.delenv('USER', raising=False)
1502)         monkeypatch.delenv('USERNAME', raising=False)
1503)         if vault_key is not None:
1504)             monkeypatch.setenv('VAULT_KEY', vault_key)
Marco Ricci Add support for Python 3.9

Marco Ricci authored 5 months ago

1505)         # Use match/case here once Python 3.9 becomes unsupported.
1506)         if isinstance(vault_config, str):
1507)             with open('.vault', 'w', encoding='UTF-8') as outfile:
1508)                 print(vault_config, file=outfile)
1509)         elif isinstance(vault_config, bytes):
1510)             os.makedirs('.vault', mode=0o700, exist_ok=True)
Marco Ricci Refactor code to run under...

Marco Ricci authored 3 months ago

1511)             # Use parenthesized context manager expressions here once
1512)             # Python 3.9 becomes unsupported.
1513)             with contextlib.ExitStack() as stack:
1514)                 stack.enter_context(chdir('.vault'))
1515)                 tmpzipfile = stack.enter_context(
1516)                     tempfile.NamedTemporaryFile(suffix='.zip')
1517)                 )
Marco Ricci Add support for Python 3.9

Marco Ricci authored 5 months ago

1518)                 for line in vault_config.splitlines():
1519)                     tmpzipfile.write(base64.standard_b64decode(line))
1520)                 tmpzipfile.flush()
1521)                 tmpzipfile.seek(0, 0)
1522)                 with zipfile.ZipFile(tmpzipfile.file) as zipfileobj:
1523)                     zipfileobj.extractall()
1524)         elif vault_config is None:
1525)             pass
1526)         else:  # pragma: no cover
1527)             assert_never(vault_config)
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 6 months ago

1528)         yield
1529) 
1530) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 8 months ago

1531) def auto_prompt(*args: Any, **kwargs: Any) -> str:
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 7 months ago

1532)     del args, kwargs  # Unused.
Marco Ricci Clean up testing machinery...

Marco Ricci authored 6 months ago

1533)     return DUMMY_PASSPHRASE
Marco Ricci Add missing tests for rewor...

Marco Ricci authored 6 months ago

1534) 
1535) 
1536) def make_file_readonly(
1537)     pathname: str | bytes | os.PathLike[str],
1538)     /,
1539)     *,
1540)     try_race_free_implementation: bool = True,
1541) ) -> None:
1542)     """Mark a file as read-only.
1543) 
1544)     On POSIX, this entails removing the write permission bits for user,
1545)     group and other, and ensuring the read permission bit for user is
1546)     set.
1547) 
1548)     Unfortunately, Windows has its own rules: Set exactly(?) the read
1549)     permission bit for user to make the file read-only, and set
1550)     exactly(?) the write permission bit for user to make the file
1551)     read/write; all other permission bit settings are ignored.
1552) 
1553)     The cross-platform procedure therefore is:
1554) 
1555)     1. Call `os.stat` on the file, noting the permission bits.
1556)     2. Calculate the new permission bits POSIX-style.
1557)     3. Call `os.chmod` with permission bit `stat.S_IREAD`.
1558)     4. Call `os.chmod` with the correct POSIX-style permissions.
1559) 
1560)     If the platform supports it, we use a file descriptor instead of
1561)     a path name.  Otherwise, we use the same path name multiple times,
1562)     and are susceptible to race conditions.
1563) 
1564)     """
1565)     fname: int | str | bytes | os.PathLike[str]
1566)     if try_race_free_implementation and {os.stat, os.chmod} <= os.supports_fd:
1567)         fname = os.open(
1568)             pathname,
1569)             os.O_RDONLY
1570)             | getattr(os, 'O_CLOEXEC', 0)
1571)             | getattr(os, 'O_NOCTTY', 0),
1572)         )
1573)     else:
1574)         fname = pathname
1575)     try:
1576)         orig_mode = os.stat(fname).st_mode
1577)         new_mode = (
1578)             orig_mode & ~stat.S_IWUSR & ~stat.S_IWGRP & ~stat.S_IWOTH
1579)             | stat.S_IREAD
1580)         )
1581)         os.chmod(fname, stat.S_IREAD)
1582)         os.chmod(fname, new_mode)
1583)     finally:
1584)         if isinstance(fname, int):
1585)             os.close(fname)
Marco Ricci Clean up testing machinery...

Marco Ricci authored 6 months ago

1586) 
1587) 
1588) class ReadableResult(NamedTuple):
1589)     """Helper class for formatting and testing click.testing.Result objects."""
1590) 
1591)     exception: BaseException | None
1592)     exit_code: int
1593)     output: str
1594)     stderr: str
1595) 
1596)     @classmethod
1597)     def parse(cls, r: click.testing.Result, /) -> Self:
1598)         try:
1599)             stderr = r.stderr
1600)         except ValueError:
1601)             stderr = r.output
1602)         return cls(r.exception, r.exit_code, r.output or '', stderr or '')
1603) 
1604)     def clean_exit(
1605)         self, *, output: str = '', empty_stderr: bool = False
1606)     ) -> bool:
1607)         """Return whether the invocation exited cleanly.
1608) 
1609)         Args:
1610)             output:
1611)                 An expected output string.
1612) 
1613)         """
1614)         return (
1615)             (
1616)                 not self.exception
1617)                 or (
1618)                     isinstance(self.exception, SystemExit)
1619)                     and self.exit_code == 0
1620)                 )
1621)             )
1622)             and (not output or output in self.output)
1623)             and (not empty_stderr or not self.stderr)
1624)         )
1625) 
1626)     def error_exit(
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 3 months ago

1627)         self,
1628)         *,
1629)         error: str | re.Pattern[str] | type[BaseException] = BaseException,
1630)         record_tuples: Sequence[tuple[str, int, str]] = (),
Marco Ricci Clean up testing machinery...

Marco Ricci authored 6 months ago

1631)     ) -> bool:
1632)         """Return whether the invocation exited uncleanly.
1633) 
1634)         Args:
1635)             error:
1636)                 An expected error message, or an expected numeric error
1637)                 code, or an expected exception type.
1638) 
1639)         """
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 3 months ago

1640) 
1641)         def error_match(error: str | re.Pattern[str], line: str) -> bool:
1642)             return (
1643)                 error in line
1644)                 if isinstance(error, str)
1645)                 else error.match(line) is not None
1646)             )
1647) 
Marco Ricci Add support for Python 3.9

Marco Ricci authored 5 months ago

1648)         # Use match/case here once Python 3.9 becomes unsupported.
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 3 months ago

1649)         if isinstance(error, type):
1650)             return isinstance(self.exception, error)
1651)         else:  # noqa: RET505
1652)             assert isinstance(error, (str, re.Pattern))
Marco Ricci Add support for Python 3.9

Marco Ricci authored 5 months ago

1653)             return (
1654)                 isinstance(self.exception, SystemExit)
1655)                 and self.exit_code > 0
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 3 months ago

1656)                 and (
1657)                     not error
1658)                     or any(
1659)                         error_match(error, line)
1660)                         for line in self.stderr.splitlines(True)
1661)                     )
1662)                     or error_emitted(error, record_tuples)
1663)                 )
Marco Ricci Add support for Python 3.9

Marco Ricci authored 5 months ago

1664)             )
Marco Ricci Add test fixture for manual...

Marco Ricci authored 5 months ago

1665) 
1666) 
1667) def parse_sh_export_line(line: str, *, env_name: str) -> str:
1668)     line = line.rstrip('\r\n')
1669)     shlex_parser = shlex.shlex(
1670)         instream=line, posix=True, punctuation_chars=True
1671)     )
1672)     shlex_parser.whitespace = ' \t'
1673)     tokens = list(shlex_parser)
1674)     orig_tokens = tokens.copy()
1675)     if tokens[-1] == ';':
1676)         tokens.pop()
1677)     if tokens[-3:] == [';', 'export', env_name]:
1678)         tokens[-3:] = []
1679)         tokens[:0] = ['export']
1680)     if not (
1681)         len(tokens) == 2
1682)         and tokens[0] == 'export'
1683)         and tokens[1].startswith(f'{env_name}=')
1684)     ):
1685)         msg = f'Cannot parse sh line: {orig_tokens!r} -> {tokens!r}'
1686)         raise ValueError(msg)
1687)     return tokens[1].split('=', 1)[1]
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 3 months ago

1688) 
1689) 
1690) def message_emitted_factory(
1691)     level: int,
1692)     *,
1693)     logger_name: str = cli.PROG_NAME,
1694) ) -> Callable[[str | re.Pattern[str], Sequence[tuple[str, int, str]]], bool]:
1695)     """Return a function to test if a matching message was emitted.
1696) 
1697)     Args:
1698)         level: The level to match messages at.
1699)         logger_name: The name of the logger to match against.
1700) 
1701)     """
1702) 
1703)     def message_emitted(
1704)         text: str | re.Pattern[str],
1705)         record_tuples: Sequence[tuple[str, int, str]],
1706)     ) -> bool:
1707)         """Return true if a matching message was emitted.
1708) 
1709)         Args:
1710)             text: Substring or pattern to match against.
1711)             record_tuples: Items to match.
1712) 
1713)         """
1714) 
1715)         def check_record(record: tuple[str, int, str]) -> bool:
1716)             if record[:2] != (logger_name, level):
1717)                 return False
1718)             if isinstance(text, str):
1719)                 return text in record[2]
1720)             return text.match(record[2]) is not None  # pragma: no cover
1721) 
1722)         return any(map(check_record, record_tuples))
1723) 
1724)     return message_emitted
1725) 
1726) 
1727) # No need to assert debug messages as of yet.
1728) info_emitted = message_emitted_factory(logging.INFO)
1729) warning_emitted = message_emitted_factory(logging.WARNING)
1730) deprecation_warning_emitted = message_emitted_factory(
1731)     logging.WARNING, logger_name=f'{cli.PROG_NAME}.deprecation'
1732) )
Marco Ricci Fix usage of `--debug`, `--...

Marco Ricci authored 3 months ago

1733) deprecation_info_emitted = message_emitted_factory(
1734)     logging.INFO, logger_name=f'{cli.PROG_NAME}.deprecation'
1735) )