da7fed85c9fe23df9a0bba7da52389d0fdcb402f
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 Add an ecdsa-sha2-nistp521...

Marco Ricci authored 3 weeks ago

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

Marco Ricci authored 5 months ago

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 Add an ecdsa-sha2-nistp521...

Marco Ricci authored 3 weeks ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 weeks ago

943) """),
944)         'expected_signature': None,
945)         'derived_passphrase': None,
946)     },
947)     'ecdsa521': {
948)         'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----
949) b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAArAAAABNlY2RzYS
950) 1zaGEyLW5pc3RwNTIxAAAACG5pc3RwNTIxAAAAhQQASVOdwDznmlcGqiLvFtYeVtrAEiVz
951) iIfsL7jEM8Utu/m8WSkPFQtjwqdFw+WfZ0mi6qMbEFgi/ELzZSKVteCSbcMAhqAkOMFKiD
952) u4bxvsM6bT02Ru7q2yT41ySyGhUD0QySBnI6Ckt/wnQ1TEpj8zDKiRErxs9e6QLGElNRkz
953) LPMs+mMAAAEY2FXeh9hV3ocAAAATZWNkc2Etc2hhMi1uaXN0cDUyMQAAAAhuaXN0cDUyMQ
954) AAAIUEAElTncA855pXBqoi7xbWHlbawBIlc4iH7C+4xDPFLbv5vFkpDxULY8KnRcPln2dJ
955) ouqjGxBYIvxC82UilbXgkm3DAIagJDjBSog7uG8b7DOm09Nkbu6tsk+NckshoVA9EMkgZy
956) OgpLf8J0NUxKY/MwyokRK8bPXukCxhJTUZMyzzLPpjAAAAQSFqUmKK7lGQzxT6GKZSLDju
957) U3otwLYnuj+/5AdzuB/zotu95UdFv9I2DNXzd9E4WAyz6IqBBNcsMkxrzHAdqsYDAAAAG3
958) Rlc3Qga2V5IHdpdGhvdXQgcGFzc3BocmFzZQ==
959) -----END OPENSSH PRIVATE KEY-----
960) """,
961)         'private_key_blob': bytes.fromhex("""
962)             00 00 00 13 65 63 64
963)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 35 32 31
964)             00 00 00 08 6e 69 73 74 70 35 32 31
965)             00 00 00 85 04 00 49 53 9d
966)             c0 3c e7 9a 57 06 aa 22 ef 16 d6 1e 56 da c0 12
967)             25 73 88 87 ec 2f b8 c4 33 c5 2d bb f9 bc 59 29
968)             0f 15 0b 63 c2 a7 45 c3 e5 9f 67 49 a2 ea a3 1b
969)             10 58 22 fc 42 f3 65 22 95 b5 e0 92 6d c3 00 86
970)             a0 24 38 c1 4a 88 3b b8 6f 1b ec 33 a6 d3 d3 64
971)             6e ee ad b2 4f 8d 72 4b 21 a1 50 3d 10 c9 20 67
972)             23 a0 a4 b7 fc 27 43 54 c4 a6 3f 33 0c a8 91 12
973)             bc 6c f5 ee 90 2c 61 25 35 19 33 2c f3 2c fa 63
974)             00 00 00 41 21
975)             6a 52 62 8a ee 51 90 cf 14 fa 18 a6 52 2c 38 ee
976)             53 7a 2d c0 b6 27 ba 3f bf e4 07 73 b8 1f f3 a2
977)             db bd e5 47 45 bf d2 36 0c d5 f3 77 d1 38 58 0c
978)             b3 e8 8a 81 04 d7 2c 32 4c 6b cc 70 1d aa c6 03
979)             00 00 00 1b 74 65 73 74 20 6b 65 79 20 77 69
980)             74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65
981) """),
982)         'public_key': rb"""ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBABJU53APOeaVwaqIu8W1h5W2sASJXOIh+wvuMQzxS27+bxZKQ8VC2PCp0XD5Z9nSaLqoxsQWCL8QvNlIpW14JJtwwCGoCQ4wUqIO7hvG+wzptPTZG7urbJPjXJLIaFQPRDJIGcjoKS3/CdDVMSmPzMMqJESvGz17pAsYSU1GTMs8yz6Yw== test key without passphrase
983) """,  # noqa: E501
984)         'public_key_data': bytes.fromhex("""
985)             00 00 00 13 65 63 64
986)             73 61 2d 73 68 61 32 2d 6e 69 73 74 70 32 35 36
987)             00 00 00 08 6e 69 73 74 70 35 32 31
988)             00 00 00 85 04 00 49 53 9d
989)             c0 3c e7 9a 57 06 aa 22 ef 16 d6 1e 56 da c0 12
990)             25 73 88 87 ec 2f b8 c4 33 c5 2d bb f9 bc 59 29
991)             0f 15 0b 63 c2 a7 45 c3 e5 9f 67 49 a2 ea a3 1b
992)             10 58 22 fc 42 f3 65 22 95 b5 e0 92 6d c3 00 86
993)             a0 24 38 c1 4a 88 3b b8 6f 1b ec 33 a6 d3 d3 64
994)             6e ee ad b2 4f 8d 72 4b 21 a1 50 3d 10 c9 20 67
995)             23 a0 a4 b7 fc 27 43 54 c4 a6 3f 33 0c a8 91 12
996)             bc 6c f5 ee 90 2c 61 25 35 19 33 2c f3 2c fa 63
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

998)         'expected_signature': None,
999)         'derived_passphrase': None,
1000)     },
1001) }
1002) 
1003) DUMMY_SERVICE = 'service1'
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

1005) DUMMY_KEY1 = SUPPORTED_KEYS['ed25519']['public_key_data']
1006) DUMMY_KEY1_B64 = base64.standard_b64encode(DUMMY_KEY1).decode('ASCII')
1007) DUMMY_KEY2 = SUPPORTED_KEYS['rsa']['public_key_data']
1008) DUMMY_KEY2_B64 = base64.standard_b64encode(DUMMY_KEY2).decode('ASCII')
Marco Ricci Avoid crashing when overrid...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

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

Marco Ricci authored 3 months ago

1032) VAULT_MASTER_KEY = 'vault key'
1033) VAULT_V02_CONFIG = 'P7xeh5y4jmjpJ2pFq4KUcTVoaE9ZOEkwWmpVTURSSWQxbGt6emN4aFE4eFM3anVPbDRNTGpOLzY3eDF5aE1YTm5LNWh5Q1BwWTMwM3M5S083MWRWRFlmOXNqSFJNcStGMWFOS3c2emhiOUNNenZYTmNNMnZxaUErdlRoOGF2ZHdGT1ZLNTNLOVJQcU9jWmJrR3g5N09VcVBRZ0ZnSFNUQy9HdFVWWnFteVhRVkY3MHNBdnF2ZWFEbFBseWRGelE1c3BFTnVUckRQdWJSL29wNjFxd2Y2ZVpob3VyVzRod3FKTElTenJ1WTZacTJFOFBtK3BnVzh0QWVxcWtyWFdXOXYyenNQeFNZbWt1MDU2Vm1kVGtISWIxWTBpcWRFbyswUVJudVVhZkVlNVpGWDA4WUQ2Q2JTWW81SnlhQ2Zxa3cxNmZoQjJES0Uyd29rNXpSck5iWVBrVmEwOXFya1NpMi9saU5LL3F0M3N3MjZKekNCem9ER2svWkZ0SUJLdmlHRno0VlQzQ3pqZTBWcTM3YmRiNmJjTkhqUHZoQ0NxMW1ldW1XOFVVK3pQMEtUMkRMVGNvNHFlOG40ck5KcGhsYXg1b1VzZ1NYU1B2T3RXdEkwYzg4NWE3YWUzOWI1MDI0MThhMWZjODQ3MDA2OTJmNDQ0MDkxNGFiNmRlMGQ2YjZiNjI5NGMwN2IwMmI4MGZi'  # noqa: E501
1034) VAULT_V02_CONFIG_DATA = {
1035)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1037)     },
1038)     'services': {
1039)         '(meta)': {
1040)             'notes': 'This config was originally in v0.2 format.',
1041)         },
1042)         DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),
1043)     },
1044) }
1045) VAULT_V03_CONFIG = 'sBPBrr8BFHPxSJkV/A53zk9zwDQHFxLe6UIusCVvzFQre103pcj5xxmE11lMTA0U2QTYjkhRXKkH5WegSmYpAnzReuRsYZlWWp6N4kkubf+twZ9C3EeggPm7as2Af4TICHVbX4uXpIHeQJf9y1OtqrO+SRBrgPBzgItoxsIxebxVKgyvh1CZQOSkn7BIzt9xKhDng3ubS4hQ91fB0QCumlldTbUl8tj4Xs5JbvsSlUMxRlVzZ0OgAOrSsoWELXmsp6zXFa9K6wIuZa4wQuMLQFHiA64JO1CR3I+rviWCeMlbTOuJNx6vMB5zotKJqA2hIUpN467TQ9vI4g/QTo40m5LT2EQKbIdTvBQAzcV4lOcpr5Lqt4LHED5mKvm/4YfpuuT3I3XCdWfdG5SB7ciiB4Go+xQdddy3zZMiwm1fEwIB8XjFf2cxoJdccLQ2yxf+9diedBP04EsMHrvxKDhQ7/vHl7xF2MMFTDKl3WFd23vvcjpR1JgNAKYprG/e1p/7'  # noqa: E501
1046) VAULT_V03_CONFIG_DATA = {
1047)     'global': {
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1319) )
1320) 
Marco Ricci Test exporter data loading...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

1329) 
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 2 months ago

1330) hypothesis_settings_coverage_compatible = (
1331)     hypothesis.settings(
1332)         # Running under coverage with the Python tracer increases
1333)         # running times 40-fold, on my machines.  Sadly, not every
1334)         # Python version offers the C tracer, so sometimes the Python
1335)         # tracer is used anyway.
1336)         deadline=(
1337)             40 * deadline
1338)             if (deadline := hypothesis.settings().deadline) is not None
1339)             else None
1340)         ),
Marco Ricci Manage health checks in cen...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

1342)     )
1343)     if sys.gettrace() is not None
1344)     else hypothesis.settings()
1345) )
1346) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1351)     list1 = [
1352)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1353)         for key, value in SUPPORTED_KEYS.items()
1354)     ]
1355)     list2 = [
1356)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1357)         for key, value in UNSUITABLE_KEYS.items()
1358)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

1359)     return list1 + list2
1360) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

1362) def sign(
1363)     self: Any, key: bytes | bytearray, message: bytes | bytearray
1364) ) -> bytes:
1365)     del self  # Unused.
1366)     assert message == vault.Vault._UUID
1367)     for value in SUPPORTED_KEYS.values():
1368)         if value['public_key_data'] == key:  # pragma: no branch
1369)             assert value['expected_signature'] is not None
1370)             return value['expected_signature']
1371)     raise AssertionError
1372) 
1373) 
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1377)     list1 = [
1378)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1379)         for key, value in SUPPORTED_KEYS.items()
1380)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

1381)     return list1[:1]
1382) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1390)     ]
1391) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1393) def phrase_from_key(key: bytes) -> bytes:
1394)     if key == DUMMY_KEY1:  # pragma: no branch
1395)         return DUMMY_PHRASE_FROM_KEY1
1396)     raise KeyError(key)  # pragma: no cover
1397) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1399) @contextlib.contextmanager
1400) def isolated_config(
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1405)     env_name = prog_name.replace(' ', '_').upper() + '_PATH'
1406)     with runner.isolated_filesystem():
1407)         monkeypatch.setenv('HOME', os.getcwd())
1408)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1409)         monkeypatch.delenv(env_name, raising=False)
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1412)         yield
1413) 
1414) 
1415) @contextlib.contextmanager
1416) def isolated_vault_config(
1417)     monkeypatch: pytest.MonkeyPatch,
1418)     runner: click.testing.CliRunner,
1419)     config: Any,
1420) ) -> Iterator[None]:
1421)     with isolated_config(monkeypatch=monkeypatch, runner=runner):
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

1424)             json.dump(config, outfile)
1425)         yield
1426) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

1428) @contextlib.contextmanager
1429) def isolated_vault_exporter_config(
1430)     monkeypatch: pytest.MonkeyPatch,
1431)     runner: click.testing.CliRunner,
1432)     vault_config: str | bytes | None = None,
1433)     vault_key: str | None = None,
1434) ) -> Iterator[None]:
1435)     if TYPE_CHECKING:
1436)         chdir = contextlib.chdir
1437)     else:
1438)         try:
1439)             chdir = contextlib.chdir
1440)         except AttributeError:
1441) 
1442)             @contextlib.contextmanager
Marco Ricci Move exporter command-line...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1444)                 oldpath = os.getcwd()
1445)                 os.chdir(newpath)
1446)                 yield
1447)                 os.chdir(oldpath)
1448) 
1449)     with runner.isolated_filesystem():
1450)         monkeypatch.setenv('HOME', os.getcwd())
1451)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1452)         monkeypatch.delenv('VAULT_PATH', raising=False)
1453)         monkeypatch.delenv('VAULT_KEY', raising=False)
1454)         monkeypatch.delenv('LOGNAME', raising=False)
1455)         monkeypatch.delenv('USER', raising=False)
1456)         monkeypatch.delenv('USERNAME', raising=False)
1457)         if vault_key is not None:
1458)             monkeypatch.setenv('VAULT_KEY', vault_key)
Marco Ricci Add support for Python 3.9

Marco Ricci authored 2 months ago

1459)         # Use match/case here once Python 3.9 becomes unsupported.
1460)         if isinstance(vault_config, str):
1461)             with open('.vault', 'w', encoding='UTF-8') as outfile:
1462)                 print(vault_config, file=outfile)
1463)         elif isinstance(vault_config, bytes):
1464)             os.makedirs('.vault', mode=0o700, exist_ok=True)
1465)             with (
1466)                 chdir('.vault'),
1467)                 tempfile.NamedTemporaryFile(suffix='.zip') as tmpzipfile,
1468)             ):
1469)                 for line in vault_config.splitlines():
1470)                     tmpzipfile.write(base64.standard_b64decode(line))
1471)                 tmpzipfile.flush()
1472)                 tmpzipfile.seek(0, 0)
1473)                 with zipfile.ZipFile(tmpzipfile.file) as zipfileobj:
1474)                     zipfileobj.extractall()
1475)         elif vault_config is None:
1476)             pass
1477)         else:  # pragma: no cover
1478)             assert_never(vault_config)
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 3 months ago

1479)         yield
1480) 
1481) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

1485) 
1486) 
1487) def make_file_readonly(
1488)     pathname: str | bytes | os.PathLike[str],
1489)     /,
1490)     *,
1491)     try_race_free_implementation: bool = True,
1492) ) -> None:
1493)     """Mark a file as read-only.
1494) 
1495)     On POSIX, this entails removing the write permission bits for user,
1496)     group and other, and ensuring the read permission bit for user is
1497)     set.
1498) 
1499)     Unfortunately, Windows has its own rules: Set exactly(?) the read
1500)     permission bit for user to make the file read-only, and set
1501)     exactly(?) the write permission bit for user to make the file
1502)     read/write; all other permission bit settings are ignored.
1503) 
1504)     The cross-platform procedure therefore is:
1505) 
1506)     1. Call `os.stat` on the file, noting the permission bits.
1507)     2. Calculate the new permission bits POSIX-style.
1508)     3. Call `os.chmod` with permission bit `stat.S_IREAD`.
1509)     4. Call `os.chmod` with the correct POSIX-style permissions.
1510) 
1511)     If the platform supports it, we use a file descriptor instead of
1512)     a path name.  Otherwise, we use the same path name multiple times,
1513)     and are susceptible to race conditions.
1514) 
1515)     """
1516)     fname: int | str | bytes | os.PathLike[str]
1517)     if try_race_free_implementation and {os.stat, os.chmod} <= os.supports_fd:
1518)         fname = os.open(
1519)             pathname,
1520)             os.O_RDONLY
1521)             | getattr(os, 'O_CLOEXEC', 0)
1522)             | getattr(os, 'O_NOCTTY', 0),
1523)         )
1524)     else:
1525)         fname = pathname
1526)     try:
1527)         orig_mode = os.stat(fname).st_mode
1528)         new_mode = (
1529)             orig_mode & ~stat.S_IWUSR & ~stat.S_IWGRP & ~stat.S_IWOTH
1530)             | stat.S_IREAD
1531)         )
1532)         os.chmod(fname, stat.S_IREAD)
1533)         os.chmod(fname, new_mode)
1534)     finally:
1535)         if isinstance(fname, int):
1536)             os.close(fname)
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

1537) 
1538) 
1539) class ReadableResult(NamedTuple):
1540)     """Helper class for formatting and testing click.testing.Result objects."""
1541) 
1542)     exception: BaseException | None
1543)     exit_code: int
1544)     output: str
1545)     stderr: str
1546) 
1547)     @classmethod
1548)     def parse(cls, r: click.testing.Result, /) -> Self:
1549)         try:
1550)             stderr = r.stderr
1551)         except ValueError:
1552)             stderr = r.output
1553)         return cls(r.exception, r.exit_code, r.output or '', stderr or '')
1554) 
1555)     def clean_exit(
1556)         self, *, output: str = '', empty_stderr: bool = False
1557)     ) -> bool:
1558)         """Return whether the invocation exited cleanly.
1559) 
1560)         Args:
1561)             output:
1562)                 An expected output string.
1563) 
1564)         """
1565)         return (
1566)             (
1567)                 not self.exception
1568)                 or (
1569)                     isinstance(self.exception, SystemExit)
1570)                     and self.exit_code == 0
1571)                 )
1572)             )
1573)             and (not output or output in self.output)
1574)             and (not empty_stderr or not self.stderr)
1575)         )
1576) 
1577)     def error_exit(
1578)         self, *, error: str | type[BaseException] = BaseException
1579)     ) -> bool:
1580)         """Return whether the invocation exited uncleanly.
1581) 
1582)         Args:
1583)             error:
1584)                 An expected error message, or an expected numeric error
1585)                 code, or an expected exception type.
1586) 
1587)         """
Marco Ricci Add support for Python 3.9

Marco Ricci authored 2 months ago

1588)         # Use match/case here once Python 3.9 becomes unsupported.
1589)         if isinstance(error, str):
1590)             return (
1591)                 isinstance(self.exception, SystemExit)
1592)                 and self.exit_code > 0
1593)                 and (not error or error in self.stderr)
1594)             )
1595)         else:  # noqa: RET505
1596)             return isinstance(self.exception, error)