source: trunk/integration/vectors/parameters.py

Last change on this file was c46ab2d, checked in by Jean-Paul Calderone <exarkun@…>, at 2023-01-20T20:20:02Z

Hit a multiple of SEGMENT_SIZE on the nose

  • Property mode set to 100644
File size: 2.7 KB
Line 
1"""
2Define input parameters for test vector generation.
3
4:ivar CONVERGENCE_SECRETS: Convergence secrets.
5
6:ivar SEGMENT_SIZE: The single segment size that the Python implementation
7    currently supports without a lot of refactoring.
8
9:ivar OBJECT_DESCRIPTIONS: Small objects with instructions which can be
10    expanded into a possibly large byte string.  These are intended to be used
11    as plaintext inputs.
12
13:ivar ZFEC_PARAMS: Input parameters to ZFEC.
14
15:ivar FORMATS: Encoding/encryption formats.
16"""
17
18from __future__ import annotations
19
20from hashlib import sha256
21
22from .model import MAX_SHARES
23from .vectors import Sample, SeedParam
24from ..util import CHK, SSK
25
26def digest(bs: bytes) -> bytes:
27    """
28    Digest bytes to bytes.
29    """
30    return sha256(bs).digest()
31
32
33def hexdigest(bs: bytes) -> str:
34    """
35    Digest bytes to text.
36    """
37    return sha256(bs).hexdigest()
38
39# Just a couple convergence secrets.  The only thing we do with this value is
40# feed it into a tagged hash.  It certainly makes a difference to the output
41# but the hash should destroy any structure in the input so it doesn't seem
42# like there's a reason to test a lot of different values.
43CONVERGENCE_SECRETS: list[bytes] = [
44    b"aaaaaaaaaaaaaaaa",
45    digest(b"Hello world")[:16],
46]
47
48SEGMENT_SIZE: int = 128 * 1024
49
50# Exercise at least a handful of different sizes, trying to cover:
51#
52#  1. Some cases smaller than one "segment" (128k).
53#     This covers shrinking of some parameters to match data size.
54#     This includes one case of the smallest possible CHK.
55#
56#  2. Some cases right on the edges of integer segment multiples.
57#     Because boundaries are tricky.
58#
59#  4. Some cases that involve quite a few segments.
60#     This exercises merkle tree construction more thoroughly.
61#
62# See ``stretch`` for construction of the actual test data.
63OBJECT_DESCRIPTIONS: list[Sample] = [
64    # The smallest possible.  55 bytes and smaller are LIT.
65    Sample(b"a", 56),
66    Sample(b"a", 1024),
67    Sample(b"c", 4096),
68    Sample(digest(b"foo"), SEGMENT_SIZE - 1),
69    Sample(digest(b"bar"), SEGMENT_SIZE + 1),
70    Sample(digest(b"baz"), SEGMENT_SIZE * 16 - 1),
71    Sample(digest(b"quux"), SEGMENT_SIZE * 16 + 1),
72    Sample(digest(b"bazquux"), SEGMENT_SIZE * 32),
73    Sample(digest(b"foobar"), SEGMENT_SIZE * 64 - 1),
74    Sample(digest(b"barbaz"), SEGMENT_SIZE * 64 + 1),
75]
76
77ZFEC_PARAMS: list[SeedParam] = [
78    SeedParam(1, 1),
79    SeedParam(1, 3),
80    SeedParam(2, 3),
81    SeedParam(3, 10),
82    SeedParam(71, 255),
83    SeedParam(101, MAX_SHARES),
84]
85
86FORMATS: list[CHK | SSK] = [
87    CHK(),
88
89    # These start out unaware of a key but various keys will be supplied
90    # during generation.
91    SSK(name="sdmf", key=None),
92    SSK(name="mdmf", key=None),
93]
Note: See TracBrowser for help on using the repository browser.