Skip to content
brady@bangasser:~$

AuthService

package zrp.auth.v1

Anonymous enrollment. Proves an email address is eligible and issues a blind credential, without the server ever learning who enrolled.

Enrollment is three unary calls with no open stream: the email round trip takes minutes, and holding a stream would make the server stateful, which this service deliberately avoids. State that would normally live server-side is carried by the client in an opaque, MAC'd verification_token. The only thing persisted is a set of 32-byte nullifiers; never an email, key id, peer id, issued credential, or any mapping between them. A nullifier answers exactly one question: has this address enrolled?

Methods

MethodTypeRequestResponse
GetChallengeunaryChallengeRequestChallengeResponse
RedeemunaryRedeemRequestRedeemResponse

GetChallenge

Begins enrollment for an email address and returns a challenge to be satisfied.

ChallengeRequest

FieldType#Notes
emailstring1Address to enroll.

ChallengeResponse

FieldType#Notes
challengebytes1Opaque challenge the client must satisfy.

Redeem

Submits the satisfied challenge and a credential request; returns a blind signature over the credential.

RedeemRequest

FieldType#Notes
verification_tokenbytes1Opaque, MAC'd token carrying enrollment state client-side.
assertionbytes2Proof that the challenge was satisfied.
credential_requestbytes3Blinded credential request.

RedeemResponse

FieldType#Notes
signaturebytes1Blind signature over the credential.
issuer_public_keybytes2Public key to verify the credential against.
params_labelstring3Label of the parameter set used.
epochstring4Issuance epoch.

Example

grpcurl -plaintext -d '{"email":"user@example.com"}' \
  auth-host:9000 zrp.auth.v1.AuthService/GetChallenge