示例#1
0
        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();
            }
        }
示例#2
0
        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);
        }