checkpointed-local-log 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checkpointed_local_log-0.1.0/LICENSE +28 -0
- checkpointed_local_log-0.1.0/PKG-INFO +98 -0
- checkpointed_local_log-0.1.0/README.md +73 -0
- checkpointed_local_log-0.1.0/checkpointed_local_log.egg-info/PKG-INFO +98 -0
- checkpointed_local_log-0.1.0/checkpointed_local_log.egg-info/SOURCES.txt +24 -0
- checkpointed_local_log-0.1.0/checkpointed_local_log.egg-info/dependency_links.txt +1 -0
- checkpointed_local_log-0.1.0/checkpointed_local_log.egg-info/requires.txt +8 -0
- checkpointed_local_log-0.1.0/checkpointed_local_log.egg-info/top_level.txt +1 -0
- checkpointed_local_log-0.1.0/cll/__init__.py +24 -0
- checkpointed_local_log-0.1.0/cll/checkpoint/__init__.py +149 -0
- checkpointed_local_log-0.1.0/cll/checkpoint/bundle.py +481 -0
- checkpointed_local_log-0.1.0/cll/checkpoint/core.py +691 -0
- checkpointed_local_log-0.1.0/cll/checkpoint/cose_wire.py +634 -0
- checkpointed_local_log-0.1.0/cll/checkpoint/emit.py +1006 -0
- checkpointed_local_log-0.1.0/cll/checkpoint/index.py +227 -0
- checkpointed_local_log-0.1.0/cll/checkpoint/store.py +30 -0
- checkpointed_local_log-0.1.0/cll/ledger/__init__.py +46 -0
- checkpointed_local_log-0.1.0/cll/ledger/admission.py +225 -0
- checkpointed_local_log-0.1.0/cll/ledger/api.py +76 -0
- checkpointed_local_log-0.1.0/cll/ledger/checkpoint.py +518 -0
- checkpointed_local_log-0.1.0/cll/ledger/records.py +55 -0
- checkpointed_local_log-0.1.0/cll/ledger/store.py +573 -0
- checkpointed_local_log-0.1.0/cll/revocation.py +132 -0
- checkpointed_local_log-0.1.0/cll/signing.py +70 -0
- checkpointed_local_log-0.1.0/pyproject.toml +52 -0
- checkpointed_local_log-0.1.0/setup.cfg +4 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Action State Group, Inc.
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
3. Neither the name of the copyright holder nor the names of its contributors
|
|
16
|
+
may be used to endorse or promote products derived from this software
|
|
17
|
+
without specific prior written permission.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: checkpointed-local-log
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: CLL: an append-only local log backed by a Merkle Mountain Range (MMR), with periodic signed COSE checkpoints and third-party witnessing -- the reference implementation for draft-mih-scitt-checkpointed-local-log.
|
|
5
|
+
Author: Action State Group
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/action-state-group/checkpointed-local-log
|
|
8
|
+
Project-URL: Source, https://github.com/action-state-group/checkpointed-local-log
|
|
9
|
+
Keywords: scitt,mmr,merkle-mountain-range,merkle,transparency,checkpoint,audit
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Topic :: Security :: Cryptography
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Requires-Python: >=3.9
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Requires-Dist: cbor2>=5.5
|
|
18
|
+
Requires-Dist: scitt-cose>=0.2.0
|
|
19
|
+
Requires-Dist: agent-action-capsule>=0.2.0
|
|
20
|
+
Requires-Dist: cryptography>=42.0
|
|
21
|
+
Provides-Extra: dev
|
|
22
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
23
|
+
Requires-Dist: ruff<0.16,>=0.4; extra == "dev"
|
|
24
|
+
Dynamic: license-file
|
|
25
|
+
|
|
26
|
+
# checkpointed-local-log
|
|
27
|
+
|
|
28
|
+
**The Checkpointed Local Log (CLL)** — an IETF Internet-Draft specifying a
|
|
29
|
+
producer-operated, append-only local log with periodic signed checkpoints.
|
|
30
|
+
Entries are appended locally and never published; only a small checkpoint —
|
|
31
|
+
a signed commitment to the log's entire history — ever leaves the producer.
|
|
32
|
+
Checkpoints may be registered with one or more independent SCITT Transparency
|
|
33
|
+
Services or witnesses, turning a set of individually signed records into a
|
|
34
|
+
stream with provable order, contemporaneity, and completeness.
|
|
35
|
+
|
|
36
|
+
The log itself is a **Merkle Mountain Range (MMR)**, whose COSE proof formats
|
|
37
|
+
are specified in `I-D.bryce-cose-receipts-mmr-profile`. This document
|
|
38
|
+
specifies the log discipline and the checkpoint structure on top of that
|
|
39
|
+
MMR — it defines no new proof formats, no transparency service behavior, and
|
|
40
|
+
no payload semantics. The append-only MMR log is implemented in this repo's
|
|
41
|
+
`cll` Python package (below); `capsule-emit` and `capsule-ledger` consume it
|
|
42
|
+
rather than each forking their own copy.
|
|
43
|
+
|
|
44
|
+
> **Status.** This is an **individual** IETF Internet-Draft, not a Working
|
|
45
|
+
> Group document, and not an RFC.
|
|
46
|
+
|
|
47
|
+
## The `cll` package
|
|
48
|
+
|
|
49
|
+
`cll` is the reference implementation of this spec: a Python package
|
|
50
|
+
shipping the pieces a CLL producer or verifier needs.
|
|
51
|
+
|
|
52
|
+
```sh
|
|
53
|
+
pip install checkpointed-local-log
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
What it ships:
|
|
57
|
+
|
|
58
|
+
- **Append-only log store** (`cll.ledger`) — JSONL segments plus a derived
|
|
59
|
+
SQLite index, the three-state admission contract, and hash-chain /
|
|
60
|
+
chain-gap detection.
|
|
61
|
+
- **Merkle Mountain Range (MMR)** (`cll.checkpoint.core`/`.index`/`.store`) —
|
|
62
|
+
the pure position math, domain-separated hashing, and inclusion/consistency
|
|
63
|
+
proofs this spec's checkpoints commit to.
|
|
64
|
+
- **Signed COSE checkpoints** (`cll.checkpoint.emit`/`.cose_wire`) —
|
|
65
|
+
building, signing, and registering checkpoints with a Transparency Service
|
|
66
|
+
over the COSE_Sign1 wire form this spec defines.
|
|
67
|
+
- **Disclosure bundles** (`cll.checkpoint.bundle`) — the record/range-level,
|
|
68
|
+
offline-verifiable evidence package (inclusion proof + covering checkpoint
|
|
69
|
+
+ witness stamp + consistency proof) for handing one log record to a
|
|
70
|
+
stranger.
|
|
71
|
+
|
|
72
|
+
See [`docs/module-map.md`](docs/module-map.md) for the section-by-section map
|
|
73
|
+
from this spec to the package's modules.
|
|
74
|
+
|
|
75
|
+
## Building the draft
|
|
76
|
+
|
|
77
|
+
The build toolchain is [`kramdown-rfc`](https://github.com/cabo/kramdown-rfc)
|
|
78
|
+
(Markdown → RFCXML v2) and [`xml2rfc`](https://pypi.org/project/xml2rfc/)
|
|
79
|
+
(v2 → v3 → text):
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
cd spec
|
|
83
|
+
make DRAFT=draft-mih-scitt-checkpointed-local-log-00 \
|
|
84
|
+
KDRFC=kramdown-rfc2629 \
|
|
85
|
+
XML2RFC=xml2rfc \
|
|
86
|
+
draft-mih-scitt-checkpointed-local-log-00.xml \
|
|
87
|
+
draft-mih-scitt-checkpointed-local-log-00.txt
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`spec/.refcache/` is committed so the build never depends on `bib.ietf.org`
|
|
91
|
+
being reachable. See comments in `spec/Makefile` for `rebuild` and
|
|
92
|
+
`refresh-refs` targets.
|
|
93
|
+
|
|
94
|
+
## License
|
|
95
|
+
|
|
96
|
+
See [LICENSE](LICENSE): the specification text is governed by
|
|
97
|
+
[BCP 78](https://www.rfc-editor.org/info/bcp78) and the IETF Trust's Legal
|
|
98
|
+
Provisions; code and reference material are under the Revised BSD License.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# checkpointed-local-log
|
|
2
|
+
|
|
3
|
+
**The Checkpointed Local Log (CLL)** — an IETF Internet-Draft specifying a
|
|
4
|
+
producer-operated, append-only local log with periodic signed checkpoints.
|
|
5
|
+
Entries are appended locally and never published; only a small checkpoint —
|
|
6
|
+
a signed commitment to the log's entire history — ever leaves the producer.
|
|
7
|
+
Checkpoints may be registered with one or more independent SCITT Transparency
|
|
8
|
+
Services or witnesses, turning a set of individually signed records into a
|
|
9
|
+
stream with provable order, contemporaneity, and completeness.
|
|
10
|
+
|
|
11
|
+
The log itself is a **Merkle Mountain Range (MMR)**, whose COSE proof formats
|
|
12
|
+
are specified in `I-D.bryce-cose-receipts-mmr-profile`. This document
|
|
13
|
+
specifies the log discipline and the checkpoint structure on top of that
|
|
14
|
+
MMR — it defines no new proof formats, no transparency service behavior, and
|
|
15
|
+
no payload semantics. The append-only MMR log is implemented in this repo's
|
|
16
|
+
`cll` Python package (below); `capsule-emit` and `capsule-ledger` consume it
|
|
17
|
+
rather than each forking their own copy.
|
|
18
|
+
|
|
19
|
+
> **Status.** This is an **individual** IETF Internet-Draft, not a Working
|
|
20
|
+
> Group document, and not an RFC.
|
|
21
|
+
|
|
22
|
+
## The `cll` package
|
|
23
|
+
|
|
24
|
+
`cll` is the reference implementation of this spec: a Python package
|
|
25
|
+
shipping the pieces a CLL producer or verifier needs.
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
pip install checkpointed-local-log
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
What it ships:
|
|
32
|
+
|
|
33
|
+
- **Append-only log store** (`cll.ledger`) — JSONL segments plus a derived
|
|
34
|
+
SQLite index, the three-state admission contract, and hash-chain /
|
|
35
|
+
chain-gap detection.
|
|
36
|
+
- **Merkle Mountain Range (MMR)** (`cll.checkpoint.core`/`.index`/`.store`) —
|
|
37
|
+
the pure position math, domain-separated hashing, and inclusion/consistency
|
|
38
|
+
proofs this spec's checkpoints commit to.
|
|
39
|
+
- **Signed COSE checkpoints** (`cll.checkpoint.emit`/`.cose_wire`) —
|
|
40
|
+
building, signing, and registering checkpoints with a Transparency Service
|
|
41
|
+
over the COSE_Sign1 wire form this spec defines.
|
|
42
|
+
- **Disclosure bundles** (`cll.checkpoint.bundle`) — the record/range-level,
|
|
43
|
+
offline-verifiable evidence package (inclusion proof + covering checkpoint
|
|
44
|
+
+ witness stamp + consistency proof) for handing one log record to a
|
|
45
|
+
stranger.
|
|
46
|
+
|
|
47
|
+
See [`docs/module-map.md`](docs/module-map.md) for the section-by-section map
|
|
48
|
+
from this spec to the package's modules.
|
|
49
|
+
|
|
50
|
+
## Building the draft
|
|
51
|
+
|
|
52
|
+
The build toolchain is [`kramdown-rfc`](https://github.com/cabo/kramdown-rfc)
|
|
53
|
+
(Markdown → RFCXML v2) and [`xml2rfc`](https://pypi.org/project/xml2rfc/)
|
|
54
|
+
(v2 → v3 → text):
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
cd spec
|
|
58
|
+
make DRAFT=draft-mih-scitt-checkpointed-local-log-00 \
|
|
59
|
+
KDRFC=kramdown-rfc2629 \
|
|
60
|
+
XML2RFC=xml2rfc \
|
|
61
|
+
draft-mih-scitt-checkpointed-local-log-00.xml \
|
|
62
|
+
draft-mih-scitt-checkpointed-local-log-00.txt
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
`spec/.refcache/` is committed so the build never depends on `bib.ietf.org`
|
|
66
|
+
being reachable. See comments in `spec/Makefile` for `rebuild` and
|
|
67
|
+
`refresh-refs` targets.
|
|
68
|
+
|
|
69
|
+
## License
|
|
70
|
+
|
|
71
|
+
See [LICENSE](LICENSE): the specification text is governed by
|
|
72
|
+
[BCP 78](https://www.rfc-editor.org/info/bcp78) and the IETF Trust's Legal
|
|
73
|
+
Provisions; code and reference material are under the Revised BSD License.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: checkpointed-local-log
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: CLL: an append-only local log backed by a Merkle Mountain Range (MMR), with periodic signed COSE checkpoints and third-party witnessing -- the reference implementation for draft-mih-scitt-checkpointed-local-log.
|
|
5
|
+
Author: Action State Group
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/action-state-group/checkpointed-local-log
|
|
8
|
+
Project-URL: Source, https://github.com/action-state-group/checkpointed-local-log
|
|
9
|
+
Keywords: scitt,mmr,merkle-mountain-range,merkle,transparency,checkpoint,audit
|
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Topic :: Security :: Cryptography
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Requires-Python: >=3.9
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Requires-Dist: cbor2>=5.5
|
|
18
|
+
Requires-Dist: scitt-cose>=0.2.0
|
|
19
|
+
Requires-Dist: agent-action-capsule>=0.2.0
|
|
20
|
+
Requires-Dist: cryptography>=42.0
|
|
21
|
+
Provides-Extra: dev
|
|
22
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
23
|
+
Requires-Dist: ruff<0.16,>=0.4; extra == "dev"
|
|
24
|
+
Dynamic: license-file
|
|
25
|
+
|
|
26
|
+
# checkpointed-local-log
|
|
27
|
+
|
|
28
|
+
**The Checkpointed Local Log (CLL)** — an IETF Internet-Draft specifying a
|
|
29
|
+
producer-operated, append-only local log with periodic signed checkpoints.
|
|
30
|
+
Entries are appended locally and never published; only a small checkpoint —
|
|
31
|
+
a signed commitment to the log's entire history — ever leaves the producer.
|
|
32
|
+
Checkpoints may be registered with one or more independent SCITT Transparency
|
|
33
|
+
Services or witnesses, turning a set of individually signed records into a
|
|
34
|
+
stream with provable order, contemporaneity, and completeness.
|
|
35
|
+
|
|
36
|
+
The log itself is a **Merkle Mountain Range (MMR)**, whose COSE proof formats
|
|
37
|
+
are specified in `I-D.bryce-cose-receipts-mmr-profile`. This document
|
|
38
|
+
specifies the log discipline and the checkpoint structure on top of that
|
|
39
|
+
MMR — it defines no new proof formats, no transparency service behavior, and
|
|
40
|
+
no payload semantics. The append-only MMR log is implemented in this repo's
|
|
41
|
+
`cll` Python package (below); `capsule-emit` and `capsule-ledger` consume it
|
|
42
|
+
rather than each forking their own copy.
|
|
43
|
+
|
|
44
|
+
> **Status.** This is an **individual** IETF Internet-Draft, not a Working
|
|
45
|
+
> Group document, and not an RFC.
|
|
46
|
+
|
|
47
|
+
## The `cll` package
|
|
48
|
+
|
|
49
|
+
`cll` is the reference implementation of this spec: a Python package
|
|
50
|
+
shipping the pieces a CLL producer or verifier needs.
|
|
51
|
+
|
|
52
|
+
```sh
|
|
53
|
+
pip install checkpointed-local-log
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
What it ships:
|
|
57
|
+
|
|
58
|
+
- **Append-only log store** (`cll.ledger`) — JSONL segments plus a derived
|
|
59
|
+
SQLite index, the three-state admission contract, and hash-chain /
|
|
60
|
+
chain-gap detection.
|
|
61
|
+
- **Merkle Mountain Range (MMR)** (`cll.checkpoint.core`/`.index`/`.store`) —
|
|
62
|
+
the pure position math, domain-separated hashing, and inclusion/consistency
|
|
63
|
+
proofs this spec's checkpoints commit to.
|
|
64
|
+
- **Signed COSE checkpoints** (`cll.checkpoint.emit`/`.cose_wire`) —
|
|
65
|
+
building, signing, and registering checkpoints with a Transparency Service
|
|
66
|
+
over the COSE_Sign1 wire form this spec defines.
|
|
67
|
+
- **Disclosure bundles** (`cll.checkpoint.bundle`) — the record/range-level,
|
|
68
|
+
offline-verifiable evidence package (inclusion proof + covering checkpoint
|
|
69
|
+
+ witness stamp + consistency proof) for handing one log record to a
|
|
70
|
+
stranger.
|
|
71
|
+
|
|
72
|
+
See [`docs/module-map.md`](docs/module-map.md) for the section-by-section map
|
|
73
|
+
from this spec to the package's modules.
|
|
74
|
+
|
|
75
|
+
## Building the draft
|
|
76
|
+
|
|
77
|
+
The build toolchain is [`kramdown-rfc`](https://github.com/cabo/kramdown-rfc)
|
|
78
|
+
(Markdown → RFCXML v2) and [`xml2rfc`](https://pypi.org/project/xml2rfc/)
|
|
79
|
+
(v2 → v3 → text):
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
cd spec
|
|
83
|
+
make DRAFT=draft-mih-scitt-checkpointed-local-log-00 \
|
|
84
|
+
KDRFC=kramdown-rfc2629 \
|
|
85
|
+
XML2RFC=xml2rfc \
|
|
86
|
+
draft-mih-scitt-checkpointed-local-log-00.xml \
|
|
87
|
+
draft-mih-scitt-checkpointed-local-log-00.txt
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`spec/.refcache/` is committed so the build never depends on `bib.ietf.org`
|
|
91
|
+
being reachable. See comments in `spec/Makefile` for `rebuild` and
|
|
92
|
+
`refresh-refs` targets.
|
|
93
|
+
|
|
94
|
+
## License
|
|
95
|
+
|
|
96
|
+
See [LICENSE](LICENSE): the specification text is governed by
|
|
97
|
+
[BCP 78](https://www.rfc-editor.org/info/bcp78) and the IETF Trust's Legal
|
|
98
|
+
Provisions; code and reference material are under the Revised BSD License.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
checkpointed_local_log.egg-info/PKG-INFO
|
|
5
|
+
checkpointed_local_log.egg-info/SOURCES.txt
|
|
6
|
+
checkpointed_local_log.egg-info/dependency_links.txt
|
|
7
|
+
checkpointed_local_log.egg-info/requires.txt
|
|
8
|
+
checkpointed_local_log.egg-info/top_level.txt
|
|
9
|
+
cll/__init__.py
|
|
10
|
+
cll/revocation.py
|
|
11
|
+
cll/signing.py
|
|
12
|
+
cll/checkpoint/__init__.py
|
|
13
|
+
cll/checkpoint/bundle.py
|
|
14
|
+
cll/checkpoint/core.py
|
|
15
|
+
cll/checkpoint/cose_wire.py
|
|
16
|
+
cll/checkpoint/emit.py
|
|
17
|
+
cll/checkpoint/index.py
|
|
18
|
+
cll/checkpoint/store.py
|
|
19
|
+
cll/ledger/__init__.py
|
|
20
|
+
cll/ledger/admission.py
|
|
21
|
+
cll/ledger/api.py
|
|
22
|
+
cll/ledger/checkpoint.py
|
|
23
|
+
cll/ledger/records.py
|
|
24
|
+
cll/ledger/store.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
cll
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
"""``cll`` -- Checkpointed Local Log: the reference library for
|
|
3
|
+
``draft-mih-scitt-checkpointed-local-log`` (see ``../spec/``).
|
|
4
|
+
|
|
5
|
+
Two subpackages, imported explicitly (this top level stays empty so a bare
|
|
6
|
+
``import cll`` never pays for either):
|
|
7
|
+
|
|
8
|
+
- ``cll.checkpoint`` -- the MMR/checkpoint/COSE core: pure position math,
|
|
9
|
+
domain-separated hashing, inclusion/consistency proofs, COSE_Sign1
|
|
10
|
+
checkpoint wire format, Transparency Service registration, and the
|
|
11
|
+
record/range-level disclosure-bundle primitive. Content-agnostic — knows
|
|
12
|
+
nothing about capsules or any other record shape.
|
|
13
|
+
- ``cll.ledger`` -- an append-only log store (JSONL segments + SQLite
|
|
14
|
+
index), its read/query API, the three-state admission contract, and
|
|
15
|
+
chain-gap detection. This binding is capsule-shaped today (it verifies
|
|
16
|
+
Agent Action Capsules specifically) — a content-agnostic log store is a
|
|
17
|
+
possible future direction, not a claim this package makes yet.
|
|
18
|
+
|
|
19
|
+
Neither subpackage names a product, a company, or a capsule format in its
|
|
20
|
+
own vocabulary — the log layer is deliberately not capsule-specific (the
|
|
21
|
+
same layering law as ``scitt-cose``: capsule semantics never enter it).
|
|
22
|
+
Downstream capsule-shaped consumers (``capsule-emit``, ``capsule-ledger``)
|
|
23
|
+
depend on this package rather than each forking their own copy.
|
|
24
|
+
"""
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
"""``cll.checkpoint`` -- the MMR/checkpoint/COSE core of Checkpointed Local Log.
|
|
3
|
+
|
|
4
|
+
``core`` is the pure MMR algorithm (position math, domain-separated hashing,
|
|
5
|
+
inclusion/consistency proofs, no I/O). ``store`` is the v0 in-memory node
|
|
6
|
+
backing. ``index`` wires the MMR to any append-only log exposing the
|
|
7
|
+
``LogSource`` shape (append/scan/fetch/find_gaps/verify) -- structurally, not
|
|
8
|
+
by importing a concrete implementation. ``emit`` builds, signs, and registers
|
|
9
|
+
peaks checkpoints against a Transparency Service. ``bundle`` assembles a
|
|
10
|
+
standalone, offline-verifiable evidence package for one log record.
|
|
11
|
+
|
|
12
|
+
This subpackage is content-agnostic: nothing here knows what a "capsule" is.
|
|
13
|
+
A caller identifies leaves by whatever field name its own record shape uses
|
|
14
|
+
(``bundle()``'s ``id_field``); ``index.LogSource`` is a structural protocol,
|
|
15
|
+
not a capsule-specific binding.
|
|
16
|
+
|
|
17
|
+
**History.** Originally built inside ``capsule-emit`` (ported there from
|
|
18
|
+
``capsule-ledger/capsule_ledger/mmr/{core,index,store}.py`` per Amendment E,
|
|
19
|
+
2026-08-21, on the reasoning that the CLL core is substrate a counterparty
|
|
20
|
+
needs to verify a log, so it should live where any consumer can depend on
|
|
21
|
+
it without forking). Graduated to this repo as the ``cll`` package per the
|
|
22
|
+
W3 one-neutral-library-per-spec decision (2026-09-01): the log layer is
|
|
23
|
+
deliberately NOT capsule-specific -- that is its adoption story (e.g. a
|
|
24
|
+
trace registry running this exact mechanism over TRACE records) -- so it
|
|
25
|
+
does not live under a ``capsule-*``-branded name. ``capsule-emit`` now
|
|
26
|
+
depends on this package and re-exports ``capsule_emit.checkpoint`` /
|
|
27
|
+
``capsule_emit.bundle`` as thin compatibility wrappers over it.
|
|
28
|
+
"""
|
|
29
|
+
from .bundle import Bundle, BundleError, bundle, verify_bundle_log_integrity
|
|
30
|
+
from .core import (
|
|
31
|
+
ConsistencyProof,
|
|
32
|
+
InclusionProof,
|
|
33
|
+
IntegrityError,
|
|
34
|
+
InvalidArgumentError,
|
|
35
|
+
add_leaf,
|
|
36
|
+
commitment_object,
|
|
37
|
+
consistency_proof,
|
|
38
|
+
height_at,
|
|
39
|
+
interior_hash,
|
|
40
|
+
leaf_count,
|
|
41
|
+
leaf_hash,
|
|
42
|
+
leaf_index_to_pos,
|
|
43
|
+
node_count,
|
|
44
|
+
peaks,
|
|
45
|
+
pos_to_leaf_index,
|
|
46
|
+
root_from_peaks,
|
|
47
|
+
verify_consistency,
|
|
48
|
+
verify_inclusion,
|
|
49
|
+
)
|
|
50
|
+
from .cose_wire import (
|
|
51
|
+
CLL_CHECKPOINT_CONTENT_TYPE,
|
|
52
|
+
WIRE_KIND,
|
|
53
|
+
CoseCheckpointVerification,
|
|
54
|
+
DecodedCheckpointCose,
|
|
55
|
+
checkpoint_to_cose,
|
|
56
|
+
encode_checkpoint_claims,
|
|
57
|
+
verify_checkpoint_cose_offline,
|
|
58
|
+
)
|
|
59
|
+
from .emit import (
|
|
60
|
+
DEFAULT_TS_PUBLIC_KEY_ID,
|
|
61
|
+
DEFAULT_TS_PUBLIC_KEY_PEM,
|
|
62
|
+
DEFAULT_TS_URL,
|
|
63
|
+
EXAMPLE_CONFIG_TOML,
|
|
64
|
+
STUB_MARKER,
|
|
65
|
+
STUB_TS_URL,
|
|
66
|
+
CheckpointConfig,
|
|
67
|
+
CheckpointError,
|
|
68
|
+
CheckpointRecord,
|
|
69
|
+
Grade,
|
|
70
|
+
RollbackError,
|
|
71
|
+
Signer,
|
|
72
|
+
StampVerdict,
|
|
73
|
+
WitnessRecord,
|
|
74
|
+
due_for_checkpoint,
|
|
75
|
+
emit_checkpoint,
|
|
76
|
+
lag_exceeded,
|
|
77
|
+
register_checkpoint,
|
|
78
|
+
register_checkpoint_stub,
|
|
79
|
+
verify_checkpoint_consistency,
|
|
80
|
+
verify_checkpoint_signature,
|
|
81
|
+
verify_checkpoint_signature_offline,
|
|
82
|
+
verify_receipt_offline,
|
|
83
|
+
verify_witness_stamp_offline,
|
|
84
|
+
verify_witness_stamp_tristate,
|
|
85
|
+
)
|
|
86
|
+
from .index import LogSource, MmrLedger, RangeProof, verify_range
|
|
87
|
+
from .store import MemoryNodeStore
|
|
88
|
+
|
|
89
|
+
__all__ = [
|
|
90
|
+
"Bundle",
|
|
91
|
+
"BundleError",
|
|
92
|
+
"bundle",
|
|
93
|
+
"verify_bundle_log_integrity",
|
|
94
|
+
"CLL_CHECKPOINT_CONTENT_TYPE",
|
|
95
|
+
"WIRE_KIND",
|
|
96
|
+
"CoseCheckpointVerification",
|
|
97
|
+
"DecodedCheckpointCose",
|
|
98
|
+
"checkpoint_to_cose",
|
|
99
|
+
"encode_checkpoint_claims",
|
|
100
|
+
"verify_checkpoint_cose_offline",
|
|
101
|
+
"ConsistencyProof",
|
|
102
|
+
"InclusionProof",
|
|
103
|
+
"IntegrityError",
|
|
104
|
+
"InvalidArgumentError",
|
|
105
|
+
"add_leaf",
|
|
106
|
+
"commitment_object",
|
|
107
|
+
"consistency_proof",
|
|
108
|
+
"height_at",
|
|
109
|
+
"interior_hash",
|
|
110
|
+
"leaf_count",
|
|
111
|
+
"leaf_hash",
|
|
112
|
+
"leaf_index_to_pos",
|
|
113
|
+
"node_count",
|
|
114
|
+
"peaks",
|
|
115
|
+
"pos_to_leaf_index",
|
|
116
|
+
"root_from_peaks",
|
|
117
|
+
"verify_consistency",
|
|
118
|
+
"verify_inclusion",
|
|
119
|
+
"LogSource",
|
|
120
|
+
"MmrLedger",
|
|
121
|
+
"RangeProof",
|
|
122
|
+
"verify_range",
|
|
123
|
+
"MemoryNodeStore",
|
|
124
|
+
"DEFAULT_TS_URL",
|
|
125
|
+
"DEFAULT_TS_PUBLIC_KEY_PEM",
|
|
126
|
+
"DEFAULT_TS_PUBLIC_KEY_ID",
|
|
127
|
+
"EXAMPLE_CONFIG_TOML",
|
|
128
|
+
"STUB_MARKER",
|
|
129
|
+
"STUB_TS_URL",
|
|
130
|
+
"CheckpointConfig",
|
|
131
|
+
"CheckpointError",
|
|
132
|
+
"CheckpointRecord",
|
|
133
|
+
"Grade",
|
|
134
|
+
"RollbackError",
|
|
135
|
+
"Signer",
|
|
136
|
+
"StampVerdict",
|
|
137
|
+
"WitnessRecord",
|
|
138
|
+
"due_for_checkpoint",
|
|
139
|
+
"emit_checkpoint",
|
|
140
|
+
"lag_exceeded",
|
|
141
|
+
"register_checkpoint",
|
|
142
|
+
"register_checkpoint_stub",
|
|
143
|
+
"verify_checkpoint_consistency",
|
|
144
|
+
"verify_checkpoint_signature",
|
|
145
|
+
"verify_checkpoint_signature_offline",
|
|
146
|
+
"verify_receipt_offline",
|
|
147
|
+
"verify_witness_stamp_offline",
|
|
148
|
+
"verify_witness_stamp_tristate",
|
|
149
|
+
]
|