Example #1
0
 /// <summary>
 /// Signs the specified stream using Private key.
 /// </summary>
 public override byte[] Sign(Stream inputStream, IPrivateKey privateKey)
 {
     try
     {
         using (var signer = new VirgilStreamSigner())
             using (var source = new VirgilStreamDataSource(inputStream))
             {
                 var signature = signer.Sign(source, privateKey.Get().Value);
                 return(signature);
             }
     }
     catch (Exception ex)
     {
         throw new CryptoException(ex.Message);
     }
 }
Example #2
0
 /// <summary>
 /// Signs the specified stream using the specified Private key.
 /// </summary>
 /// <param name="inputStream">readable stream containing input data.</param>
 /// <param name="privateKey">private key for signing.</param>
 /// <returns>Signature data.</returns>
 /// <example>
 ///     <code>
 ///         var crypto = new VirgilCrypto();
 ///         var keyPair = crypto.GenerateKeys();
 ///         using (var inputStream = new FileStream("[YOUR_FILE_PATH_HERE]", FileMode.Open, FileAccess.Read))
 ///         {
 ///             signature = crypto.GenerateSignature(inputStream, keyPair.PrivateKey);
 ///         }
 ///     </code>
 /// </example>
 /// <remarks>How to verify signature <see cref="VerifySignature(byte[], Stream, IPublicKey)"/>.</remarks>
 public byte[] GenerateSignature(Stream inputStream, IPrivateKey privateKey)
 {
     try
     {
         using (VirgilStreamSigner signer = new VirgilStreamSigner(VirgilHash.Algorithm.SHA512))
             using (VirgilStreamDataSource source = new VirgilStreamDataSource(inputStream))
             {
                 byte[] signature = signer.Sign(source, VirgilCryptoExtentions.Get(privateKey).RawKey);
                 return(signature);
             }
     }
     catch (Exception ex)
     {
         throw new VirgilCryptoException(ex.Message);
     }
 }
Example #3
0
        /// <summary>
        /// Verifies the specified signature using original stream and signer's Public key.
        /// </summary>
        public override bool Verify(Stream inputStream, byte[] signature, IPublicKey publicKey)
        {
            if (signature == null)
            {
                throw new ArgumentNullException(nameof(signature));
            }

            try
            {
                using (var streamSigner = new VirgilStreamSigner())
                {
                    var source  = new VirgilStreamDataSource(inputStream);
                    var isValid = streamSigner.Verify(source, signature, publicKey.Get().Value);
                    return(isValid);
                }
            }
            catch (Exception ex)
            {
                throw new CryptoException(ex.Message);
            }
        }
Example #4
0
        /// <summary>
        /// Verifies the specified signature using original stream and signer's Public key.
        /// </summary>
        /// <param name="inputStream">readable stream containing input data.</param>
        /// <param name="publicKey">signer public key for verification.</param>
        /// <param name="signature">signature bytes for verification.</param>
        /// <returns>True if signature is valid, False otherwise.</returns>
        /// <example>
        /// <code>
        ///    var publicKey = crypto.ImportPublicKey(exportedPublicKey);
        ///    using (var inputStream = new FileStream("[YOUR_FILE_PATH_HERE]", FileMode.Open, FileAccess.Read))
        ///    {
        ///       crypto.Verify(inputStream, signature, publicKey);
        ///    }
        /// </code>
        /// </example>
        /// <remarks>How to get exportedPublicKey <see cref="ExportPublicKey(IPublicKey)"/>.</remarks>
        /// <remarks>How to genrate signature <see cref="GenerateSignature(Stream, IPrivateKey)"/>.</remarks>
        public bool VerifySignature(byte[] signature, Stream inputStream, IPublicKey publicKey)
        {
            if (signature == null)
            {
                throw new ArgumentNullException("signature");
            }

            try
            {
                using (VirgilStreamSigner streamSigner = new VirgilStreamSigner(VirgilHash.Algorithm.SHA512))
                {
                    VirgilStreamDataSource source = new VirgilStreamDataSource(inputStream);
                    bool isValid = streamSigner.Verify(source, signature, VirgilCryptoExtentions.Get(publicKey).RawKey);
                    return(isValid);
                }
            }
            catch (Exception ex)
            {
                throw new VirgilCryptoException(ex.Message);
            }
        }