7d2f2b1bda31ead428d3c009772aaf3d2261d60c
Marco Ricci Change the author e-mail ad...

Marco Ricci authored 3 months ago

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

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

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

15) import stat
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

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

Marco Ricci authored 6 months ago

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

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

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

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

Marco Ricci authored 6 months ago

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

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

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

Marco Ricci authored 6 months ago

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

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

Marco Ricci authored 5 months ago

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

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

1071) )
1072) 
Marco Ricci Test exporter data loading...

Marco Ricci authored 4 months ago

1073) skip_if_cryptography_support = pytest.mark.skipif(
1074)     importlib.util.find_spec('cryptography') is not None,
1075)     reason='cryptography support available; cannot test "no support" scenario',
1076) )
1077) skip_if_no_cryptography_support = pytest.mark.skipif(
1078)     importlib.util.find_spec('cryptography') is None,
1079)     reason='no "cryptography" support',
1080) )
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1086)     list1 = [
1087)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1088)         for key, value in SUPPORTED_KEYS.items()
1089)     ]
1090)     list2 = [
1091)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1092)         for key, value in UNSUITABLE_KEYS.items()
1093)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1094)     return list1 + list2
1095) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

1097) def sign(
1098)     self: Any, key: bytes | bytearray, message: bytes | bytearray
1099) ) -> bytes:
1100)     del self  # Unused.
1101)     assert message == vault.Vault._UUID
1102)     for value in SUPPORTED_KEYS.values():
1103)         if value['public_key_data'] == key:  # pragma: no branch
1104)             assert value['expected_signature'] is not None
1105)             return value['expected_signature']
1106)     raise AssertionError
1107) 
1108) 
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1112)     list1 = [
1113)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1114)         for key, value in SUPPORTED_KEYS.items()
1115)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

1116)     return list1[:1]
1117) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

1125)     ]
1126) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

1128) def phrase_from_key(key: bytes) -> bytes:
1129)     if key == DUMMY_KEY1:  # pragma: no branch
1130)         return DUMMY_PHRASE_FROM_KEY1
1131)     raise KeyError(key)  # pragma: no cover
1132) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

1134) @contextlib.contextmanager
1135) def isolated_config(
Marco Ricci Clean up testing machinery...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 6 months ago

1140)     env_name = prog_name.replace(' ', '_').upper() + '_PATH'
1141)     with runner.isolated_filesystem():
1142)         monkeypatch.setenv('HOME', os.getcwd())
1143)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1144)         monkeypatch.delenv(env_name, raising=False)
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1147)         yield
1148) 
1149) 
1150) @contextlib.contextmanager
1151) def isolated_vault_config(
1152)     monkeypatch: pytest.MonkeyPatch,
1153)     runner: click.testing.CliRunner,
1154)     config: Any,
1155) ) -> Iterator[None]:
1156)     with isolated_config(monkeypatch=monkeypatch, runner=runner):
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 6 months ago

1159)             json.dump(config, outfile)
1160)         yield
1161) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

1163) @contextlib.contextmanager
1164) def isolated_vault_exporter_config(
1165)     monkeypatch: pytest.MonkeyPatch,
1166)     runner: click.testing.CliRunner,
1167)     vault_config: str | bytes | None = None,
1168)     vault_key: str | None = None,
1169) ) -> Iterator[None]:
1170)     if TYPE_CHECKING:
1171)         chdir = contextlib.chdir
1172)     else:
1173)         try:
1174)             chdir = contextlib.chdir
1175)         except AttributeError:
1176) 
1177)             @contextlib.contextmanager
Marco Ricci Move exporter command-line...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

1179)                 oldpath = os.getcwd()
1180)                 os.chdir(newpath)
1181)                 yield
1182)                 os.chdir(oldpath)
1183) 
1184)     with runner.isolated_filesystem():
1185)         monkeypatch.setenv('HOME', os.getcwd())
1186)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1187)         monkeypatch.delenv('VAULT_PATH', raising=False)
1188)         monkeypatch.delenv('VAULT_KEY', raising=False)
1189)         monkeypatch.delenv('LOGNAME', raising=False)
1190)         monkeypatch.delenv('USER', raising=False)
1191)         monkeypatch.delenv('USERNAME', raising=False)
1192)         if vault_key is not None:
1193)             monkeypatch.setenv('VAULT_KEY', vault_key)
Marco Ricci Add support for Python 3.9

Marco Ricci authored 3 months ago

1194)         # Use match/case here once Python 3.9 becomes unsupported.
1195)         if isinstance(vault_config, str):
1196)             with open('.vault', 'w', encoding='UTF-8') as outfile:
1197)                 print(vault_config, file=outfile)
1198)         elif isinstance(vault_config, bytes):
1199)             os.makedirs('.vault', mode=0o700, exist_ok=True)
1200)             with (
1201)                 chdir('.vault'),
1202)                 tempfile.NamedTemporaryFile(suffix='.zip') as tmpzipfile,
1203)             ):
1204)                 for line in vault_config.splitlines():
1205)                     tmpzipfile.write(base64.standard_b64decode(line))
1206)                 tmpzipfile.flush()
1207)                 tmpzipfile.seek(0, 0)
1208)                 with zipfile.ZipFile(tmpzipfile.file) as zipfileobj:
1209)                     zipfileobj.extractall()
1210)         elif vault_config is None:
1211)             pass
1212)         else:  # pragma: no cover
1213)             assert_never(vault_config)
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 4 months ago

1214)         yield
1215) 
1216) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 6 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 4 months ago

1220) 
1221) 
1222) def make_file_readonly(
1223)     pathname: str | bytes | os.PathLike[str],
1224)     /,
1225)     *,
1226)     try_race_free_implementation: bool = True,
1227) ) -> None:
1228)     """Mark a file as read-only.
1229) 
1230)     On POSIX, this entails removing the write permission bits for user,
1231)     group and other, and ensuring the read permission bit for user is
1232)     set.
1233) 
1234)     Unfortunately, Windows has its own rules: Set exactly(?) the read
1235)     permission bit for user to make the file read-only, and set
1236)     exactly(?) the write permission bit for user to make the file
1237)     read/write; all other permission bit settings are ignored.
1238) 
1239)     The cross-platform procedure therefore is:
1240) 
1241)     1. Call `os.stat` on the file, noting the permission bits.
1242)     2. Calculate the new permission bits POSIX-style.
1243)     3. Call `os.chmod` with permission bit `stat.S_IREAD`.
1244)     4. Call `os.chmod` with the correct POSIX-style permissions.
1245) 
1246)     If the platform supports it, we use a file descriptor instead of
1247)     a path name.  Otherwise, we use the same path name multiple times,
1248)     and are susceptible to race conditions.
1249) 
1250)     """
1251)     fname: int | str | bytes | os.PathLike[str]
1252)     if try_race_free_implementation and {os.stat, os.chmod} <= os.supports_fd:
1253)         fname = os.open(
1254)             pathname,
1255)             os.O_RDONLY
1256)             | getattr(os, 'O_CLOEXEC', 0)
1257)             | getattr(os, 'O_NOCTTY', 0),
1258)         )
1259)     else:
1260)         fname = pathname
1261)     try:
1262)         orig_mode = os.stat(fname).st_mode
1263)         new_mode = (
1264)             orig_mode & ~stat.S_IWUSR & ~stat.S_IWGRP & ~stat.S_IWOTH
1265)             | stat.S_IREAD
1266)         )
1267)         os.chmod(fname, stat.S_IREAD)
1268)         os.chmod(fname, new_mode)
1269)     finally:
1270)         if isinstance(fname, int):
1271)             os.close(fname)
Marco Ricci Clean up testing machinery...

Marco Ricci authored 4 months ago

1272) 
1273) 
1274) class ReadableResult(NamedTuple):
1275)     """Helper class for formatting and testing click.testing.Result objects."""
1276) 
1277)     exception: BaseException | None
1278)     exit_code: int
1279)     output: str
1280)     stderr: str
1281) 
1282)     @classmethod
1283)     def parse(cls, r: click.testing.Result, /) -> Self:
1284)         try:
1285)             stderr = r.stderr
1286)         except ValueError:
1287)             stderr = r.output
1288)         return cls(r.exception, r.exit_code, r.output or '', stderr or '')
1289) 
1290)     def clean_exit(
1291)         self, *, output: str = '', empty_stderr: bool = False
1292)     ) -> bool:
1293)         """Return whether the invocation exited cleanly.
1294) 
1295)         Args:
1296)             output:
1297)                 An expected output string.
1298) 
1299)         """
1300)         return (
1301)             (
1302)                 not self.exception
1303)                 or (
1304)                     isinstance(self.exception, SystemExit)
1305)                     and self.exit_code == 0
1306)                 )
1307)             )
1308)             and (not output or output in self.output)
1309)             and (not empty_stderr or not self.stderr)
1310)         )
1311) 
1312)     def error_exit(
1313)         self, *, error: str | type[BaseException] = BaseException
1314)     ) -> bool:
1315)         """Return whether the invocation exited uncleanly.
1316) 
1317)         Args:
1318)             error:
1319)                 An expected error message, or an expected numeric error
1320)                 code, or an expected exception type.
1321) 
1322)         """
Marco Ricci Add support for Python 3.9

Marco Ricci authored 3 months ago

1323)         # Use match/case here once Python 3.9 becomes unsupported.
1324)         if isinstance(error, str):
1325)             return (
1326)                 isinstance(self.exception, SystemExit)
1327)                 and self.exit_code > 0
1328)                 and (not error or error in self.stderr)
1329)             )
1330)         else:  # noqa: RET505
1331)             return isinstance(self.exception, error)