public static Statement IssuerParametersStatement(CredentialIssuerParameters iparams, MAC mac, GroupElement ma) => new Statement(new GroupElement[, ] { // public Witness terms: // point w, wp, x0, x1, ya { mac.V, Generators.Gw, O, mac.U, mac.T * mac.U, ma }, { Generators.GV - iparams.I, O, O, Generators.Gx0, Generators.Gx1, Generators.Ga }, { iparams.Cw, Generators.Gw, Generators.Gwp, O, O, O }, });
public WabiSabiClient( CredentialIssuerParameters credentialIssuerParameters, WasabiRandom randomNumberGenerator, long rangeProofUpperBound) { RangeProofWidth = (int)Math.Ceiling(Math.Log2(rangeProofUpperBound)); RandomNumberGenerator = Guard.NotNull(nameof(randomNumberGenerator), randomNumberGenerator); CredentialIssuerParameters = Guard.NotNull(nameof(credentialIssuerParameters), credentialIssuerParameters); }
public WabiSabiClient( CredentialIssuerParameters credentialIssuerParameters, int numberOfCredentials, WasabiRandom randomNumberGenerator) { RandomNumberGenerator = Guard.NotNull(nameof(randomNumberGenerator), randomNumberGenerator); NumberOfCredentials = Guard.InRangeAndNotNull(nameof(numberOfCredentials), numberOfCredentials, 1, 100); CredentialIssuerParameters = Guard.NotNull(nameof(credentialIssuerParameters), credentialIssuerParameters); Credentials = new CredentialPool(); }
public ArenaClient( CredentialIssuerParameters amountCredentialIssuerParameters, CredentialIssuerParameters vsizeCredentialIssuerParameters, CredentialPool amountCredentialPool, CredentialPool vsizeCredentialPool, IArenaRequestHandler requestHandler, WasabiRandom random) { AmountCredentialClient = new WabiSabiClient(amountCredentialIssuerParameters, random, ProtocolConstants.MaxAmountPerAlice, amountCredentialPool); VsizeCredentialClient = new WabiSabiClient(vsizeCredentialIssuerParameters, random, ProtocolConstants.MaxVsizePerAlice, vsizeCredentialPool); RequestHandler = requestHandler; }
public WabiSabiClient( CredentialIssuerParameters credentialIssuerParameters, WasabiRandom randomNumberGenerator, ulong maxAmount, CredentialPool?credentialPool = null) { MaxAmount = maxAmount; RangeProofWidth = (int)Math.Ceiling(Math.Log2(MaxAmount)); RandomNumberGenerator = Guard.NotNull(nameof(randomNumberGenerator), randomNumberGenerator); CredentialIssuerParameters = Guard.NotNull(nameof(credentialIssuerParameters), credentialIssuerParameters); Credentials = credentialPool ?? new CredentialPool(); }
public ArenaClient( CredentialIssuerParameters amountCredentialIssuerParameters, CredentialIssuerParameters weightCredentialIssuerParameters, CredentialPool amountCredentialPool, CredentialPool weightCredentialPool, IArenaRequestHandler requestHandler, WasabiRandom random) { AmountCredentialClient = new WabiSabiClient(amountCredentialIssuerParameters, ProtocolCredentialNumber, random, ProtocolMaxAmountPerAlice, amountCredentialPool); WeightCredentialClient = new WabiSabiClient(weightCredentialIssuerParameters, ProtocolCredentialNumber, random, ProtocolMaxWeightPerAlice, weightCredentialPool); RequestHandler = requestHandler; }
public WabiSabiClient( CredentialIssuerParameters credentialIssuerParameters, int numberOfCredentials, WasabiRandom randomNumberGenerator, ulong maxAmount) { MaxAmount = maxAmount; RangeProofWidth = (int)Math.Ceiling(Math.Log2(MaxAmount)); RandomNumberGenerator = Guard.NotNull(nameof(randomNumberGenerator), randomNumberGenerator); NumberOfCredentials = Guard.InRangeAndNotNull(nameof(numberOfCredentials), numberOfCredentials, 1, 100); CredentialIssuerParameters = Guard.NotNull(nameof(credentialIssuerParameters), credentialIssuerParameters); Credentials = new CredentialPool(); }
public static uint256 CalculateHash( DateTimeOffset inputRegistrationStart, TimeSpan inputRegistrationTimeout, TimeSpan connectionConfirmationTimeout, TimeSpan outputRegistrationTimeout, TimeSpan transactionSigningTimeout, MoneyRange allowedInputAmounts, ImmutableSortedSet <ScriptType> allowedInputTypes, MoneyRange allowedOutputAmounts, ImmutableSortedSet <ScriptType> allowedOutputTypes, Network network, long feePerK, CoordinationFeeRate coordinationFeeRate, int maxTransactionSize, long minRelayTxFeePerK, long maxAmountCredentialValue, long maxVsizeCredentialValue, long maxVsizeAllocationPerAlice, long maxSuggestedAmount, CredentialIssuerParameters amountCredentialIssuerParameters, CredentialIssuerParameters vsizeCredentialIssuerParameters) { var hash = StrobeHasher.Create(ProtocolConstants.RoundStrobeDomain) .Append(ProtocolConstants.RoundInputRegistrationStartStrobeLabel, inputRegistrationStart) .Append(ProtocolConstants.RoundInputRegistrationTimeoutStrobeLabel, inputRegistrationTimeout) .Append(ProtocolConstants.RoundConnectionConfirmationTimeoutStrobeLabel, connectionConfirmationTimeout) .Append(ProtocolConstants.RoundOutputRegistrationTimeoutStrobeLabel, outputRegistrationTimeout) .Append(ProtocolConstants.RoundTransactionSigningTimeoutStrobeLabel, transactionSigningTimeout) .Append(ProtocolConstants.RoundAllowedInputAmountsStrobeLabel, allowedInputAmounts) .Append(ProtocolConstants.RoundAllowedInputTypesStrobeLabel, allowedInputTypes) .Append(ProtocolConstants.RoundAllowedOutputAmountsStrobeLabel, allowedOutputAmounts) .Append(ProtocolConstants.RoundAllowedOutputTypesStrobeLabel, allowedOutputTypes) .Append(ProtocolConstants.RoundNetworkStrobeLabel, network.ToString()) .Append(ProtocolConstants.RoundFeeRateStrobeLabel, feePerK) .Append(ProtocolConstants.RoundCoordinationFeeRateStrobeLabel, coordinationFeeRate) .Append(ProtocolConstants.RoundMaxTransactionSizeStrobeLabel, maxTransactionSize) .Append(ProtocolConstants.RoundMinRelayTxFeeStrobeLabel, minRelayTxFeePerK) .Append(ProtocolConstants.RoundMaxAmountCredentialValueStrobeLabel, maxAmountCredentialValue) .Append(ProtocolConstants.RoundMaxVsizeCredentialValueStrobeLabel, maxVsizeCredentialValue) .Append(ProtocolConstants.RoundMaxVsizePerAliceStrobeLabel, maxVsizeAllocationPerAlice) .Append(ProtocolConstants.RoundMaxSuggestedAmountLabel, maxSuggestedAmount) .Append(ProtocolConstants.RoundAmountCredentialIssuerParametersStrobeLabel, amountCredentialIssuerParameters) .Append(ProtocolConstants.RoundVsizeCredentialIssuerParametersStrobeLabel, vsizeCredentialIssuerParameters) .GetHash(); return(hash); }
public static Statement ShowCredentialStatement(CredentialPresentation c, GroupElement z, CredentialIssuerParameters iparams) => new Statement(new GroupElement[, ] { // public Witness terms: // point z z0 t a r { z, iparams.I, O, O, O, O }, { c.Cx1, Generators.Gx1, Generators.Gx0, c.Cx0, O, O }, { c.Ca, Generators.Ga, O, O, Generators.Gg, Generators.Gh }, { c.S, O, O, O, O, Generators.Gs } });
public static Knowledge ShowCredentialKnowledge(CredentialPresentation presentation, Scalar z, Credential credential, CredentialIssuerParameters iparams) => new Knowledge( ShowCredentialStatement(presentation, z * iparams.I, iparams), new ScalarVector(z, (credential.Mac.T * z).Negate(), credential.Mac.T, credential.Amount, credential.Randomness));