11[UnsupportedOSPlatform(
"browser")]
18 [RequiresUnreferencedCode(
"The default algorithm implementations might be removed, use strong type references like 'RSA.Create()' instead.")]
24 [UnsupportedOSPlatform(
"ios")]
25 [UnsupportedOSPlatform(
"tvos")]
31 [UnsupportedOSPlatform(
"ios")]
32 [UnsupportedOSPlatform(
"tvos")]
38 dSA.KeySize = keySizeInBits;
48 [UnsupportedOSPlatform(
"ios")]
49 [UnsupportedOSPlatform(
"tvos")]
85 return SignData(data, 0, data.Length, hashAlgorithm);
94 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
98 if (!signatureFormat.IsKnownValue())
102 return SignDataCore(data, hashAlgorithm, signatureFormat);
111 if (offset < 0 || offset > data.Length)
115 if (count < 0 || count > data.Length -
offset)
119 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
133 if (offset < 0 || offset > data.Length)
137 if (count < 0 || count > data.Length -
offset)
141 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
145 if (!signatureFormat.IsKnownValue())
170 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
174 byte[] rgbHash =
HashData(data, hashAlgorithm);
184 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
188 if (!signatureFormat.IsKnownValue())
192 return SignDataCore(data, hashAlgorithm, signatureFormat);
207 return VerifyData(data, 0, data.Length, signature, hashAlgorithm);
216 if (offset < 0 || offset > data.Length)
220 if (count < 0 || count > data.Length -
offset)
224 if (signature ==
null)
228 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
242 if (offset < 0 || offset > data.Length)
246 if (count < 0 || count > data.Length -
offset)
250 if (signature ==
null)
254 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
258 if (!signatureFormat.IsKnownValue())
271 if (signature ==
null)
275 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
279 byte[] rgbHash =
HashData(data, hashAlgorithm);
289 if (!signatureFormat.IsKnownValue())
314 if (!signatureFormat.IsKnownValue())
324 if (signatureFormat != 0)
339 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
353 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
357 if (!signatureFormat.IsKnownValue())
373 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
386 if (signature ==
null)
390 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
394 if (!signatureFormat.IsKnownValue())
398 return VerifyDataCore(data, signature, hashAlgorithm, signatureFormat);
407 if (signature ==
null)
411 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
415 if (!signatureFormat.IsKnownValue())
419 return VerifyDataCore(data, signature, hashAlgorithm, signatureFormat);
430 if (
string.IsNullOrEmpty(hashAlgorithm.
Name))
434 if (!signatureFormat.IsKnownValue())
438 return VerifyDataCore(data, signature, hashAlgorithm, signatureFormat);
454 if (rgbSignature ==
null)
458 if (!signatureFormat.IsKnownValue())
472 if (!signatureFormat.IsKnownValue())
481 byte[]
array = this.ConvertSignatureToIeeeP1363(signatureFormat, signature);
491 if (
TryHashData(data, tmp, hashAlgorithm, out var bytesWritten))
493 return tmp.
Slice(0, bytesWritten);
531 if (pbeParameters ==
null)
543 if (pbeParameters ==
null)
568 fixed (
byte* ptr = dsaParameters.
X)
590 fixed (
byte* ptr =
key.X)
601 bytesRead = bytesRead2;
607 fixed (
byte* ptr =
key.X)
618 bytesRead = bytesRead2;
624 fixed (
byte* ptr =
key.X)
635 bytesRead = bytesRead2;
642 bytesRead = bytesRead2;
648 return signatureFormat
switch
650 DSASignatureFormat.IeeeP1363FixedFieldConcatenation => num * 2,
660 if (label.SequenceEqual(
"PRIVATE KEY"))
662 return ImportPkcs8PrivateKey;
705 dSAParameters.P =
array;
706 dSAParameters.Q = array2;
710 dSAParameters.Seed = array3;
711 dSAParameters.Counter = counter;
725 stringBuilder.
Append(
"<DSAKeyValue>");
730 if (dSAParameters.
J !=
null)
734 if (dSAParameters.
Seed !=
null)
739 if (includePrivateParameters)
741 if (dSAParameters.
X ==
null)
747 stringBuilder.
Append(
"</DSAKeyValue>");
static int GetMaxDerSignatureSize(int fieldSizeBits)
static byte[] ConvertFromIeeeP1363Signature(byte[] signature, DSASignatureFormat targetFormat)
static bool TryCopyToDestination(this ReadOnlySpan< byte > source, Span< byte > destination, out int bytesWritten)
static void ImportPem(ReadOnlySpan< char > input, FindImportActionFunc callback)
delegate void ImportKeyAction(ReadOnlySpan< byte > source, out int bytesRead)
static unsafe void Clear(Array array)
static ArrayPool< T > Shared
static string Format(string resourceFormat, object p1)
static string Cryptography_InvalidFromXmlString
static string Cryptography_HashAlgorithmNameNullOrEmpty
static string NotSupported_SubclassOverride
static ? object CreateFromName(string name, params object?[]? args)
static void ZeroMemory(Span< byte > buffer)
unsafe AsnWriter WritePkcs8()
virtual bool VerifyData(Stream data, byte[] signature, HashAlgorithmName hashAlgorithm)
override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan< byte > passwordBytes, PbeParameters pbeParameters, Span< byte > destination, out int bytesWritten)
override void ImportFromPem(ReadOnlySpan< char > input)
byte[] CreateSignature(byte[] rgbHash)
byte[] CreateSignature(byte[] rgbHash, DSASignatureFormat signatureFormat)
override bool TryExportPkcs8PrivateKey(Span< byte > destination, out int bytesWritten)
ReadOnlySpan< byte > HashSpanToTmp(ReadOnlySpan< byte > data, HashAlgorithmName hashAlgorithm, Span< byte > tmp)
virtual byte[] SignDataCore(Stream data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
virtual bool VerifyDataCore(ReadOnlySpan< byte > data, ReadOnlySpan< byte > signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
virtual bool VerifySignatureCore(ReadOnlySpan< byte > hash, ReadOnlySpan< byte > signature, DSASignatureFormat signatureFormat)
override void ImportFromEncryptedPem(ReadOnlySpan< char > input, ReadOnlySpan< char > password)
virtual byte[] HashData(Stream data, HashAlgorithmName hashAlgorithm)
byte[] SignData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
bool VerifySignature(byte[] rgbHash, byte[] rgbSignature, DSASignatureFormat signatureFormat)
override void ImportFromEncryptedPem(ReadOnlySpan< char > input, ReadOnlySpan< byte > passwordBytes)
virtual bool VerifyData(ReadOnlySpan< byte > data, ReadOnlySpan< byte > signature, HashAlgorithmName hashAlgorithm)
virtual byte[] SignDataCore(ReadOnlySpan< byte > data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
virtual bool TryCreateSignature(ReadOnlySpan< byte > hash, Span< byte > destination, out int bytesWritten)
bool VerifyData(byte[] data, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
bool VerifySignature(ReadOnlySpan< byte > hash, ReadOnlySpan< byte > signature, DSASignatureFormat signatureFormat)
virtual bool TryHashData(ReadOnlySpan< byte > data, Span< byte > destination, HashAlgorithmName hashAlgorithm, out int bytesWritten)
bool VerifyData(byte[] data, byte[] signature, HashAlgorithmName hashAlgorithm)
byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
static Exception DerivedClassMustOverride()
virtual byte[] SignData(Stream data, HashAlgorithmName hashAlgorithm)
static byte[] ReadRequiredElement(ref XmlKeyHelper.ParseState state, string name, int sizeHint=-1)
unsafe override void ImportPkcs8PrivateKey(ReadOnlySpan< byte > source, out int bytesRead)
override bool TryExportSubjectPublicKeyInfo(Span< byte > destination, out int bytesWritten)
unsafe override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan< char > password, ReadOnlySpan< byte > source, out int bytesRead)
override void ImportSubjectPublicKeyInfo(ReadOnlySpan< byte > source, out int bytesRead)
override void FromXmlString(string xmlString)
static DSA Create(DSAParameters parameters)
bool VerifyData(byte[] data, int offset, int count, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
virtual byte[] HashData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm)
byte[] HashSpanToArray(ReadOnlySpan< byte > data, HashAlgorithmName hashAlgorithm)
virtual bool TrySignDataCore(ReadOnlySpan< byte > data, Span< byte > destination, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat, out int bytesWritten)
virtual byte[] SignData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm)
virtual bool TrySignData(ReadOnlySpan< byte > data, Span< byte > destination, HashAlgorithmName hashAlgorithm, out int bytesWritten)
virtual bool VerifyData(byte[] data, int offset, int count, byte[] signature, HashAlgorithmName hashAlgorithm)
bool TrySignData(ReadOnlySpan< byte > data, Span< byte > destination, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat, out int bytesWritten)
override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan< char > password, PbeParameters pbeParameters, Span< byte > destination, out int bytesWritten)
void ImportParameters(DSAParameters parameters)
bool VerifySignature(byte[] rgbHash, byte[] rgbSignature)
unsafe override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan< byte > passwordBytes, ReadOnlySpan< byte > source, out int bytesRead)
bool VerifyData(Stream data, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
virtual bool VerifyDataCore(Stream data, ReadOnlySpan< byte > signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
static new? DSA Create(string algName)
DSAParameters ExportParameters(bool includePrivateParameters)
virtual byte[] CreateSignatureCore(ReadOnlySpan< byte > hash, DSASignatureFormat signatureFormat)
byte[] SignData(Stream data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
bool TryCreateSignature(ReadOnlySpan< byte > hash, Span< byte > destination, DSASignatureFormat signatureFormat, out int bytesWritten)
virtual bool TryCreateSignatureCore(ReadOnlySpan< byte > hash, Span< byte > destination, DSASignatureFormat signatureFormat, out int bytesWritten)
byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm)
AsnWriter WriteSubjectPublicKeyInfo()
override string ToXmlString(bool includePrivateParameters)
static DSA Create(int keySizeInBits)
bool VerifyData(ReadOnlySpan< byte > data, ReadOnlySpan< byte > signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
static Exception HashAlgorithmNameNullOrEmpty()
virtual bool VerifySignature(ReadOnlySpan< byte > hash, ReadOnlySpan< byte > signature)
int GetMaxSignatureSize(DSASignatureFormat signatureFormat)
static void ValidatePbeParameters(PbeParameters pbeParameters, ReadOnlySpan< char > password, ReadOnlySpan< byte > passwordBytes)
static void WriteCryptoBinary(string name, int value, StringBuilder builder)
static bool HasElement(ref ParseState state, string name)
static int ReadCryptoBinaryInt32(byte[] buf)
static byte[] ReadCryptoBinary(ref ParseState state, string name, int sizeHint=-1)
static ParseState ParseDocument(string xmlString)
override string ToString()
StringBuilder Append(char value, int repeatCount)
void CopyTo(Span< T > destination)
Span< T > Slice(int start)