33b76f6b4d547cc056753aa3b73294683b68946e
Marco Ricci Change the author e-mail ad...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 7 months ago

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

Marco Ricci authored 5 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 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

12) import json
13) import os
Marco Ricci Add test fixture for manual...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

17) import tempfile
18) import zipfile
Marco Ricci Support Python 3.10 and PyP...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 5 months ago

27) 
28) __all__ = ()
29) 
30) if TYPE_CHECKING:
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

31)     from collections.abc import Iterator, Mapping
32) 
33)     import click.testing
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

34)     from typing_extensions import Any, NotRequired, TypedDict
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

36)     class SSHTestKey(TypedDict):
37)         private_key: bytes
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

38)         private_key_blob: NotRequired[bytes]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

39)         public_key: bytes | str
40)         public_key_data: bytes
41)         expected_signature: bytes | None
42)         derived_passphrase: bytes | str | None
43) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

45) class ValidationSettings(NamedTuple):
46)     allow_unknown_settings: bool
47)     allow_derivepassphrase_extensions: bool
48) 
49) 
50) class VaultTestConfig(NamedTuple):
51)     config: Any
52)     comment: str
53)     validation_settings: ValidationSettings | None
54) 
55) 
56) TEST_CONFIGS: list[VaultTestConfig] = [
57)     VaultTestConfig(None, 'not a dict', None),
58)     VaultTestConfig({}, 'missing required keys', None),
59)     VaultTestConfig(
60)         {'global': None, 'services': {}}, 'bad config value: global', None
61)     ),
62)     VaultTestConfig(
63)         {'global': {'key': 123}, 'services': {}},
64)         'bad config value: global.key',
65)         None,
66)     ),
67)     VaultTestConfig(
68)         {'global': {'phrase': 'abc', 'key': '...'}, 'services': {}},
69)         '',
70)         None,
71)     ),
72)     VaultTestConfig({'services': None}, 'bad config value: services', None),
73)     VaultTestConfig(
74)         {'services': {'1': {}, 2: {}}}, 'bad config value: services."2"', None
75)     ),
76)     VaultTestConfig(
77)         {'services': {'1': {}, '2': 2}}, 'bad config value: services."2"', None
78)     ),
79)     VaultTestConfig(
80)         {'services': {'sv': {'notes': ['sentinel', 'list']}}},
81)         'bad config value: services.sv.notes',
82)         None,
83)     ),
84)     VaultTestConfig(
85)         {'services': {'sv': {'notes': 'blah blah blah'}}}, '', None
86)     ),
87)     VaultTestConfig(
88)         {'services': {'sv': {'length': '200'}}},
89)         'bad config value: services.sv.length',
90)         None,
91)     ),
92)     VaultTestConfig(
93)         {'services': {'sv': {'length': 0.5}}},
94)         'bad config value: services.sv.length',
95)         None,
96)     ),
97)     VaultTestConfig(
98)         {'services': {'sv': {'length': ['sentinel', 'list']}}},
99)         'bad config value: services.sv.length',
100)         None,
101)     ),
102)     VaultTestConfig(
103)         {'services': {'sv': {'length': -10}}},
104)         'bad config value: services.sv.length',
105)         None,
106)     ),
107)     VaultTestConfig(
108)         {'services': {'sv': {'lower': '10'}}},
109)         'bad config value: services.sv.lower',
110)         None,
111)     ),
112)     VaultTestConfig(
113)         {'services': {'sv': {'upper': -10}}},
114)         'bad config value: services.sv.upper',
115)         None,
116)     ),
117)     VaultTestConfig(
118)         {'services': {'sv': {'number': ['sentinel', 'list']}}},
119)         'bad config value: services.sv.number',
120)         None,
121)     ),
122)     VaultTestConfig(
123)         {
124)             'global': {'phrase': 'my secret phrase'},
125)             'services': {'sv': {'length': 10}},
126)         },
127)         '',
128)         None,
129)     ),
130)     VaultTestConfig(
131)         {'services': {'sv': {'length': 10, 'phrase': '...'}}}, '', None
132)     ),
133)     VaultTestConfig(
134)         {'services': {'sv': {'length': 10, 'key': '...'}}}, '', None
135)     ),
136)     VaultTestConfig(
137)         {'services': {'sv': {'upper': 10, 'key': '...'}}}, '', None
138)     ),
139)     VaultTestConfig(
140)         {'services': {'sv': {'phrase': 'abc', 'key': '...'}}}, '', None
141)     ),
142)     VaultTestConfig(
143)         {
144)             'global': {'phrase': 'abc'},
145)             'services': {'sv': {'phrase': 'abc', 'length': 10}},
146)         },
147)         '',
148)         None,
149)     ),
150)     VaultTestConfig(
151)         {
152)             'global': {'key': '...'},
153)             'services': {'sv': {'phrase': 'abc', 'length': 10}},
154)         },
155)         '',
156)         None,
157)     ),
158)     VaultTestConfig(
159)         {
160)             'global': {'key': '...'},
161)             'services': {
162)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
163)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
164)             },
165)         },
166)         '',
167)         None,
168)     ),
169)     VaultTestConfig(
170)         {
171)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
172)             'services': {
173)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
174)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
175)             },
176)         },
177)         '',
178)         None,
179)     ),
180)     VaultTestConfig(
181)         {
182)             'global': {'key': '...', 'unicode_normalization_form': True},
183)             'services': {},
184)         },
185)         'bad config value: global.unicode_normalization_form',
186)         None,
187)     ),
188)     VaultTestConfig(
189)         {
190)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
191)             'services': {
192)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
193)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
194)             },
195)         },
196)         '',
197)         ValidationSettings(False, True),
198)     ),
199)     VaultTestConfig(
200)         {
201)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
202)             'services': {
203)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
204)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
205)             },
206)         },
207)         'extension key: .global.unicode_normalization_form',
208)         ValidationSettings(False, False),
209)     ),
210)     VaultTestConfig(
211)         {
212)             'global': {'key': '...', 'unknown_key': True},
213)             'services': {
214)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
215)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
216)             },
217)         },
218)         '',
219)         ValidationSettings(True, False),
220)     ),
221)     VaultTestConfig(
222)         {
223)             'global': {'key': '...', 'unknown_key': True},
224)             'services': {
225)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
226)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
227)             },
228)         },
229)         'unknown key: .global.unknown_key',
230)         ValidationSettings(False, False),
231)     ),
232)     VaultTestConfig(
233)         {
234)             'global': {'key': '...'},
235)             'services': {
236)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
237)                 'sv2': {
238)                     'length': 10,
239)                     'repeat': 1,
240)                     'lower': 1,
241)                     'unknown_key': True,
242)                 },
243)             },
244)         },
245)         'unknown_key: .services.sv2.unknown_key',
246)         ValidationSettings(False, False),
247)     ),
248)     VaultTestConfig(
249)         {
250)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
251)             'services': {
252)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
253)                 'sv2': {
254)                     'length': 10,
255)                     'repeat': 1,
256)                     'lower': 1,
257)                     'unknown_key': True,
258)                 },
259)             },
260)         },
261)         '',
262)         ValidationSettings(True, True),
263)     ),
264)     VaultTestConfig(
265)         {
266)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
267)             'services': {
268)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
269)                 'sv2': {
270)                     'length': 10,
271)                     'repeat': 1,
272)                     'lower': 1,
273)                     'unknown_key': True,
274)                 },
275)             },
276)         },
277)         (
278)             'extension key (permitted): .global.unicode_normalization_form; '
279)             'unknown key: .services.sv2.unknown_key'
280)         ),
281)         ValidationSettings(False, True),
282)     ),
283)     VaultTestConfig(
284)         {
285)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
286)             'services': {
287)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
288)                 'sv2': {
289)                     'length': 10,
290)                     'repeat': 1,
291)                     'lower': 1,
292)                     'unknown_key': True,
293)                 },
294)             },
295)         },
296)         (
297)             'unknown key (permitted): .services.sv2.unknown_key; '
298)             'extension key: .global.unicode_normalization_form'
299)         ),
300)         ValidationSettings(True, False),
301)     ),
302) ]
303) 
304) 
305) def is_valid_test_config(conf: VaultTestConfig, /) -> bool:
306)     """Return true if the test config is valid.
307) 
308)     Args:
309)         conf: The test config to check.
310) 
311)     """
312)     return not conf.comment and conf.validation_settings in {
313)         None,
314)         (True, True),
315)     }
316) 
317) 
318) def _test_config_ids(val: VaultTestConfig) -> Any:  # pragma: no cover
319)     """pytest id function for VaultTestConfig objects."""
320)     assert isinstance(val, VaultTestConfig)
321)     return val[1] or (val[0], val[1], val[2])
322) 
323) 
Marco Ricci Move vault service config g...

Marco Ricci authored 2 months ago

324) @strategies.composite
325) def vault_full_service_config(draw: strategies.DrawFn) -> dict[str, int]:
326)     lower = draw(strategies.integers(min_value=0, max_value=10))
327)     upper = draw(strategies.integers(min_value=0, max_value=10))
328)     number = draw(strategies.integers(min_value=0, max_value=10))
329)     space = draw(strategies.integers(min_value=0, max_value=10))
330)     dash = draw(strategies.integers(min_value=0, max_value=10))
331)     symbol = draw(strategies.integers(min_value=0, max_value=10))
332)     repeat = draw(strategies.integers(min_value=0, max_value=10))
333)     length = draw(
334)         strategies.integers(
335)             min_value=max(1, lower + upper + number + space + dash + symbol),
336)             max_value=70,
337)         )
338)     )
339)     hypothesis.assume(lower + upper + number + dash + symbol > 0)
340)     hypothesis.assume(lower + upper + number + space + symbol > 0)
341)     hypothesis.assume(repeat >= space)
342)     return {
343)         'lower': lower,
344)         'upper': upper,
345)         'number': number,
346)         'space': space,
347)         'dash': dash,
348)         'symbol': symbol,
349)         'repeat': repeat,
350)         'length': length,
351)     }
352) 
353) 
Marco Ricci Align behavior with vault c...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

445) class KnownSSHAgent(str, enum.Enum):
446)     UNKNOWN: str = '(unknown)'
447)     Pageant: str = 'Pageant'
448)     OpenSSHAgent: str = 'OpenSSHAgent'
449) 
450) 
451) class SpawnedSSHAgentInfo(NamedTuple):
452)     agent_type: KnownSSHAgent
453)     client: ssh_agent.SSHAgentClient
454)     isolated: bool
455) 
456) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

457) SUPPORTED_KEYS: Mapping[str, SSHTestKey] = {
458)     'ed25519': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

459)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

460) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
461) QyNTUxOQAAACCBeIFoJtYCSF8P/zJIb+TBMIncHGpFBgnpCQ/7whJpdgAAAKDweO7H8Hju
462) xwAAAAtzc2gtZWQyNTUxOQAAACCBeIFoJtYCSF8P/zJIb+TBMIncHGpFBgnpCQ/7whJpdg
463) AAAEAbM/A869nkWZbe2tp3Dm/L6gitvmpH/aRZt8sBII3ExYF4gWgm1gJIXw//Mkhv5MEw
464) idwcakUGCekJD/vCEml2AAAAG3Rlc3Qga2V5IHdpdGhvdXQgcGFzc3BocmFzZQEC
465) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

466) """,
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

467)         'private_key_blob': bytes.fromhex("""
468)             00 00 00 0b 73 73 68 2d 65 64 32 35 35 31 39
469)             00 00 00 20
470)             81 78 81 68 26 d6 02 48 5f 0f ff 32 48 6f e4 c1
471)             30 89 dc 1c 6a 45 06 09 e9 09 0f fb c2 12 69 76
472)             00 00 00 40
473)             1b 33 f0 3c eb d9 e4 59 96 de da da 77 0e 6f cb
474)             ea 08 ad be 6a 47 fd a4 59 b7 cb 01 20 8d c4 c5
475)             81 78 81 68 26 d6 02 48 5f 0f ff 32 48 6f e4 c1
476)             30 89 dc 1c 6a 45 06 09 e9 09 0f fb c2 12 69 76
477)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69 74
478)             68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
479) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

480)         'public_key': rb"""ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIF4gWgm1gJIXw//Mkhv5MEwidwcakUGCekJD/vCEml2 test key without passphrase
481) """,  # noqa: E501
482)         'public_key_data': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

483)             00 00 00 0b 73 73 68 2d 65 64 32 35 35 31 39
484)             00 00 00 20
485)             81 78 81 68 26 d6 02 48 5f 0f ff 32 48 6f e4 c1
486)             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 5 months ago

487) """),
488)         'expected_signature': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

489)             00 00 00 0b 73 73 68 2d 65 64 32 35 35 31 39
490)             00 00 00 40
491)             f0 98 19 80 6c 1a 97 d5 26 03 6e cc e3 65 8f 86
492)             66 07 13 19 13 09 21 33 33 f9 e4 36 53 1d af fd
493)             0d 08 1f ec f8 73 9b 8c 5f 55 39 16 7c 53 54 2c
494)             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 5 months ago

495)         """),
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

496)         'derived_passphrase': rb'8JgZgGwal9UmA27M42WPhmYHExkTCSEzM/nkNlMdr/0NCB/s+HObjF9VORZ8U1QsHlK7MO1/ieIvaVFV2J6mAg==',  # noqa: E501
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

497)     },
498)     # Currently only supported by PuTTY (which is deficient in other
499)     # niceties of the SSH agent and the agent's client).
500)     'ed448': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

501)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

502) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAASgAAAAlz
503) c2gtZWQ0NDgAAAA54vZy009Wu8wExjvEb3hqtLz1GO/+d5vmGUbErWQ4AUO9mYLT
504) zHJHc2m4s+yWzP29Cc3EcxizLG8AAAAA8BdhfCcXYXwnAAAACXNzaC1lZDQ0OAAA
505) ADni9nLTT1a7zATGO8RveGq0vPUY7/53m+YZRsStZDgBQ72ZgtPMckdzabiz7JbM
506) /b0JzcRzGLMsbwAAAAByM7GIMRvWJB3YD6SIpAF2uudX4ozZe0X917wPwiBrs373
507) 9TM1n94Nib6hrxGNmCk2iBQDe2KALPgA4vZy009Wu8wExjvEb3hqtLz1GO/+d5vm
508) GUbErWQ4AUO9mYLTzHJHc2m4s+yWzP29Cc3EcxizLG8AAAAAG3Rlc3Qga2V5IHdp
509) dGhvdXQgcGFzc3BocmFzZQECAwQFBgcICQ==
510) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

511) """,
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

512)         'private_key_blob': bytes.fromhex("""
513)             00 00 00 09 73 73 68 2d 65 64 34 34 38
514)             00 00 00 39 e2 f6 72 d3 4f 56 bb cc 04
515)             c6 3b c4 6f 78 6a b4 bc f5 18 ef fe 77 9b e6 19
516)             46 c4 ad 64 38 01 43 bd 99 82 d3 cc 72 47 73 69
517)             b8 b3 ec 96 cc fd bd 09 cd c4 73 18 b3 2c 6f 00
518)             00 00 00 72 33 b1
519)             88 31 1b d6 24 1d d8 0f a4 88 a4 01 76 ba e7 57
520)             e2 8c d9 7b 45 fd d7 bc 0f c2 20 6b b3 7e f7 f5
521)             33 35 9f de 0d 89 be a1 af 11 8d 98 29 36 88 14
522)             03 7b 62 80 2c f8 00 e2 f6 72 d3 4f 56 bb cc 04
523)             c6 3b c4 6f 78 6a b4 bc f5 18 ef fe 77 9b e6 19
524)             46 c4 ad 64 38 01 43 bd 99 82 d3 cc 72 47 73 69
525)             b8 b3 ec 96 cc fd bd 09 cd c4 73 18 b3 2c 6f 00
526)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
527)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
528) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

529)         'public_key': rb"""ssh-ed448 AAAACXNzaC1lZDQ0OAAAADni9nLTT1a7zATGO8RveGq0vPUY7/53m+YZRsStZDgBQ72ZgtPMckdzabiz7JbM/b0JzcRzGLMsbwA= test key without passphrase
530) """,  # noqa: E501
531)         'public_key_data': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

533)             00 00 00 39 e2 f6 72 d3 4f 56 bb cc 04
534)             c6 3b c4 6f 78 6a b4 bc f5 18 ef fe 77 9b e6 19
535)             46 c4 ad 64 38 01 43 bd 99 82 d3 cc 72 47 73 69
536)             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 5 months ago

537)         """),
538)         'expected_signature': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

539)             00 00 00 09 73 73 68 2d 65 64 34 34 38
540)             00 00 00 72 06 86
541)             f4 64 a4 a6 ba d9 c3 22 c4 93 49 99 fc 11 de 67
542)             97 08 f2 d8 b7 3c 2c 13 e7 c5 1c 1e 92 a6 0e d8
543)             2f 6d 81 03 82 00 e3 72 e4 32 6d 72 d2 6d 32 84
544)             3f cc a9 1e 57 2c 00 9a b3 99 de 45 da ce 2e d1
545)             db e5 89 f3 35 be 24 58 90 c6 ca 04 f0 db 88 80
546)             db bd 77 7c 80 20 7f 3a 48 61 f6 1f ae a9 5e 53
547)             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 5 months ago

548)         """),
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

549)         'derived_passphrase': rb'Bob0ZKSmutnDIsSTSZn8Ed5nlwjy2Lc8LBPnxRwekqYO2C9tgQOCAONy5DJtctJtMoQ/zKkeVywAmrOZ3kXazi7R2+WJ8zW+JFiQxsoE8NuIgNu9d3yAIH86SGH2H66pXlN74J2THurc67XNVkzqjwgA',  # noqa: E501
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

550)     },
551)     'rsa': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

552)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

590) """,
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

686)         '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
687) """,  # noqa: E501
688)         'public_key_data': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

689)             00 00 00 07 73 73 68 2d 72 73 61
690)             00 00 00 03 01 00 01
691)             00 00 01 81 00
692)             b1 a1 ee e9 7b 38 71 5b 2e 0d 23 49 94 c0 aa a0
693)             f5 60 98 38 04 be 22 3c 4d f5 e6 1c aa 97 dc 99
694)             08 a8 8d cb b2 f5 7b 22 37 fc 58 27 53 bd e1 2a
695)             ec 29 2e 66 12 26 b6 c4 79 d8 03 84 54 0a 14 f2
696)             60 d7 0c da fe 9c 9e 70 50 fc df d5 42 1a 46 30
697)             de d2 57 17 5b 84 a5 17 4d 61 42 c1 b8 c1 80 ee
698)             ab 1b 21 c1 e9 6b 68 1f cb dd ed 33 84 3e df 8d
699)             81 c5 f0 86 c5 b2 a1 a5 14 75 84 c0 eb 65 7e 18
700)             5f 6f 12 6c 4c 68 2e 2e 6e 00 f3 f8 1d 10 90 f9
701)             da b9 2a 0d c6 69 21 70 87 b4 96 c2 cd 6f 5a 42
702)             95 9c b3 f3 c3 c3 9c a5 c2 5f f7 74 1e e3 7f 1c
703)             9f ac 6c f8 3b 74 2b ce ca a1 58 4b 22 a7 de e6
704)             3a 6c 25 ea a0 87 6e af 15 f3 1f 73 bb cf 43 fc
705)             7f 9b 1b 98 a3 ab 18 62 8d b8 dc 55 45 b7 95 97
706)             f0 ff de e0 cb d2 7a ac 6d f5 1c d6 ab e4 7f 06
707)             c9 c2 d3 17 0b 82 15 ea 43 99 31 29 36 04 0b 2a
708)             87 bc 78 f2 04 3e ae 16 1e 11 54 a2 f0 5d c2 5a
709)             ce 07 25 0a 2a ac 6b 7b 2b d6 b7 98 24 a5 30 11
710)             cf ef 4b b7 c3 a3 04 ed eb a6 a2 bc b1 95 4a 1f
711)             7b 04 dd d7 b6 44 93 37 57 d3 c9 76 66 52 b3 66
712)             fc 10 52 b7 3e c5 06 76 53 0f 33 da 67 d6 e9 38
713)             b8 82 2d 29 60 66 a2 83 b2 9e e0 fc 2e 5e 9a 3f
714)             0b 96 00 59 f7 97 c9 cb 2f 25 9d ae 69 84 63 31
715)             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 5 months ago

716) """),
717)         'expected_signature': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

744) """),
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

745)         'derived_passphrase': rb'ohB8Lva7U6h0KqEZma2Bvnmc7dadCU5uxRhIM5B3mWj3ngNazU4Y64l9haLurkqS9m/Ouf6GfyprMdpuGv6ipYi4RH+hdnOz7HW10Ka5FZdlCRN9lCHR+10PiyMEd8LDVSKxoAmK9Tgq1n8bhymgJdMlb8tkYQeY3BTFhPiSJF5QEWtJ5fDMKcspqRnYp3EfkQsFsQFLwl8ApbYhv/gsnWebRzsKSWt5Lfwd7Ayw5Sci1an408P530ho6fvvPNwmv8/qKUMBpuPFUZX0Zm2KVeJH7OgwRUyuR+fJpCGLZLq2iPYh+HO5yxGheHWSxlrlZP7tQtmVmeYrbzwWPCh0pHIvDT8sM2eqNRmO57URL7P3asUC4m+jQuNiGZkD6qUg56HjvMgGo7V81nZd329gRoMqCADW09mkwUGM+GBWRYHaO6IWH55OdYMX2sNTwz4ZpBu80im4eGEreOaxUrDV7N5pLEhi2f3Rm2uwSdvT/zjnENktzp8NXgl7N9J7w7/O',  # noqa: E501
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

746)     },
747) }
748) 
749) UNSUITABLE_KEYS: Mapping[str, SSHTestKey] = {
750)     'dsa1024': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

751)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

752) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsQAAAAdzc2gtZH
753) NzAAAAgQC7KAZXqBGNVLBQPrcMYAoNW54BhD8aIhe7BDWYzJcsaMt72VKSkguZ8+XR7nRa
754) 0C/ZsBi+uJp0dpxy9ZMTOWX4u5YPMeQcXEdGExZIfimGqSOAsy6fCld2IfJZJZExcCmhe9
755) Ssjsd3YSAPJRluOXFQc95MZoR5hMwlIDD8QzrE7QAAABUA99nOZOgd7aHMVGoXpUEBcn7H
756) ossAAACALr2Ag3hxM3rKdxzVUw8fX0VVPXO+3+Kr8hGe0Kc/7NwVaBVL1GQ8fenBuWynpA
757) UbH0wo3h1wkB/8hX6p+S8cnu5rIBlUuVNwLw/bIYohK98LfqTYK/V+g6KD+8m34wvEiXZm
758) qywY54n2bksch1Nqvj/tNpLzExSx/XS0kSM1aigAAACAbQNRPcVEuGDrEcf+xg5tgAejPX
759) BPXr/Jss+Chk64km3mirMYjAWyWYtVcgT+7hOYxtYRin8LyMLqKRmqa0Q5UrvDfChgLhvs
760) G9YSb/Mpw5qm8PiHSafwhkaz/te3+8hKogqoe7sd+tCF06IpJr5k70ACiNtRGqssNF8Elr
761) l1efYAAAH4swlfVrMJX1YAAAAHc3NoLWRzcwAAAIEAuygGV6gRjVSwUD63DGAKDVueAYQ/
762) GiIXuwQ1mMyXLGjLe9lSkpILmfPl0e50WtAv2bAYvriadHaccvWTEzll+LuWDzHkHFxHRh
763) MWSH4phqkjgLMunwpXdiHyWSWRMXApoXvUrI7Hd2EgDyUZbjlxUHPeTGaEeYTMJSAw/EM6
764) xO0AAAAVAPfZzmToHe2hzFRqF6VBAXJ+x6LLAAAAgC69gIN4cTN6yncc1VMPH19FVT1zvt
765) /iq/IRntCnP+zcFWgVS9RkPH3pwblsp6QFGx9MKN4dcJAf/IV+qfkvHJ7uayAZVLlTcC8P
766) 2yGKISvfC36k2Cv1foOig/vJt+MLxIl2ZqssGOeJ9m5LHIdTar4/7TaS8xMUsf10tJEjNW
767) ooAAAAgG0DUT3FRLhg6xHH/sYObYAHoz1wT16/ybLPgoZOuJJt5oqzGIwFslmLVXIE/u4T
768) mMbWEYp/C8jC6ikZqmtEOVK7w3woYC4b7BvWEm/zKcOapvD4h0mn8IZGs/7Xt/vISqIKqH
769) u7HfrQhdOiKSa+ZO9AAojbURqrLDRfBJa5dXn2AAAAFQDJHfenj4EJ9WkehpdJatPBlqCW
770) 0gAAABt0ZXN0IGtleSB3aXRob3V0IHBhc3NwaHJhc2UBAgMEBQYH
771) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

772) """,
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

809)         'public_key': rb"""ssh-dss AAAAB3NzaC1kc3MAAACBALsoBleoEY1UsFA+twxgCg1bngGEPxoiF7sENZjMlyxoy3vZUpKSC5nz5dHudFrQL9mwGL64mnR2nHL1kxM5Zfi7lg8x5BxcR0YTFkh+KYapI4CzLp8KV3Yh8lklkTFwKaF71KyOx3dhIA8lGW45cVBz3kxmhHmEzCUgMPxDOsTtAAAAFQD32c5k6B3tocxUahelQQFyfseiywAAAIAuvYCDeHEzesp3HNVTDx9fRVU9c77f4qvyEZ7Qpz/s3BVoFUvUZDx96cG5bKekBRsfTCjeHXCQH/yFfqn5Lxye7msgGVS5U3AvD9shiiEr3wt+pNgr9X6DooP7ybfjC8SJdmarLBjnifZuSxyHU2q+P+02kvMTFLH9dLSRIzVqKAAAAIBtA1E9xUS4YOsRx/7GDm2AB6M9cE9ev8myz4KGTriSbeaKsxiMBbJZi1VyBP7uE5jG1hGKfwvIwuopGaprRDlSu8N8KGAuG+wb1hJv8ynDmqbw+IdJp/CGRrP+17f7yEqiCqh7ux360IXToikmvmTvQAKI21Eaqyw0XwSWuXV59g== test key without passphrase
810) """,  # noqa: E501
811)         'public_key_data': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

842) """),
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

843)         'expected_signature': None,
844)         'derived_passphrase': None,
845)     },
846)     'ecdsa256': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

847)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

848) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS
849) 1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTLbU0zDwsk2Dvp+VYIrsNVf5gWwz2S
850) 3SZ8TbxiQRkpnGSVqyIoHJOJc+NQItAa7xlJ/8Z6gfz57Z3apUkaMJm6AAAAuKeY+YinmP
851) mIAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMttTTMPCyTYO+n5
852) Vgiuw1V/mBbDPZLdJnxNvGJBGSmcZJWrIigck4lz41Ai0BrvGUn/xnqB/PntndqlSRowmb
853) oAAAAhAKIl/3n0pKVIxpZkXTGtii782Qr4yIcvHdpxjO/QsIqKAAAAG3Rlc3Qga2V5IHdp
854) dGhvdXQgcGFzc3BocmFzZQECAwQ=
855) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

856) """,
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

857)         'private_key_blob': bytes.fromhex("""
858)             00 00 00 13 65 63 64
859)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 32 35 36
860)             00 00 00 08 6e 69 73 74 70 32 35 36
861)             00 00 00 41 04
862)             cb 6d 4d 33 0f 0b 24 d8 3b e9 f9 56 08 ae c3 55
863)             7f 98 16 c3 3d 92 dd 26 7c 4d bc 62 41 19 29 9c
864)             64 95 ab 22 28 1c 93 89 73 e3 50 22 d0 1a ef 19
865)             49 ff c6 7a 81 fc f9 ed 9d da a5 49 1a 30 99 ba
866)             00 00 00 21 00
867)             a2 25 ff 79 f4 a4 a5 48 c6 96 64 5d 31 ad 8a 2e
868)             fc d9 0a f8 c8 87 2f 1d da 71 8c ef d0 b0 8a 8a
869)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
870)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
871) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

872)         'public_key': rb"""ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMttTTMPCyTYO+n5Vgiuw1V/mBbDPZLdJnxNvGJBGSmcZJWrIigck4lz41Ai0BrvGUn/xnqB/PntndqlSRowmbo= test key without passphrase
873) """,  # noqa: E501
874)         'public_key_data': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

875)             00 00 00 13 65 63 64 73 61 2d 73 68 61 32 2d 6e
876)             69 73 74 70 32 35 36
877)             00 00 00 08 6e 69 73 74 70 32 35 36
878)             00 00 00 41 04
879)             cb 6d 4d 33 0f 0b 24 d8 3b e9 f9 56 08 ae c3 55
880)             7f 98 16 c3 3d 92 dd 26 7c 4d bc 62 41 19 29 9c
881)             64 95 ab 22 28 1c 93 89 73 e3 50 22 d0 1a ef 19
882)             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 5 months ago

883) """),
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

884)         'expected_signature': None,
885)         'derived_passphrase': None,
886)     },
887)     'ecdsa384': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

888)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

889) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAiAAAABNlY2RzYS
890) 1zaGEyLW5pc3RwMzg0AAAACG5pc3RwMzg0AAAAYQSgkOjkAvq7v5vHuj3KBL4/EAWcn5hZ
891) DyKcbyV0eBMGFq7hKXQlZqIahLVqeMR0QqmkxNJ2rly2VHcXneq3vZ+9fIsWCOdYk5WP3N
892) ZPzv911Xn7wbEkC7QndD5zKlm4pBUAAADomhj+IZoY/iEAAAATZWNkc2Etc2hhMi1uaXN0
893) cDM4NAAAAAhuaXN0cDM4NAAAAGEEoJDo5AL6u7+bx7o9ygS+PxAFnJ+YWQ8inG8ldHgTBh
894) au4Sl0JWaiGoS1anjEdEKppMTSdq5ctlR3F53qt72fvXyLFgjnWJOVj9zWT87/ddV5+8Gx
895) JAu0J3Q+cypZuKQVAAAAMQD5sTy8p+B1cn/DhOmXquui1BcxvASqzzevkBlbQoBa73y04B
896) 2OdqVOVRkwZWRROz0AAAAbdGVzdCBrZXkgd2l0aG91dCBwYXNzcGhyYXNlAQIDBA==
897) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

898) """,
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

899)         'private_key_blob': bytes.fromhex("""
900)             00 00 00 13 65 63 64
901)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 33 38 34
902)             00 00 00 08 6e 69 73 74 70 33 38 34
903)             00 00 00 61 04
904)             a0 90 e8 e4 02 fa bb bf 9b c7 ba 3d ca 04 be 3f
905)             10 05 9c 9f 98 59 0f 22 9c 6f 25 74 78 13 06 16
906)             ae e1 29 74 25 66 a2 1a 84 b5 6a 78 c4 74 42 a9
907)             a4 c4 d2 76 ae 5c b6 54 77 17 9d ea b7 bd 9f bd
908)             7c 8b 16 08 e7 58 93 95 8f dc d6 4f ce ff 75 d5
909)             79 fb c1 b1 24 0b b4 27 74 3e 73 2a 59 b8 a4 15
910)             00 00 00 31 00
911)             f9 b1 3c bc a7 e0 75 72 7f c3 84 e9 97 aa eb a2
912)             d4 17 31 bc 04 aa cf 37 af 90 19 5b 42 80 5a ef
913)             7c b4 e0 1d 8e 76 a5 4e 55 19 30 65 64 51 3b 3d
914)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
915)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
916) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

917)         'public_key': rb"""ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBKCQ6OQC+ru/m8e6PcoEvj8QBZyfmFkPIpxvJXR4EwYWruEpdCVmohqEtWp4xHRCqaTE0nauXLZUdxed6re9n718ixYI51iTlY/c1k/O/3XVefvBsSQLtCd0PnMqWbikFQ== test key without passphrase
918) """,  # noqa: E501
919)         'public_key_data': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

920)             00 00 00 13
921)             65 63 64 73 61 2d 73 68 61 32 2d 6e 69 73 74 70
922)             33 38 34
923)             00 00 00 08 6e 69 73 74 70 33 38 34
924)             00 00 00 61 04
925)             a0 90 e8 e4 02 fa bb bf 9b c7 ba 3d ca 04 be 3f
926)             10 05 9c 9f 98 59 0f 22 9c 6f 25 74 78 13 06 16
927)             ae e1 29 74 25 66 a2 1a 84 b5 6a 78 c4 74 42 a9
928)             a4 c4 d2 76 ae 5c b6 54 77 17 9d ea b7 bd 9f bd
929)             7c 8b 16 08 e7 58 93 95 8f dc d6 4f ce ff 75 d5
930)             79 fb c1 b1 24 0b b4 27 74 3e 73 2a 59 b8 a4 15
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

931) """),
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

932)         'expected_signature': None,
933)         'derived_passphrase': None,
934)     },
935) }
936) 
937) DUMMY_SERVICE = 'service1'
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

938) DUMMY_PASSPHRASE = 'my secret passphrase'
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

939) DUMMY_KEY1 = SUPPORTED_KEYS['ed25519']['public_key_data']
940) DUMMY_KEY1_B64 = base64.standard_b64encode(DUMMY_KEY1).decode('ASCII')
941) DUMMY_KEY2 = SUPPORTED_KEYS['rsa']['public_key_data']
942) DUMMY_KEY2_B64 = base64.standard_b64encode(DUMMY_KEY2).decode('ASCII')
Marco Ricci Avoid crashing when overrid...

Marco Ricci authored 4 months ago

943) DUMMY_KEY3 = SUPPORTED_KEYS['ed448']['public_key_data']
944) DUMMY_KEY3_B64 = base64.standard_b64encode(DUMMY_KEY3).decode('ASCII')
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

945) DUMMY_CONFIG_SETTINGS = {
946)     'length': 10,
947)     'upper': 1,
948)     'lower': 1,
949)     'repeat': 5,
950)     'number': 1,
951)     'space': 1,
952)     'dash': 1,
953)     'symbol': 1,
954) }
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

955) DUMMY_RESULT_PASSPHRASE = b'.2V_QJkd o'
956) DUMMY_RESULT_KEY1 = b'E<b<{ -7iG'
957) DUMMY_PHRASE_FROM_KEY1_RAW = (
958)     b'\x00\x00\x00\x0bssh-ed25519'
959)     b'\x00\x00\x00@\xf0\x98\x19\x80l\x1a\x97\xd5&\x03n'
960)     b'\xcc\xe3e\x8f\x86f\x07\x13\x19\x13\t!33\xf9\xe46S'
961)     b'\x1d\xaf\xfd\r\x08\x1f\xec\xf8s\x9b\x8c_U9\x16|ST,'
962)     b'\x1eR\xbb0\xed\x7f\x89\xe2/iQU\xd8\x9e\xa6\x02'
963) )
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

964) DUMMY_PHRASE_FROM_KEY1 = b'8JgZgGwal9UmA27M42WPhmYHExkTCSEzM/nkNlMdr/0NCB/s+HObjF9VORZ8U1QsHlK7MO1/ieIvaVFV2J6mAg=='  # noqa: E501
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

966) VAULT_MASTER_KEY = 'vault key'
967) VAULT_V02_CONFIG = 'P7xeh5y4jmjpJ2pFq4KUcTVoaE9ZOEkwWmpVTURSSWQxbGt6emN4aFE4eFM3anVPbDRNTGpOLzY3eDF5aE1YTm5LNWh5Q1BwWTMwM3M5S083MWRWRFlmOXNqSFJNcStGMWFOS3c2emhiOUNNenZYTmNNMnZxaUErdlRoOGF2ZHdGT1ZLNTNLOVJQcU9jWmJrR3g5N09VcVBRZ0ZnSFNUQy9HdFVWWnFteVhRVkY3MHNBdnF2ZWFEbFBseWRGelE1c3BFTnVUckRQdWJSL29wNjFxd2Y2ZVpob3VyVzRod3FKTElTenJ1WTZacTJFOFBtK3BnVzh0QWVxcWtyWFdXOXYyenNQeFNZbWt1MDU2Vm1kVGtISWIxWTBpcWRFbyswUVJudVVhZkVlNVpGWDA4WUQ2Q2JTWW81SnlhQ2Zxa3cxNmZoQjJES0Uyd29rNXpSck5iWVBrVmEwOXFya1NpMi9saU5LL3F0M3N3MjZKekNCem9ER2svWkZ0SUJLdmlHRno0VlQzQ3pqZTBWcTM3YmRiNmJjTkhqUHZoQ0NxMW1ldW1XOFVVK3pQMEtUMkRMVGNvNHFlOG40ck5KcGhsYXg1b1VzZ1NYU1B2T3RXdEkwYzg4NWE3YWUzOWI1MDI0MThhMWZjODQ3MDA2OTJmNDQ0MDkxNGFiNmRlMGQ2YjZiNjI5NGMwN2IwMmI4MGZi'  # noqa: E501
968) VAULT_V02_CONFIG_DATA = {
969)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

971)     },
972)     'services': {
973)         '(meta)': {
974)             'notes': 'This config was originally in v0.2 format.',
975)         },
976)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
977)     },
978) }
979) VAULT_V03_CONFIG = 'sBPBrr8BFHPxSJkV/A53zk9zwDQHFxLe6UIusCVvzFQre103pcj5xxmE11lMTA0U2QTYjkhRXKkH5WegSmYpAnzReuRsYZlWWp6N4kkubf+twZ9C3EeggPm7as2Af4TICHVbX4uXpIHeQJf9y1OtqrO+SRBrgPBzgItoxsIxebxVKgyvh1CZQOSkn7BIzt9xKhDng3ubS4hQ91fB0QCumlldTbUl8tj4Xs5JbvsSlUMxRlVzZ0OgAOrSsoWELXmsp6zXFa9K6wIuZa4wQuMLQFHiA64JO1CR3I+rviWCeMlbTOuJNx6vMB5zotKJqA2hIUpN467TQ9vI4g/QTo40m5LT2EQKbIdTvBQAzcV4lOcpr5Lqt4LHED5mKvm/4YfpuuT3I3XCdWfdG5SB7ciiB4Go+xQdddy3zZMiwm1fEwIB8XjFf2cxoJdccLQ2yxf+9diedBP04EsMHrvxKDhQ7/vHl7xF2MMFTDKl3WFd23vvcjpR1JgNAKYprG/e1p/7'  # noqa: E501
980) VAULT_V03_CONFIG_DATA = {
981)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

983)     },
984)     'services': {
985)         '(meta)': {
986)             'notes': 'This config was originally in v0.3 format.',
987)         },
988)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
989)     },
990) }
991) VAULT_STOREROOM_CONFIG_ZIPPED = b"""
992) UEsDBBQAAAAIAJ1WGVnTVFGT0gAAAOYAAAAFAAAALmtleXMFwclSgzAAANC7n9GrBzBldcYDE5Al
993) EKbFAvGWklBAtqYsBcd/973fw8LFox76w/vb34tzhD5OATeEAk6tJ6Fbp3WrvkJO7l0KIjtxCLfY
994) ORm8ScEDPbNkyVwGLmZNTuQzXPMl/GnLO0I2PmUhRcxSj2Iy6PUy57up4thL6zndYwtyORpyCTGy
995) ibbjIeq/K/9atsHkl680nwsKFVk1i97gbGhG4gC5CMS8aUx8uebuToRCDsAT61UQVp0yEjw1bhm1
996) 6UPWzM2wyfMGMyY1ox5HH/9QSwMEFAAAAAgAnVYZWd1pX+EFAwAA1AMAAAIAAAAwMA3ON7abQAAA
997) wP4fwy0FQUR3ZASLYEkCOnKOEtHPd7e7KefPr71YP800/vqN//3hAywvUaCcTYb6TbKS/kYcVnvG
998) wGA5N8ksjpFNCu5BZGu953GdoVnOfN6PNXoluWOS2JzO23ELNJ2m9nDn0uDhwC39VHJT1pQdejIw
999) CovQTEWmBH53FJufhNSZKQG5s1fMcw9hqn3NbON6wRDquOjLe/tqWkG1yiQDSF5Ail8Wd2UaA7vo
1000) 40QorG1uOBU7nPlDx/cCTDpSqwTZDkkAt6Zy9RT61NUZqHSMIgKMerj3njXOK+1q5sA/upSGvMrN
1001) 7/JpSEhcmu7GDvQJ8TyLos6vPCSmxO6RRG3X4BLpqHkTgeqHz+YDZwTV+6y5dvSmTSsCP5uPCmi+
1002) 7r9irZ1m777iL2R8NFH0QDIo1GFsy1NrUvWq4TGuvVIbkHrML5mFdR6ajNhRjL/6//1crYAMLHxo
1003) qkjGz2Wck2dmRd96mFFAfdQ1/BqDgi6X/KRwHL9VmhpdjcKJhuE04xLYgTCyKLv8TkFfseNAbN3N
1004) 7KvVW7QVF97W50pzXzy3Ea3CatNQkJ1DnkR0vc0dsHd1Zr0o1acUaAa65B2yjYXCk3TFlMo9TNce
1005) OWBXzJrpaZ4N7bscdwCF9XYesSMpxBDpwyCIVyJ8tHZVf/iS4pE6u+XgvD42yef+ujhM/AyboqPk
1006) sFNV/XoNpmWIySdkTMmwu72q1GfPqr01ze/TzCVrCe0KkFcZhe77jrLPOnRCIarF2c9MMHNfmguU
1007) A0tJ8HodQb/zehL6C9KSiNWfG+NlK1Dro1sGKhiJETLMFru272CNlwQJmzTHuKAXuUvJmQCfmLfL
1008) EPrxoE08fu+v6DKnSopnG8GTkbscPZ+K5q2kC6m7pCizKO1sLKG7fMBRnJxnel/vmpY2lFCB4ADy
1009) no+dvqBl6z3X/ji9AFXC9X8HRd+8u57OS1zV4OhiVd7hMy1U8F5qbIBms+FS6QbL9NhIb2lFN4VO
1010) 3+ITZz1sPJBl68ZgJWOV6O4F5cAHGKl/UEsDBBQAAAAIAJ1WGVn9pqLBygEAACsCAAACAAAAMDMN
1011) z8mWa0AAANB9f0ZvLZQhyDsnC0IMJShDBTuzJMZoktLn/ft79w/u7/dWvZb7OHz/Yf5+yYUBMTNK
1012) RrCI1xIQs67d6yI6bM75waX0gRLdKMGyC5O2SzBLs57V4+bqxo5xI2DraLTVeniUXLxkLyjRnC4u
1013) 24Vp+7p+ppt9DlVNNZp7rskQDOe47mbgViNeE5oXpg/oDgTcfQYNvt8V0OoyKbIiNymOW/mB3hze
1014) D1EHqTWQvFZB5ANGpLMM0U10xWYAClzuVJXKm/n/8JgVaobY38IjzxXyk4iPkQUuYtws73Kan871
1015) R3mZa7/j0pO6Wu0LuoV+czp9yZEH/SU42lCgjEsZ9Mny3tHaF09QWU4oB7HI+LBhKnFJ9c0bHEky
1016) OooHgzgTIa0y8fbpst30PEUwfUAS+lYzPXG3y+QUiy5nrJFPb0IwESd9gIIOVSfZK63wvD5ueoxj
1017) O9bn2gutSFT6GO17ibguhXtItAjPbZWfyyQqHRyeBcpT7qbzQ6H1Of5clEqVdNcetAg8ZMKoWTbq
1018) /vSSQ2lpkEqT0tEQo7zwKBzeB37AysB5hhDCPn1gUTER6d+1S4dzwO7HhDf9kG+3botig2Xm1Dz9
1019) A1BLAwQUAAAACACdVhlZs14oCcgBAAArAgAAAgAAADA5BcHJkqIwAADQe39GXz2wE5gqDxAGQRZF
1020) QZZbDIFG2YwIga7593nv93sm9N0M/fcf4d+XcUlVE+kvustz3BU7FjHOaW+u6TRsfNKzLh74mO1w
1021) IXUlM/2sGKKuY5sYrW5N+oGqit2zLBYv57mFvH/S8pWGYDGzUnU1CdTL3B4Yix+Hk8E/+m0cSi2E
1022) dnAibw1brWVXM++8iYcUg84TMbJXntFYCyrNw1NF+008I02PeH4C8oDID6fIoKvsw3p7WJJ/I9Yp
1023) a6oJzlJiP5JGxRxZPj50N6EMtzNB+tZoIGxgtOFVpiJ05yMQFztY6I6LKIgvXW/s919GIjGshqdM
1024) XVPFxaKG4p9Iux/xazf48FY8O7SMmbQC1VsXIYo+7eSpIY67VzrCoh41wXPklOWS6CV8RR/JBSqq
1025) 8lHkcz8L21lMCOrVR1Cs0ls4HLIhUkqr9YegTJ67VM7xevUsgOI7BkPDldiulRgX+sdPheCyCacu
1026) e7/b/nk0SXWF7ZBxsR1awYqwkFKz41/1bZDsETsmd8n1DHycGIvRULv3yYhKcvWQ4asAMhP1ks5k
1027) AgOcrM+JFvpYA86Ja8HCqCg8LihEI1e7+m8F71Lpavv/UEsDBBQAAAAIAJ1WGVnKO2Ji+AEAAGsC
1028) AAACAAAAMWENx7dyo0AAANDen+GWAonMzbggLsJakgGBOhBLlGBZsjz373eve7+fKyJTM/Sff85/
1029) P5QMwMFfAWipfXwvFPWU582cd3t7JVV5pBV0Y1clL4eKUd0w1m1M5JrkgW5PlfpOVedgABSe4zPY
1030) LnSIZVuen5Eua9QY8lQ7rxW7YIqeajhgLfL54BIcY90fd8ANixlcM8V23Z03U35Txba0BbSguc0f
1031) NRF83cWp+7rOYgNO9wWLs915oQmWAqAtqRYCiWlgAtxYFg0MnNS4/G80FvFmQTh0cjwcF1xEVPeW
1032) l72ky84PEA0QMgRtQW+HXWtE0/vQTtNKzvNqPfrGZCldL5nk9PWhhPEQ/azyW11bz2eB+aM0g0r7
1033) 0/5YkO9er10YonsBT1rEn0lfBXDHwtwbxG2bdqELTuEtX2+OEih7K43rN2EvpXX47azaNpe/drIz
1034) wgAdhpfZ/mZwaGFX0c7r5HCTnroNRi5Bx/vu7m1A7Nt1dix4Gl/aPLCWQzpwmdIMJDiqD1RGpc5v
1035) +pDLrpfhZOVhLjAPSQ0V7mm/XNSca8oIsDjwdvR438RQCU56mrlypklS4/tJAe0JZNZIgBmJszjG
1036) AFbsmNYTJ9GmULB9lXmTWmrME592S285iWU5SsJcE1s+3oQw9QrvWB+e3bGAd9e+VFmFqr6+/gFQ
1037) SwECHgMUAAAACACdVhlZ01RRk9IAAADmAAAABQAAAAAAAAABAAAApIEAAAAALmtleXNQSwECHgMU
1038) AAAACACdVhlZ3Wlf4QUDAADUAwAAAgAAAAAAAAABAAAApIH1AAAAMDBQSwECHgMUAAAACACdVhlZ
1039) /aaiwcoBAAArAgAAAgAAAAAAAAABAAAApIEaBAAAMDNQSwECHgMUAAAACACdVhlZs14oCcgBAAAr
1040) AgAAAgAAAAAAAAABAAAApIEEBgAAMDlQSwECHgMUAAAACACdVhlZyjtiYvgBAABrAgAAAgAAAAAA
1041) AAABAAAApIHsBwAAMWFQSwUGAAAAAAUABQDzAAAABAoAAAAA
1042) """
1043) VAULT_STOREROOM_CONFIG_DATA = {
1044)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1046)     },
1047)     'services': {
1048)         '(meta)': {
1049)             'notes': 'This config was originally in storeroom format.',
1050)         },
1051)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
1052)     },
1053) }
1054) 
Marco Ricci Add more tests of the store...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

1060) await store._storeroom.put('/services/array/', ['entry1','entry2'])
1061) // The resulting "broken-dir" was then zipped manually.
1062) """
1063) VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED = b"""
1064) UEsDBBQAAgAIAHijH1kjc0ql0gAAAOYAAAAFAAAALmtleXMFwclygjAAANB7P8Mrh7LIYmd6oGxC
1065) HKwTJJgbNpBKCpGAhNTpv/e952ZpxHTjw+bN+HuJJABEikvHecD0pLgpgYKWjue0CZGk19mKF+4f
1066) 0AoLrXKh+ckk13nmxVk/KFE28eEHkBgJTISvRUVMQ0N5aRapLgWs/M7NSXV7qs0s2aIEstUG5FHv
1067) fo/HKjpdUJMGK86vs2rOJFGyrx9ZK4iWW+LefwSTYxhYOlWpb0PpgXsV4dHNTz5skcJqpPUudZf9
1068) jCFD0vxChL6ajm0P0prY+z9QSwMEFAACAAgAeKMfWX4L7vDYAQAAPwIAAAIAAAAwNQXByZKiMAAA
1069) 0Ht/Rl85sIR1qvqAouxbJAG8kWYxgCKICEzNv897f7+XanrR4fH9h//3pVdF8qmVeWjW+STwSbak
1070) 4e3CS00h2AcrQIcghm0lOcrLdJfuaOFqg5zEsW9lTbJMtIId5ezNGM9jPKaxeriXXm45pGuHCwFP
1071) /gmcXKWGeU3sHfj93iIf6p0xrfQIGGJOvayKjzypUqb99Bllo9IwNP2FZjxmBWDw0NRzJrxr/4Qj
1072) qp4ted4f91ZaR8+64C0BJBzDngElJEFLdA2WBcip2R/VZIG219WT3JlkbFrYSjhHWeb47igytTpo
1073) USPjEJWVol0cVpD6iX1/mGM2BpHAFa+fLx3trXgbXaVmjyZVzUKDh/XqnovnLs529UGYCAdj8Xnx
1074) vWwfWclm5uIB8cHbElx6G82Zs8RQnkDsyGVDbNaMOO7lMQF7o1Uy7Q9GuSWcFMK4KBAbcwm4l8RY
1075) +2ema46H3/S31IW1LOFpoZxjwyBS69dWS7/ulVxJfbuydMvZMeWpmerjUHnKaQdumibSeSOXh+zg
1076) XU6w6SsKAjHWXCTjRehWmyNnI7z3+epr1RzUlnDcUMiYQ/seaNefgNx4jIbOw92FC2hxnZOJupK9
1077) M1WVdH3+8x9QSwMEFAACAAgAeKMfWUXRU2i7AQAAFwIAAAIAAAAxYQ3QyZZjUAAA0H19Rm2zCGLs
1078) c2rxzDMxBTtTEA8hnqlO/3v3/YT7+71W86cdh+8/+N8vUMGNNAjWlNHgsyBlwCpgBd/a2rrW0qwg
1079) p/CmvT4PTpwjHztJ2T10Jc2Fc8O7eHQb9MawAbxSKscxFAjz5wnJviaOMT5kEIZS+ibU6GgqU61P
1080) lbeYRIiNCfK1VeHMFCpUhZ1ipnh50kux5N2jph5aMvc+HOR3lQgx9MJpMzQ2oNxSfEm7wZ5s0GYb
1081) Bgy2xwaEMXNRnbzlbijZJi0M7yXNKS7nS1uFMtsapEc204YOBbOY4VK6L/9jS2ez56ybGkQPfn6+
1082) QCwTqvkR5ieuRhF0zcoPLld+OUlI0RfEPnYHKEG7gtSya/Z1Hh77Xq4ytJHdr7WmXt7BUFA8Sffm
1083) obXI31UOyVNLW0y4WMKDWq+atKGbU5BDUayoITMqvCteAZfJvnR4kZftMaFEG5ln7ptpdzpl10m3
1084) G2rgUwTjPBJKomnOtJpdwm1tXm6IMPQ6IPy7oMDC5JjrmxAPXwdPnY/i07Go6EKSYjbkj8vdj/BR
1085) rAMe2wnzdJaRhKv8kPVG1VqNdzm6xLb/Cf8AUEsDBBQAAgAIAHijH1kaCPeauQEAABcCAAACAAAA
1086) MWUFwTmyokAAAND8H+OnBAKyTpVBs8iOIG2zZM0OigJCg07N3ee9v7+kmt/d6/n7h/n3AyJEvoaD
1087) gtd8f4RxATnaHVeGNjyuolVVL+mY8Tms5ldfgYseNYMzRYJj3+i3iUgqlT5D1r7j1Bh5qVzi14X0
1088) jpuH7DBKeeot2jWI5mPubptvV567pX2U3OC6ccxWmyo2Dd3ehUkbPP4uiDgWDZzFg/fFETIawMng
1089) ahWHB2cfc2bM2kugNhWLS4peUBp36UWqMpF6+sLeUxAVZ24u08MDNMpNk81VDgiftnfBTBBhBGm0
1090) RNpzxMMOPnCx3RRFgttiJTydfkB9MeZ9pvxP9jUm/fndQfJI83CsBxcEWhbjzlEparc3VS2s4LjR
1091) 3Xafw3HLSlPqylHOWK2vc2ZJoObwqrCaFRg7kz1+z08SGu8pe0EHaII6FSxL7VM+rfVgpc1045Ut
1092) 6ayCQ0TwRL5m4oMYkZbFnivCBTY3Cdji2SQ+gh8m3A6YkFxXUH0Vz9Is8JZaLFyi24GjyZZ9rGuk
1093) Y6w53oLyTF/fSzG24ghCDZ6pOgB5qyfk4z2mUmH7pwxNCoHZ1oaxeTSn039QSwECHgMUAAIACAB4
1094) ox9ZI3NKpdIAAADmAAAABQAAAAAAAAABAAAApIEAAAAALmtleXNQSwECHgMUAAIACAB4ox9Zfgvu
1095) 8NgBAAA/AgAAAgAAAAAAAAABAAAApIH1AAAAMDVQSwECHgMUAAIACAB4ox9ZRdFTaLsBAAAXAgAA
1096) AgAAAAAAAAABAAAApIHtAgAAMWFQSwECHgMUAAIACAB4ox9ZGgj3mrkBAAAXAgAAAgAAAAAAAAAB
1097) AAAApIHIBAAAMWVQSwUGAAAAAAQABADDAAAAoQYAAAAA
1098) """
1099) 
Marco Ricci Add remaining tests to the...

Marco Ricci authored 2 months ago

1100) _VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED2_JAVASCRIPT_SOURCE = """
1101) // Executed in the top-level directory of the vault project code, in Node.js.
1102) const storeroom = require('storeroom')
1103) const Store = require('./lib/store.js')
1104) let store = new Store(storeroom.createFileAdapter('./broken-dir'), 'vault key')
1105) await store._storeroom.put('/services/array/', 'not a directory index')
1106) // The resulting "broken-dir" was then zipped manually.
1107) """
1108) VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED2 = b"""
1109) UEsDBAoAAAAAAM6NSVmrcHdV5gAAAOYAAAAFAAAALmtleXN7InZlcnNpb24iOjF9CkV3ZS9LZkJp
1110) L0V0OUcrZmxYM3gxaFU4ZjE4YlE3S253bHoxN0IxSDE3cUhVOGdWK2RpWWY5MTdFZ0YrSStidEpZ
1111) VXBzWVZVck45OC9uLzdsZnl2NUdGVEg2NWZxVy93YjlOc2MxeEZ4ck43Q3p4eTZ5MVAxZzFPb2VK
1112) b0RZU3J6YXlwT0E2M3pidmk0ZTRiREMyNXhPTXl5NHBoMDFGeGdnQmpSNnpUcmR2UDk2UlZQd0I5
1113) WitOZkZWZUlXT1NQN254ZFNYMGdFbkZ4SDBmWDkzNTFaTTZnPVBLAwQKAAAAAADOjUlZJg3/BhcC
1114) AAAXAgAAAgAAADBieyJ2ZXJzaW9uIjoxfQpBVXJJMjNDQ2VpcW14cUZRMlV4SUpBaUoxNEtyUzh2
1115) SXpIa2xROURBaFRlVHNFMmxPVUg4WUhTcUk1cXRGSHBqY3c1WkRkZmRtUlEwQXVGRjllY3lkam14
1116) dDdUemRYLzNmNFUvTGlVV2dLRmQ1K1FEN3BlVlE1bWpqeHNlUEpHTDlhTWlKaGxSUVB4SmtUbjBx
1117) U2poM1RUT0ZZbVAzV0JkdlUyWnF2RzhaSDk2cU1WcnZsQ0dMRmZTc2svVXlvcHZKdENONUVXcTRZ
1118) SDUwNFNiejFIUVhWd2RjejlrS1BuR3J6SVA4ZmZtZnhXQ0U0TmtLb0ZPQXZuNkZvS3FZdGlGbFE9
1119) PQpBVXBMUVMrMG9VeEZTeCtxbTB3SUtyM1MvTVJxYWJJTFlEUnY0aHlBMVE2TGR2Nlk0UmJ0enVz
1120) NzRBc0cxbVhhenlRU2hlZVowdk0xM2ZyTFA4YlV0VHBaRyszNXF1eUhLM2NaWVJRZUxKM0JzejZz
1121) b0xaQjNZTkpNenFxTTQrdzM1U0FZZ2lMU1NkN05NeWVrTHNhRUIzRDFOajlTRk85K3NGNEpFMWVL
1122) UXpNMkltNk9qOUNVQjZUSTV3UitibksxN1BnY2RaeTZUMVRMWElVREVxcDg4dWdsWmRFTVcrNU9k
1123) aE5ZbXEzZERWVWV4UnJpM1AwUmVBSi9KMGdJNkNoUUE9PVBLAwQKAAAAAADOjUlZTNfdphcCAAAX
1124) AgAAAgAAADBmeyJ2ZXJzaW9uIjoxfQpBWVJqOVpIUktGUEVKOHM2YVY2TkRoTk5jQlZ5cGVYUmdz
1125) cnBldFQ0cGhJRGROWFdGYzRia0daYkJxMngwRDFkcVNjYWk5UzEveDZ2K28zRE0rVEF2OVE3ZFVR
1126) QWVKR3RmRkhJZDZxWW0ybEdNSnF5WTRNWm14aE9YdXliend0V3Q4Mnhvb041QTZNcWpINmxKQllD
1127) UUN3ZEJjb3RER0EwRnlnVTEzeHV2WnIzT1puZnFFRGRqbzMxNkw5aExDN1RxMTYwUHpBOXJOSDMz
1128) ZkNBcUhIVXZiYlFQQWErekw1d3dEN3FlWkY2MHdJaEwvRmk5L3JhNGJDcHZRNC9ORWpRd3c9PQpB
1129) WWNGUDB1Y2xMMHh3ZDM2UXZXbm4wWXFsOU5WV0s3c05CMTdjdmM3N3VDZ0J2OE9XYkR5UHk5d05h
1130) R2NQQzdzcVdZdHpZRlBHR0taVjhVUzA1YTVsV1BabDNGVFNuQXNtekxPelBlcFZxaitleDU3aEsx
1131) QnV1bHkrUCtYQkE0YUtsaDM3c0RJL3I0UE1BVlJuMDNoSDJ5dEhDMW9PbjF0V1M5Q1NLV1pSMThh
1132) djdTT0RBMVBNRnFYTmZKZVNTaVJiQ2htbDdOcFVLbjlXSGJZandybDlqN0JSdy9kWjhNQldCb3Ns
1133) Nlc1dGZtdnJMVHhGRFBXYUgzSUp0T0czMEI1M3c9PVBLAwQKAAAAAADOjUlZn9rNID8CAAA/AgAA
1134) AgAAADFkeyJ2ZXJzaW9uIjoxfQpBYWFBb3lqaGljVDZ4eXh1c0U0RVlDZCtxbE81Z0dEYTBNSFVS
1135) MmgrSW9QMHV4UkY3b1BRS2czOHlQUEN3Ny9MYVJLQ0dQZ0RyZ2RpTWJTeUwzZ3ZNMFhseVpVMVBW
1136) QVJvNEFETU9lbXgrOWhtS0hjQWNKMG5EeW5oSkhGYTYyb2xyQUNxekZzblhKNVBSeEVTVzVEbUh0
1137) Ui9nRm5Wa1FvalhyVW4ybmpYMjVVanZQaXhlMU96Y0daMmQ0MjdVTGdnY1hqMkhSdjJiZldDNDUw
1138) SGFXS3FDckZlYWlrQ2xkUUM2WGV3SkxZUjdvQUY3UjVha2ttK3M2MXNCRTVCaTg0QmJLWHluc1NG
1139) ejE0TXFrd2JMK1VMYVk9CkFUT3dqTUFpa3Q4My9NTW5KRXQ2b3EyNFN4KzJKNDc2K2gyTmEzbHUr
1140) MDg0cjlBT25aaUk0TmlYV0N1Q0lzakEzcTBwUHFJS1VXZHlPQW9uM2VHY0huZUppWUtVYllBaUJI
1141) MVNmbnhQQkMzZkFMRklybkQ4Y0VqeGpPcUFUaTQ5dE1mRmtib0dNQ3dEdFY0V3NJL0tLUlRCOFd1
1142) MnNXK2J0V3QzVWlvZG9ZeUVLTDk3ekNNemZqdGptejF4SDhHTXY5WDVnaG9NSW5RQVNvYlRreVZ4
1143) dWo5YnlDazdNbU0vK21ZL3AwZE9oYVY0Nncwcm04UGlvWEtzdzR4bXB3ditDWC9PRXV3Uy9meDJT
1144) Y0lOQnNuYVRiWT1QSwECHgMKAAAAAADOjUlZq3B3VeYAAADmAAAABQAAAAAAAAAAAAAApIEAAAAA
1145) LmtleXNQSwECHgMKAAAAAADOjUlZJg3/BhcCAAAXAgAAAgAAAAAAAAAAAAAApIEJAQAAMGJQSwEC
1146) HgMKAAAAAADOjUlZTNfdphcCAAAXAgAAAgAAAAAAAAAAAAAApIFAAwAAMGZQSwECHgMKAAAAAADO
1147) jUlZn9rNID8CAAA/AgAAAgAAAAAAAAAAAAAApIF3BQAAMWRQSwUGAAAAAAQABADDAAAA1gcAAAAA
1148) """
1149) 
1150) _VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED3_JAVASCRIPT_SOURCE = """
1151) // Executed in the top-level directory of the vault project code, in Node.js.
1152) const storeroom = require('storeroom')
1153) const Store = require('./lib/store.js')
1154) let store = new Store(storeroom.createFileAdapter('./broken-dir'), 'vault key')
1155) await store._storeroom.put('/services/array/', [null, 1, true, [], {}])
1156) // The resulting "broken-dir" was then zipped manually.
1157) """
1158) VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED3 = b"""
1159) UEsDBAoAAAAAAEOPSVnVlcff5gAAAOYAAAAFAAAALmtleXN7InZlcnNpb24iOjF9CkV4dVBHUDBi
1160) YkxrUVdvWnV5ZUJQRy8xdmM2MCt6MThOa3BsS09ydFAvUTVnQmxkYVpIOG10dTE5VWZFNGdGRGRj
1161) eHJtWUd4eXZDZFNqcVlOaDh4cTlzM3VydkdRTWFwcnhtdlZGZUxoSW4zZnVlTDAweEk0ZmlLenZN
1162) MmthUlRsNWNORGh3eUNlWVk4dzhBcXNhYjNyVWVsOEE0eVQ0cHU2d2tmQ3dTWUdqeG5HR29EcWJK
1163) VnVJVWNpZVBEcU9PTzU2b0MyMG9lT01adFVkTUtxV28zYnFZPVBLAwQKAAAAAABDj0lZ77OVHxcC
1164) AAAXAgAAAgAAADBjeyJ2ZXJzaW9uIjoxfQpBZllFQVVobEkyU2lZeGlrdWh0RzRNbUN3L1V2THBN
1165) VVhwVlB0NlRwdzRyNGdocVJhbGZWZ0hxUHFtbTczSnltdFFrNnZnR2JRdUpiQmVlYjYwOHNrMGk4
1166) ZFJVZjNwdlc2SnUyejljQkdwOG5mTFpTdlNad1lLN09UK2gzSDNDcmoxbXNicEZUcHVldW81NXc1
1167) dGdYMnBuWXNWTVcrczdjaHEyMUIya2lIVEZrdGt1MXlaRzhPYkVUQjNCOFNGODVVbi9CUjFEMHJ1
1168) ME9zOWl4ZWM2VmNTMitTZndtNnNtSlk2ZW9ZNTJzOGJNRGdYMndjQ0srREdkOEo2VWp0NG5OQVE9
1169) PQpBUWlPRnRZcmJybWUycEwxRFpGT1BjU0RHOUN2cVkvbHhTWGIwaVJUdmtIWFc2bEtHL0p4RUtU
1170) d3RTc0RTeDhsMTUvaHRmbWpOQ2tuTzhLVEFoKzhRQm5FbjZ0a2x5Y3BmeEIrTUxLRjFCM1Q1bjcv
1171) T0VUMExMdmgxU2k1bnRRNXhTUHZZNWtXeUMyZjhXUXFZb3FSNU5JVENMeDV6dWNsQ3dGb2kvVXc4
1172) OWNNWjM1MHBSbThzUktJbjJFeDUrQ1JwS3ZHdnBHbFJaTmk5VHZmVkNic1FCalR3MC9aeklTdzVQ
1173) NW9BVWE2U1ExUVFnNHg4VUNkY0s2QUNLaFluY0d4TVE9PVBLAwQKAAAAAABDj0lZGk9LVj8CAAA/
1174) AgAAAgAAADE0eyJ2ZXJzaW9uIjoxfQpBY1g2NVpMUWk4ck9pUlIyWGEwQlFHQVhQVWF2aHNJVGVY
1175) c2dzRk9OUmFTRzJCQlg0SGxJRHpwRUd5aDUrZ2czZVRwWDFNOERua3pMeTVzcWRkMFpmK3padTgz
1176) Qm52Y1JPREVIVDllUW91YUtPTWltdlRYanNuSXAxUHo5VGY1TlRkRjNJVTd2V1lhUDg4WTI5NG1i
1177) c1VVL2RKVTZqZ3ZDbUw2cE1VZ28xUU12bGJnaVp3cDV1RDFQZXlrSXdKVWdJSEgxTEpnYi9xU2tW
1178) c25leW1XY1RXR0NobzRvZGx3S2hJWmFCelhvNFhlN2U1V2I2VHA3Rkk5VUpVcmZIRTAvcVdrZUZE
1179) VmxlazY3cUx3ZFZXcU9DdFk9CkFhSGR0QjhydmQ0U3N4ZmJ5eU1OOHIzZEoxeHA5NmFIRTQvalNi
1180) Z05hZWttaDkyb2ROM1F4MUlqYXZsYVkxeEt1eFF3KzlwTHFIcTF5a1JSRjQzL2RVWGFIRk5UU0NX
1181) OVFsdmd3KzMwa1ZhSEdXRllvbFRnRWE4djQ3b3VrbGlmc01PZGM0YVNKb2R4ZUFJcVc3Q1cwdDVR
1182) b2RUbWREUXpqc3phZkQ4R2VOd2NFQjdGMHI2RzNoZEJlQndxd3Z6eENVYnpSUmU5bEQ3NjQ3RFp1
1183) bEo1U3c4amlvV0paTW40NlZhV3BYUXk4UnNva3hHaW00WUpybUZIQ2JkVU9qSWJsUmQ1Z3VhUDNU
1184) M0NxeHRPdC94b1BhOD1QSwMECgAAAAAAQ49JWVJM8QYXAgAAFwIAAAIAAAAxNnsidmVyc2lvbiI6
1185) MX0KQVlCWDF6M21qUlQrand4M2FyNkFpemxnalJZbUM0ZHg5NkxVQVBTVHNMWXJKVHFtWnd5N0Jy
1186) OFlCcElVamorMHdlT3lNaUtLVnFwaER3RXExNWFqUmlSZUVEQURTVHZwWmlLZUlnZjR5elUzZXNP
1187) eDJ2U2J1bXhTK0swUGZVa2tsSy9TRmRiU3EvUHFMRjBDRTVCMXNyKzJLYTB2WlJmak94R3VFeFRD
1188) RXozN0ZlWDNNR3NCNkhZVHEzaUJWcUR6NVB6eHpCWWM5Kyt6RitLS1RnMVp2NGRtRmVQTC9JSEY5
1189) WnV6TWlqRXdCRkE3WnJ0dkRqd3ZYcWtsMVpsR0c4eUV3PT0KQVhUWkRLVnNleldpR1RMUVZqa2hX
1190) bXBnK05MYlM0M2MxZEpvK2xGcC9yWUJYZkw3Wll5cGdjWE5IWXNzd01nc2VSSTAzNmt6bGZkdGNa
1191) bTdiUUN6M2JuQmZ6ZlorZFFuT2Y5STVSU2l0QzB2UmsydkQrOFdwbmRPSzNucGY5S0VpWklOSzVq
1192) TEZGTTJDTkNmQzBabXNRUlF3T0k2N3l5ZHhjVnFDMXBnWHV6QXRXamlsSUpnN0p6eUtsY3BJUGJu
1193) SUc0UzRSUlhIdW1wZnpoeWFZWkd6T0FDamRSYTZIMWJxYkJkZXFaSHMvQXJvM25mVjdlbjhxSUE5
1194) aVUrbnNweXFnPT1QSwECHgMKAAAAAABDj0lZ1ZXH3+YAAADmAAAABQAAAAAAAAAAAAAApIEAAAAA
1195) LmtleXNQSwECHgMKAAAAAABDj0lZ77OVHxcCAAAXAgAAAgAAAAAAAAAAAAAApIEJAQAAMGNQSwEC
1196) HgMKAAAAAABDj0lZGk9LVj8CAAA/AgAAAgAAAAAAAAAAAAAApIFAAwAAMTRQSwECHgMKAAAAAABD
1197) j0lZUkzxBhcCAAAXAgAAAgAAAAAAAAAAAAAApIGfBQAAMTZQSwUGAAAAAAQABADDAAAA1gcAAAAA
1198) """
1199) 
1200) _VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED4_JAVASCRIPT_SOURCE = """
1201) // Executed in the top-level directory of the vault project code, in Node.js.
1202) const storeroom = require('storeroom')
1203) const Store = require('./lib/store.js')
1204) let store = new Store(storeroom.createFileAdapter('./broken-dir'), 'vault key')
1205) await store._storeroom.put('/dir/subdir/', [])
1206) await store._storeroom.put('/dir/', [])
1207) // The resulting "broken-dir" was then zipped manually.
1208) """
1209) VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED4 = b"""
1210) UEsDBAoAAAAAAE+5SVloORS+5gAAAOYAAAAFAAAALmtleXN7InZlcnNpb24iOjF9CkV6dWRoNkRQ
1211) YTlNSWFabHZ5TytVYTFuamhjV2hIaTFBU0lKYW5zcXBxVlA0blN2V0twUzdZOUc2bjFSbi8vUnVM
1212) VitwcHp5SC9RQk83R0hFenNVMzdCUzFwUmVVeGhxUVlVTE56OXZvQ0crM1ZaL3VncU44dDJiU05m
1213) Nyt5K3hiNng2aVlFUmNZYTJ0UkhzZVdIc0laTE9ha2lDb0lRVGV3cndwYjVMM2pnd0E3SXBzaDkz
1214) QkxHSzM5dXNYNmo0R0I2WkRUeW5JcGk4V3JkbDhnWVZCN0tVPVBLAwQKAAAAAABPuUlZ663uUhcC
1215) AAAXAgAAAgAAADAzeyJ2ZXJzaW9uIjoxfQpBV2wzS2gzd21ZSFVZZU1RR3BLSVowdVd1VXFna09h
1216) YmRjNzNYYXVsZTNtVS9sN2Zvd1AyS21jbFp3ZDM5V3lYVzRTcEw4R0l4YStDZW51S3V0Wm5nb0FR
1217) bWlnaUJUbkFaais5TENCcGNIWlZNY2RBVkgxKzBFNGpsanZ1UkVwZ0tPS05LZjRsTUl1QnZ4VmFB
1218) ZkdwNHJYNEZ4MmpPSlk1Y3NQZzBBRFBoZVAwN29GWVQ3alorSUNEK1AxNGZPdWpwMGRUeDRrTDIy
1219) LzlqalRDNXBCNVF5NW5iOUx3Zk5DUWViSUVpaTZpbU0vRmFrK1dtV05tMndqMERSTEc4RHY3ZkE9
1220) PQpBU0c3NTNGTVVwWmxjK3E1YXRzcC93OUNqN2JPOFlpY24wZHg2UGloTmwzUS9WSjVVeGJmU3l0
1221) ZDFDNDBRU2xXeTJqOTJDWUd3VER6eEdBMXVnb0FCYi9kTllTelVwbHJFb3BuUVphYXdsdTVwV2x0
1222) Y1E5WTcveWN4S2E4b0JaaGY3RkFYcGo2c01wUW9zNzI5VFVabFd4UmI4VFRtN2FrVnR1OXcvYXlK
1223) RS9reDh4ZUYxSGJlc3Q4N1IxTGg2ODd3dS9XVUN2ZjNXYXo1VjNnZWY0RnpUTXg0bkpqSlZOd0U0
1224) SzAxUTlaVzQ0bmVvbExPUVI1MkZDeDZvbml3RW9tenc9PVBLAwQKAAAAAABPuUlZRXky4CsCAAAr
1225) AgAAAgAAADEweyJ2ZXJzaW9uIjoxfQpBWmlYWVlvNUdCY2d5dkFRaGtyK2ZjUkdVSkdabDd2dE5w
1226) T2Mrd1VzbXJhQWhRN3dKdlYraGhKcTlrcWNKQnBWU0gyUTBTTVVhb29iNjBJM1NYNUNtTkJRU2FH
1227) M3prd0Y0T2F4TnpCZUh0NFlpaDd4Y3p2ak4xR0hISDJQYW0xam05K09ja3JLVmNMVURtNXRKb2ZC
1228) Z1E4Q2NwMGZMVkdEaURjNWF0MjVMc2piQVcvNkZFSnJ5VVBHWis4UVdYRmlWMGdtVVZybVc3VUFy
1229) dGhJQitWNTdZS1BORi95Nng2OU43UTFQbmp1cUczdlpybzljMEJ3d012NWoyc3BMMTJHcTdzTDZE
1230) alB1d0dHbnB2MkVZQTFLbmc9CkFTdjQwUkgzRmxzbGVlU1NjRlZNRmh3dEx6eEYxK2xpcmxEL29X
1231) alJLQ05qVWZhUVpJTWpqMWRoVkhOakNUTWhWZ1ZONkl3b04xTnFOMEV6cmdhaTFBWnNiMm9UczYw
1232) QkI1UGh0U0hhQ2U2WllUeE1JemFPS2FIK0w2eHhtaXIrTlQxNTRXS0x5amJMams3MU1na3Nwa0Yy
1233) WDBJMnlaWW5IUUM0bmdEL24yZzRtSVI2Q1hWL0JOUXNzeTBEeXdGLzN6eGRRYWw5cFBtVk1qYnFu
1234) cHY5SFNqRTg4S25naVpBWFhJWU1OVGF2L3Q3Y3dEWGdNekhKTlU0Y2xnVUtIQVZ3QT09UEsDBAoA
1235) AAAAAE+5SVkPfKx9FwIAABcCAAACAAAAMWR7InZlcnNpb24iOjF9CkFYbHNLRzQwZG5ibTJvcXdY
1236) U2ZrSWp3Mmxpa0lDS3hVOXU3TU52VkZ1NEJ2R1FVVitSVVdsS3MxL25TSlBtM2U2OTRvVHdoeDFo
1237) RFF3U0M5U0QvbXd5bnpjSTloUnRCUWVXMkVMOVU5L1ZGcHFsVWY3Z1ZOMHZ0ZWpXYnV4QnhsZlRD
1238) Tys4SFBwU2Zaa2VOUld5R2JNdzBFSU9LTmxRYjk3OUF0c1g3THR0NytaTkJnakZHYkZxaHdwa3kx
1239) WUNDVng1UmNZZ2tma2ZjWnVncGpzc1RzNVFvK1p3QXBEcDZ4V3JjSHMxUDhvNktBRzAwcjZZbkNM
1240) N2ErU1dwZmVNTUJhZz09CkFadVF0cFZMWmVvb292NkdyQlpnb3B6VmRGUXBlK1h6QXZuZ2dPVnZM
1241) VWtCYVF2akl5K1VLdXVUVlFoQ1JiMVp6dGZQL2dsNnoxOEsyZW5sQlo2bGJTZnoxTlBWeUVzYXB3
1242) dDVpUVh4azd5UkJlZks1cFlsNTduUXlmcFZQbzlreFpnOVdHTkV3NVJ5MkExemhnNGl6TWxLRmJh
1243) UjZFZ0FjQ3NFOXAveGRLa29ZNjhOUlZmNXJDM3lMQjc3ZWgyS1hCUld2WDNZcE9XdW00OGtsbmtI
1244) akJjMFpiQmUrT3NZb3d5cXpoRFA2ZGQxRlFnMlFjK09vc3B4V0sycld4M01HZz09UEsBAh4DCgAA
1245) AAAAT7lJWWg5FL7mAAAA5gAAAAUAAAAAAAAAAAAAAKSBAAAAAC5rZXlzUEsBAh4DCgAAAAAAT7lJ
1246) Weut7lIXAgAAFwIAAAIAAAAAAAAAAAAAAKSBCQEAADAzUEsBAh4DCgAAAAAAT7lJWUV5MuArAgAA
1247) KwIAAAIAAAAAAAAAAAAAAKSBQAMAADEwUEsBAh4DCgAAAAAAT7lJWQ98rH0XAgAAFwIAAAIAAAAA
1248) AAAAAAAAAKSBiwUAADFkUEsFBgAAAAAEAAQAwwAAAMIHAAAAAA==
1249) """
1250) 
Marco Ricci Move exporter command-line...

Marco Ricci authored 3 months ago

1251) CANNOT_LOAD_CRYPTOGRAPHY = (
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1253) )
1254) 
Marco Ricci Test exporter data loading...

Marco Ricci authored 3 months ago

1255) skip_if_cryptography_support = pytest.mark.skipif(
1256)     importlib.util.find_spec('cryptography') is not None,
1257)     reason='cryptography support available; cannot test "no support" scenario',
1258) )
1259) skip_if_no_cryptography_support = pytest.mark.skipif(
1260)     importlib.util.find_spec('cryptography') is None,
1261)     reason='no "cryptography" support',
1262) )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1263) 
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 2 months ago

1264) hypothesis_settings_coverage_compatible = (
1265)     hypothesis.settings(
1266)         # Running under coverage with the Python tracer increases
1267)         # running times 40-fold, on my machines.  Sadly, not every
1268)         # Python version offers the C tracer, so sometimes the Python
1269)         # tracer is used anyway.
1270)         deadline=(
1271)             40 * deadline
1272)             if (deadline := hypothesis.settings().deadline) is not None
1273)             else None
1274)         ),
Marco Ricci Manage health checks in cen...

Marco Ricci authored 2 months ago

1275)         suppress_health_check=(hypothesis.HealthCheck.too_slow,),
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 2 months ago

1276)     )
1277)     if sys.gettrace() is not None
1278)     else hypothesis.settings()
1279) )
1280) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

1281) 
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1283)     del self  # Unused.
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 4 months ago

1284)     Pair = _types.KeyCommentPair  # noqa: N806
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1285)     list1 = [
1286)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1287)         for key, value in SUPPORTED_KEYS.items()
1288)     ]
1289)     list2 = [
1290)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1291)         for key, value in UNSUITABLE_KEYS.items()
1292)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

1293)     return list1 + list2
1294) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

1296) def sign(
1297)     self: Any, key: bytes | bytearray, message: bytes | bytearray
1298) ) -> bytes:
1299)     del self  # Unused.
1300)     assert message == vault.Vault._UUID
1301)     for value in SUPPORTED_KEYS.values():
1302)         if value['public_key_data'] == key:  # pragma: no branch
1303)             assert value['expected_signature'] is not None
1304)             return value['expected_signature']
1305)     raise AssertionError
1306) 
1307) 
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1309)     del self  # Unused.
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 4 months ago

1310)     Pair = _types.KeyCommentPair  # noqa: N806
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1311)     list1 = [
1312)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1313)         for key, value in SUPPORTED_KEYS.items()
1314)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

1315)     return list1[:1]
1316) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1317) 
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1319)     del conn  # Unused.
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1324)     ]
1325) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1327) def phrase_from_key(key: bytes) -> bytes:
1328)     if key == DUMMY_KEY1:  # pragma: no branch
1329)         return DUMMY_PHRASE_FROM_KEY1
1330)     raise KeyError(key)  # pragma: no cover
1331) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1333) @contextlib.contextmanager
1334) def isolated_config(
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

1336)     runner: click.testing.CliRunner,
Marco Ricci Fix typing issues in mypy s...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1339)     env_name = prog_name.replace(' ', '_').upper() + '_PATH'
1340)     with runner.isolated_filesystem():
1341)         monkeypatch.setenv('HOME', os.getcwd())
1342)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1343)         monkeypatch.delenv(env_name, raising=False)
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

1344)         config_dir = cli._config_filename(subsystem=None)
1345)         os.makedirs(config_dir, exist_ok=True)
Marco Ricci Modularize test helpers to...

Marco Ricci authored 3 months ago

1346)         yield
1347) 
1348) 
1349) @contextlib.contextmanager
1350) def isolated_vault_config(
1351)     monkeypatch: pytest.MonkeyPatch,
1352)     runner: click.testing.CliRunner,
1353)     config: Any,
1354) ) -> Iterator[None]:
1355)     with isolated_config(monkeypatch=monkeypatch, runner=runner):
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

1356)         config_filename = cli._config_filename(subsystem='vault')
1357)         with open(config_filename, 'w', encoding='UTF-8') as outfile:
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

1358)             json.dump(config, outfile)
1359)         yield
1360) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

1362) @contextlib.contextmanager
1363) def isolated_vault_exporter_config(
1364)     monkeypatch: pytest.MonkeyPatch,
1365)     runner: click.testing.CliRunner,
1366)     vault_config: str | bytes | None = None,
1367)     vault_key: str | None = None,
1368) ) -> Iterator[None]:
1369)     if TYPE_CHECKING:
1370)         chdir = contextlib.chdir
1371)     else:
1372)         try:
1373)             chdir = contextlib.chdir
1374)         except AttributeError:
1375) 
1376)             @contextlib.contextmanager
Marco Ricci Move exporter command-line...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1378)                 oldpath = os.getcwd()
1379)                 os.chdir(newpath)
1380)                 yield
1381)                 os.chdir(oldpath)
1382) 
1383)     with runner.isolated_filesystem():
1384)         monkeypatch.setenv('HOME', os.getcwd())
1385)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1386)         monkeypatch.delenv('VAULT_PATH', raising=False)
1387)         monkeypatch.delenv('VAULT_KEY', raising=False)
1388)         monkeypatch.delenv('LOGNAME', raising=False)
1389)         monkeypatch.delenv('USER', raising=False)
1390)         monkeypatch.delenv('USERNAME', raising=False)
1391)         if vault_key is not None:
1392)             monkeypatch.setenv('VAULT_KEY', vault_key)
Marco Ricci Add support for Python 3.9

Marco Ricci authored 2 months ago

1393)         # Use match/case here once Python 3.9 becomes unsupported.
1394)         if isinstance(vault_config, str):
1395)             with open('.vault', 'w', encoding='UTF-8') as outfile:
1396)                 print(vault_config, file=outfile)
1397)         elif isinstance(vault_config, bytes):
1398)             os.makedirs('.vault', mode=0o700, exist_ok=True)
1399)             with (
1400)                 chdir('.vault'),
1401)                 tempfile.NamedTemporaryFile(suffix='.zip') as tmpzipfile,
1402)             ):
1403)                 for line in vault_config.splitlines():
1404)                     tmpzipfile.write(base64.standard_b64decode(line))
1405)                 tmpzipfile.flush()
1406)                 tmpzipfile.seek(0, 0)
1407)                 with zipfile.ZipFile(tmpzipfile.file) as zipfileobj:
1408)                     zipfileobj.extractall()
1409)         elif vault_config is None:
1410)             pass
1411)         else:  # pragma: no cover
1412)             assert_never(vault_config)
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 3 months ago

1413)         yield
1414) 
1415) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

1419) 
1420) 
1421) def make_file_readonly(
1422)     pathname: str | bytes | os.PathLike[str],
1423)     /,
1424)     *,
1425)     try_race_free_implementation: bool = True,
1426) ) -> None:
1427)     """Mark a file as read-only.
1428) 
1429)     On POSIX, this entails removing the write permission bits for user,
1430)     group and other, and ensuring the read permission bit for user is
1431)     set.
1432) 
1433)     Unfortunately, Windows has its own rules: Set exactly(?) the read
1434)     permission bit for user to make the file read-only, and set
1435)     exactly(?) the write permission bit for user to make the file
1436)     read/write; all other permission bit settings are ignored.
1437) 
1438)     The cross-platform procedure therefore is:
1439) 
1440)     1. Call `os.stat` on the file, noting the permission bits.
1441)     2. Calculate the new permission bits POSIX-style.
1442)     3. Call `os.chmod` with permission bit `stat.S_IREAD`.
1443)     4. Call `os.chmod` with the correct POSIX-style permissions.
1444) 
1445)     If the platform supports it, we use a file descriptor instead of
1446)     a path name.  Otherwise, we use the same path name multiple times,
1447)     and are susceptible to race conditions.
1448) 
1449)     """
1450)     fname: int | str | bytes | os.PathLike[str]
1451)     if try_race_free_implementation and {os.stat, os.chmod} <= os.supports_fd:
1452)         fname = os.open(
1453)             pathname,
1454)             os.O_RDONLY
1455)             | getattr(os, 'O_CLOEXEC', 0)
1456)             | getattr(os, 'O_NOCTTY', 0),
1457)         )
1458)     else:
1459)         fname = pathname
1460)     try:
1461)         orig_mode = os.stat(fname).st_mode
1462)         new_mode = (
1463)             orig_mode & ~stat.S_IWUSR & ~stat.S_IWGRP & ~stat.S_IWOTH
1464)             | stat.S_IREAD
1465)         )
1466)         os.chmod(fname, stat.S_IREAD)
1467)         os.chmod(fname, new_mode)
1468)     finally:
1469)         if isinstance(fname, int):
1470)             os.close(fname)
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

1471) 
1472) 
1473) class ReadableResult(NamedTuple):
1474)     """Helper class for formatting and testing click.testing.Result objects."""
1475) 
1476)     exception: BaseException | None
1477)     exit_code: int
1478)     output: str
1479)     stderr: str
1480) 
1481)     @classmethod
1482)     def parse(cls, r: click.testing.Result, /) -> Self:
1483)         try:
1484)             stderr = r.stderr
1485)         except ValueError:
1486)             stderr = r.output
1487)         return cls(r.exception, r.exit_code, r.output or '', stderr or '')
1488) 
1489)     def clean_exit(
1490)         self, *, output: str = '', empty_stderr: bool = False
1491)     ) -> bool:
1492)         """Return whether the invocation exited cleanly.
1493) 
1494)         Args:
1495)             output:
1496)                 An expected output string.
1497) 
1498)         """
1499)         return (
1500)             (
1501)                 not self.exception
1502)                 or (
1503)                     isinstance(self.exception, SystemExit)
1504)                     and self.exit_code == 0
1505)                 )
1506)             )
1507)             and (not output or output in self.output)
1508)             and (not empty_stderr or not self.stderr)
1509)         )
1510) 
1511)     def error_exit(
1512)         self, *, error: str | type[BaseException] = BaseException
1513)     ) -> bool:
1514)         """Return whether the invocation exited uncleanly.
1515) 
1516)         Args:
1517)             error:
1518)                 An expected error message, or an expected numeric error
1519)                 code, or an expected exception type.
1520) 
1521)         """
Marco Ricci Add support for Python 3.9

Marco Ricci authored 2 months ago

1522)         # Use match/case here once Python 3.9 becomes unsupported.
1523)         if isinstance(error, str):
1524)             return (
1525)                 isinstance(self.exception, SystemExit)
1526)                 and self.exit_code > 0
1527)                 and (not error or error in self.stderr)
1528)             )
1529)         else:  # noqa: RET505
1530)             return isinstance(self.exception, error)