fdbea449cda2a00785dd803c43cf9dbec2995ba1
Marco Ricci Change the author e-mail ad...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 7 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months 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 2 months 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 2 months 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 2 months 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 3 months 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 Let the `running_ssh_agent`...

Marco Ricci authored 3 weeks ago

465) class RunningSSHAgentInfo(NamedTuple):
466)     socket: str
467)     agent_type: KnownSSHAgent
468) 
469) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

563)     },
564)     'rsa': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

759)     },
760) }
761) 
762) UNSUITABLE_KEYS: Mapping[str, SSHTestKey] = {
763)     'dsa1024': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

856)         'expected_signature': None,
857)         'derived_passphrase': None,
858)     },
859)     'ecdsa256': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

897)         'expected_signature': None,
898)         'derived_passphrase': None,
899)     },
900)     'ecdsa384': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

945)         'expected_signature': None,
946)         'derived_passphrase': None,
947)     },
948) }
949) 
950) DUMMY_SERVICE = 'service1'
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

952) DUMMY_KEY1 = SUPPORTED_KEYS['ed25519']['public_key_data']
953) DUMMY_KEY1_B64 = base64.standard_b64encode(DUMMY_KEY1).decode('ASCII')
954) DUMMY_KEY2 = SUPPORTED_KEYS['rsa']['public_key_data']
955) DUMMY_KEY2_B64 = base64.standard_b64encode(DUMMY_KEY2).decode('ASCII')
Marco Ricci Avoid crashing when overrid...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

958) DUMMY_CONFIG_SETTINGS = {
959)     'length': 10,
960)     'upper': 1,
961)     'lower': 1,
962)     'repeat': 5,
963)     'number': 1,
964)     'space': 1,
965)     'dash': 1,
966)     'symbol': 1,
967) }
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

979) VAULT_MASTER_KEY = 'vault key'
980) VAULT_V02_CONFIG = 'P7xeh5y4jmjpJ2pFq4KUcTVoaE9ZOEkwWmpVTURSSWQxbGt6emN4aFE4eFM3anVPbDRNTGpOLzY3eDF5aE1YTm5LNWh5Q1BwWTMwM3M5S083MWRWRFlmOXNqSFJNcStGMWFOS3c2emhiOUNNenZYTmNNMnZxaUErdlRoOGF2ZHdGT1ZLNTNLOVJQcU9jWmJrR3g5N09VcVBRZ0ZnSFNUQy9HdFVWWnFteVhRVkY3MHNBdnF2ZWFEbFBseWRGelE1c3BFTnVUckRQdWJSL29wNjFxd2Y2ZVpob3VyVzRod3FKTElTenJ1WTZacTJFOFBtK3BnVzh0QWVxcWtyWFdXOXYyenNQeFNZbWt1MDU2Vm1kVGtISWIxWTBpcWRFbyswUVJudVVhZkVlNVpGWDA4WUQ2Q2JTWW81SnlhQ2Zxa3cxNmZoQjJES0Uyd29rNXpSck5iWVBrVmEwOXFya1NpMi9saU5LL3F0M3N3MjZKekNCem9ER2svWkZ0SUJLdmlHRno0VlQzQ3pqZTBWcTM3YmRiNmJjTkhqUHZoQ0NxMW1ldW1XOFVVK3pQMEtUMkRMVGNvNHFlOG40ck5KcGhsYXg1b1VzZ1NYU1B2T3RXdEkwYzg4NWE3YWUzOWI1MDI0MThhMWZjODQ3MDA2OTJmNDQ0MDkxNGFiNmRlMGQ2YjZiNjI5NGMwN2IwMmI4MGZi'  # noqa: E501
981) VAULT_V02_CONFIG_DATA = {
982)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1059)     },
1060)     'services': {
1061)         '(meta)': {
1062)             'notes': 'This config was originally in storeroom format.',
1063)         },
1064)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
1065)     },
1066) }
1067) 
Marco Ricci Add more tests of the store...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1266) )
1267) 
Marco Ricci Test exporter data loading...

Marco Ricci authored 3 months ago

1268) skip_if_cryptography_support = pytest.mark.skipif(
1269)     importlib.util.find_spec('cryptography') is not None,
1270)     reason='cryptography support available; cannot test "no support" scenario',
1271) )
1272) skip_if_no_cryptography_support = pytest.mark.skipif(
1273)     importlib.util.find_spec('cryptography') is None,
1274)     reason='no "cryptography" support',
1275) )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1276) 
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

1289)     )
1290)     if sys.gettrace() is not None
1291)     else hypothesis.settings()
1292) )
1293) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1298)     list1 = [
1299)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1300)         for key, value in SUPPORTED_KEYS.items()
1301)     ]
1302)     list2 = [
1303)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1304)         for key, value in UNSUITABLE_KEYS.items()
1305)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

1306)     return list1 + list2
1307) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1324)     list1 = [
1325)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1326)         for key, value in SUPPORTED_KEYS.items()
1327)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

1328)     return list1[:1]
1329) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1337)     ]
1338) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1340) def phrase_from_key(key: bytes) -> bytes:
1341)     if key == DUMMY_KEY1:  # pragma: no branch
1342)         return DUMMY_PHRASE_FROM_KEY1
1343)     raise KeyError(key)  # pragma: no cover
1344) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1346) @contextlib.contextmanager
1347) def isolated_config(
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1352)     env_name = prog_name.replace(' ', '_').upper() + '_PATH'
1353)     with runner.isolated_filesystem():
1354)         monkeypatch.setenv('HOME', os.getcwd())
1355)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1356)         monkeypatch.delenv(env_name, raising=False)
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

1371)             json.dump(config, outfile)
1372)         yield
1373) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

1426)         yield
1427) 
1428) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 2 months ago

1535)         # Use match/case here once Python 3.9 becomes unsupported.
1536)         if isinstance(error, str):
1537)             return (
1538)                 isinstance(self.exception, SystemExit)
1539)                 and self.exit_code > 0
1540)                 and (not error or error in self.stderr)
1541)             )
1542)         else:  # noqa: RET505
1543)             return isinstance(self.exception, error)