private void SignDocument(Document document, ApplicationUser user, PreparatorySignatureData preparatorySignatureData, RSACryptoServiceProvider rsa) { rsa.ImportParameters(ConvetToRsaParameters(preparatorySignatureData.UserKeys)); using (var sha1 = SHA1.Create()) { var hash = sha1.ComputeHash(document.Content); var signedBytes = rsa.SignHash(hash, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1); document.SignedByUser = $"{user.Email}{preparatorySignatureData.SignDetails}"; document.Signature = Convert.ToBase64String(signedBytes); var newContent = document.Content.ToList(); newContent.AddRange(signedBytes); document.Content = newContent.ToArray(); } }
private async Task <PreparatorySignatureData> GetPreparatorySignatureDataAsync(IncomingSignatureRequest signatureRequest, Document document, ApplicationUser user) { var result = new PreparatorySignatureData(); if (signatureRequest.ClonnedUsingWarrant) { var validWarrant = _signatureWarrantRepository .FindBy(x => x.ToUser == user.Email) .OrderBy(x => x.Expired) .LastOrDefault(x => x.Expired < DateTime.Now); if (validWarrant == null) { await _emailNotificator.SendErrorReportToAdmin(new EventReportModel { Subject = "Document sign", Body = "Your all warrants were expired.", ToUser = user.Email }); return(null); } var originalRequest = _signatureRequestRepository .FindBy(x => !x.ClonnedUsingWarrant && x.DocumentId == document.Id) .Single(); result.UserKeys = originalRequest.ApplicationUser.UserKeys; result.SignDetails = "(using signature warrant)"; } else { result.UserKeys = user.UserKeys; } return(result); }