示例#1
0
        public async Task <ReissueCredentialResponse> ReissuanceAsync(ReissueCredentialRequest request, CancellationToken cancellationToken)
        {
            Round round;

            using (await AsyncLock.LockAsync(cancellationToken).ConfigureAwait(false))
            {
                round = GetRound(request.RoundId, Phase.ConnectionConfirmation, Phase.OutputRegistration);
            }

            if (request.RealAmountCredentialRequests.Delta != 0)
            {
                throw new WabiSabiProtocolException(WabiSabiProtocolErrorCode.DeltaNotZero, $"Round ({round.Id}): Amount credentials delta must be zero.");
            }

            if (request.RealAmountCredentialRequests.Requested.Count() != ProtocolConstants.CredentialNumber)
            {
                throw new WabiSabiProtocolException(WabiSabiProtocolErrorCode.WrongNumberOfCreds, $"Round ({round.Id}): Incorrect requested number of amount credentials.");
            }

            if (request.RealVsizeCredentialRequests.Requested.Count() != ProtocolConstants.CredentialNumber)
            {
                throw new WabiSabiProtocolException(WabiSabiProtocolErrorCode.WrongNumberOfCreds, $"Round ({round.Id}): Incorrect requested number of weight credentials.");
            }

            var realAmountTask = round.AmountCredentialIssuer.HandleRequestAsync(request.RealAmountCredentialRequests, cancellationToken);
            var realVsizeTask  = round.VsizeCredentialIssuer.HandleRequestAsync(request.RealVsizeCredentialRequests, cancellationToken);
            var zeroAmountTask = round.AmountCredentialIssuer.HandleRequestAsync(request.ZeroAmountCredentialRequests, cancellationToken);
            var zeroVsizeTask  = round.VsizeCredentialIssuer.HandleRequestAsync(request.ZeroVsizeCredentialsRequests, cancellationToken);

            return(new(
                       await realAmountTask.ConfigureAwait(false),
                       await realVsizeTask.ConfigureAwait(false),
                       await zeroAmountTask.ConfigureAwait(false),
                       await zeroVsizeTask.ConfigureAwait(false)));
        }
示例#2
0
 public async Task <ReissueCredentialResponse> ReissuanceAsync(ReissueCredentialRequest request, CancellationToken cancellationToken)
 {
     return(await IdempotencyRequestCache.GetCachedResponseAsync(request, action : (request, token) => Arena.ReissuanceAsync(request, token), cancellationToken));
 }
示例#3
0
 public Task <ReissueCredentialResponse> ReissueCredentialAsync(ReissueCredentialRequest request, CancellationToken cancellableToken)
 {
     return(RequestHandler.ReissueCredentialAsync(request, cancellableToken));
 }
示例#4
0
 public Task <ReissueCredentialResponse> ReissuanceAsync(ReissueCredentialRequest request, CancellationToken cancellationToken) =>
 SendAndReceiveAsync <ReissueCredentialRequest, ReissueCredentialResponse>(RemoteAction.ReissueCredential, request, cancellationToken);
 public Task <ReissueCredentialResponse> ReissueCredentialAsync(ReissueCredentialRequest request, CancellationToken cancellationToken)
 => arena.ReissuanceAsync(request);