695ac3fd833a1d50ba99f9539d668982bbd2bc00
Marco Ricci Change the author e-mail ad...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 7 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

656)         'public_key': rb"""ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCxoe7pezhxWy4NI0mUwKqg9WCYOAS+IjxN9eYcqpfcmQiojcuy9XsiN/xYJ1O94SrsKS5mEia2xHnYA4RUChTyYNcM2v6cnnBQ/N/VQhpGMN7SVxdbhKUXTWFCwbjBgO6rGyHB6WtoH8vd7TOEPt+NgcXwhsWyoaUUdYTA62V+GF9vEmxMaC4ubgDz+B0QkPnauSoNxmkhcIe0lsLNb1pClZyz88PDnKXCX/d0HuN/HJ+sbPg7dCvOyqFYSyKn3uY6bCXqoIdurxXzH3O7z0P8f5sbmKOrGGKNuNxVRbeVl/D/3uDL0nqsbfUc1qvkfwbJwtMXC4IV6kOZMSk2BAsqh7x48gQ+rhYeEVSi8F3CWs4HJQoqrGt7K9a3mCSlMBHP70u3w6ME7eumoryxlUofewTd17ZEkzdX08l2ZlKzZvwQUrc+xQZ2Uw8z2mfW6Ti4gi0pYGaig7Ke4PwuXpo/C5YAWfeXycsvJZ2uaYRjMdZeJGNAnHLUGLkBscw5aI8= test key without passphrase
657) """,  # noqa: E501
658)         'public_key_data': bytes.fromhex("""
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

1082) 
Marco Ricci Centralize settings for hyp...

Marco Ricci authored 2 months ago

1083) hypothesis_settings_coverage_compatible = (
1084)     hypothesis.settings(
1085)         # Running under coverage with the Python tracer increases
1086)         # running times 40-fold, on my machines.  Sadly, not every
1087)         # Python version offers the C tracer, so sometimes the Python
1088)         # tracer is used anyway.
1089)         deadline=(
1090)             40 * deadline
1091)             if (deadline := hypothesis.settings().deadline) is not None
1092)             else None
1093)         ),
Marco Ricci Manage health checks in cen...

Marco Ricci authored 2 months ago

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

Marco Ricci authored 2 months ago

1095)     )
1096)     if sys.gettrace() is not None
1097)     else hypothesis.settings()
1098) )
1099) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1104)     list1 = [
1105)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1106)         for key, value in SUPPORTED_KEYS.items()
1107)     ]
1108)     list2 = [
1109)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1110)         for key, value in UNSUITABLE_KEYS.items()
1111)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

1112)     return list1 + list2
1113) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 2 months ago

1115) def sign(
1116)     self: Any, key: bytes | bytearray, message: bytes | bytearray
1117) ) -> bytes:
1118)     del self  # Unused.
1119)     assert message == vault.Vault._UUID
1120)     for value in SUPPORTED_KEYS.values():
1121)         if value['public_key_data'] == key:  # pragma: no branch
1122)             assert value['expected_signature'] is not None
1123)             return value['expected_signature']
1124)     raise AssertionError
1125) 
1126) 
Marco Ricci Consolidate `types` submodu...

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1130)     list1 = [
1131)         Pair(value['public_key_data'], f'{key} test key'.encode('ASCII'))
1132)         for key, value in SUPPORTED_KEYS.items()
1133)     ]
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

1134)     return list1[:1]
1135) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1143)     ]
1144) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1146) def phrase_from_key(key: bytes) -> bytes:
1147)     if key == DUMMY_KEY1:  # pragma: no branch
1148)         return DUMMY_PHRASE_FROM_KEY1
1149)     raise KeyError(key)  # pragma: no cover
1150) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

1152) @contextlib.contextmanager
1153) def isolated_config(
Marco Ricci Clean up testing machinery...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 5 months ago

1158)     env_name = prog_name.replace(' ', '_').upper() + '_PATH'
1159)     with runner.isolated_filesystem():
1160)         monkeypatch.setenv('HOME', os.getcwd())
1161)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1162)         monkeypatch.delenv(env_name, raising=False)
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1165)         yield
1166) 
1167) 
1168) @contextlib.contextmanager
1169) def isolated_vault_config(
1170)     monkeypatch: pytest.MonkeyPatch,
1171)     runner: click.testing.CliRunner,
1172)     config: Any,
1173) ) -> Iterator[None]:
1174)     with isolated_config(monkeypatch=monkeypatch, runner=runner):
Marco Ricci Rename the configuration fi...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 5 months ago

1177)             json.dump(config, outfile)
1178)         yield
1179) 
Marco Ricci Reformat everything with ruff

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

1181) @contextlib.contextmanager
1182) def isolated_vault_exporter_config(
1183)     monkeypatch: pytest.MonkeyPatch,
1184)     runner: click.testing.CliRunner,
1185)     vault_config: str | bytes | None = None,
1186)     vault_key: str | None = None,
1187) ) -> Iterator[None]:
1188)     if TYPE_CHECKING:
1189)         chdir = contextlib.chdir
1190)     else:
1191)         try:
1192)             chdir = contextlib.chdir
1193)         except AttributeError:
1194) 
1195)             @contextlib.contextmanager
Marco Ricci Move exporter command-line...

Marco Ricci authored 3 months ago

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

Marco Ricci authored 3 months ago

1197)                 oldpath = os.getcwd()
1198)                 os.chdir(newpath)
1199)                 yield
1200)                 os.chdir(oldpath)
1201) 
1202)     with runner.isolated_filesystem():
1203)         monkeypatch.setenv('HOME', os.getcwd())
1204)         monkeypatch.setenv('USERPROFILE', os.getcwd())
1205)         monkeypatch.delenv('VAULT_PATH', raising=False)
1206)         monkeypatch.delenv('VAULT_KEY', raising=False)
1207)         monkeypatch.delenv('LOGNAME', raising=False)
1208)         monkeypatch.delenv('USER', raising=False)
1209)         monkeypatch.delenv('USERNAME', raising=False)
1210)         if vault_key is not None:
1211)             monkeypatch.setenv('VAULT_KEY', vault_key)
Marco Ricci Add support for Python 3.9

Marco Ricci authored 2 months ago

1212)         # Use match/case here once Python 3.9 becomes unsupported.
1213)         if isinstance(vault_config, str):
1214)             with open('.vault', 'w', encoding='UTF-8') as outfile:
1215)                 print(vault_config, file=outfile)
1216)         elif isinstance(vault_config, bytes):
1217)             os.makedirs('.vault', mode=0o700, exist_ok=True)
1218)             with (
1219)                 chdir('.vault'),
1220)                 tempfile.NamedTemporaryFile(suffix='.zip') as tmpzipfile,
1221)             ):
1222)                 for line in vault_config.splitlines():
1223)                     tmpzipfile.write(base64.standard_b64decode(line))
1224)                 tmpzipfile.flush()
1225)                 tmpzipfile.seek(0, 0)
1226)                 with zipfile.ZipFile(tmpzipfile.file) as zipfileobj:
1227)                     zipfileobj.extractall()
1228)         elif vault_config is None:
1229)             pass
1230)         else:  # pragma: no cover
1231)             assert_never(vault_config)
Marco Ricci Add preliminary tests for t...

Marco Ricci authored 3 months ago

1232)         yield
1233) 
1234) 
Marco Ricci Rename and regroup all test...

Marco Ricci authored 5 months ago

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

Marco Ricci authored 5 months ago

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

Marco Ricci authored 3 months ago

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

Marco Ricci authored 4 months ago

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

Marco Ricci authored 3 months ago

1290) 
1291) 
1292) class ReadableResult(NamedTuple):
1293)     """Helper class for formatting and testing click.testing.Result objects."""
1294) 
1295)     exception: BaseException | None
1296)     exit_code: int
1297)     output: str
1298)     stderr: str
1299) 
1300)     @classmethod
1301)     def parse(cls, r: click.testing.Result, /) -> Self:
1302)         try:
1303)             stderr = r.stderr
1304)         except ValueError:
1305)             stderr = r.output
1306)         return cls(r.exception, r.exit_code, r.output or '', stderr or '')
1307) 
1308)     def clean_exit(
1309)         self, *, output: str = '', empty_stderr: bool = False
1310)     ) -> bool:
1311)         """Return whether the invocation exited cleanly.
1312) 
1313)         Args:
1314)             output:
1315)                 An expected output string.
1316) 
1317)         """
1318)         return (
1319)             (
1320)                 not self.exception
1321)                 or (
1322)                     isinstance(self.exception, SystemExit)
1323)                     and self.exit_code == 0
1324)                 )
1325)             )
1326)             and (not output or output in self.output)
1327)             and (not empty_stderr or not self.stderr)
1328)         )
1329) 
1330)     def error_exit(
1331)         self, *, error: str | type[BaseException] = BaseException
1332)     ) -> bool:
1333)         """Return whether the invocation exited uncleanly.
1334) 
1335)         Args:
1336)             error:
1337)                 An expected error message, or an expected numeric error
1338)                 code, or an expected exception type.
1339) 
1340)         """
Marco Ricci Add support for Python 3.9

Marco Ricci authored 2 months ago

1341)         # Use match/case here once Python 3.9 becomes unsupported.
1342)         if isinstance(error, str):
1343)             return (
1344)                 isinstance(self.exception, SystemExit)
1345)                 and self.exit_code > 0
1346)                 and (not error or error in self.stderr)
1347)             )
1348)         else:  # noqa: RET505
1349)             return isinstance(self.exception, error)