<PackageReference Include="SSH.NET" Version="2024.0.0" />

DsaKey

public class DsaKey : Key, IDisposable
Contains DSA private and public key.
using Renci.SshNet.Common; using Renci.SshNet.Security.Cryptography; using System; namespace Renci.SshNet.Security { public class DsaKey : Key, IDisposable { private DsaDigitalSignature _digitalSignature; private bool _isDisposed; public BigInteger P { get; } public BigInteger Q { get; } public BigInteger G { get; } public BigInteger Y { get; } public BigInteger X { get; } public override int KeyLength => P.BitLength; protected internal override DigitalSignature DigitalSignature { get { if (_digitalSignature == null) _digitalSignature = new DsaDigitalSignature(this); return _digitalSignature; } } public override BigInteger[] Public => new BigInteger[4] { P, Q, G, Y }; public DsaKey(SshKeyData publicKeyData) { if (publicKeyData == null) throw new ArgumentNullException("publicKeyData"); if (publicKeyData.Name != "ssh-dss" || publicKeyData.Keys.Length != 4) throw new ArgumentException($"""{publicKeyData.Name}""{publicKeyData.Keys.Length}""", "publicKeyData"); P = publicKeyData.Keys[0]; Q = publicKeyData.Keys[1]; G = publicKeyData.Keys[2]; Y = publicKeyData.Keys[3]; } public DsaKey(byte[] privateKeyData) { if (privateKeyData == null) throw new ArgumentNullException("privateKeyData"); DerData derData = new DerData(privateKeyData, false); derData.ReadBigInteger(); P = derData.ReadBigInteger(); Q = derData.ReadBigInteger(); G = derData.ReadBigInteger(); Y = derData.ReadBigInteger(); X = derData.ReadBigInteger(); if (!derData.IsEndOfData) throw new InvalidOperationException("Invalid private key (expected EOF)."); } public DsaKey(BigInteger p, BigInteger q, BigInteger g, BigInteger y, BigInteger x) { P = p; Q = q; G = g; Y = y; X = x; } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!_isDisposed && disposing) { DsaDigitalSignature digitalSignature = _digitalSignature; if (digitalSignature != null) { digitalSignature.Dispose(); _digitalSignature = null; } _isDisposed = true; } } ~DsaKey() { Dispose(false); } } }