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
// The various credentials used by the system.
use *;
use RistrettoPoint as G;
use ;
use RngCore;
// A migration credential.
//
// This credential authorizes the holder of the Lox credential with the
// given id to switch from bucket from_bucket to bucket to_bucket. The
// migration_type attribute is 0 for trust upgrade migrations (moving
// from a 1-bridge untrusted bucket to a 3-bridge trusted bucket) and 1
// for blockage migrations (moving buckets because the from_bucket has
// been blocked).
// Annotated to "M"
CMZ!
// The main user credential in the Lox system.
//
// Its id is jointly generated by the user and the BA (bridge
// authority), but known only to the user. The level_since date is the
// Julian date of when this user was changed to the current trust
// level.
// Annotated to "L"
CMZ!
// The migration key credential.
//
// This credential is never actually instantiated. It is an implicit
// credential on attributes lox_id and from_bucket. This credential
// type does have an associated private and public key, however. The
// idea is that if a user proves (in zero knowledge) that their Lox
// credential entitles them to migrate from one bucket to another, the
// BA will issue a (blinded, so the BA will not know the values of the
// attributes or of Q) MAC on this implicit credential. The Q value
// will then be used (actually, a hash of lox_id, from_bucket, and Q)
// to encrypt the to_bucket, P, and Q fields of a Migration credential.
// That way, people entitled to migrate buckets can receive a Migration
// credential with their new bucket, without the BA learning either
// their old or new buckets.
// Annotated to "K"
CMZ!
// The Bucket Reachability credential.
//
// Each day, a credential of this type is put in each bucket that has
// at least a (configurable) threshold number of bridges that have not
// been blocked as of the given date. Users can present this
// credential (in zero knowledge) with today's date to prove that the
// bridges in their bucket have not been blocked, in order to gain a
// trust level.
// Annotated to "B"
CMZ!
// The Invitation credential.
//
// These credentials allow a Lox user (the inviter) of sufficient trust
// (level 2 or higher) to invite someone else (the invitee) to join the
// system. The invitee ends up at trust level 1, in the _same bucket_
// as the inviter, and inherits the inviter's blockages count (so that
// you can't clear your blockages count simply by inviting yourself).
// Invitations expire after some amount of time.
// Annotated to "I"
CMZ!