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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 8 months ago

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

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

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

Marco Ricci authored 6 months ago

12) import json
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

13) import logging
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

14) import os
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

15) import re
Marco Ricci Add test fixture for manual...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

19) import tempfile
20) import zipfile
Marco Ricci Support Python 3.10 and PyP...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 6 months ago

29) 
30) __all__ = ()
31) 
32) if TYPE_CHECKING:
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

33)     from collections.abc import Callable, Iterator, Mapping, Sequence
Marco Ricci Fix style issues with ruff...

Marco Ricci authored 5 months ago

34) 
35)     import click.testing
Marco Ricci Add principal support for u...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

455) class KnownSSHAgent(str, enum.Enum):
456)     UNKNOWN: str = '(unknown)'
457)     Pageant: str = 'Pageant'
458)     OpenSSHAgent: str = 'OpenSSHAgent'
459) 
460) 
461) class SpawnedSSHAgentInfo(NamedTuple):
462)     agent_type: KnownSSHAgent
463)     client: ssh_agent.SSHAgentClient
464)     isolated: bool
465) 
466) 
Marco Ricci Let the `running_ssh_agent`...

Marco Ricci authored 1 month ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

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

Marco Ricci authored 6 months ago

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

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

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

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

Marco Ricci authored 6 months ago

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

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

565)     },
566)     'rsa': {
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

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

Marco Ricci authored 6 months ago

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

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

Marco Ricci authored 5 months ago

760)         '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 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

887)         'public_key': rb"""ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMttTTMPCyTYO+n5Vgiuw1V/mBbDPZLdJnxNvGJBGSmcZJWrIigck4lz41Ai0BrvGUn/xnqB/PntndqlSRowmbo= test key without passphrase
888) """,  # noqa: E501
889)         'public_key_data': bytes.fromhex("""
Marco Ricci Add an ecdsa-sha2-nistp521...

Marco Ricci authored 1 month ago

890)             00 00 00 13 65 63 64
891)             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 6 months ago

892)             00 00 00 08 6e 69 73 74 70 32 35 36
893)             00 00 00 41 04
894)             cb 6d 4d 33 0f 0b 24 d8 3b e9 f9 56 08 ae c3 55
895)             7f 98 16 c3 3d 92 dd 26 7c 4d bc 62 41 19 29 9c
896)             64 95 ab 22 28 1c 93 89 73 e3 50 22 d0 1a ef 19
897)             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

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

932)         'public_key': rb"""ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBKCQ6OQC+ru/m8e6PcoEvj8QBZyfmFkPIpxvJXR4EwYWruEpdCVmohqEtWp4xHRCqaTE0nauXLZUdxed6re9n718ixYI51iTlY/c1k/O/3XVefvBsSQLtCd0PnMqWbikFQ== test key without passphrase
933) """,  # noqa: E501
934)         'public_key_data': bytes.fromhex("""
Marco Ricci Add an ecdsa-sha2-nistp521...

Marco Ricci authored 1 month ago

935)             00 00 00 13 65 63 64
936)             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 6 months ago

937)             00 00 00 08 6e 69 73 74 70 33 38 34
938)             00 00 00 61 04
939)             a0 90 e8 e4 02 fa bb bf 9b c7 ba 3d ca 04 be 3f
940)             10 05 9c 9f 98 59 0f 22 9c 6f 25 74 78 13 06 16
941)             ae e1 29 74 25 66 a2 1a 84 b5 6a 78 c4 74 42 a9
942)             a4 c4 d2 76 ae 5c b6 54 77 17 9d ea b7 bd 9f bd
943)             7c 8b 16 08 e7 58 93 95 8f dc d6 4f ce ff 75 d5
944)             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 1 month ago

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

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

1321) )
1322) 
Marco Ricci Test exporter data loading...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1331) 
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1344)     )
1345)     if sys.gettrace() is not None
1346)     else hypothesis.settings()
1347) )
1348) 
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

1349) hypothesis_settings_coverage_compatible_with_caplog = hypothesis.settings(
1350)     parent=hypothesis_settings_coverage_compatible,
1351)     suppress_health_check={
1352)         hypothesis.HealthCheck.function_scoped_fixture,
1353)     }
1354)     | set(hypothesis_settings_coverage_compatible.suppress_health_check),
1355) )
1356) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1361)     list1 = [
1362)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1363)         for key, value in SUPPORTED_KEYS.items()
1364)     ]
1365)     list2 = [
1366)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1367)         for key, value in UNSUITABLE_KEYS.items()
1368)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1369)     return list1 + list2
1370) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

1372) def sign(
1373)     self: Any, key: bytes | bytearray, message: bytes | bytearray
1374) ) -> bytes:
1375)     del self  # Unused.
1376)     assert message == vault.Vault._UUID
1377)     for value in SUPPORTED_KEYS.values():
1378)         if value['public_key_data'] == key:  # pragma: no branch
1379)             assert value['expected_signature'] is not None
1380)             return value['expected_signature']
1381)     raise AssertionError
1382) 
1383) 
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1387)     list1 = [
1388)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1389)         for key, value in SUPPORTED_KEYS.items()
1390)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1391)     return list1[:1]
1392) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

1400)     ]
1401) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

1403) def phrase_from_key(key: bytes) -> bytes:
1404)     if key == DUMMY_KEY1:  # pragma: no branch
1405)         return DUMMY_PHRASE_FROM_KEY1
1406)     raise KeyError(key)  # pragma: no cover
1407) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

1409) @contextlib.contextmanager
1410) def isolated_config(
Marco Ricci Clean up testing machinery...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

1415)     env_name = prog_name.replace(' ', '_').upper() + '_PATH'
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

1416)     with (
1417)         runner.isolated_filesystem(),
1418)         cli.StandardCLILogging.ensure_standard_logging(),
1419)         cli.StandardCLILogging.ensure_standard_warnings_logging(),
1420)     ):
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1421)         monkeypatch.setenv('HOME', os.getcwd())
1422)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1423)         monkeypatch.delenv(env_name, raising=False)
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1426)         yield
1427) 
1428) 
1429) @contextlib.contextmanager
1430) def isolated_vault_config(
1431)     monkeypatch: pytest.MonkeyPatch,
1432)     runner: click.testing.CliRunner,
1433)     config: Any,
1434) ) -> Iterator[None]:
1435)     with isolated_config(monkeypatch=monkeypatch, runner=runner):
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 6 months ago

1438)             json.dump(config, outfile)
1439)         yield
1440) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

1442) @contextlib.contextmanager
1443) def isolated_vault_exporter_config(
1444)     monkeypatch: pytest.MonkeyPatch,
1445)     runner: click.testing.CliRunner,
1446)     vault_config: str | bytes | None = None,
1447)     vault_key: str | None = None,
1448) ) -> Iterator[None]:
1449)     if TYPE_CHECKING:
1450)         chdir = contextlib.chdir
1451)     else:
1452)         try:
1453)             chdir = contextlib.chdir
1454)         except AttributeError:
1455) 
1456)             @contextlib.contextmanager
Marco Ricci Move exporter command-line...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

1458)                 oldpath = os.getcwd()
1459)                 os.chdir(newpath)
1460)                 yield
1461)                 os.chdir(oldpath)
1462) 
1463)     with runner.isolated_filesystem():
1464)         monkeypatch.setenv('HOME', os.getcwd())
1465)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1466)         monkeypatch.delenv('VAULT_PATH', raising=False)
1467)         monkeypatch.delenv('VAULT_KEY', raising=False)
1468)         monkeypatch.delenv('LOGNAME', raising=False)
1469)         monkeypatch.delenv('USER', raising=False)
1470)         monkeypatch.delenv('USERNAME', raising=False)
1471)         if vault_key is not None:
1472)             monkeypatch.setenv('VAULT_KEY', vault_key)
Marco Ricci Add support for Python 3.9

Marco Ricci authored 3 months ago

1473)         # Use match/case here once Python 3.9 becomes unsupported.
1474)         if isinstance(vault_config, str):
1475)             with open('.vault', 'w', encoding='UTF-8') as outfile:
1476)                 print(vault_config, file=outfile)
1477)         elif isinstance(vault_config, bytes):
1478)             os.makedirs('.vault', mode=0o700, exist_ok=True)
1479)             with (
1480)                 chdir('.vault'),
1481)                 tempfile.NamedTemporaryFile(suffix='.zip') as tmpzipfile,
1482)             ):
1483)                 for line in vault_config.splitlines():
1484)                     tmpzipfile.write(base64.standard_b64decode(line))
1485)                 tmpzipfile.flush()
1486)                 tmpzipfile.seek(0, 0)
1487)                 with zipfile.ZipFile(tmpzipfile.file) as zipfileobj:
1488)                     zipfileobj.extractall()
1489)         elif vault_config is None:
1490)             pass
1491)         else:  # pragma: no cover
1492)             assert_never(vault_config)
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 4 months ago

1493)         yield
1494) 
1495) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

1551) 
1552) 
1553) class ReadableResult(NamedTuple):
1554)     """Helper class for formatting and testing click.testing.Result objects."""
1555) 
1556)     exception: BaseException | None
1557)     exit_code: int
1558)     output: str
1559)     stderr: str
1560) 
1561)     @classmethod
1562)     def parse(cls, r: click.testing.Result, /) -> Self:
1563)         try:
1564)             stderr = r.stderr
1565)         except ValueError:
1566)             stderr = r.output
1567)         return cls(r.exception, r.exit_code, r.output or '', stderr or '')
1568) 
1569)     def clean_exit(
1570)         self, *, output: str = '', empty_stderr: bool = False
1571)     ) -> bool:
1572)         """Return whether the invocation exited cleanly.
1573) 
1574)         Args:
1575)             output:
1576)                 An expected output string.
1577) 
1578)         """
1579)         return (
1580)             (
1581)                 not self.exception
1582)                 or (
1583)                     isinstance(self.exception, SystemExit)
1584)                     and self.exit_code == 0
1585)                 )
1586)             )
1587)             and (not output or output in self.output)
1588)             and (not empty_stderr or not self.stderr)
1589)         )
1590) 
1591)     def error_exit(
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

1592)         self,
1593)         *,
1594)         error: str | re.Pattern[str] | type[BaseException] = BaseException,
1595)         record_tuples: Sequence[tuple[str, int, str]] = (),
Marco Ricci Clean up testing machinery...

Marco Ricci authored 4 months ago

1596)     ) -> bool:
1597)         """Return whether the invocation exited uncleanly.
1598) 
1599)         Args:
1600)             error:
1601)                 An expected error message, or an expected numeric error
1602)                 code, or an expected exception type.
1603) 
1604)         """
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

1605) 
1606)         def error_match(error: str | re.Pattern[str], line: str) -> bool:
1607)             return (
1608)                 error in line
1609)                 if isinstance(error, str)
1610)                 else error.match(line) is not None
1611)             )
1612) 
Marco Ricci Add support for Python 3.9

Marco Ricci authored 3 months ago

1613)         # Use match/case here once Python 3.9 becomes unsupported.
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

1614)         if isinstance(error, type):
1615)             return isinstance(self.exception, error)
1616)         else:  # noqa: RET505
1617)             assert isinstance(error, (str, re.Pattern))
Marco Ricci Add support for Python 3.9

Marco Ricci authored 3 months ago

1618)             return (
1619)                 isinstance(self.exception, SystemExit)
1620)                 and self.exit_code > 0
Marco Ricci Adapt the test suite to use...

Marco Ricci authored 1 month ago

1621)                 and (
1622)                     not error
1623)                     or any(
1624)                         error_match(error, line)
1625)                         for line in self.stderr.splitlines(True)
1626)                     )
1627)                     or error_emitted(error, record_tuples)
1628)                 )
Marco Ricci Add support for Python 3.9

Marco Ricci authored 3 months ago

1629)             )
Marco Ricci Add test fixture for manual...

Marco Ricci authored 3 months ago

1630) 
1631) 
1632) def parse_sh_export_line(line: str, *, env_name: str) -> str:
1633)     line = line.rstrip('\r\n')
1634)     shlex_parser = shlex.shlex(
1635)         instream=line, posix=True, punctuation_chars=True
1636)     )
1637)     shlex_parser.whitespace = ' \t'
1638)     tokens = list(shlex_parser)
1639)     orig_tokens = tokens.copy()
1640)     if tokens[-1] == ';':
1641)         tokens.pop()
1642)     if tokens[-3:] == [';', 'export', env_name]:
1643)         tokens[-3:] = []
1644)         tokens[:0] = ['export']
1645)     if not (
1646)         len(tokens) == 2
1647)         and tokens[0] == 'export'
1648)         and tokens[1].startswith(f'{env_name}=')
1649)     ):
1650)         msg = f'Cannot parse sh line: {orig_tokens!r} -> {tokens!r}'
1651)         raise ValueError(msg)
1652)     return tokens[1].split('=', 1)[1]