/// <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>>(); }
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; }
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; }