-
Notifications
You must be signed in to change notification settings - Fork 79
/
Lab05Tests.py
145 lines (113 loc) · 5.59 KB
/
Lab05Tests.py
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#####################################################
# GA17 Privacy Enhancing Technologies -- Lab 05
#
# Selective Disclosure (Anonymous) Credentials
#
# Run the tests through:
# $ py.test -v test_file_name.py
import pytest
from pytest import raises
try:
from Lab05Solution import *
except:
from Lab05Code import *
@pytest.mark.task1
def test_user_encryption():
params = credential_setup()
priv, pub = credential_KeyGenUser(params)
v, ciphertext, proof = credential_EncryptUserSecret(params, pub, priv)
assert credential_VerifyUserSecret(params, pub, ciphertext, proof)
@pytest.mark.task2
def test_issue_correct_MAC():
params = credential_setup()
priv, pub = credential_KeyGenUser(params)
v, ciphertext, proof = credential_EncryptUserSecret(params, pub, priv)
assert credential_VerifyUserSecret(params, pub, ciphertext, proof)
# Check the MAC is correct
issuer_params = credential_KeyGenIssuer(params)
(Cx0, iparams), (sk, x0_bar) = issuer_params
u, [a, b], proof = credential_Issuing(params, pub, ciphertext, issuer_params)
u_p = b - priv * a
assert u_p == (sk[0] + v * sk[1]) * u
@pytest.mark.task2
def test_issue_correct_MAC_proof():
params = credential_setup()
priv, pub = credential_KeyGenUser(params)
v, ciphertext, proof = credential_EncryptUserSecret(params, pub, priv)
assert credential_VerifyUserSecret(params, pub, ciphertext, proof)
# Check the MAC is correct
issuer_params = credential_KeyGenIssuer(params)
(Cx0, iparams), (sk, x0_bar) = issuer_params
u, E_u_prime, proof = credential_Issuing(params, pub, ciphertext, issuer_params)
issuer_public_params = (Cx0, iparams)
assert credential_Verify_Issuing(params, issuer_public_params, pub, u, ciphertext, E_u_prime, proof)
@pytest.mark.task2
def test_issue_correct_MAC_decrypt():
params = credential_setup()
priv, pub = credential_KeyGenUser(params)
v, ciphertext, proof = credential_EncryptUserSecret(params, pub, priv)
assert credential_VerifyUserSecret(params, pub, ciphertext, proof)
# Check the MAC is correct
issuer_params = credential_KeyGenIssuer(params)
(Cx0, iparams), (sk, x0_bar) = issuer_params
u, E_u_prime, proof = credential_Issuing(params, pub, ciphertext, issuer_params)
(u, uprime) = credential_Decrypt(params, priv, u, E_u_prime)
assert uprime == (sk[0] + v * sk[1]) * u
@pytest.mark.task3
def test_Show():
params = credential_setup()
priv, pub = credential_KeyGenUser(params)
v, ciphertext, proof = credential_EncryptUserSecret(params, pub, priv)
assert credential_VerifyUserSecret(params, pub, ciphertext, proof)
# Check the MAC is correct
issuer_params = credential_KeyGenIssuer(params)
(Cx0, iparams), (sk, x0_bar) = issuer_params
u, E_u_prime, proof = credential_Issuing(params, pub, ciphertext, issuer_params)
(u, uprime) = credential_Decrypt(params, priv, u, E_u_prime)
issuer_pub_params = (Cx0, iparams)
tag, proof = credential_show(params, issuer_pub_params, u, uprime, v)
@pytest.mark.task3
def test_Show_Verify():
params = credential_setup()
priv, pub = credential_KeyGenUser(params)
v, ciphertext, proof = credential_EncryptUserSecret(params, pub, priv)
assert credential_VerifyUserSecret(params, pub, ciphertext, proof)
# Check the MAC is correct
issuer_params = credential_KeyGenIssuer(params)
(Cx0, iparams), (sk, x0_bar) = issuer_params
u, E_u_prime, proof = credential_Issuing(params, pub, ciphertext, issuer_params)
(u, uprime) = credential_Decrypt(params, priv, u, E_u_prime)
issuer_pub_params = (Cx0, iparams)
tag, proof = credential_show(params, issuer_pub_params, u, uprime, v)
assert credential_show_verify(params, issuer_params, tag, proof)
@pytest.mark.task4
def test_Show_Verify_Pseudonym():
params = credential_setup()
priv, pub = credential_KeyGenUser(params)
v, ciphertext, proof = credential_EncryptUserSecret(params, pub, priv)
assert credential_VerifyUserSecret(params, pub, ciphertext, proof)
# Check the MAC is correct
issuer_params = credential_KeyGenIssuer(params)
(Cx0, iparams), (sk, x0_bar) = issuer_params
u, E_u_prime, proof = credential_Issuing(params, pub, ciphertext, issuer_params)
(u, uprime) = credential_Decrypt(params, priv, u, E_u_prime)
issuer_pub_params = (Cx0, iparams)
pseudonym, tag, proof = credential_show_pseudonym(params, issuer_pub_params, u, uprime, v, b"Service A")
assert credential_show_verify_pseudonym(params, issuer_params, pseudonym, tag, proof, b"Service A")
@pytest.mark.task4
def test_Show_Verify_Pseudonym_stability():
params = credential_setup()
priv, pub = credential_KeyGenUser(params)
v, ciphertext, proof = credential_EncryptUserSecret(params, pub, priv)
assert credential_VerifyUserSecret(params, pub, ciphertext, proof)
# Check the MAC is correct
issuer_params = credential_KeyGenIssuer(params)
(Cx0, iparams), (sk, x0_bar) = issuer_params
u, E_u_prime, proof = credential_Issuing(params, pub, ciphertext, issuer_params)
(u, uprime) = credential_Decrypt(params, priv, u, E_u_prime)
issuer_pub_params = (Cx0, iparams)
pseudonym, tag, proof = credential_show_pseudonym(params, issuer_pub_params, u, uprime, v, b"Service A")
assert credential_show_verify_pseudonym(params, issuer_params, pseudonym, tag, proof, b"Service A")
pseudonym2, tag, proof = credential_show_pseudonym(params, issuer_pub_params, u, uprime, v, b"Service A")
assert credential_show_verify_pseudonym(params, issuer_params, pseudonym2, tag, proof, b"Service A")
assert pseudonym == pseudonym2