23177a3206f5c0b4220d8ee496f887ed7e8cb0ab
Marco Ricci Change the author e-mail ad...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 4 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 1 month ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 4 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 3 months ago

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

Marco Ricci authored 1 month 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)     ),
Marco Ricci Fix missing consideration o...

Marco Ricci authored 4 weeks ago

158)     VaultTestConfig(
159)         {
160)             'global': {'key': '...'},
161)             'services': {'sv': {'phrase': 'abc', 'key': '...', 'length': 10}},
162)         },
163)         '',
164)         None,
165)     ),
Marco Ricci Align behavior with vault c...

Marco Ricci authored 1 month ago

166)     VaultTestConfig(
167)         {
168)             'global': {'key': '...'},
169)             'services': {
170)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
171)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
172)             },
173)         },
174)         '',
175)         None,
176)     ),
177)     VaultTestConfig(
178)         {
179)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
180)             'services': {
181)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
182)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
183)             },
184)         },
185)         '',
186)         None,
187)     ),
188)     VaultTestConfig(
189)         {
190)             'global': {'key': '...', 'unicode_normalization_form': True},
191)             'services': {},
192)         },
193)         'bad config value: global.unicode_normalization_form',
194)         None,
195)     ),
196)     VaultTestConfig(
197)         {
198)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
199)             'services': {
200)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
201)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
202)             },
203)         },
204)         '',
205)         ValidationSettings(False, True),
206)     ),
207)     VaultTestConfig(
208)         {
209)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
210)             'services': {
211)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
212)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
213)             },
214)         },
215)         'extension key: .global.unicode_normalization_form',
216)         ValidationSettings(False, False),
217)     ),
218)     VaultTestConfig(
219)         {
220)             'global': {'key': '...', 'unknown_key': True},
221)             'services': {
222)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
223)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
224)             },
225)         },
226)         '',
227)         ValidationSettings(True, False),
228)     ),
229)     VaultTestConfig(
230)         {
231)             'global': {'key': '...', 'unknown_key': True},
232)             'services': {
233)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
234)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
235)             },
236)         },
237)         'unknown key: .global.unknown_key',
238)         ValidationSettings(False, False),
239)     ),
240)     VaultTestConfig(
241)         {
242)             'global': {'key': '...'},
243)             'services': {
244)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
245)                 'sv2': {
246)                     'length': 10,
247)                     'repeat': 1,
248)                     'lower': 1,
249)                     'unknown_key': True,
250)                 },
251)             },
252)         },
253)         'unknown_key: .services.sv2.unknown_key',
254)         ValidationSettings(False, False),
255)     ),
256)     VaultTestConfig(
257)         {
258)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
259)             'services': {
260)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
261)                 'sv2': {
262)                     'length': 10,
263)                     'repeat': 1,
264)                     'lower': 1,
265)                     'unknown_key': True,
266)                 },
267)             },
268)         },
269)         '',
270)         ValidationSettings(True, True),
271)     ),
272)     VaultTestConfig(
273)         {
274)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
275)             'services': {
276)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
277)                 'sv2': {
278)                     'length': 10,
279)                     'repeat': 1,
280)                     'lower': 1,
281)                     'unknown_key': True,
282)                 },
283)             },
284)         },
285)         (
286)             'extension key (permitted): .global.unicode_normalization_form; '
287)             'unknown key: .services.sv2.unknown_key'
288)         ),
289)         ValidationSettings(False, True),
290)     ),
291)     VaultTestConfig(
292)         {
293)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
294)             'services': {
295)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
296)                 'sv2': {
297)                     'length': 10,
298)                     'repeat': 1,
299)                     'lower': 1,
300)                     'unknown_key': True,
301)                 },
302)             },
303)         },
304)         (
305)             'unknown key (permitted): .services.sv2.unknown_key; '
306)             'extension key: .global.unicode_normalization_form'
307)         ),
308)         ValidationSettings(True, False),
309)     ),
310) ]
311) 
312) 
313) def is_valid_test_config(conf: VaultTestConfig, /) -> bool:
314)     """Return true if the test config is valid.
315) 
316)     Args:
317)         conf: The test config to check.
318) 
319)     """
320)     return not conf.comment and conf.validation_settings in {
321)         None,
322)         (True, True),
323)     }
324) 
325) 
326) def _test_config_ids(val: VaultTestConfig) -> Any:  # pragma: no cover
327)     """pytest id function for VaultTestConfig objects."""
328)     assert isinstance(val, VaultTestConfig)
329)     return val[1] or (val[0], val[1], val[2])
330) 
331) 
Marco Ricci Move vault service config g...

Marco Ricci authored 4 weeks ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 1 month ago

453) class KnownSSHAgent(str, enum.Enum):
454)     UNKNOWN: str = '(unknown)'
455)     Pageant: str = 'Pageant'
456)     OpenSSHAgent: str = 'OpenSSHAgent'
457) 
458) 
459) class SpawnedSSHAgentInfo(NamedTuple):
460)     agent_type: KnownSSHAgent
461)     client: ssh_agent.SSHAgentClient
462)     isolated: bool
463) 
464) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

468) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
469) QyNTUxOQAAACCBeIFoJtYCSF8P/zJIb+TBMIncHGpFBgnpCQ/7whJpdgAAAKDweO7H8Hju
470) xwAAAAtzc2gtZWQyNTUxOQAAACCBeIFoJtYCSF8P/zJIb+TBMIncHGpFBgnpCQ/7whJpdg
471) AAAEAbM/A869nkWZbe2tp3Dm/L6gitvmpH/aRZt8sBII3ExYF4gWgm1gJIXw//Mkhv5MEw
472) idwcakUGCekJD/vCEml2AAAAG3Rlc3Qga2V5IHdpdGhvdXQgcGFzc3BocmFzZQEC
473) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 3 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

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

Marco Ricci authored 4 months ago

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

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

510) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAASgAAAAlz
511) c2gtZWQ0NDgAAAA54vZy009Wu8wExjvEb3hqtLz1GO/+d5vmGUbErWQ4AUO9mYLT
512) zHJHc2m4s+yWzP29Cc3EcxizLG8AAAAA8BdhfCcXYXwnAAAACXNzaC1lZDQ0OAAA
513) ADni9nLTT1a7zATGO8RveGq0vPUY7/53m+YZRsStZDgBQ72ZgtPMckdzabiz7JbM
514) /b0JzcRzGLMsbwAAAAByM7GIMRvWJB3YD6SIpAF2uudX4ozZe0X917wPwiBrs373
515) 9TM1n94Nib6hrxGNmCk2iBQDe2KALPgA4vZy009Wu8wExjvEb3hqtLz1GO/+d5vm
516) GUbErWQ4AUO9mYLTzHJHc2m4s+yWzP29Cc3EcxizLG8AAAAAG3Rlc3Qga2V5IHdp
517) dGhvdXQgcGFzc3BocmFzZQECAwQFBgcICQ==
518) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 3 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 1 month ago

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

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

Marco Ricci authored 4 months ago

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

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

558)     },
559)     'rsa': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

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

Marco Ricci authored 4 months ago

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

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

Marco Ricci authored 3 months ago

753)         '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 4 months ago

754)     },
755) }
756) 
757) UNSUITABLE_KEYS: Mapping[str, SSHTestKey] = {
758)     'dsa1024': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

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

Marco Ricci authored 4 months ago

851)         'expected_signature': None,
852)         'derived_passphrase': None,
853)     },
854)     'ecdsa256': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

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

Marco Ricci authored 4 months ago

892)         'expected_signature': None,
893)         'derived_passphrase': None,
894)     },
895)     'ecdsa384': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

928)             00 00 00 13
929)             65 63 64 73 61 2d 73 68 61 32 2d 6e 69 73 74 70
930)             33 38 34
931)             00 00 00 08 6e 69 73 74 70 33 38 34
932)             00 00 00 61 04
933)             a0 90 e8 e4 02 fa bb bf 9b c7 ba 3d ca 04 be 3f
934)             10 05 9c 9f 98 59 0f 22 9c 6f 25 74 78 13 06 16
935)             ae e1 29 74 25 66 a2 1a 84 b5 6a 78 c4 74 42 a9
936)             a4 c4 d2 76 ae 5c b6 54 77 17 9d ea b7 bd 9f bd
937)             7c 8b 16 08 e7 58 93 95 8f dc d6 4f ce ff 75 d5
938)             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 3 months ago

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

Marco Ricci authored 4 months ago

940)         'expected_signature': None,
941)         'derived_passphrase': None,
942)     },
943) }
944) 
945) DUMMY_SERVICE = 'service1'
Marco Ricci Clean up testing machinery...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 4 months ago

947) DUMMY_KEY1 = SUPPORTED_KEYS['ed25519']['public_key_data']
948) DUMMY_KEY1_B64 = base64.standard_b64encode(DUMMY_KEY1).decode('ASCII')
949) DUMMY_KEY2 = SUPPORTED_KEYS['rsa']['public_key_data']
950) DUMMY_KEY2_B64 = base64.standard_b64encode(DUMMY_KEY2).decode('ASCII')
Marco Ricci Avoid crashing when overrid...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

953) DUMMY_CONFIG_SETTINGS = {
954)     'length': 10,
955)     'upper': 1,
956)     'lower': 1,
957)     'repeat': 5,
958)     'number': 1,
959)     'space': 1,
960)     'dash': 1,
961)     'symbol': 1,
962) }
Marco Ricci Rename and regroup all test...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 2 months ago

974) VAULT_MASTER_KEY = 'vault key'
975) VAULT_V02_CONFIG = 'P7xeh5y4jmjpJ2pFq4KUcTVoaE9ZOEkwWmpVTURSSWQxbGt6emN4aFE4eFM3anVPbDRNTGpOLzY3eDF5aE1YTm5LNWh5Q1BwWTMwM3M5S083MWRWRFlmOXNqSFJNcStGMWFOS3c2emhiOUNNenZYTmNNMnZxaUErdlRoOGF2ZHdGT1ZLNTNLOVJQcU9jWmJrR3g5N09VcVBRZ0ZnSFNUQy9HdFVWWnFteVhRVkY3MHNBdnF2ZWFEbFBseWRGelE1c3BFTnVUckRQdWJSL29wNjFxd2Y2ZVpob3VyVzRod3FKTElTenJ1WTZacTJFOFBtK3BnVzh0QWVxcWtyWFdXOXYyenNQeFNZbWt1MDU2Vm1kVGtISWIxWTBpcWRFbyswUVJudVVhZkVlNVpGWDA4WUQ2Q2JTWW81SnlhQ2Zxa3cxNmZoQjJES0Uyd29rNXpSck5iWVBrVmEwOXFya1NpMi9saU5LL3F0M3N3MjZKekNCem9ER2svWkZ0SUJLdmlHRno0VlQzQ3pqZTBWcTM3YmRiNmJjTkhqUHZoQ0NxMW1ldW1XOFVVK3pQMEtUMkRMVGNvNHFlOG40ck5KcGhsYXg1b1VzZ1NYU1B2T3RXdEkwYzg4NWE3YWUzOWI1MDI0MThhMWZjODQ3MDA2OTJmNDQ0MDkxNGFiNmRlMGQ2YjZiNjI5NGMwN2IwMmI4MGZi'  # noqa: E501
976) VAULT_V02_CONFIG_DATA = {
977)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

979)     },
980)     'services': {
981)         '(meta)': {
982)             'notes': 'This config was originally in v0.2 format.',
983)         },
984)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
985)     },
986) }
987) VAULT_V03_CONFIG = 'sBPBrr8BFHPxSJkV/A53zk9zwDQHFxLe6UIusCVvzFQre103pcj5xxmE11lMTA0U2QTYjkhRXKkH5WegSmYpAnzReuRsYZlWWp6N4kkubf+twZ9C3EeggPm7as2Af4TICHVbX4uXpIHeQJf9y1OtqrO+SRBrgPBzgItoxsIxebxVKgyvh1CZQOSkn7BIzt9xKhDng3ubS4hQ91fB0QCumlldTbUl8tj4Xs5JbvsSlUMxRlVzZ0OgAOrSsoWELXmsp6zXFa9K6wIuZa4wQuMLQFHiA64JO1CR3I+rviWCeMlbTOuJNx6vMB5zotKJqA2hIUpN467TQ9vI4g/QTo40m5LT2EQKbIdTvBQAzcV4lOcpr5Lqt4LHED5mKvm/4YfpuuT3I3XCdWfdG5SB7ciiB4Go+xQdddy3zZMiwm1fEwIB8XjFf2cxoJdccLQ2yxf+9diedBP04EsMHrvxKDhQ7/vHl7xF2MMFTDKl3WFd23vvcjpR1JgNAKYprG/e1p/7'  # noqa: E501
988) VAULT_V03_CONFIG_DATA = {
989)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

1054)     },
1055)     'services': {
1056)         '(meta)': {
1057)             'notes': 'This config was originally in storeroom format.',
1058)         },
1059)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
1060)     },
1061) }
1062) 
Marco Ricci Add more tests of the store...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 1 month ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

1261) )
1262) 
Marco Ricci Test exporter data loading...

Marco Ricci authored 2 months ago

1263) skip_if_cryptography_support = pytest.mark.skipif(
1264)     importlib.util.find_spec('cryptography') is not None,
1265)     reason='cryptography support available; cannot test "no support" scenario',
1266) )
1267) skip_if_no_cryptography_support = pytest.mark.skipif(
1268)     importlib.util.find_spec('cryptography') is None,
1269)     reason='no "cryptography" support',
1270) )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 3 months ago

1271) 
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 1 month ago

1272) hypothesis_settings_coverage_compatible = (
1273)     hypothesis.settings(
1274)         # Running under coverage with the Python tracer increases
1275)         # running times 40-fold, on my machines.  Sadly, not every
1276)         # Python version offers the C tracer, so sometimes the Python
1277)         # tracer is used anyway.
1278)         deadline=(
1279)             40 * deadline
1280)             if (deadline := hypothesis.settings().deadline) is not None
1281)             else None
1282)         ),
Marco Ricci Manage health checks in cen...

Marco Ricci authored 1 month ago

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

Marco Ricci authored 1 month ago

1284)     )
1285)     if sys.gettrace() is not None
1286)     else hypothesis.settings()
1287) )
1288) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1293)     list1 = [
1294)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1295)         for key, value in SUPPORTED_KEYS.items()
1296)     ]
1297)     list2 = [
1298)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1299)         for key, value in UNSUITABLE_KEYS.items()
1300)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 4 months ago

1301)     return list1 + list2
1302) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 3 months ago

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

Marco Ricci authored 1 month ago

1304) def sign(
1305)     self: Any, key: bytes | bytearray, message: bytes | bytearray
1306) ) -> bytes:
1307)     del self  # Unused.
1308)     assert message == vault.Vault._UUID
1309)     for value in SUPPORTED_KEYS.values():
1310)         if value['public_key_data'] == key:  # pragma: no branch
1311)             assert value['expected_signature'] is not None
1312)             return value['expected_signature']
1313)     raise AssertionError
1314) 
1315) 
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1319)     list1 = [
1320)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1321)         for key, value in SUPPORTED_KEYS.items()
1322)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 4 months ago

1323)     return list1[:1]
1324) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

1332)     ]
1333) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

1335) def phrase_from_key(key: bytes) -> bytes:
1336)     if key == DUMMY_KEY1:  # pragma: no branch
1337)         return DUMMY_PHRASE_FROM_KEY1
1338)     raise KeyError(key)  # pragma: no cover
1339) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

1341) @contextlib.contextmanager
1342) def isolated_config(
Marco Ricci Clean up testing machinery...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

1347)     env_name = prog_name.replace(' ', '_').upper() + '_PATH'
1348)     with runner.isolated_filesystem():
1349)         monkeypatch.setenv('HOME', os.getcwd())
1350)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1351)         monkeypatch.delenv(env_name, raising=False)
Marco Ricci Rename the configuration fi...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

1354)         yield
1355) 
1356) 
1357) @contextlib.contextmanager
1358) def isolated_vault_config(
1359)     monkeypatch: pytest.MonkeyPatch,
1360)     runner: click.testing.CliRunner,
1361)     config: Any,
1362) ) -> Iterator[None]:
1363)     with isolated_config(monkeypatch=monkeypatch, runner=runner):
Marco Ricci Rename the configuration fi...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 4 months ago

1366)             json.dump(config, outfile)
1367)         yield
1368) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 3 months ago

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

Marco Ricci authored 2 months ago

1370) @contextlib.contextmanager
1371) def isolated_vault_exporter_config(
1372)     monkeypatch: pytest.MonkeyPatch,
1373)     runner: click.testing.CliRunner,
1374)     vault_config: str | bytes | None = None,
1375)     vault_key: str | None = None,
1376) ) -> Iterator[None]:
1377)     if TYPE_CHECKING:
1378)         chdir = contextlib.chdir
1379)     else:
1380)         try:
1381)             chdir = contextlib.chdir
1382)         except AttributeError:
1383) 
1384)             @contextlib.contextmanager
Marco Ricci Move exporter command-line...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

1386)                 oldpath = os.getcwd()
1387)                 os.chdir(newpath)
1388)                 yield
1389)                 os.chdir(oldpath)
1390) 
1391)     with runner.isolated_filesystem():
1392)         monkeypatch.setenv('HOME', os.getcwd())
1393)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1394)         monkeypatch.delenv('VAULT_PATH', raising=False)
1395)         monkeypatch.delenv('VAULT_KEY', raising=False)
1396)         monkeypatch.delenv('LOGNAME', raising=False)
1397)         monkeypatch.delenv('USER', raising=False)
1398)         monkeypatch.delenv('USERNAME', raising=False)
1399)         if vault_key is not None:
1400)             monkeypatch.setenv('VAULT_KEY', vault_key)
Marco Ricci Add support for Python 3.9

Marco Ricci authored 1 month ago

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

Marco Ricci authored 2 months ago

1421)         yield
1422) 
1423) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 1 month ago

1530)         # Use match/case here once Python 3.9 becomes unsupported.
1531)         if isinstance(error, str):
1532)             return (
1533)                 isinstance(self.exception, SystemExit)
1534)                 and self.exit_code > 0
1535)                 and (not error or error in self.stderr)
1536)             )
1537)         else:  # noqa: RET505
1538)             return isinstance(self.exception, error)