EcdsaDigitalSignature
Implements ECDSA digital signature algorithm.
using System;
namespace Renci.SshNet.Security.Cryptography
{
public class EcdsaDigitalSignature : DigitalSignature, IDisposable
{
private readonly EcdsaKey _key;
private bool _isDisposed;
public EcdsaDigitalSignature(EcdsaKey key)
{
if (key == null)
throw new ArgumentNullException("key");
_key = key;
}
public override bool Verify(byte[] input, byte[] signature)
{
int sig_size = (_key.KeyLength == 521) ? 132 : (_key.KeyLength / 4);
SshDataSignature sshDataSignature = new SshDataSignature(signature, sig_size);
return _key.Ecdsa.VerifyData(input, sshDataSignature.Signature, _key.HashAlgorithm);
}
public override byte[] Sign(byte[] input)
{
byte[] array = _key.Ecdsa.SignData(input, _key.HashAlgorithm);
return new SshDataSignature(array.Length) {
Signature = array
}.GetBytes();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!_isDisposed && disposing)
_isDisposed = true;
}
~EcdsaDigitalSignature()
{
Dispose(false);
}
}
}