Contents

POST /blinding-prepare#

Obtain exchange-side input values in preparation for a blinding step of multiple coins for certain denomination cipher types, specifically at this point for Clause-Schnorr blind signatures.

Request:

The request body must be a BlindingPrepareRequest object.

Response:

200 OK:

The request was successful, and the response is a BlindingPrepareResponse. Note that repeating exactly the same request will again yield the same response (assuming none of the denominations is expired).

404 Not found:

A denomination key is not known to the exchange. The response is a DenominationUnknownMessage.

410 Gone:

A requested denomination key is not yet or no longer valid. It either before the validity start, past the expiration or was revoked. The response is a DenominationGoneMessage. Clients must evaluate the error code provided to understand which of the cases this is and handle it accordingly.

Details:

type BlindingPrepareRequest = BlindingPrepareRequestCS;
interface BlindingPrepareRequestCS {
  // Cipher type
  cipher: "CS";

  // The type of operation this blinding is for.
  operation: "withdraw" | "melt";

  // Master seed for the Clause-Schnorr R-value creation.
  // MUST not have been used in any prior request of this type.
  seed: BlindingMasterSeed;

  // Array of denominations and coin offsets for
  // each of the fresh coins with a CS-cipher
  // denomination.
  // The coin_offset values MUST be strongly increasing.
  nks: BlindingInputParameter[];

}
interface BlindingInputParameter {

  // Offset of this coin in the list of
  // fresh coins. May not match the array offset
  // as the fresh coins may include non-CS
  // denominations as well.
  coin_offset: Integer;

  // Hash of the public key of the denomination the
  // request relates to. Must be a CS denomination type.
  denom_pub_hash: HashCode;
}
type BlindingPrepareResponse = BlindingPrepareResponseCS;
interface BlindingPrepareResponseCS {
  cipher: "CS";

  // Array of pairs of CS values, one pair per input
  r_pubs: CSRPublicPair[];
}
// Pair of points (of type CSRPublic) on the curve Curve25519,
// one of which is randomly selected in the Clause-Schnorr
// signature scheme.
type CSRPublicPair = [CSRPublic, CSRPublic];