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