Exemple #1
0
 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);
 }
Exemple #3
0
 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();
 }
Exemple #4
0
 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;
 }
Exemple #5
0
 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;
 }
Exemple #7
0
 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();
 }
Exemple #8
0
    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);
    }
Exemple #9
0
 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 }
 });
Exemple #10
0
 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));