-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathguardian_api.py
More file actions
74 lines (61 loc) · 2.13 KB
/
guardian_api.py
File metadata and controls
74 lines (61 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
from copy import deepcopy
from typing import Dict, List
from fastapi.testclient import TestClient
from app.core.settings import ApiMode, StorageMode, Settings
from app.main import get_app
from . import api_utils
_api_client = TestClient(
get_app(Settings(API_MODE=ApiMode.GUARDIAN, STORAGE_MODE=StorageMode.LOCAL_STORAGE))
)
def fetch_public_keys(guardian_id: str) -> Dict:
return api_utils.send_get_request(
_api_client, f"guardian/public-keys?guardian_id={guardian_id}"
)
def create_guardian(
guardian_id: str,
sequence_order: int,
number_of_guardians: int,
quorum: int,
name: str,
) -> Dict:
request = {
"guardian_id": guardian_id,
"sequence_order": sequence_order,
"number_of_guardians": number_of_guardians,
"quorum": quorum,
"name": name,
}
return api_utils.send_post_request(_api_client, "guardian", request)
def create_guardian_backup(guardian: Dict) -> Dict:
auxiliary_public_key = {
"owner_id": guardian["id"],
"sequence_order": guardian["sequence_order"],
"key": guardian["auxiliary_key_pair"]["public_key"],
}
request = {
"guardian_id": guardian["id"],
"quorum": guardian["quorum"],
"election_polynomial": deepcopy(guardian["election_key_pair"]["polynomial"]),
"auxiliary_public_keys": [auxiliary_public_key],
"override_rsa": True,
}
return api_utils.send_post_request(_api_client, "guardian/backup", request)
def decrypt_tally_share(
guardian: Dict, encrypted_tally: Dict, description: Dict, context: Dict
) -> Dict:
request = {
"guardian": guardian,
"encrypted_tally": encrypted_tally,
"description": description,
"context": context,
}
return api_utils.send_post_request(_api_client, "tally/decrypt-share", request)
def decrypt_ballot_shares(
encrypted_ballots: List[Dict], guardian: Dict, context: Dict
) -> Dict:
request = {
"encrypted_ballots": encrypted_ballots,
"guardian": guardian,
"context": context,
}
return api_utils.send_post_request(_api_client, "ballot/decrypt-shares", request)