837e57d2ce6c317d5ba483d88baddbdccfae03df
Marco Ricci Change the author e-mail ad...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 7 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

45) class ValidationSettings(NamedTuple):
46)     allow_unknown_settings: bool
47)     allow_derivepassphrase_extensions: bool
48) 
49) 
50) class VaultTestConfig(NamedTuple):
51)     config: Any
52)     comment: str
53)     validation_settings: ValidationSettings | None
54) 
55) 
56) TEST_CONFIGS: list[VaultTestConfig] = [
57)     VaultTestConfig(None, 'not a dict', None),
58)     VaultTestConfig({}, 'missing required keys', None),
59)     VaultTestConfig(
60)         {'global': None, 'services': {}}, 'bad config value: global', None
61)     ),
62)     VaultTestConfig(
63)         {'global': {'key': 123}, 'services': {}},
64)         'bad config value: global.key',
65)         None,
66)     ),
67)     VaultTestConfig(
68)         {'global': {'phrase': 'abc', 'key': '...'}, 'services': {}},
69)         '',
70)         None,
71)     ),
72)     VaultTestConfig({'services': None}, 'bad config value: services', None),
73)     VaultTestConfig(
74)         {'services': {'1': {}, 2: {}}}, 'bad config value: services."2"', None
75)     ),
76)     VaultTestConfig(
77)         {'services': {'1': {}, '2': 2}}, 'bad config value: services."2"', None
78)     ),
79)     VaultTestConfig(
80)         {'services': {'sv': {'notes': ['sentinel', 'list']}}},
81)         'bad config value: services.sv.notes',
82)         None,
83)     ),
84)     VaultTestConfig(
85)         {'services': {'sv': {'notes': 'blah blah blah'}}}, '', None
86)     ),
87)     VaultTestConfig(
88)         {'services': {'sv': {'length': '200'}}},
89)         'bad config value: services.sv.length',
90)         None,
91)     ),
92)     VaultTestConfig(
93)         {'services': {'sv': {'length': 0.5}}},
94)         'bad config value: services.sv.length',
95)         None,
96)     ),
97)     VaultTestConfig(
98)         {'services': {'sv': {'length': ['sentinel', 'list']}}},
99)         'bad config value: services.sv.length',
100)         None,
101)     ),
102)     VaultTestConfig(
103)         {'services': {'sv': {'length': -10}}},
104)         'bad config value: services.sv.length',
105)         None,
106)     ),
107)     VaultTestConfig(
108)         {'services': {'sv': {'lower': '10'}}},
109)         'bad config value: services.sv.lower',
110)         None,
111)     ),
112)     VaultTestConfig(
113)         {'services': {'sv': {'upper': -10}}},
114)         'bad config value: services.sv.upper',
115)         None,
116)     ),
117)     VaultTestConfig(
118)         {'services': {'sv': {'number': ['sentinel', 'list']}}},
119)         'bad config value: services.sv.number',
120)         None,
121)     ),
122)     VaultTestConfig(
123)         {
124)             'global': {'phrase': 'my secret phrase'},
125)             'services': {'sv': {'length': 10}},
126)         },
127)         '',
128)         None,
129)     ),
130)     VaultTestConfig(
131)         {'services': {'sv': {'length': 10, 'phrase': '...'}}}, '', None
132)     ),
133)     VaultTestConfig(
134)         {'services': {'sv': {'length': 10, 'key': '...'}}}, '', None
135)     ),
136)     VaultTestConfig(
137)         {'services': {'sv': {'upper': 10, 'key': '...'}}}, '', None
138)     ),
139)     VaultTestConfig(
140)         {'services': {'sv': {'phrase': 'abc', 'key': '...'}}}, '', None
141)     ),
142)     VaultTestConfig(
143)         {
144)             'global': {'phrase': 'abc'},
145)             'services': {'sv': {'phrase': 'abc', 'length': 10}},
146)         },
147)         '',
148)         None,
149)     ),
150)     VaultTestConfig(
151)         {
152)             'global': {'key': '...'},
153)             'services': {'sv': {'phrase': 'abc', 'length': 10}},
154)         },
155)         '',
156)         None,
157)     ),
158)     VaultTestConfig(
159)         {
160)             'global': {'key': '...'},
161)             'services': {
162)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
163)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
164)             },
165)         },
166)         '',
167)         None,
168)     ),
169)     VaultTestConfig(
170)         {
171)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
172)             'services': {
173)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
174)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
175)             },
176)         },
177)         '',
178)         None,
179)     ),
180)     VaultTestConfig(
181)         {
182)             'global': {'key': '...', 'unicode_normalization_form': True},
183)             'services': {},
184)         },
185)         'bad config value: global.unicode_normalization_form',
186)         None,
187)     ),
188)     VaultTestConfig(
189)         {
190)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
191)             'services': {
192)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
193)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
194)             },
195)         },
196)         '',
197)         ValidationSettings(False, True),
198)     ),
199)     VaultTestConfig(
200)         {
201)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
202)             'services': {
203)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
204)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
205)             },
206)         },
207)         'extension key: .global.unicode_normalization_form',
208)         ValidationSettings(False, False),
209)     ),
210)     VaultTestConfig(
211)         {
212)             'global': {'key': '...', 'unknown_key': True},
213)             'services': {
214)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
215)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
216)             },
217)         },
218)         '',
219)         ValidationSettings(True, False),
220)     ),
221)     VaultTestConfig(
222)         {
223)             'global': {'key': '...', 'unknown_key': True},
224)             'services': {
225)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
226)                 'sv2': {'length': 10, 'repeat': 1, 'lower': 1},
227)             },
228)         },
229)         'unknown key: .global.unknown_key',
230)         ValidationSettings(False, False),
231)     ),
232)     VaultTestConfig(
233)         {
234)             'global': {'key': '...'},
235)             'services': {
236)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
237)                 'sv2': {
238)                     'length': 10,
239)                     'repeat': 1,
240)                     'lower': 1,
241)                     'unknown_key': True,
242)                 },
243)             },
244)         },
245)         'unknown_key: .services.sv2.unknown_key',
246)         ValidationSettings(False, False),
247)     ),
248)     VaultTestConfig(
249)         {
250)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
251)             'services': {
252)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
253)                 'sv2': {
254)                     'length': 10,
255)                     'repeat': 1,
256)                     'lower': 1,
257)                     'unknown_key': True,
258)                 },
259)             },
260)         },
261)         '',
262)         ValidationSettings(True, True),
263)     ),
264)     VaultTestConfig(
265)         {
266)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
267)             'services': {
268)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
269)                 'sv2': {
270)                     'length': 10,
271)                     'repeat': 1,
272)                     'lower': 1,
273)                     'unknown_key': True,
274)                 },
275)             },
276)         },
277)         (
278)             'extension key (permitted): .global.unicode_normalization_form; '
279)             'unknown key: .services.sv2.unknown_key'
280)         ),
281)         ValidationSettings(False, True),
282)     ),
283)     VaultTestConfig(
284)         {
285)             'global': {'key': '...', 'unicode_normalization_form': 'NFC'},
286)             'services': {
287)                 'sv1': {'phrase': 'abc', 'length': 10, 'upper': 1},
288)                 'sv2': {
289)                     'length': 10,
290)                     'repeat': 1,
291)                     'lower': 1,
292)                     'unknown_key': True,
293)                 },
294)             },
295)         },
296)         (
297)             'unknown key (permitted): .services.sv2.unknown_key; '
298)             'extension key: .global.unicode_normalization_form'
299)         ),
300)         ValidationSettings(True, False),
301)     ),
302) ]
303) 
304) 
305) def is_valid_test_config(conf: VaultTestConfig, /) -> bool:
306)     """Return true if the test config is valid.
307) 
308)     Args:
309)         conf: The test config to check.
310) 
311)     """
312)     return not conf.comment and conf.validation_settings in {
313)         None,
314)         (True, True),
315)     }
316) 
317) 
318) def _test_config_ids(val: VaultTestConfig) -> Any:  # pragma: no cover
319)     """pytest id function for VaultTestConfig objects."""
320)     assert isinstance(val, VaultTestConfig)
321)     return val[1] or (val[0], val[1], val[2])
322) 
323) 
324) def is_smudgable_vault_test_config(conf: VaultTestConfig) -> bool:
325)     """Check whether this vault test config can be effectively smudged.
326) 
327)     A "smudged" test config is one where falsy values (in the JavaScript
328)     sense) can be replaced by other falsy values without changing the
329)     meaning of the config.
330) 
331)     Args:
332)         conf: A test config to check.
333) 
334)     Returns:
335)         True if the test config can be smudged, False otherwise.
336) 
337)     """
338)     config = conf.config
339)     return bool(
340)         isinstance(config, dict)
341)         and ('global' not in config or isinstance(config['global'], dict))
342)         and ('services' in config and isinstance(config['services'], dict))
343)         and all(isinstance(x, dict) for x in config['services'].values())
344)         and (config['services'] or config.get('global'))
345)     )
346) 
347) 
348) @strategies.composite
349) def smudged_vault_test_config(
350)     draw: strategies.DrawFn,
351)     config: Any = strategies.sampled_from(TEST_CONFIGS).filter(  # noqa: B008
352)         is_smudgable_vault_test_config
353)     ),
354) ) -> Any:
355)     """Hypothesis strategy to replace falsy values with other falsy values.
356) 
357)     Uses [`_types.js_truthiness`][] internally, which is tested
358)     separately by
359)     [`tests.test_derivepassphrase_types.test_100_js_truthiness`][].
360) 
361)     Args:
362)         draw:
363)             The hypothesis draw function.
364)         config:
365)             A strategy which generates [`VaultTestConfig`][] objects.
366) 
367)     Returns:
368)         A new [`VaultTestConfig`][] where some falsy values have been
369)         replaced or added.
370) 
371)     """
372) 
373)     falsy = (None, False, 0, 0.0, '', float('nan'))
374)     falsy_no_str = (None, False, 0, 0.0, float('nan'))
375)     falsy_no_zero = (None, False, '', float('nan'))
376)     conf = draw(config)
377)     hypothesis.assume(is_smudgable_vault_test_config(conf))
378)     obj = copy.deepcopy(conf.config)
379)     services: list[dict[str, Any]] = list(obj['services'].values())
380)     if 'global' in obj:
381)         services.append(obj['global'])
382)     assert all(isinstance(x, dict) for x in services), (
383)         'is_smudgable_vault_test_config guard failed to '
384)         'ensure each setings dict is a dict'
385)     )
386)     for service in services:
387)         for key in ('phrase',):
388)             value = service.get(key)
389)             if not _types.js_truthiness(value) and value != '':
390)                 service[key] = draw(strategies.sampled_from(falsy_no_str))
391)         for key in (
392)             'notes',
393)             'key',
394)             'length',
395)             'repeat',
396)         ):
397)             value = service.get(key)
398)             if not _types.js_truthiness(value):
399)                 service[key] = draw(strategies.sampled_from(falsy))
400)         for key in (
401)             'lower',
402)             'upper',
403)             'number',
404)             'space',
405)             'dash',
406)             'symbol',
407)         ):
408)             value = service.get(key)
409)             if not _types.js_truthiness(value) and value != 0:
410)                 service[key] = draw(strategies.sampled_from(falsy_no_zero))
411)     hypothesis.assume(obj != conf.config)
412)     return VaultTestConfig(obj, conf.comment, conf.validation_settings)
413) 
414) 
Marco Ricci Add test fixture for manual...

Marco Ricci authored 3 months ago

415) class KnownSSHAgent(str, enum.Enum):
416)     UNKNOWN: str = '(unknown)'
417)     Pageant: str = 'Pageant'
418)     OpenSSHAgent: str = 'OpenSSHAgent'
419) 
420) 
421) class SpawnedSSHAgentInfo(NamedTuple):
422)     agent_type: KnownSSHAgent
423)     client: ssh_agent.SSHAgentClient
424)     isolated: bool
425) 
426) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

430) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
431) QyNTUxOQAAACCBeIFoJtYCSF8P/zJIb+TBMIncHGpFBgnpCQ/7whJpdgAAAKDweO7H8Hju
432) xwAAAAtzc2gtZWQyNTUxOQAAACCBeIFoJtYCSF8P/zJIb+TBMIncHGpFBgnpCQ/7whJpdg
433) AAAEAbM/A869nkWZbe2tp3Dm/L6gitvmpH/aRZt8sBII3ExYF4gWgm1gJIXw//Mkhv5MEw
434) idwcakUGCekJD/vCEml2AAAAG3Rlc3Qga2V5IHdpdGhvdXQgcGFzc3BocmFzZQEC
435) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

437)         'private_key_blob': bytes.fromhex("""
438)             00 00 00 0b 73 73 68 2d 65 64 32 35 35 31 39
439)             00 00 00 20
440)             81 78 81 68 26 d6 02 48 5f 0f ff 32 48 6f e4 c1
441)             30 89 dc 1c 6a 45 06 09 e9 09 0f fb c2 12 69 76
442)             00 00 00 40
443)             1b 33 f0 3c eb d9 e4 59 96 de da da 77 0e 6f cb
444)             ea 08 ad be 6a 47 fd a4 59 b7 cb 01 20 8d c4 c5
445)             81 78 81 68 26 d6 02 48 5f 0f ff 32 48 6f e4 c1
446)             30 89 dc 1c 6a 45 06 09 e9 09 0f fb c2 12 69 76
447)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69 74
448)             68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
449) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

453)             00 00 00 0b 73 73 68 2d 65 64 32 35 35 31 39
454)             00 00 00 20
455)             81 78 81 68 26 d6 02 48 5f 0f ff 32 48 6f e4 c1
456)             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

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

Marco Ricci authored 5 months ago

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

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

472) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAASgAAAAlz
473) c2gtZWQ0NDgAAAA54vZy009Wu8wExjvEb3hqtLz1GO/+d5vmGUbErWQ4AUO9mYLT
474) zHJHc2m4s+yWzP29Cc3EcxizLG8AAAAA8BdhfCcXYXwnAAAACXNzaC1lZDQ0OAAA
475) ADni9nLTT1a7zATGO8RveGq0vPUY7/53m+YZRsStZDgBQ72ZgtPMckdzabiz7JbM
476) /b0JzcRzGLMsbwAAAAByM7GIMRvWJB3YD6SIpAF2uudX4ozZe0X917wPwiBrs373
477) 9TM1n94Nib6hrxGNmCk2iBQDe2KALPgA4vZy009Wu8wExjvEb3hqtLz1GO/+d5vm
478) GUbErWQ4AUO9mYLTzHJHc2m4s+yWzP29Cc3EcxizLG8AAAAAG3Rlc3Qga2V5IHdp
479) dGhvdXQgcGFzc3BocmFzZQECAwQFBgcICQ==
480) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

482)         'private_key_blob': bytes.fromhex("""
483)             00 00 00 09 73 73 68 2d 65 64 34 34 38
484)             00 00 00 39 e2 f6 72 d3 4f 56 bb cc 04
485)             c6 3b c4 6f 78 6a b4 bc f5 18 ef fe 77 9b e6 19
486)             46 c4 ad 64 38 01 43 bd 99 82 d3 cc 72 47 73 69
487)             b8 b3 ec 96 cc fd bd 09 cd c4 73 18 b3 2c 6f 00
488)             00 00 00 72 33 b1
489)             88 31 1b d6 24 1d d8 0f a4 88 a4 01 76 ba e7 57
490)             e2 8c d9 7b 45 fd d7 bc 0f c2 20 6b b3 7e f7 f5
491)             33 35 9f de 0d 89 be a1 af 11 8d 98 29 36 88 14
492)             03 7b 62 80 2c f8 00 e2 f6 72 d3 4f 56 bb cc 04
493)             c6 3b c4 6f 78 6a b4 bc f5 18 ef fe 77 9b e6 19
494)             46 c4 ad 64 38 01 43 bd 99 82 d3 cc 72 47 73 69
495)             b8 b3 ec 96 cc fd bd 09 cd c4 73 18 b3 2c 6f 00
496)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
497)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
498) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

502)             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

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

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

Marco Ricci authored 5 months ago

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

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

520)     },
521)     'rsa': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

523) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
524) NhAAAAAwEAAQAAAYEAsaHu6Xs4cVsuDSNJlMCqoPVgmDgEviI8TfXmHKqX3JkIqI3LsvV7
525) Ijf8WCdTveEq7CkuZhImtsR52AOEVAoU8mDXDNr+nJ5wUPzf1UIaRjDe0lcXW4SlF01hQs
526) G4wYDuqxshwelraB/L3e0zhD7fjYHF8IbFsqGlFHWEwOtlfhhfbxJsTGguLm4A8/gdEJD5
527) 2rkqDcZpIXCHtJbCzW9aQpWcs/PDw5ylwl/3dB7jfxyfrGz4O3QrzsqhWEsip97mOmwl6q
528) CHbq8V8x9zu89D/H+bG5ijqxhijbjcVUW3lZfw/97gy9J6rG31HNar5H8GycLTFwuCFepD
529) mTEpNgQLKoe8ePIEPq4WHhFUovBdwlrOByUKKqxreyvWt5gkpTARz+9Lt8OjBO3rpqK8sZ
530) VKH3sE3de2RJM3V9PJdmZSs2b8EFK3PsUGdlMPM9pn1uk4uIItKWBmooOynuD8Ll6aPwuW
531) AFn3l8nLLyWdrmmEYzHWXiRjQJxy1Bi5AbHMOWiPAAAFkDPkuBkz5LgZAAAAB3NzaC1yc2
532) EAAAGBALGh7ul7OHFbLg0jSZTAqqD1YJg4BL4iPE315hyql9yZCKiNy7L1eyI3/FgnU73h
533) KuwpLmYSJrbEedgDhFQKFPJg1wza/pyecFD839VCGkYw3tJXF1uEpRdNYULBuMGA7qsbIc
534) Hpa2gfy93tM4Q+342BxfCGxbKhpRR1hMDrZX4YX28SbExoLi5uAPP4HRCQ+dq5Kg3GaSFw
535) h7SWws1vWkKVnLPzw8OcpcJf93Qe438cn6xs+Dt0K87KoVhLIqfe5jpsJeqgh26vFfMfc7
536) vPQ/x/mxuYo6sYYo243FVFt5WX8P/e4MvSeqxt9RzWq+R/BsnC0xcLghXqQ5kxKTYECyqH
537) vHjyBD6uFh4RVKLwXcJazgclCiqsa3sr1reYJKUwEc/vS7fDowTt66aivLGVSh97BN3Xtk
538) STN1fTyXZmUrNm/BBStz7FBnZTDzPaZ9bpOLiCLSlgZqKDsp7g/C5emj8LlgBZ95fJyy8l
539) na5phGMx1l4kY0CcctQYuQGxzDlojwAAAAMBAAEAAAF/cNVYT+Om4x9+SItcz5bOByGIOj
540) yWUH8f9rRjnr5ILuwabIDgvFaVG+xM1O1hWADqzMnSEcknHRkTYEsqYPykAtxFvjOFEh70
541) 6qRUJ+fVZkqRGEaI3oWyWKTOhcCIYImtONvb0LOv/HQ2H2AXCoeqjST1qr/xSuljBtcB8u
542) wxs3EqaO1yU7QoZpDcMX9plH7Rmc9nNfZcgrnktPk2deX2+Y/A5tzdVgG1IeqYp6CBMLNM
543) uhL0OPdDehgBoDujx+rhkZ1gpo1wcULIM94NL7VSHBPX0Lgh9T+3j1HVP+YnMAvhfOvfct
544) LlbJ06+TYGRAMuF2LPCAZM/m0FEyAurRgWxAjLXm+4kp2GAJXlw82deDkQ+P8cHNT6s9ZH
545) R5YSy3lpZ35594ZMOLR8KqVvhgJGF6i9019BiF91SDxjE+sp6dNGfN8W+64tHdDv2a0Mso
546) +8Qjyx7sTpi++EjLU8Iy73/e4B8qbXMyheyA/UUfgMtNKShh6sLlrD9h2Sm9RFTuEAAADA
547) Jh3u7WfnjhhKZYbAW4TsPNXDMrB0/t7xyAQgFmko7JfESyrJSLg1cO+QMOiDgD7zuQ9RSp
548) NIKdPsnIna5peh979mVjb2HgnikjyJECmBpLdwZKhX7MnIvgKw5lnQXHboEtWCa1N58l7f
549) srzwbi9pFUuUp9dShXNffmlUCjDRsVLbK5C6+iaIQyCWFYK8mc6dpNkIoPKf+Xg+EJCIFQ
550) oITqeu30Gc1+M+fdZc2ghq0b6XLthh/uHEry8b68M5KglMAAAAwQDw1i+IdcvPV/3u/q9O
551) /kzLpKO3tbT89sc1zhjZsDNjDAGluNr6n38iq/XYRZu7UTL9BG+EgFVfIUV7XsYT5e+BPf
552) 13VS94rzZ7maCsOlULX+VdMO2zBucHIoec9RUlRZrfB21B2W7YGMhbpoa5lN3lKJQ7afHo
553) dXZUMp0cTFbOmbzJgSzO2/NE7BhVwmvcUzTDJGMMKuxBO6w99YKDKRKm0PNLFDz26rWm9L
554) dNS2MVfVuPMTpzT26HQG4pFageq9cAAADBALzRBXdZF8kbSBa5MTUBVTTzgKQm1C772gJ8
555) T01DJEXZsVtOv7mUC1/m/by6Hk4tPyvDBuGj9hHq4N7dPqGutHb1q5n0ADuoQjRW7BXw5Q
556) vC2EAD91xexdorIA5BgXU+qltBqzzBVzVtF7+jOZOjfzOlaTX9I5I5veyeTaTxZj1XXUzi
557) btBNdMEJJp7ifucYmoYAAwE7K+VlWagDEK2y8Mte9y9E+N0uO2j+h85sQt/UIb2iE/vhcg
558) Bgp6142WnSCQAAABt0ZXN0IGtleSB3aXRob3V0IHBhc3NwaHJhc2UB
559) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

659)             00 00 00 07 73 73 68 2d 72 73 61
660)             00 00 00 03 01 00 01
661)             00 00 01 81 00
662)             b1 a1 ee e9 7b 38 71 5b 2e 0d 23 49 94 c0 aa a0
663)             f5 60 98 38 04 be 22 3c 4d f5 e6 1c aa 97 dc 99
664)             08 a8 8d cb b2 f5 7b 22 37 fc 58 27 53 bd e1 2a
665)             ec 29 2e 66 12 26 b6 c4 79 d8 03 84 54 0a 14 f2
666)             60 d7 0c da fe 9c 9e 70 50 fc df d5 42 1a 46 30
667)             de d2 57 17 5b 84 a5 17 4d 61 42 c1 b8 c1 80 ee
668)             ab 1b 21 c1 e9 6b 68 1f cb dd ed 33 84 3e df 8d
669)             81 c5 f0 86 c5 b2 a1 a5 14 75 84 c0 eb 65 7e 18
670)             5f 6f 12 6c 4c 68 2e 2e 6e 00 f3 f8 1d 10 90 f9
671)             da b9 2a 0d c6 69 21 70 87 b4 96 c2 cd 6f 5a 42
672)             95 9c b3 f3 c3 c3 9c a5 c2 5f f7 74 1e e3 7f 1c
673)             9f ac 6c f8 3b 74 2b ce ca a1 58 4b 22 a7 de e6
674)             3a 6c 25 ea a0 87 6e af 15 f3 1f 73 bb cf 43 fc
675)             7f 9b 1b 98 a3 ab 18 62 8d b8 dc 55 45 b7 95 97
676)             f0 ff de e0 cb d2 7a ac 6d f5 1c d6 ab e4 7f 06
677)             c9 c2 d3 17 0b 82 15 ea 43 99 31 29 36 04 0b 2a
678)             87 bc 78 f2 04 3e ae 16 1e 11 54 a2 f0 5d c2 5a
679)             ce 07 25 0a 2a ac 6b 7b 2b d6 b7 98 24 a5 30 11
680)             cf ef 4b b7 c3 a3 04 ed eb a6 a2 bc b1 95 4a 1f
681)             7b 04 dd d7 b6 44 93 37 57 d3 c9 76 66 52 b3 66
682)             fc 10 52 b7 3e c5 06 76 53 0f 33 da 67 d6 e9 38
683)             b8 82 2d 29 60 66 a2 83 b2 9e e0 fc 2e 5e 9a 3f
684)             0b 96 00 59 f7 97 c9 cb 2f 25 9d ae 69 84 63 31
685)             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

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

Marco Ricci authored 5 months ago

688)             00 00 00 07 73 73 68 2d 72 73 61
689)             00 00 01 80
690)             a2 10 7c 2e f6 bb 53 a8 74 2a a1 19 99 ad 81 be
691)             79 9c ed d6 9d 09 4e 6e c5 18 48 33 90 77 99 68
692)             f7 9e 03 5a cd 4e 18 eb 89 7d 85 a2 ee ae 4a 92
693)             f6 6f ce b9 fe 86 7f 2a 6b 31 da 6e 1a fe a2 a5
694)             88 b8 44 7f a1 76 73 b3 ec 75 b5 d0 a6 b9 15 97
695)             65 09 13 7d 94 21 d1 fb 5d 0f 8b 23 04 77 c2 c3
696)             55 22 b1 a0 09 8a f5 38 2a d6 7f 1b 87 29 a0 25
697)             d3 25 6f cb 64 61 07 98 dc 14 c5 84 f8 92 24 5e
698)             50 11 6b 49 e5 f0 cc 29 cb 29 a9 19 d8 a7 71 1f
699)             91 0b 05 b1 01 4b c2 5f 00 a5 b6 21 bf f8 2c 9d
700)             67 9b 47 3b 0a 49 6b 79 2d fc 1d ec 0c b0 e5 27
701)             22 d5 a9 f8 d3 c3 f9 df 48 68 e9 fb ef 3c dc 26
702)             bf cf ea 29 43 01 a6 e3 c5 51 95 f4 66 6d 8a 55
703)             e2 47 ec e8 30 45 4c ae 47 e7 c9 a4 21 8b 64 ba
704)             b6 88 f6 21 f8 73 b9 cb 11 a1 78 75 92 c6 5a e5
705)             64 fe ed 42 d9 95 99 e6 2b 6f 3c 16 3c 28 74 a4
706)             72 2f 0d 3f 2c 33 67 aa 35 19 8e e7 b5 11 2f b3
707)             f7 6a c5 02 e2 6f a3 42 e3 62 19 99 03 ea a5 20
708)             e7 a1 e3 bc c8 06 a3 b5 7c d6 76 5d df 6f 60 46
709)             83 2a 08 00 d6 d3 d9 a4 c1 41 8c f8 60 56 45 81
710)             da 3b a2 16 1f 9e 4e 75 83 17 da c3 53 c3 3e 19
711)             a4 1b bc d2 29 b8 78 61 2b 78 e6 b1 52 b0 d5 ec
712)             de 69 2c 48 62 d9 fd d1 9b 6b b0 49 db d3 ff 38
713)             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

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

Marco Ricci authored 5 months ago

715)         '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

716)     },
717) }
718) 
719) UNSUITABLE_KEYS: Mapping[str, SSHTestKey] = {
720)     'dsa1024': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

722) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABsQAAAAdzc2gtZH
723) NzAAAAgQC7KAZXqBGNVLBQPrcMYAoNW54BhD8aIhe7BDWYzJcsaMt72VKSkguZ8+XR7nRa
724) 0C/ZsBi+uJp0dpxy9ZMTOWX4u5YPMeQcXEdGExZIfimGqSOAsy6fCld2IfJZJZExcCmhe9
725) Ssjsd3YSAPJRluOXFQc95MZoR5hMwlIDD8QzrE7QAAABUA99nOZOgd7aHMVGoXpUEBcn7H
726) ossAAACALr2Ag3hxM3rKdxzVUw8fX0VVPXO+3+Kr8hGe0Kc/7NwVaBVL1GQ8fenBuWynpA
727) UbH0wo3h1wkB/8hX6p+S8cnu5rIBlUuVNwLw/bIYohK98LfqTYK/V+g6KD+8m34wvEiXZm
728) qywY54n2bksch1Nqvj/tNpLzExSx/XS0kSM1aigAAACAbQNRPcVEuGDrEcf+xg5tgAejPX
729) BPXr/Jss+Chk64km3mirMYjAWyWYtVcgT+7hOYxtYRin8LyMLqKRmqa0Q5UrvDfChgLhvs
730) G9YSb/Mpw5qm8PiHSafwhkaz/te3+8hKogqoe7sd+tCF06IpJr5k70ACiNtRGqssNF8Elr
731) l1efYAAAH4swlfVrMJX1YAAAAHc3NoLWRzcwAAAIEAuygGV6gRjVSwUD63DGAKDVueAYQ/
732) GiIXuwQ1mMyXLGjLe9lSkpILmfPl0e50WtAv2bAYvriadHaccvWTEzll+LuWDzHkHFxHRh
733) MWSH4phqkjgLMunwpXdiHyWSWRMXApoXvUrI7Hd2EgDyUZbjlxUHPeTGaEeYTMJSAw/EM6
734) xO0AAAAVAPfZzmToHe2hzFRqF6VBAXJ+x6LLAAAAgC69gIN4cTN6yncc1VMPH19FVT1zvt
735) /iq/IRntCnP+zcFWgVS9RkPH3pwblsp6QFGx9MKN4dcJAf/IV+qfkvHJ7uayAZVLlTcC8P
736) 2yGKISvfC36k2Cv1foOig/vJt+MLxIl2ZqssGOeJ9m5LHIdTar4/7TaS8xMUsf10tJEjNW
737) ooAAAAgG0DUT3FRLhg6xHH/sYObYAHoz1wT16/ybLPgoZOuJJt5oqzGIwFslmLVXIE/u4T
738) mMbWEYp/C8jC6ikZqmtEOVK7w3woYC4b7BvWEm/zKcOapvD4h0mn8IZGs/7Xt/vISqIKqH
739) u7HfrQhdOiKSa+ZO9AAojbURqrLDRfBJa5dXn2AAAAFQDJHfenj4EJ9WkehpdJatPBlqCW
740) 0gAAABt0ZXN0IGtleSB3aXRob3V0IHBhc3NwaHJhc2UBAgMEBQYH
741) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

743)         'private_key_blob': bytes.fromhex("""
744)             00 00 00 07 73 73 68 2d 64 73 73
745)             00 00 00 81 00
746)             bb 28 06 57 a8 11 8d 54 b0 50 3e b7 0c 60 0a 0d
747)             5b 9e 01 84 3f 1a 22 17 bb 04 35 98 cc 97 2c 68
748)             cb 7b d9 52 92 92 0b 99 f3 e5 d1 ee 74 5a d0 2f
749)             d9 b0 18 be b8 9a 74 76 9c 72 f5 93 13 39 65 f8
750)             bb 96 0f 31 e4 1c 5c 47 46 13 16 48 7e 29 86 a9
751)             23 80 b3 2e 9f 0a 57 76 21 f2 59 25 91 31 70 29
752)             a1 7b d4 ac 8e c7 77 61 20 0f 25 19 6e 39 71 50
753)             73 de 4c 66 84 79 84 cc 25 20 30 fc 43 3a c4 ed
754)             00 00 00 15 00 f7 d9 ce 64
755)             e8 1d ed a1 cc 54 6a 17 a5 41 01 72 7e c7 a2 cb
756)             00 00 00 80
757)             2e bd 80 83 78 71 33 7a ca 77 1c d5 53 0f 1f 5f
758)             45 55 3d 73 be df e2 ab f2 11 9e d0 a7 3f ec dc
759)             15 68 15 4b d4 64 3c 7d e9 c1 b9 6c a7 a4 05 1b
760)             1f 4c 28 de 1d 70 90 1f fc 85 7e a9 f9 2f 1c 9e
761)             ee 6b 20 19 54 b9 53 70 2f 0f db 21 8a 21 2b df
762)             0b 7e a4 d8 2b f5 7e 83 a2 83 fb c9 b7 e3 0b c4
763)             89 76 66 ab 2c 18 e7 89 f6 6e 4b 1c 87 53 6a be
764)             3f ed 36 92 f3 13 14 b1 fd 74 b4 91 23 35 6a 28
765)             00 00 00 80
766)             6d 03 51 3d c5 44 b8 60 eb 11 c7 fe c6 0e 6d 80
767)             07 a3 3d 70 4f 5e bf c9 b2 cf 82 86 4e b8 92 6d
768)             e6 8a b3 18 8c 05 b2 59 8b 55 72 04 fe ee 13 98
769)             c6 d6 11 8a 7f 0b c8 c2 ea 29 19 aa 6b 44 39 52
770)             bb c3 7c 28 60 2e 1b ec 1b d6 12 6f f3 29 c3 9a
771)             a6 f0 f8 87 49 a7 f0 86 46 b3 fe d7 b7 fb c8 4a
772)             a2 0a a8 7b bb 1d fa d0 85 d3 a2 29 26 be 64 ef
773)             40 02 88 db 51 1a ab 2c 34 5f 04 96 b9 75 79 f6
774)             00 00 00 15 00 c9 1d f7 a7
775)             8f 81 09 f5 69 1e 86 97 49 6a d3 c1 96 a0 96 d2
776)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
777)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
778) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

813)         'expected_signature': None,
814)         'derived_passphrase': None,
815)     },
816)     'ecdsa256': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

818) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS
819) 1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTLbU0zDwsk2Dvp+VYIrsNVf5gWwz2S
820) 3SZ8TbxiQRkpnGSVqyIoHJOJc+NQItAa7xlJ/8Z6gfz57Z3apUkaMJm6AAAAuKeY+YinmP
821) mIAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMttTTMPCyTYO+n5
822) Vgiuw1V/mBbDPZLdJnxNvGJBGSmcZJWrIigck4lz41Ai0BrvGUn/xnqB/PntndqlSRowmb
823) oAAAAhAKIl/3n0pKVIxpZkXTGtii782Qr4yIcvHdpxjO/QsIqKAAAAG3Rlc3Qga2V5IHdp
824) dGhvdXQgcGFzc3BocmFzZQECAwQ=
825) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

827)         'private_key_blob': bytes.fromhex("""
828)             00 00 00 13 65 63 64
829)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 32 35 36
830)             00 00 00 08 6e 69 73 74 70 32 35 36
831)             00 00 00 41 04
832)             cb 6d 4d 33 0f 0b 24 d8 3b e9 f9 56 08 ae c3 55
833)             7f 98 16 c3 3d 92 dd 26 7c 4d bc 62 41 19 29 9c
834)             64 95 ab 22 28 1c 93 89 73 e3 50 22 d0 1a ef 19
835)             49 ff c6 7a 81 fc f9 ed 9d da a5 49 1a 30 99 ba
836)             00 00 00 21 00
837)             a2 25 ff 79 f4 a4 a5 48 c6 96 64 5d 31 ad 8a 2e
838)             fc d9 0a f8 c8 87 2f 1d da 71 8c ef d0 b0 8a 8a
839)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
840)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
841) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

845)             00 00 00 13 65 63 64 73 61 2d 73 68 61 32 2d 6e
846)             69 73 74 70 32 35 36
847)             00 00 00 08 6e 69 73 74 70 32 35 36
848)             00 00 00 41 04
849)             cb 6d 4d 33 0f 0b 24 d8 3b e9 f9 56 08 ae c3 55
850)             7f 98 16 c3 3d 92 dd 26 7c 4d bc 62 41 19 29 9c
851)             64 95 ab 22 28 1c 93 89 73 e3 50 22 d0 1a ef 19
852)             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

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

Marco Ricci authored 5 months ago

854)         'expected_signature': None,
855)         'derived_passphrase': None,
856)     },
857)     'ecdsa384': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

859) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAiAAAABNlY2RzYS
860) 1zaGEyLW5pc3RwMzg0AAAACG5pc3RwMzg0AAAAYQSgkOjkAvq7v5vHuj3KBL4/EAWcn5hZ
861) DyKcbyV0eBMGFq7hKXQlZqIahLVqeMR0QqmkxNJ2rly2VHcXneq3vZ+9fIsWCOdYk5WP3N
862) ZPzv911Xn7wbEkC7QndD5zKlm4pBUAAADomhj+IZoY/iEAAAATZWNkc2Etc2hhMi1uaXN0
863) cDM4NAAAAAhuaXN0cDM4NAAAAGEEoJDo5AL6u7+bx7o9ygS+PxAFnJ+YWQ8inG8ldHgTBh
864) au4Sl0JWaiGoS1anjEdEKppMTSdq5ctlR3F53qt72fvXyLFgjnWJOVj9zWT87/ddV5+8Gx
865) JAu0J3Q+cypZuKQVAAAAMQD5sTy8p+B1cn/DhOmXquui1BcxvASqzzevkBlbQoBa73y04B
866) 2OdqVOVRkwZWRROz0AAAAbdGVzdCBrZXkgd2l0aG91dCBwYXNzcGhyYXNlAQIDBA==
867) -----END OPENSSH PRIVATE KEY-----
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

869)         'private_key_blob': bytes.fromhex("""
870)             00 00 00 13 65 63 64
871)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 33 38 34
872)             00 00 00 08 6e 69 73 74 70 33 38 34
873)             00 00 00 61 04
874)             a0 90 e8 e4 02 fa bb bf 9b c7 ba 3d ca 04 be 3f
875)             10 05 9c 9f 98 59 0f 22 9c 6f 25 74 78 13 06 16
876)             ae e1 29 74 25 66 a2 1a 84 b5 6a 78 c4 74 42 a9
877)             a4 c4 d2 76 ae 5c b6 54 77 17 9d ea b7 bd 9f bd
878)             7c 8b 16 08 e7 58 93 95 8f dc d6 4f ce ff 75 d5
879)             79 fb c1 b1 24 0b b4 27 74 3e 73 2a 59 b8 a4 15
880)             00 00 00 31 00
881)             f9 b1 3c bc a7 e0 75 72 7f c3 84 e9 97 aa eb a2
882)             d4 17 31 bc 04 aa cf 37 af 90 19 5b 42 80 5a ef
883)             7c b4 e0 1d 8e 76 a5 4e 55 19 30 65 64 51 3b 3d
884)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
885)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
886) """),
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

890)             00 00 00 13
891)             65 63 64 73 61 2d 73 68 61 32 2d 6e 69 73 74 70
892)             33 38 34
893)             00 00 00 08 6e 69 73 74 70 33 38 34
894)             00 00 00 61 04
895)             a0 90 e8 e4 02 fa bb bf 9b c7 ba 3d ca 04 be 3f
896)             10 05 9c 9f 98 59 0f 22 9c 6f 25 74 78 13 06 16
897)             ae e1 29 74 25 66 a2 1a 84 b5 6a 78 c4 74 42 a9
898)             a4 c4 d2 76 ae 5c b6 54 77 17 9d ea b7 bd 9f bd
899)             7c 8b 16 08 e7 58 93 95 8f dc d6 4f ce ff 75 d5
900)             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

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

Marco Ricci authored 5 months ago

902)         'expected_signature': None,
903)         'derived_passphrase': None,
904)     },
905) }
906) 
907) DUMMY_SERVICE = 'service1'
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

909) DUMMY_KEY1 = SUPPORTED_KEYS['ed25519']['public_key_data']
910) DUMMY_KEY1_B64 = base64.standard_b64encode(DUMMY_KEY1).decode('ASCII')
911) DUMMY_KEY2 = SUPPORTED_KEYS['rsa']['public_key_data']
912) DUMMY_KEY2_B64 = base64.standard_b64encode(DUMMY_KEY2).decode('ASCII')
Marco Ricci Avoid crashing when overrid...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

915) DUMMY_CONFIG_SETTINGS = {
916)     'length': 10,
917)     'upper': 1,
918)     'lower': 1,
919)     'repeat': 5,
920)     'number': 1,
921)     'space': 1,
922)     'dash': 1,
923)     'symbol': 1,
924) }
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

934) 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

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

Marco Ricci authored 3 months ago

936) VAULT_MASTER_KEY = 'vault key'
937) VAULT_V02_CONFIG = 'P7xeh5y4jmjpJ2pFq4KUcTVoaE9ZOEkwWmpVTURSSWQxbGt6emN4aFE4eFM3anVPbDRNTGpOLzY3eDF5aE1YTm5LNWh5Q1BwWTMwM3M5S083MWRWRFlmOXNqSFJNcStGMWFOS3c2emhiOUNNenZYTmNNMnZxaUErdlRoOGF2ZHdGT1ZLNTNLOVJQcU9jWmJrR3g5N09VcVBRZ0ZnSFNUQy9HdFVWWnFteVhRVkY3MHNBdnF2ZWFEbFBseWRGelE1c3BFTnVUckRQdWJSL29wNjFxd2Y2ZVpob3VyVzRod3FKTElTenJ1WTZacTJFOFBtK3BnVzh0QWVxcWtyWFdXOXYyenNQeFNZbWt1MDU2Vm1kVGtISWIxWTBpcWRFbyswUVJudVVhZkVlNVpGWDA4WUQ2Q2JTWW81SnlhQ2Zxa3cxNmZoQjJES0Uyd29rNXpSck5iWVBrVmEwOXFya1NpMi9saU5LL3F0M3N3MjZKekNCem9ER2svWkZ0SUJLdmlHRno0VlQzQ3pqZTBWcTM3YmRiNmJjTkhqUHZoQ0NxMW1ldW1XOFVVK3pQMEtUMkRMVGNvNHFlOG40ck5KcGhsYXg1b1VzZ1NYU1B2T3RXdEkwYzg4NWE3YWUzOWI1MDI0MThhMWZjODQ3MDA2OTJmNDQ0MDkxNGFiNmRlMGQ2YjZiNjI5NGMwN2IwMmI4MGZi'  # noqa: E501
938) VAULT_V02_CONFIG_DATA = {
939)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

941)     },
942)     'services': {
943)         '(meta)': {
944)             'notes': 'This config was originally in v0.2 format.',
945)         },
946)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
947)     },
948) }
949) VAULT_V03_CONFIG = 'sBPBrr8BFHPxSJkV/A53zk9zwDQHFxLe6UIusCVvzFQre103pcj5xxmE11lMTA0U2QTYjkhRXKkH5WegSmYpAnzReuRsYZlWWp6N4kkubf+twZ9C3EeggPm7as2Af4TICHVbX4uXpIHeQJf9y1OtqrO+SRBrgPBzgItoxsIxebxVKgyvh1CZQOSkn7BIzt9xKhDng3ubS4hQ91fB0QCumlldTbUl8tj4Xs5JbvsSlUMxRlVzZ0OgAOrSsoWELXmsp6zXFa9K6wIuZa4wQuMLQFHiA64JO1CR3I+rviWCeMlbTOuJNx6vMB5zotKJqA2hIUpN467TQ9vI4g/QTo40m5LT2EQKbIdTvBQAzcV4lOcpr5Lqt4LHED5mKvm/4YfpuuT3I3XCdWfdG5SB7ciiB4Go+xQdddy3zZMiwm1fEwIB8XjFf2cxoJdccLQ2yxf+9diedBP04EsMHrvxKDhQ7/vHl7xF2MMFTDKl3WFd23vvcjpR1JgNAKYprG/e1p/7'  # noqa: E501
950) VAULT_V03_CONFIG_DATA = {
951)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

953)     },
954)     'services': {
955)         '(meta)': {
956)             'notes': 'This config was originally in v0.3 format.',
957)         },
958)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
959)     },
960) }
961) VAULT_STOREROOM_CONFIG_ZIPPED = b"""
962) UEsDBBQAAAAIAJ1WGVnTVFGT0gAAAOYAAAAFAAAALmtleXMFwclSgzAAANC7n9GrBzBldcYDE5Al
963) EKbFAvGWklBAtqYsBcd/973fw8LFox76w/vb34tzhD5OATeEAk6tJ6Fbp3WrvkJO7l0KIjtxCLfY
964) ORm8ScEDPbNkyVwGLmZNTuQzXPMl/GnLO0I2PmUhRcxSj2Iy6PUy57up4thL6zndYwtyORpyCTGy
965) ibbjIeq/K/9atsHkl680nwsKFVk1i97gbGhG4gC5CMS8aUx8uebuToRCDsAT61UQVp0yEjw1bhm1
966) 6UPWzM2wyfMGMyY1ox5HH/9QSwMEFAAAAAgAnVYZWd1pX+EFAwAA1AMAAAIAAAAwMA3ON7abQAAA
967) wP4fwy0FQUR3ZASLYEkCOnKOEtHPd7e7KefPr71YP800/vqN//3hAywvUaCcTYb6TbKS/kYcVnvG
968) wGA5N8ksjpFNCu5BZGu953GdoVnOfN6PNXoluWOS2JzO23ELNJ2m9nDn0uDhwC39VHJT1pQdejIw
969) CovQTEWmBH53FJufhNSZKQG5s1fMcw9hqn3NbON6wRDquOjLe/tqWkG1yiQDSF5Ail8Wd2UaA7vo
970) 40QorG1uOBU7nPlDx/cCTDpSqwTZDkkAt6Zy9RT61NUZqHSMIgKMerj3njXOK+1q5sA/upSGvMrN
971) 7/JpSEhcmu7GDvQJ8TyLos6vPCSmxO6RRG3X4BLpqHkTgeqHz+YDZwTV+6y5dvSmTSsCP5uPCmi+
972) 7r9irZ1m777iL2R8NFH0QDIo1GFsy1NrUvWq4TGuvVIbkHrML5mFdR6ajNhRjL/6//1crYAMLHxo
973) qkjGz2Wck2dmRd96mFFAfdQ1/BqDgi6X/KRwHL9VmhpdjcKJhuE04xLYgTCyKLv8TkFfseNAbN3N
974) 7KvVW7QVF97W50pzXzy3Ea3CatNQkJ1DnkR0vc0dsHd1Zr0o1acUaAa65B2yjYXCk3TFlMo9TNce
975) OWBXzJrpaZ4N7bscdwCF9XYesSMpxBDpwyCIVyJ8tHZVf/iS4pE6u+XgvD42yef+ujhM/AyboqPk
976) sFNV/XoNpmWIySdkTMmwu72q1GfPqr01ze/TzCVrCe0KkFcZhe77jrLPOnRCIarF2c9MMHNfmguU
977) A0tJ8HodQb/zehL6C9KSiNWfG+NlK1Dro1sGKhiJETLMFru272CNlwQJmzTHuKAXuUvJmQCfmLfL
978) EPrxoE08fu+v6DKnSopnG8GTkbscPZ+K5q2kC6m7pCizKO1sLKG7fMBRnJxnel/vmpY2lFCB4ADy
979) no+dvqBl6z3X/ji9AFXC9X8HRd+8u57OS1zV4OhiVd7hMy1U8F5qbIBms+FS6QbL9NhIb2lFN4VO
980) 3+ITZz1sPJBl68ZgJWOV6O4F5cAHGKl/UEsDBBQAAAAIAJ1WGVn9pqLBygEAACsCAAACAAAAMDMN
981) z8mWa0AAANB9f0ZvLZQhyDsnC0IMJShDBTuzJMZoktLn/ft79w/u7/dWvZb7OHz/Yf5+yYUBMTNK
982) RrCI1xIQs67d6yI6bM75waX0gRLdKMGyC5O2SzBLs57V4+bqxo5xI2DraLTVeniUXLxkLyjRnC4u
983) 24Vp+7p+ppt9DlVNNZp7rskQDOe47mbgViNeE5oXpg/oDgTcfQYNvt8V0OoyKbIiNymOW/mB3hze
984) D1EHqTWQvFZB5ANGpLMM0U10xWYAClzuVJXKm/n/8JgVaobY38IjzxXyk4iPkQUuYtws73Kan871
985) R3mZa7/j0pO6Wu0LuoV+czp9yZEH/SU42lCgjEsZ9Mny3tHaF09QWU4oB7HI+LBhKnFJ9c0bHEky
986) OooHgzgTIa0y8fbpst30PEUwfUAS+lYzPXG3y+QUiy5nrJFPb0IwESd9gIIOVSfZK63wvD5ueoxj
987) O9bn2gutSFT6GO17ibguhXtItAjPbZWfyyQqHRyeBcpT7qbzQ6H1Of5clEqVdNcetAg8ZMKoWTbq
988) /vSSQ2lpkEqT0tEQo7zwKBzeB37AysB5hhDCPn1gUTER6d+1S4dzwO7HhDf9kG+3botig2Xm1Dz9
989) A1BLAwQUAAAACACdVhlZs14oCcgBAAArAgAAAgAAADA5BcHJkqIwAADQe39GXz2wE5gqDxAGQRZF
990) QZZbDIFG2YwIga7593nv93sm9N0M/fcf4d+XcUlVE+kvustz3BU7FjHOaW+u6TRsfNKzLh74mO1w
991) IXUlM/2sGKKuY5sYrW5N+oGqit2zLBYv57mFvH/S8pWGYDGzUnU1CdTL3B4Yix+Hk8E/+m0cSi2E
992) dnAibw1brWVXM++8iYcUg84TMbJXntFYCyrNw1NF+008I02PeH4C8oDID6fIoKvsw3p7WJJ/I9Yp
993) a6oJzlJiP5JGxRxZPj50N6EMtzNB+tZoIGxgtOFVpiJ05yMQFztY6I6LKIgvXW/s919GIjGshqdM
994) XVPFxaKG4p9Iux/xazf48FY8O7SMmbQC1VsXIYo+7eSpIY67VzrCoh41wXPklOWS6CV8RR/JBSqq
995) 8lHkcz8L21lMCOrVR1Cs0ls4HLIhUkqr9YegTJ67VM7xevUsgOI7BkPDldiulRgX+sdPheCyCacu
996) e7/b/nk0SXWF7ZBxsR1awYqwkFKz41/1bZDsETsmd8n1DHycGIvRULv3yYhKcvWQ4asAMhP1ks5k
997) AgOcrM+JFvpYA86Ja8HCqCg8LihEI1e7+m8F71Lpavv/UEsDBBQAAAAIAJ1WGVnKO2Ji+AEAAGsC
998) AAACAAAAMWENx7dyo0AAANDen+GWAonMzbggLsJakgGBOhBLlGBZsjz373eve7+fKyJTM/Sff85/
999) P5QMwMFfAWipfXwvFPWU582cd3t7JVV5pBV0Y1clL4eKUd0w1m1M5JrkgW5PlfpOVedgABSe4zPY
1000) LnSIZVuen5Eua9QY8lQ7rxW7YIqeajhgLfL54BIcY90fd8ANixlcM8V23Z03U35Txba0BbSguc0f
1001) NRF83cWp+7rOYgNO9wWLs915oQmWAqAtqRYCiWlgAtxYFg0MnNS4/G80FvFmQTh0cjwcF1xEVPeW
1002) l72ky84PEA0QMgRtQW+HXWtE0/vQTtNKzvNqPfrGZCldL5nk9PWhhPEQ/azyW11bz2eB+aM0g0r7
1003) 0/5YkO9er10YonsBT1rEn0lfBXDHwtwbxG2bdqELTuEtX2+OEih7K43rN2EvpXX47azaNpe/drIz
1004) wgAdhpfZ/mZwaGFX0c7r5HCTnroNRi5Bx/vu7m1A7Nt1dix4Gl/aPLCWQzpwmdIMJDiqD1RGpc5v
1005) +pDLrpfhZOVhLjAPSQ0V7mm/XNSca8oIsDjwdvR438RQCU56mrlypklS4/tJAe0JZNZIgBmJszjG
1006) AFbsmNYTJ9GmULB9lXmTWmrME592S285iWU5SsJcE1s+3oQw9QrvWB+e3bGAd9e+VFmFqr6+/gFQ
1007) SwECHgMUAAAACACdVhlZ01RRk9IAAADmAAAABQAAAAAAAAABAAAApIEAAAAALmtleXNQSwECHgMU
1008) AAAACACdVhlZ3Wlf4QUDAADUAwAAAgAAAAAAAAABAAAApIH1AAAAMDBQSwECHgMUAAAACACdVhlZ
1009) /aaiwcoBAAArAgAAAgAAAAAAAAABAAAApIEaBAAAMDNQSwECHgMUAAAACACdVhlZs14oCcgBAAAr
1010) AgAAAgAAAAAAAAABAAAApIEEBgAAMDlQSwECHgMUAAAACACdVhlZyjtiYvgBAABrAgAAAgAAAAAA
1011) AAABAAAApIHsBwAAMWFQSwUGAAAAAAUABQDzAAAABAoAAAAA
1012) """
1013) VAULT_STOREROOM_CONFIG_DATA = {
1014)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1016)     },
1017)     'services': {
1018)         '(meta)': {
1019)             'notes': 'This config was originally in storeroom format.',
1020)         },
1021)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
1022)     },
1023) }
1024) 
Marco Ricci Add more tests of the store...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

1030) await store._storeroom.put('/services/array/', ['entry1','entry2'])
1031) // The resulting "broken-dir" was then zipped manually.
1032) """
1033) VAULT_STOREROOM_BROKEN_DIR_CONFIG_ZIPPED = b"""
1034) UEsDBBQAAgAIAHijH1kjc0ql0gAAAOYAAAAFAAAALmtleXMFwclygjAAANB7P8Mrh7LIYmd6oGxC
1035) HKwTJJgbNpBKCpGAhNTpv/e952ZpxHTjw+bN+HuJJABEikvHecD0pLgpgYKWjue0CZGk19mKF+4f
1036) 0AoLrXKh+ckk13nmxVk/KFE28eEHkBgJTISvRUVMQ0N5aRapLgWs/M7NSXV7qs0s2aIEstUG5FHv
1037) fo/HKjpdUJMGK86vs2rOJFGyrx9ZK4iWW+LefwSTYxhYOlWpb0PpgXsV4dHNTz5skcJqpPUudZf9
1038) jCFD0vxChL6ajm0P0prY+z9QSwMEFAACAAgAeKMfWX4L7vDYAQAAPwIAAAIAAAAwNQXByZKiMAAA
1039) 0Ht/Rl85sIR1qvqAouxbJAG8kWYxgCKICEzNv897f7+XanrR4fH9h//3pVdF8qmVeWjW+STwSbak
1040) 4e3CS00h2AcrQIcghm0lOcrLdJfuaOFqg5zEsW9lTbJMtIId5ezNGM9jPKaxeriXXm45pGuHCwFP
1041) /gmcXKWGeU3sHfj93iIf6p0xrfQIGGJOvayKjzypUqb99Bllo9IwNP2FZjxmBWDw0NRzJrxr/4Qj
1042) qp4ted4f91ZaR8+64C0BJBzDngElJEFLdA2WBcip2R/VZIG219WT3JlkbFrYSjhHWeb47igytTpo
1043) USPjEJWVol0cVpD6iX1/mGM2BpHAFa+fLx3trXgbXaVmjyZVzUKDh/XqnovnLs529UGYCAdj8Xnx
1044) vWwfWclm5uIB8cHbElx6G82Zs8RQnkDsyGVDbNaMOO7lMQF7o1Uy7Q9GuSWcFMK4KBAbcwm4l8RY
1045) +2ema46H3/S31IW1LOFpoZxjwyBS69dWS7/ulVxJfbuydMvZMeWpmerjUHnKaQdumibSeSOXh+zg
1046) XU6w6SsKAjHWXCTjRehWmyNnI7z3+epr1RzUlnDcUMiYQ/seaNefgNx4jIbOw92FC2hxnZOJupK9
1047) M1WVdH3+8x9QSwMEFAACAAgAeKMfWUXRU2i7AQAAFwIAAAIAAAAxYQ3QyZZjUAAA0H19Rm2zCGLs
1048) c2rxzDMxBTtTEA8hnqlO/3v3/YT7+71W86cdh+8/+N8vUMGNNAjWlNHgsyBlwCpgBd/a2rrW0qwg
1049) p/CmvT4PTpwjHztJ2T10Jc2Fc8O7eHQb9MawAbxSKscxFAjz5wnJviaOMT5kEIZS+ibU6GgqU61P
1050) lbeYRIiNCfK1VeHMFCpUhZ1ipnh50kux5N2jph5aMvc+HOR3lQgx9MJpMzQ2oNxSfEm7wZ5s0GYb
1051) Bgy2xwaEMXNRnbzlbijZJi0M7yXNKS7nS1uFMtsapEc204YOBbOY4VK6L/9jS2ez56ybGkQPfn6+
1052) QCwTqvkR5ieuRhF0zcoPLld+OUlI0RfEPnYHKEG7gtSya/Z1Hh77Xq4ytJHdr7WmXt7BUFA8Sffm
1053) obXI31UOyVNLW0y4WMKDWq+atKGbU5BDUayoITMqvCteAZfJvnR4kZftMaFEG5ln7ptpdzpl10m3
1054) G2rgUwTjPBJKomnOtJpdwm1tXm6IMPQ6IPy7oMDC5JjrmxAPXwdPnY/i07Go6EKSYjbkj8vdj/BR
1055) rAMe2wnzdJaRhKv8kPVG1VqNdzm6xLb/Cf8AUEsDBBQAAgAIAHijH1kaCPeauQEAABcCAAACAAAA
1056) MWUFwTmyokAAAND8H+OnBAKyTpVBs8iOIG2zZM0OigJCg07N3ee9v7+kmt/d6/n7h/n3AyJEvoaD
1057) gtd8f4RxATnaHVeGNjyuolVVL+mY8Tms5ldfgYseNYMzRYJj3+i3iUgqlT5D1r7j1Bh5qVzi14X0
1058) jpuH7DBKeeot2jWI5mPubptvV567pX2U3OC6ccxWmyo2Dd3ehUkbPP4uiDgWDZzFg/fFETIawMng
1059) ahWHB2cfc2bM2kugNhWLS4peUBp36UWqMpF6+sLeUxAVZ24u08MDNMpNk81VDgiftnfBTBBhBGm0
1060) RNpzxMMOPnCx3RRFgttiJTydfkB9MeZ9pvxP9jUm/fndQfJI83CsBxcEWhbjzlEparc3VS2s4LjR
1061) 3Xafw3HLSlPqylHOWK2vc2ZJoObwqrCaFRg7kz1+z08SGu8pe0EHaII6FSxL7VM+rfVgpc1045Ut
1062) 6ayCQ0TwRL5m4oMYkZbFnivCBTY3Cdji2SQ+gh8m3A6YkFxXUH0Vz9Is8JZaLFyi24GjyZZ9rGuk
1063) Y6w53oLyTF/fSzG24ghCDZ6pOgB5qyfk4z2mUmH7pwxNCoHZ1oaxeTSn039QSwECHgMUAAIACAB4
1064) ox9ZI3NKpdIAAADmAAAABQAAAAAAAAABAAAApIEAAAAALmtleXNQSwECHgMUAAIACAB4ox9Zfgvu
1065) 8NgBAAA/AgAAAgAAAAAAAAABAAAApIH1AAAAMDVQSwECHgMUAAIACAB4ox9ZRdFTaLsBAAAXAgAA
1066) AgAAAAAAAAABAAAApIHtAgAAMWFQSwECHgMUAAIACAB4ox9ZGgj3mrkBAAAXAgAAAgAAAAAAAAAB
1067) AAAApIHIBAAAMWVQSwUGAAAAAAQABADDAAAAoQYAAAAA
1068) """
1069) 
Marco Ricci Add remaining tests to the...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1223) )
1224) 
Marco Ricci Test exporter data loading...

Marco Ricci authored 3 months ago

1225) skip_if_cryptography_support = pytest.mark.skipif(
1226)     importlib.util.find_spec('cryptography') is not None,
1227)     reason='cryptography support available; cannot test "no support" scenario',
1228) )
1229) skip_if_no_cryptography_support = pytest.mark.skipif(
1230)     importlib.util.find_spec('cryptography') is None,
1231)     reason='no "cryptography" support',
1232) )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

1233) 
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 2 months ago

1234) hypothesis_settings_coverage_compatible = (
1235)     hypothesis.settings(
1236)         # Running under coverage with the Python tracer increases
1237)         # running times 40-fold, on my machines.  Sadly, not every
1238)         # Python version offers the C tracer, so sometimes the Python
1239)         # tracer is used anyway.
1240)         deadline=(
1241)             40 * deadline
1242)             if (deadline := hypothesis.settings().deadline) is not None
1243)             else None
1244)         ),
Marco Ricci Manage health checks in cen...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

1246)     )
1247)     if sys.gettrace() is not None
1248)     else hypothesis.settings()
1249) )
1250) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1255)     list1 = [
1256)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1257)         for key, value in SUPPORTED_KEYS.items()
1258)     ]
1259)     list2 = [
1260)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1261)         for key, value in UNSUITABLE_KEYS.items()
1262)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

1263)     return list1 + list2
1264) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

1266) def sign(
1267)     self: Any, key: bytes | bytearray, message: bytes | bytearray
1268) ) -> bytes:
1269)     del self  # Unused.
1270)     assert message == vault.Vault._UUID
1271)     for value in SUPPORTED_KEYS.values():
1272)         if value['public_key_data'] == key:  # pragma: no branch
1273)             assert value['expected_signature'] is not None
1274)             return value['expected_signature']
1275)     raise AssertionError
1276) 
1277) 
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1281)     list1 = [
1282)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1283)         for key, value in SUPPORTED_KEYS.items()
1284)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

1285)     return list1[:1]
1286) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1294)     ]
1295) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1297) def phrase_from_key(key: bytes) -> bytes:
1298)     if key == DUMMY_KEY1:  # pragma: no branch
1299)         return DUMMY_PHRASE_FROM_KEY1
1300)     raise KeyError(key)  # pragma: no cover
1301) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1303) @contextlib.contextmanager
1304) def isolated_config(
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1309)     env_name = prog_name.replace(' ', '_').upper() + '_PATH'
1310)     with runner.isolated_filesystem():
1311)         monkeypatch.setenv('HOME', os.getcwd())
1312)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1313)         monkeypatch.delenv(env_name, raising=False)
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1316)         yield
1317) 
1318) 
1319) @contextlib.contextmanager
1320) def isolated_vault_config(
1321)     monkeypatch: pytest.MonkeyPatch,
1322)     runner: click.testing.CliRunner,
1323)     config: Any,
1324) ) -> Iterator[None]:
1325)     with isolated_config(monkeypatch=monkeypatch, runner=runner):
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

1328)             json.dump(config, outfile)
1329)         yield
1330) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

1332) @contextlib.contextmanager
1333) def isolated_vault_exporter_config(
1334)     monkeypatch: pytest.MonkeyPatch,
1335)     runner: click.testing.CliRunner,
1336)     vault_config: str | bytes | None = None,
1337)     vault_key: str | None = None,
1338) ) -> Iterator[None]:
1339)     if TYPE_CHECKING:
1340)         chdir = contextlib.chdir
1341)     else:
1342)         try:
1343)             chdir = contextlib.chdir
1344)         except AttributeError:
1345) 
1346)             @contextlib.contextmanager
Marco Ricci Move exporter command-line...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1348)                 oldpath = os.getcwd()
1349)                 os.chdir(newpath)
1350)                 yield
1351)                 os.chdir(oldpath)
1352) 
1353)     with runner.isolated_filesystem():
1354)         monkeypatch.setenv('HOME', os.getcwd())
1355)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1356)         monkeypatch.delenv('VAULT_PATH', raising=False)
1357)         monkeypatch.delenv('VAULT_KEY', raising=False)
1358)         monkeypatch.delenv('LOGNAME', raising=False)
1359)         monkeypatch.delenv('USER', raising=False)
1360)         monkeypatch.delenv('USERNAME', raising=False)
1361)         if vault_key is not None:
1362)             monkeypatch.setenv('VAULT_KEY', vault_key)
Marco Ricci Add support for Python 3.9

Marco Ricci authored 2 months ago

1363)         # Use match/case here once Python 3.9 becomes unsupported.
1364)         if isinstance(vault_config, str):
1365)             with open('.vault', 'w', encoding='UTF-8') as outfile:
1366)                 print(vault_config, file=outfile)
1367)         elif isinstance(vault_config, bytes):
1368)             os.makedirs('.vault', mode=0o700, exist_ok=True)
1369)             with (
1370)                 chdir('.vault'),
1371)                 tempfile.NamedTemporaryFile(suffix='.zip') as tmpzipfile,
1372)             ):
1373)                 for line in vault_config.splitlines():
1374)                     tmpzipfile.write(base64.standard_b64decode(line))
1375)                 tmpzipfile.flush()
1376)                 tmpzipfile.seek(0, 0)
1377)                 with zipfile.ZipFile(tmpzipfile.file) as zipfileobj:
1378)                     zipfileobj.extractall()
1379)         elif vault_config is None:
1380)             pass
1381)         else:  # pragma: no cover
1382)             assert_never(vault_config)
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 3 months ago

1383)         yield
1384) 
1385) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

1389) 
1390) 
1391) def make_file_readonly(
1392)     pathname: str | bytes | os.PathLike[str],
1393)     /,
1394)     *,
1395)     try_race_free_implementation: bool = True,
1396) ) -> None:
1397)     """Mark a file as read-only.
1398) 
1399)     On POSIX, this entails removing the write permission bits for user,
1400)     group and other, and ensuring the read permission bit for user is
1401)     set.
1402) 
1403)     Unfortunately, Windows has its own rules: Set exactly(?) the read
1404)     permission bit for user to make the file read-only, and set
1405)     exactly(?) the write permission bit for user to make the file
1406)     read/write; all other permission bit settings are ignored.
1407) 
1408)     The cross-platform procedure therefore is:
1409) 
1410)     1. Call `os.stat` on the file, noting the permission bits.
1411)     2. Calculate the new permission bits POSIX-style.
1412)     3. Call `os.chmod` with permission bit `stat.S_IREAD`.
1413)     4. Call `os.chmod` with the correct POSIX-style permissions.
1414) 
1415)     If the platform supports it, we use a file descriptor instead of
1416)     a path name.  Otherwise, we use the same path name multiple times,
1417)     and are susceptible to race conditions.
1418) 
1419)     """
1420)     fname: int | str | bytes | os.PathLike[str]
1421)     if try_race_free_implementation and {os.stat, os.chmod} <= os.supports_fd:
1422)         fname = os.open(
1423)             pathname,
1424)             os.O_RDONLY
1425)             | getattr(os, 'O_CLOEXEC', 0)
1426)             | getattr(os, 'O_NOCTTY', 0),
1427)         )
1428)     else:
1429)         fname = pathname
1430)     try:
1431)         orig_mode = os.stat(fname).st_mode
1432)         new_mode = (
1433)             orig_mode & ~stat.S_IWUSR & ~stat.S_IWGRP & ~stat.S_IWOTH
1434)             | stat.S_IREAD
1435)         )
1436)         os.chmod(fname, stat.S_IREAD)
1437)         os.chmod(fname, new_mode)
1438)     finally:
1439)         if isinstance(fname, int):
1440)             os.close(fname)
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

1441) 
1442) 
1443) class ReadableResult(NamedTuple):
1444)     """Helper class for formatting and testing click.testing.Result objects."""
1445) 
1446)     exception: BaseException | None
1447)     exit_code: int
1448)     output: str
1449)     stderr: str
1450) 
1451)     @classmethod
1452)     def parse(cls, r: click.testing.Result, /) -> Self:
1453)         try:
1454)             stderr = r.stderr
1455)         except ValueError:
1456)             stderr = r.output
1457)         return cls(r.exception, r.exit_code, r.output or '', stderr or '')
1458) 
1459)     def clean_exit(
1460)         self, *, output: str = '', empty_stderr: bool = False
1461)     ) -> bool:
1462)         """Return whether the invocation exited cleanly.
1463) 
1464)         Args:
1465)             output:
1466)                 An expected output string.
1467) 
1468)         """
1469)         return (
1470)             (
1471)                 not self.exception
1472)                 or (
1473)                     isinstance(self.exception, SystemExit)
1474)                     and self.exit_code == 0
1475)                 )
1476)             )
1477)             and (not output or output in self.output)
1478)             and (not empty_stderr or not self.stderr)
1479)         )
1480) 
1481)     def error_exit(
1482)         self, *, error: str | type[BaseException] = BaseException
1483)     ) -> bool:
1484)         """Return whether the invocation exited uncleanly.
1485) 
1486)         Args:
1487)             error:
1488)                 An expected error message, or an expected numeric error
1489)                 code, or an expected exception type.
1490) 
1491)         """
Marco Ricci Add support for Python 3.9

Marco Ricci authored 2 months ago

1492)         # Use match/case here once Python 3.9 becomes unsupported.
1493)         if isinstance(error, str):
1494)             return (
1495)                 isinstance(self.exception, SystemExit)
1496)                 and self.exit_code > 0
1497)                 and (not error or error in self.stderr)
1498)             )
1499)         else:  # noqa: RET505
1500)             return isinstance(self.exception, error)