Zeth - Zerocash on Ethereum  0.8
Reference implementation of the Zeth protocol by Clearmatics
contributor_list.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 
3 # Copyright (c) 2015-2022 Clearmatics Technologies Ltd
4 #
5 # SPDX-License-Identifier: LGPL-3.0+
6 
7 from __future__ import annotations
8 from .server_configuration import JsonDict
9 from .crypto import \
10  VerificationKey, import_verification_key, export_verification_key, \
11  Signature, import_signature, export_signature, check_key_evidence
12 from typing import List, cast, Optional
13 import json
14 
15 
17  """
18  Details of a specific contributor
19  """
20  def __init__(
21  self,
22  email: str,
23  verification_key: VerificationKey,
24  key_evidence: Signature):
25  self.email = email
26  self.verification_key = verification_key
27  self.key_evidence = key_evidence
28 
29  def _to_json_dict(self) -> JsonDict:
30  return {
31  "email": self.email,
32  "verification_key": export_verification_key(self.verification_key),
33  "key_evidence": export_signature(self.key_evidence),
34  }
35 
36  @staticmethod
37  def _from_json_dict(json_dict: JsonDict) -> Contributor:
38  return Contributor(
39  cast(str, json_dict["email"]),
40  import_verification_key(cast(str, json_dict["verification_key"])),
41  import_signature(cast(str, json_dict["key_evidence"])))
42 
43 
45  """
46  Model for contributors list file
47  """
48  def __init__(self, contributors: List[Contributor]):
49  self.contributors = contributors
50 
51  def ensure_validity(self) -> None:
52  """
53  Checks the server configuration. If there are any problems, throw an
54  exception with a message.
55  """
56 
57  # Evidence is expected to be the signature of
58  # KEY_VALIDATION_CHECK_STRING. Check this for all the contributors
59  # keys
60  for contr in self.contributors:
61  if not check_key_evidence(contr.verification_key, contr.key_evidence):
62  raise Exception(f"Key for {contr.email} has invalid evidence")
63 
65  self,
66  verification_key: VerificationKey) -> Optional[int]:
67  """
68  Return the index of the contributor, if present.
69  """
70  key = export_verification_key(verification_key)
71  try:
72  return [export_verification_key(c.verification_key)
73  for c in self.contributors].index(key)
74  except ValueError:
75  return None
76 
77  def __getitem__(self, key: int) -> Contributor:
78  return self.contributors[key]
79 
80  def __len__(self) -> int:
81  return len(self.contributors)
82 
83  def to_json(self) -> str:
84  return json.dumps(self._to_json_dict(), indent=4)
85 
86  @staticmethod
87  def from_json(json_str: str) -> ContributorList:
88  return ContributorList._from_json_dict(json.loads(json_str))
89 
90  def _to_json_dict(self) -> JsonDict:
91  return {
92  "contributors": [contr._to_json_dict() for contr in self.contributors]
93  }
94 
95  @staticmethod
96  def _from_json_dict(json_dict: JsonDict) -> ContributorList:
97  contributors_json = cast(List[JsonDict], json_dict["contributors"])
98  return ContributorList(
99  [Contributor._from_json_dict(c) for c in contributors_json])
coordinator.contributor_list.ContributorList.contributors
contributors
Definition: contributor_list.py:49
coordinator.contributor_list.Contributor.verification_key
verification_key
Definition: contributor_list.py:22
coordinator.crypto.export_signature
str export_signature(bytes sig)
Definition: crypto.py:74
coordinator.crypto.export_verification_key
str export_verification_key(ecdsa.VerifyingKey vk)
Definition: crypto.py:66
coordinator.contributor_list.Contributor
Definition: contributor_list.py:16
coordinator.contributor_list.ContributorList.__len__
int __len__(self)
Definition: contributor_list.py:80
coordinator.contributor_list.Contributor.key_evidence
key_evidence
Definition: contributor_list.py:23
coordinator.contributor_list.ContributorList.to_json
str to_json(self)
Definition: contributor_list.py:83
coordinator.crypto.import_verification_key
ecdsa.VerifyingKey import_verification_key(str vk_s)
Definition: crypto.py:70
coordinator.crypto.check_key_evidence
bool check_key_evidence(ecdsa.VerificationKey verification_key, Signature key_evidence)
Definition: crypto.py:107
coordinator.contributor_list.ContributorList.from_json
ContributorList from_json(str json_str)
Definition: contributor_list.py:87
coordinator.contributor_list.ContributorList.__getitem__
Contributor __getitem__(self, int key)
Definition: contributor_list.py:77
coordinator.contributor_list.ContributorList.__init__
def __init__(self, List[Contributor] contributors)
Definition: contributor_list.py:48
coordinator.contributor_list.ContributorList._to_json_dict
JsonDict _to_json_dict(self)
Definition: contributor_list.py:90
coordinator.contributor_list.ContributorList.ensure_validity
None ensure_validity(self)
Definition: contributor_list.py:51
coordinator.contributor_list.Contributor.__init__
def __init__(self, str email, VerificationKey verification_key, Signature key_evidence)
Definition: contributor_list.py:20
coordinator.crypto.import_signature
bytes import_signature(str sig_s)
Definition: crypto.py:78
coordinator.contributor_list.Contributor.email
email
Definition: contributor_list.py:21
coordinator.contributor_list.ContributorList
Definition: contributor_list.py:44
coordinator.contributor_list.ContributorList.get_contributor_index
Optional[int] get_contributor_index(self, VerificationKey verification_key)
Definition: contributor_list.py:64