Skip to content

Commit d5be43d

Browse files
committed
feat: python interface of MrkleTree proof gen
1 parent ab6c747 commit d5be43d

File tree

5 files changed

+295
-57
lines changed

5 files changed

+295
-57
lines changed

bindings/python/py/mrkle/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from . import node
1414

1515
from .node import MrkleNode
16-
from .tree import MrkleTree
16+
from .tree import MrkleTree, MrkleProof
1717

1818
from .errors import (
1919
MerkleError,
@@ -31,6 +31,7 @@
3131
"node",
3232
"MrkleNode",
3333
"MrkleTree",
34+
"MrkleProof",
3435
"MerkleError",
3536
"TreeError",
3637
"HashError",
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
from mrkle._mrkle_rs import proof
2+
3+
from collections import Mapping
4+
from types import MappingProxyType
5+
from typing import Union, Final
6+
7+
__all__ = [
8+
"MrkleProofSha1",
9+
"MrkleProofSha224",
10+
"MrkleProofSha256",
11+
"MrkleProofSha384",
12+
"MrkleProofSha512",
13+
"MrkleProofKeccak224",
14+
"MrkleProofKeccak256",
15+
"MrkleProofKeccak384",
16+
"MrkleProofKeccak512",
17+
"MrkleProofBlake2b",
18+
"MrkleProofBlake2s",
19+
"PROOF_MAP",
20+
"ProofT",
21+
]
22+
23+
MrkleProofSha1 = proof.MrkleProofSha1
24+
25+
MrkleProofSha224 = proof.MrkleProofSha224
26+
MrkleProofSha256 = proof.MrkleProofSha256
27+
MrkleProofSha384 = proof.MrkleProofSha384
28+
MrkleProofSha512 = proof.MrkleProofSha512
29+
30+
31+
MrkleProofKeccak224 = proof.MrkleProofKeccak224
32+
MrkleProofKeccak256 = proof.MrkleProofKeccak256
33+
MrkleProofKeccak384 = proof.MrkleProofKeccak384
34+
MrkleProofKeccak512 = proof.MrkleProofKeccak512
35+
36+
MrkleProofBlake2b = proof.MrkleProofBlake2b
37+
MrkleProofBlake2s = proof.MrkleProofBlake2s
38+
39+
40+
ProofT = type[
41+
Union[
42+
MrkleProofBlake2s,
43+
MrkleProofBlake2b,
44+
MrkleProofKeccak224,
45+
MrkleProofKeccak256,
46+
MrkleProofKeccak384,
47+
MrkleProofKeccak512,
48+
MrkleProofSha1,
49+
MrkleProofSha224,
50+
MrkleProofSha256,
51+
MrkleProofSha384,
52+
MrkleProofSha512,
53+
]
54+
]
55+
56+
PROOF_MAP: Final[Mapping[str, ProofT]] = MappingProxyType(
57+
{
58+
"blake2s": MrkleProofBlake2s,
59+
"blake2b": MrkleProofBlake2b,
60+
"keccak224": MrkleProofKeccak224,
61+
"keccak256": MrkleProofKeccak256,
62+
"keccak384": MrkleProofKeccak384,
63+
"keccak512": MrkleProofKeccak512,
64+
"sha1": MrkleProofSha1,
65+
"sha224": MrkleProofSha224,
66+
"sha256": MrkleProofSha256,
67+
"sha384": MrkleProofSha384,
68+
"sha512": MrkleProofSha512,
69+
}
70+
)
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
from collections.abc import Mapping, Sequence
2+
from typing import Union, Final, Optional, Literal
3+
from typing_extensions import TypeAlias
4+
5+
from mrkle.tree import MrkleTree
6+
from mrkle.typing import D as _D
7+
8+
__all__ = [
9+
"MrkleProofSha1",
10+
"MrkleProofSha224",
11+
"MrkleProofSha256",
12+
"MrkleProofSha384",
13+
"MrkleProofSha512",
14+
"MrkleProofKeccak224",
15+
"MrkleProofKeccak256",
16+
"MrkleProofKeccak384",
17+
"MrkleProofKeccak512",
18+
"MrkleProofBlake2b",
19+
"MrkleProofBlake2s",
20+
"PROOF_MAP",
21+
"ProofT",
22+
"BaseMrkleProof",
23+
]
24+
25+
# ---- Base interface for all proof classes ----
26+
27+
class BaseMrkleProof:
28+
def expected(self) -> bytes: ...
29+
def expected_hexdigest(self) -> str: ...
30+
@classmethod
31+
def generate(
32+
cls, tree: MrkleTree[_D], leaves: Union[Sequence[int], int]
33+
) -> "ProofT": ...
34+
@staticmethod
35+
def dtype() -> _D: ...
36+
def __len__(self) -> int: ...
37+
def __repr__(self) -> str: ...
38+
def __str__(self) -> str: ...
39+
def to_string(self) -> str: ...
40+
def dumps(
41+
self, encoding: Optional[Literal["json", "cbor"]] = ...
42+
) -> Union[str, bytes]: ...
43+
@staticmethod
44+
def loads(
45+
data: Union[str, bytes], encoding: Optional[Literal["json", "cbor"]] = ...
46+
) -> "ProofT": ...
47+
48+
class MrkleProofSha1(BaseMrkleProof): ...
49+
class MrkleProofSha224(BaseMrkleProof): ...
50+
class MrkleProofSha256(BaseMrkleProof): ...
51+
class MrkleProofSha384(BaseMrkleProof): ...
52+
class MrkleProofSha512(BaseMrkleProof): ...
53+
class MrkleProofKeccak224(BaseMrkleProof): ...
54+
class MrkleProofKeccak256(BaseMrkleProof): ...
55+
class MrkleProofKeccak384(BaseMrkleProof): ...
56+
class MrkleProofKeccak512(BaseMrkleProof): ...
57+
class MrkleProofBlake2b(BaseMrkleProof): ...
58+
class MrkleProofBlake2s(BaseMrkleProof): ...
59+
60+
# ---- Type alias and mapping ----
61+
62+
ProofT: TypeAlias = Union[
63+
MrkleProofBlake2s,
64+
MrkleProofBlake2b,
65+
MrkleProofKeccak224,
66+
MrkleProofKeccak256,
67+
MrkleProofKeccak384,
68+
MrkleProofKeccak512,
69+
MrkleProofSha1,
70+
MrkleProofSha224,
71+
MrkleProofSha256,
72+
MrkleProofSha384,
73+
MrkleProofSha512,
74+
]
75+
76+
PROOF_MAP: Final[Mapping[str, ProofT]]

bindings/python/py/mrkle/proof.py

Lines changed: 0 additions & 36 deletions
This file was deleted.

0 commit comments

Comments
 (0)