/// <summary>
        /// Deserializes binary data to object.
        /// </summary>
        /// <param name="context">Context for deserialization</param>
        protected override void Deserialize(DeserializeContext context, byte version)
        {
            base.Deserialize(context, version);

              Status = (SignatureResponseStatus)context.ReadInt32();
              SignatureResponse = context.ReadObject<Signed<SignatureResponse>>();
        }
示例#2
0
 private void GetSignatureResponseComplete(SignatureResponseStatus status, Signed<SignatureResponse> response, Exception exception)
 {
     this.responseStatus = status;
       this.signatureResponse = response;
       this.exception = exception;
       this.run = false;
 }
 public FetchSignatureResponseResponse(Guid requestId, SignatureResponseStatus status, Signed<SignatureResponse> signatureResponse)
     : base(requestId)
 {
     Status = status;
       SignatureResponse = signatureResponse;
 }
示例#4
0
        private bool ReadRequestData()
        {
            table.AddHeaderRow(2, "Signature request");

              try
              {
            string idString = Request.Params["id"];
            this.certificateId = new Guid(idString);
              }
              catch
              {
            table.AddRow(string.Empty, "Certificate id invalid.");
            table.AddSpaceRow(2, 32);
            return false;
              }

              try
              {
            if (!Request.Params.AllKeys.Contains("k"))
            {
              table.AddRow(string.Empty, "Request key missing.");
              table.AddSpaceRow(2, 32);
              return false;
            }

            string data = Request.Params["k"]
              .Replace(" ", string.Empty)
              .Replace("-", string.Empty)
              .ToLowerInvariant();
            this.signatureRequestKey = HexToBytes(data);

            if (this.signatureRequestKey.Length != 32)
            {
              table.AddRow(string.Empty, "Request key length invalid.");
              table.AddSpaceRow(2, 32);
              return false;
            }
              }
              catch
              {
            table.AddRow(string.Empty, "Cannot parse request key.");
            table.AddSpaceRow(2, 32);
            return false;
              }

              try
              {
            var request = proxy.FetchSignatureRequest(this.certificateId);
            this.certificate = request.Certificate;

            if (!this.certificate.Id.Equals(this.certificateId))
            {
              table.AddRow(string.Empty, "Certificate id does not match.");
              table.AddSpaceRow(2, 32);
              return false;
            }
              }
              catch
              {
            table.AddRow(string.Empty, "Cannot retrieve signature request.");
            table.AddSpaceRow(2, 32);
            return false;
              }

              byte[] encryptedSignatureRequestData;

              try
              {
            var result = proxy.FetchSignCheckList(this.certificateId); ;
            this.signChecks = result.First;

            if (result.Second.Length <= 32)
            {
              table.AddRow(string.Empty, "Encrypted signature request data invalid.");
              table.AddSpaceRow(2, 32);
              return false;
            }
            else
            {
              encryptedSignatureRequestData = result.Second;
            }
              }
              catch
              {
            table.AddRow(string.Empty, "Cannot download sign checks.");
            table.AddSpaceRow(2, 32);
            return false;
              }

              try
              {
            this.request = SignatureRequest.Decrypt(encryptedSignatureRequestData, this.signatureRequestKey);
              }
              catch
              {
            table.AddRow(string.Empty, "Cannot decrypt signature request data.");
            table.AddSpaceRow(2, 32);
            return false;
              }

              try
              {
            Signed<SignatureResponse> signedResponse = null;
            this.status = proxy.FetchSignatureResponse(this.certificateId, out signedResponse);

            switch (this.status)
            {
              case SignatureResponseStatus.Pending:
            break;
              case SignatureResponseStatus.Declined:
            table.AddRow(string.Empty, "Signature request already declined.");
            table.AddSpaceRow(2, 32);
            return false;
              case SignatureResponseStatus.Accepted:
            table.AddRow(string.Empty, "Signature request already accepted.");
            table.AddSpaceRow(2, 32);
            return false;
              case SignatureResponseStatus.Unknown:
              default:
            table.AddRow(string.Empty, "Cannot find signature request.");
            table.AddSpaceRow(2, 32);
            return false;
            }
              }
              catch
              {
            table.AddRow(string.Empty, "Cannot determine response status.");
            table.AddSpaceRow(2, 32);
            return false;
              }

              return true;
        }