Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
DSA.cs
Go to the documentation of this file.
4using System.IO;
6using System.Text;
8
10
11[UnsupportedOSPlatform("browser")]
12public abstract class DSA : AsymmetricAlgorithm
13{
14 public abstract DSAParameters ExportParameters(bool includePrivateParameters);
15
16 public abstract void ImportParameters(DSAParameters parameters);
17
18 [RequiresUnreferencedCode("The default algorithm implementations might be removed, use strong type references like 'RSA.Create()' instead.")]
19 public new static DSA? Create(string algName)
20 {
21 return (DSA)CryptoConfig.CreateFromName(algName);
22 }
23
24 [UnsupportedOSPlatform("ios")]
25 [UnsupportedOSPlatform("tvos")]
26 public new static DSA Create()
27 {
28 return CreateCore();
29 }
30
31 [UnsupportedOSPlatform("ios")]
32 [UnsupportedOSPlatform("tvos")]
33 public static DSA Create(int keySizeInBits)
34 {
35 DSA dSA = CreateCore();
36 try
37 {
38 dSA.KeySize = keySizeInBits;
39 return dSA;
40 }
41 catch
42 {
43 dSA.Dispose();
44 throw;
45 }
46 }
47
48 [UnsupportedOSPlatform("ios")]
49 [UnsupportedOSPlatform("tvos")]
50 public static DSA Create(DSAParameters parameters)
51 {
52 DSA dSA = CreateCore();
53 try
54 {
55 dSA.ImportParameters(parameters);
56 return dSA;
57 }
58 catch
59 {
60 dSA.Dispose();
61 throw;
62 }
63 }
64
65 public abstract byte[] CreateSignature(byte[] rgbHash);
66
67 public abstract bool VerifySignature(byte[] rgbHash, byte[] rgbSignature);
68
69 protected virtual byte[] HashData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm)
70 {
72 }
73
74 protected virtual byte[] HashData(Stream data, HashAlgorithmName hashAlgorithm)
75 {
77 }
78
79 public byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm)
80 {
81 if (data == null)
82 {
83 throw new ArgumentNullException("data");
84 }
85 return SignData(data, 0, data.Length, hashAlgorithm);
86 }
87
88 public byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
89 {
90 if (data == null)
91 {
92 throw new ArgumentNullException("data");
93 }
94 if (string.IsNullOrEmpty(hashAlgorithm.Name))
95 {
97 }
98 if (!signatureFormat.IsKnownValue())
99 {
101 }
102 return SignDataCore(data, hashAlgorithm, signatureFormat);
103 }
104
105 public virtual byte[] SignData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm)
106 {
107 if (data == null)
108 {
109 throw new ArgumentNullException("data");
110 }
111 if (offset < 0 || offset > data.Length)
112 {
113 throw new ArgumentOutOfRangeException("offset");
114 }
115 if (count < 0 || count > data.Length - offset)
116 {
117 throw new ArgumentOutOfRangeException("count");
118 }
119 if (string.IsNullOrEmpty(hashAlgorithm.Name))
120 {
122 }
123 byte[] rgbHash = HashData(data, offset, count, hashAlgorithm);
124 return CreateSignature(rgbHash);
125 }
126
127 public byte[] SignData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
128 {
129 if (data == null)
130 {
131 throw new ArgumentNullException("data");
132 }
133 if (offset < 0 || offset > data.Length)
134 {
135 throw new ArgumentOutOfRangeException("offset");
136 }
137 if (count < 0 || count > data.Length - offset)
138 {
139 throw new ArgumentOutOfRangeException("count");
140 }
141 if (string.IsNullOrEmpty(hashAlgorithm.Name))
142 {
144 }
145 if (!signatureFormat.IsKnownValue())
146 {
148 }
149 return SignDataCore(new ReadOnlySpan<byte>(data, offset, count), hashAlgorithm, signatureFormat);
150 }
151
152 protected virtual byte[] SignDataCore(ReadOnlySpan<byte> data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
153 {
154 Span<byte> destination = stackalloc byte[128];
155 if (TrySignDataCore(data, destination, hashAlgorithm, signatureFormat, out var bytesWritten))
156 {
157 return destination.Slice(0, bytesWritten).ToArray();
158 }
159 byte[] rgbHash = HashSpanToArray(data, hashAlgorithm);
160 byte[] signature = CreateSignature(rgbHash);
161 return AsymmetricAlgorithmHelpers.ConvertFromIeeeP1363Signature(signature, signatureFormat);
162 }
163
164 public virtual byte[] SignData(Stream data, HashAlgorithmName hashAlgorithm)
165 {
166 if (data == null)
167 {
168 throw new ArgumentNullException("data");
169 }
170 if (string.IsNullOrEmpty(hashAlgorithm.Name))
171 {
173 }
174 byte[] rgbHash = HashData(data, hashAlgorithm);
175 return CreateSignature(rgbHash);
176 }
177
178 public byte[] SignData(Stream data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
179 {
180 if (data == null)
181 {
182 throw new ArgumentNullException("data");
183 }
184 if (string.IsNullOrEmpty(hashAlgorithm.Name))
185 {
187 }
188 if (!signatureFormat.IsKnownValue())
189 {
191 }
192 return SignDataCore(data, hashAlgorithm, signatureFormat);
193 }
194
195 protected virtual byte[] SignDataCore(Stream data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
196 {
197 byte[] array = HashData(data, hashAlgorithm);
198 return CreateSignatureCore(array, signatureFormat);
199 }
200
201 public bool VerifyData(byte[] data, byte[] signature, HashAlgorithmName hashAlgorithm)
202 {
203 if (data == null)
204 {
205 throw new ArgumentNullException("data");
206 }
207 return VerifyData(data, 0, data.Length, signature, hashAlgorithm);
208 }
209
210 public virtual bool VerifyData(byte[] data, int offset, int count, byte[] signature, HashAlgorithmName hashAlgorithm)
211 {
212 if (data == null)
213 {
214 throw new ArgumentNullException("data");
215 }
216 if (offset < 0 || offset > data.Length)
217 {
218 throw new ArgumentOutOfRangeException("offset");
219 }
220 if (count < 0 || count > data.Length - offset)
221 {
222 throw new ArgumentOutOfRangeException("count");
223 }
224 if (signature == null)
225 {
226 throw new ArgumentNullException("signature");
227 }
228 if (string.IsNullOrEmpty(hashAlgorithm.Name))
229 {
231 }
232 byte[] rgbHash = HashData(data, offset, count, hashAlgorithm);
233 return VerifySignature(rgbHash, signature);
234 }
235
236 public bool VerifyData(byte[] data, int offset, int count, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
237 {
238 if (data == null)
239 {
240 throw new ArgumentNullException("data");
241 }
242 if (offset < 0 || offset > data.Length)
243 {
244 throw new ArgumentOutOfRangeException("offset");
245 }
246 if (count < 0 || count > data.Length - offset)
247 {
248 throw new ArgumentOutOfRangeException("count");
249 }
250 if (signature == null)
251 {
252 throw new ArgumentNullException("signature");
253 }
254 if (string.IsNullOrEmpty(hashAlgorithm.Name))
255 {
257 }
258 if (!signatureFormat.IsKnownValue())
259 {
261 }
262 return VerifyDataCore(new ReadOnlySpan<byte>(data, offset, count), signature, hashAlgorithm, signatureFormat);
263 }
264
265 public virtual bool VerifyData(Stream data, byte[] signature, HashAlgorithmName hashAlgorithm)
266 {
267 if (data == null)
268 {
269 throw new ArgumentNullException("data");
270 }
271 if (signature == null)
272 {
273 throw new ArgumentNullException("signature");
274 }
275 if (string.IsNullOrEmpty(hashAlgorithm.Name))
276 {
278 }
279 byte[] rgbHash = HashData(data, hashAlgorithm);
280 return VerifySignature(rgbHash, signature);
281 }
282
283 public byte[] CreateSignature(byte[] rgbHash, DSASignatureFormat signatureFormat)
284 {
285 if (rgbHash == null)
286 {
287 throw new ArgumentNullException("rgbHash");
288 }
289 if (!signatureFormat.IsKnownValue())
290 {
292 }
293 return CreateSignatureCore(rgbHash, signatureFormat);
294 }
295
296 protected virtual byte[] CreateSignatureCore(ReadOnlySpan<byte> hash, DSASignatureFormat signatureFormat)
297 {
298 Span<byte> destination = stackalloc byte[128];
299 if (TryCreateSignatureCore(hash, destination, signatureFormat, out var bytesWritten))
300 {
301 return destination.Slice(0, bytesWritten).ToArray();
302 }
303 byte[] signature = CreateSignature(hash.ToArray());
304 return AsymmetricAlgorithmHelpers.ConvertFromIeeeP1363Signature(signature, signatureFormat);
305 }
306
307 public virtual bool TryCreateSignature(ReadOnlySpan<byte> hash, Span<byte> destination, out int bytesWritten)
308 {
309 return TryCreateSignatureCore(hash, destination, DSASignatureFormat.IeeeP1363FixedFieldConcatenation, out bytesWritten);
310 }
311
312 public bool TryCreateSignature(ReadOnlySpan<byte> hash, Span<byte> destination, DSASignatureFormat signatureFormat, out int bytesWritten)
313 {
314 if (!signatureFormat.IsKnownValue())
315 {
317 }
318 return TryCreateSignatureCore(hash, destination, signatureFormat, out bytesWritten);
319 }
320
321 protected virtual bool TryCreateSignatureCore(ReadOnlySpan<byte> hash, Span<byte> destination, DSASignatureFormat signatureFormat, out int bytesWritten)
322 {
323 byte[] array = CreateSignature(hash.ToArray());
324 if (signatureFormat != 0)
325 {
327 }
329 }
330
331 protected virtual bool TryHashData(ReadOnlySpan<byte> data, Span<byte> destination, HashAlgorithmName hashAlgorithm, out int bytesWritten)
332 {
333 byte[] array = HashSpanToArray(data, hashAlgorithm);
335 }
336
337 public virtual bool TrySignData(ReadOnlySpan<byte> data, Span<byte> destination, HashAlgorithmName hashAlgorithm, out int bytesWritten)
338 {
339 if (string.IsNullOrEmpty(hashAlgorithm.Name))
340 {
342 }
343 if (TryHashData(data, destination, hashAlgorithm, out var bytesWritten2) && TryCreateSignature(destination.Slice(0, bytesWritten2), destination, out bytesWritten))
344 {
345 return true;
346 }
347 bytesWritten = 0;
348 return false;
349 }
350
351 public bool TrySignData(ReadOnlySpan<byte> data, Span<byte> destination, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat, out int bytesWritten)
352 {
353 if (string.IsNullOrEmpty(hashAlgorithm.Name))
354 {
356 }
357 if (!signatureFormat.IsKnownValue())
358 {
360 }
361 return TrySignDataCore(data, destination, hashAlgorithm, signatureFormat, out bytesWritten);
362 }
363
364 protected virtual bool TrySignDataCore(ReadOnlySpan<byte> data, Span<byte> destination, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat, out int bytesWritten)
365 {
366 Span<byte> tmp = stackalloc byte[128];
367 ReadOnlySpan<byte> hash = HashSpanToTmp(data, hashAlgorithm, tmp);
368 return TryCreateSignatureCore(hash, destination, signatureFormat, out bytesWritten);
369 }
370
371 public virtual bool VerifyData(ReadOnlySpan<byte> data, ReadOnlySpan<byte> signature, HashAlgorithmName hashAlgorithm)
372 {
373 if (string.IsNullOrEmpty(hashAlgorithm.Name))
374 {
376 }
377 return VerifyDataCore(data, signature, hashAlgorithm, DSASignatureFormat.IeeeP1363FixedFieldConcatenation);
378 }
379
380 public bool VerifyData(byte[] data, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
381 {
382 if (data == null)
383 {
384 throw new ArgumentNullException("data");
385 }
386 if (signature == null)
387 {
388 throw new ArgumentNullException("signature");
389 }
390 if (string.IsNullOrEmpty(hashAlgorithm.Name))
391 {
393 }
394 if (!signatureFormat.IsKnownValue())
395 {
397 }
398 return VerifyDataCore(data, signature, hashAlgorithm, signatureFormat);
399 }
400
401 public bool VerifyData(Stream data, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
402 {
403 if (data == null)
404 {
405 throw new ArgumentNullException("data");
406 }
407 if (signature == null)
408 {
409 throw new ArgumentNullException("signature");
410 }
411 if (string.IsNullOrEmpty(hashAlgorithm.Name))
412 {
414 }
415 if (!signatureFormat.IsKnownValue())
416 {
418 }
419 return VerifyDataCore(data, signature, hashAlgorithm, signatureFormat);
420 }
421
422 protected virtual bool VerifyDataCore(Stream data, ReadOnlySpan<byte> signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
423 {
424 byte[] array = HashData(data, hashAlgorithm);
425 return VerifySignatureCore(array, signature, signatureFormat);
426 }
427
428 public bool VerifyData(ReadOnlySpan<byte> data, ReadOnlySpan<byte> signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
429 {
430 if (string.IsNullOrEmpty(hashAlgorithm.Name))
431 {
433 }
434 if (!signatureFormat.IsKnownValue())
435 {
437 }
438 return VerifyDataCore(data, signature, hashAlgorithm, signatureFormat);
439 }
440
441 protected virtual bool VerifyDataCore(ReadOnlySpan<byte> data, ReadOnlySpan<byte> signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
442 {
443 Span<byte> tmp = stackalloc byte[128];
444 ReadOnlySpan<byte> hash = HashSpanToTmp(data, hashAlgorithm, tmp);
445 return VerifySignatureCore(hash, signature, signatureFormat);
446 }
447
448 public bool VerifySignature(byte[] rgbHash, byte[] rgbSignature, DSASignatureFormat signatureFormat)
449 {
450 if (rgbHash == null)
451 {
452 throw new ArgumentNullException("rgbHash");
453 }
454 if (rgbSignature == null)
455 {
456 throw new ArgumentNullException("rgbSignature");
457 }
458 if (!signatureFormat.IsKnownValue())
459 {
461 }
462 return VerifySignatureCore(rgbHash, rgbSignature, signatureFormat);
463 }
464
465 public virtual bool VerifySignature(ReadOnlySpan<byte> hash, ReadOnlySpan<byte> signature)
466 {
467 return VerifySignature(hash.ToArray(), signature.ToArray());
468 }
469
470 public bool VerifySignature(ReadOnlySpan<byte> hash, ReadOnlySpan<byte> signature, DSASignatureFormat signatureFormat)
471 {
472 if (!signatureFormat.IsKnownValue())
473 {
475 }
476 return VerifySignatureCore(hash, signature, signatureFormat);
477 }
478
479 protected virtual bool VerifySignatureCore(ReadOnlySpan<byte> hash, ReadOnlySpan<byte> signature, DSASignatureFormat signatureFormat)
480 {
481 byte[] array = this.ConvertSignatureToIeeeP1363(signatureFormat, signature);
482 if (array == null)
483 {
484 return false;
485 }
486 return VerifySignature(hash, array);
487 }
488
490 {
491 if (TryHashData(data, tmp, hashAlgorithm, out var bytesWritten))
492 {
493 return tmp.Slice(0, bytesWritten);
494 }
495 return HashSpanToArray(data, hashAlgorithm);
496 }
497
498 private byte[] HashSpanToArray(ReadOnlySpan<byte> data, HashAlgorithmName hashAlgorithm)
499 {
500 byte[] array = ArrayPool<byte>.Shared.Rent(data.Length);
501 bool flag = false;
502 try
503 {
504 data.CopyTo(array);
505 byte[] result = HashData(array, 0, data.Length, hashAlgorithm);
506 flag = true;
507 return result;
508 }
509 finally
510 {
511 Array.Clear(array, 0, data.Length);
512 if (flag)
513 {
515 }
516 }
517 }
518
523
528
529 public override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<byte> passwordBytes, PbeParameters pbeParameters, Span<byte> destination, out int bytesWritten)
530 {
531 if (pbeParameters == null)
532 {
533 throw new ArgumentNullException("pbeParameters");
534 }
536 AsnWriter pkcs8Writer = WritePkcs8();
537 AsnWriter asnWriter = KeyFormatHelper.WriteEncryptedPkcs8(passwordBytes, pkcs8Writer, pbeParameters);
538 return asnWriter.TryEncode(destination, out bytesWritten);
539 }
540
541 public override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan<char> password, PbeParameters pbeParameters, Span<byte> destination, out int bytesWritten)
542 {
543 if (pbeParameters == null)
544 {
545 throw new ArgumentNullException("pbeParameters");
546 }
548 AsnWriter pkcs8Writer = WritePkcs8();
549 AsnWriter asnWriter = KeyFormatHelper.WriteEncryptedPkcs8(password, pkcs8Writer, pbeParameters);
550 return asnWriter.TryEncode(destination, out bytesWritten);
551 }
552
553 public override bool TryExportPkcs8PrivateKey(Span<byte> destination, out int bytesWritten)
554 {
555 AsnWriter asnWriter = WritePkcs8();
556 return asnWriter.TryEncode(destination, out bytesWritten);
557 }
558
559 public override bool TryExportSubjectPublicKeyInfo(Span<byte> destination, out int bytesWritten)
560 {
562 return asnWriter.TryEncode(destination, out bytesWritten);
563 }
564
565 private unsafe AsnWriter WritePkcs8()
566 {
567 DSAParameters dsaParameters = ExportParameters(includePrivateParameters: true);
568 fixed (byte* ptr = dsaParameters.X)
569 {
570 try
571 {
572 return DSAKeyFormatHelper.WritePkcs8(in dsaParameters);
573 }
574 finally
575 {
576 CryptographicOperations.ZeroMemory(dsaParameters.X);
577 }
578 }
579 }
580
582 {
583 DSAParameters dsaParameters = ExportParameters(includePrivateParameters: false);
584 return DSAKeyFormatHelper.WriteSubjectPublicKeyInfo(in dsaParameters);
585 }
586
587 public unsafe override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<byte> passwordBytes, ReadOnlySpan<byte> source, out int bytesRead)
588 {
589 DSAKeyFormatHelper.ReadEncryptedPkcs8(source, passwordBytes, out var bytesRead2, out var key);
590 fixed (byte* ptr = key.X)
591 {
592 try
593 {
595 }
596 finally
597 {
599 }
600 }
601 bytesRead = bytesRead2;
602 }
603
604 public unsafe override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan<char> password, ReadOnlySpan<byte> source, out int bytesRead)
605 {
606 DSAKeyFormatHelper.ReadEncryptedPkcs8(source, password, out var bytesRead2, out var key);
607 fixed (byte* ptr = key.X)
608 {
609 try
610 {
612 }
613 finally
614 {
616 }
617 }
618 bytesRead = bytesRead2;
619 }
620
621 public unsafe override void ImportPkcs8PrivateKey(ReadOnlySpan<byte> source, out int bytesRead)
622 {
623 DSAKeyFormatHelper.ReadPkcs8(source, out var bytesRead2, out var key);
624 fixed (byte* ptr = key.X)
625 {
626 try
627 {
629 }
630 finally
631 {
633 }
634 }
635 bytesRead = bytesRead2;
636 }
637
638 public override void ImportSubjectPublicKeyInfo(ReadOnlySpan<byte> source, out int bytesRead)
639 {
640 DSAKeyFormatHelper.ReadSubjectPublicKeyInfo(source, out var bytesRead2, out var key);
642 bytesRead = bytesRead2;
643 }
644
645 public int GetMaxSignatureSize(DSASignatureFormat signatureFormat)
646 {
647 int num = ExportParameters(includePrivateParameters: false).Q.Length;
648 return signatureFormat switch
649 {
650 DSASignatureFormat.IeeeP1363FixedFieldConcatenation => num * 2,
651 DSASignatureFormat.Rfc3279DerSequence => AsymmetricAlgorithmHelpers.GetMaxDerSignatureSize(num * 8),
652 _ => throw new ArgumentOutOfRangeException("signatureFormat"),
653 };
654 }
655
657 {
659 {
660 if (label.SequenceEqual("PRIVATE KEY"))
661 {
662 return ImportPkcs8PrivateKey;
663 }
664 return label.SequenceEqual("PUBLIC KEY") ? new PemKeyImportHelpers.ImportKeyAction(ImportSubjectPublicKeyInfo) : null;
665 });
666 }
667
669 {
670 PemKeyImportHelpers.ImportEncryptedPem(input, password, ImportEncryptedPkcs8PrivateKey);
671 }
672
674 {
675 PemKeyImportHelpers.ImportEncryptedPem(input, passwordBytes, ImportEncryptedPkcs8PrivateKey);
676 }
677
678 private static byte[] ReadRequiredElement(ref XmlKeyHelper.ParseState state, string name, int sizeHint = -1)
679 {
680 byte[] array = XmlKeyHelper.ReadCryptoBinary(ref state, name, sizeHint);
681 if (array == null)
682 {
684 }
685 return array;
686 }
687
688 public override void FromXmlString(string xmlString)
689 {
691 byte[] array = ReadRequiredElement(ref state, "P");
692 byte[] array2 = ReadRequiredElement(ref state, "Q");
693 byte[] g = ReadRequiredElement(ref state, "G", array.Length);
694 byte[] y = ReadRequiredElement(ref state, "Y", array.Length);
695 byte[] j = XmlKeyHelper.ReadCryptoBinary(ref state, "J");
696 byte[] array3 = XmlKeyHelper.ReadCryptoBinary(ref state, "Seed");
697 int counter = 0;
698 byte[] x = XmlKeyHelper.ReadCryptoBinary(ref state, "X", array2.Length);
699 if (array3 != null)
700 {
701 byte[] buf = ReadRequiredElement(ref state, "PgenCounter");
702 counter = XmlKeyHelper.ReadCryptoBinaryInt32(buf);
703 }
704 DSAParameters dSAParameters = default(DSAParameters);
705 dSAParameters.P = array;
706 dSAParameters.Q = array2;
707 dSAParameters.G = g;
708 dSAParameters.Y = y;
709 dSAParameters.J = j;
710 dSAParameters.Seed = array3;
711 dSAParameters.Counter = counter;
712 dSAParameters.X = x;
713 DSAParameters parameters = dSAParameters;
714 if (parameters.Seed == null && XmlKeyHelper.HasElement(ref state, "PgenCounter"))
715 {
717 }
718 ImportParameters(parameters);
719 }
720
721 public override string ToXmlString(bool includePrivateParameters)
722 {
723 DSAParameters dSAParameters = ExportParameters(includePrivateParameters);
724 StringBuilder stringBuilder = new StringBuilder((dSAParameters.P.Length << 1) / 3);
725 stringBuilder.Append("<DSAKeyValue>");
726 XmlKeyHelper.WriteCryptoBinary("P", dSAParameters.P, stringBuilder);
727 XmlKeyHelper.WriteCryptoBinary("Q", dSAParameters.Q, stringBuilder);
728 XmlKeyHelper.WriteCryptoBinary("G", dSAParameters.G, stringBuilder);
729 XmlKeyHelper.WriteCryptoBinary("Y", dSAParameters.Y, stringBuilder);
730 if (dSAParameters.J != null)
731 {
732 XmlKeyHelper.WriteCryptoBinary("J", dSAParameters.J, stringBuilder);
733 }
734 if (dSAParameters.Seed != null)
735 {
736 XmlKeyHelper.WriteCryptoBinary("Seed", dSAParameters.Seed, stringBuilder);
737 XmlKeyHelper.WriteCryptoBinary("PgenCounter", dSAParameters.Counter, stringBuilder);
738 }
739 if (includePrivateParameters)
740 {
741 if (dSAParameters.X == null)
742 {
743 throw new ArgumentNullException("inArray");
744 }
745 XmlKeyHelper.WriteCryptoBinary("X", dSAParameters.X, stringBuilder);
746 }
747 stringBuilder.Append("</DSAKeyValue>");
748 return stringBuilder.ToString();
749 }
750
751 private static DSA CreateCore()
752 {
753 return new DSAImplementation.DSACng();
754 }
755}
static byte[] ConvertFromIeeeP1363Signature(byte[] signature, DSASignatureFormat targetFormat)
static bool TryCopyToDestination(this ReadOnlySpan< byte > source, Span< byte > destination, out int bytesWritten)
Definition Helpers.cs:62
static void ImportPem(ReadOnlySpan< char > input, FindImportActionFunc callback)
delegate void ImportKeyAction(ReadOnlySpan< byte > source, out int bytesRead)
static unsafe void Clear(Array array)
Definition Array.cs:755
static ArrayPool< T > Shared
Definition ArrayPool.cs:7
bool TryEncode(Span< byte > destination, out int bytesWritten)
Definition AsnWriter.cs:173
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string Cryptography_InvalidFromXmlString
Definition SR.cs:84
static string Cryptography_HashAlgorithmNameNullOrEmpty
Definition SR.cs:60
static string NotSupported_SubclassOverride
Definition SR.cs:1714
Definition SR.cs:7
static ? object CreateFromName(string name, params object?[]? args)
static AsnWriter WriteSubjectPublicKeyInfo(in DSAParameters dsaParameters)
static void ReadSubjectPublicKeyInfo(ReadOnlySpan< byte > source, out int bytesRead, out DSAParameters key)
static void ReadEncryptedPkcs8(ReadOnlySpan< byte > source, ReadOnlySpan< char > password, out int bytesRead, out DSAParameters key)
static void ReadPkcs8(ReadOnlySpan< byte > source, out int bytesRead, out DSAParameters key)
static AsnWriter WritePkcs8(in DSAParameters dsaParameters)
static Exception CreateUnknownValueException(DSASignatureFormat signatureFormat)
unsafe AsnWriter WritePkcs8()
Definition DSA.cs:565
virtual bool VerifyData(Stream data, byte[] signature, HashAlgorithmName hashAlgorithm)
Definition DSA.cs:265
override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan< byte > passwordBytes, PbeParameters pbeParameters, Span< byte > destination, out int bytesWritten)
Definition DSA.cs:529
override void ImportFromPem(ReadOnlySpan< char > input)
Definition DSA.cs:656
byte[] CreateSignature(byte[] rgbHash)
byte[] CreateSignature(byte[] rgbHash, DSASignatureFormat signatureFormat)
Definition DSA.cs:283
override bool TryExportPkcs8PrivateKey(Span< byte > destination, out int bytesWritten)
Definition DSA.cs:553
ReadOnlySpan< byte > HashSpanToTmp(ReadOnlySpan< byte > data, HashAlgorithmName hashAlgorithm, Span< byte > tmp)
Definition DSA.cs:489
virtual byte[] SignDataCore(Stream data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
Definition DSA.cs:195
virtual bool VerifyDataCore(ReadOnlySpan< byte > data, ReadOnlySpan< byte > signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
Definition DSA.cs:441
virtual bool VerifySignatureCore(ReadOnlySpan< byte > hash, ReadOnlySpan< byte > signature, DSASignatureFormat signatureFormat)
Definition DSA.cs:479
override void ImportFromEncryptedPem(ReadOnlySpan< char > input, ReadOnlySpan< char > password)
Definition DSA.cs:668
virtual byte[] HashData(Stream data, HashAlgorithmName hashAlgorithm)
Definition DSA.cs:74
byte[] SignData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
Definition DSA.cs:127
bool VerifySignature(byte[] rgbHash, byte[] rgbSignature, DSASignatureFormat signatureFormat)
Definition DSA.cs:448
override void ImportFromEncryptedPem(ReadOnlySpan< char > input, ReadOnlySpan< byte > passwordBytes)
Definition DSA.cs:673
virtual bool VerifyData(ReadOnlySpan< byte > data, ReadOnlySpan< byte > signature, HashAlgorithmName hashAlgorithm)
Definition DSA.cs:371
virtual byte[] SignDataCore(ReadOnlySpan< byte > data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
Definition DSA.cs:152
virtual bool TryCreateSignature(ReadOnlySpan< byte > hash, Span< byte > destination, out int bytesWritten)
Definition DSA.cs:307
bool VerifyData(byte[] data, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
Definition DSA.cs:380
bool VerifySignature(ReadOnlySpan< byte > hash, ReadOnlySpan< byte > signature, DSASignatureFormat signatureFormat)
Definition DSA.cs:470
virtual bool TryHashData(ReadOnlySpan< byte > data, Span< byte > destination, HashAlgorithmName hashAlgorithm, out int bytesWritten)
Definition DSA.cs:331
bool VerifyData(byte[] data, byte[] signature, HashAlgorithmName hashAlgorithm)
Definition DSA.cs:201
byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
Definition DSA.cs:88
static Exception DerivedClassMustOverride()
Definition DSA.cs:519
virtual byte[] SignData(Stream data, HashAlgorithmName hashAlgorithm)
Definition DSA.cs:164
static byte[] ReadRequiredElement(ref XmlKeyHelper.ParseState state, string name, int sizeHint=-1)
Definition DSA.cs:678
unsafe override void ImportPkcs8PrivateKey(ReadOnlySpan< byte > source, out int bytesRead)
Definition DSA.cs:621
override bool TryExportSubjectPublicKeyInfo(Span< byte > destination, out int bytesWritten)
Definition DSA.cs:559
unsafe override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan< char > password, ReadOnlySpan< byte > source, out int bytesRead)
Definition DSA.cs:604
override void ImportSubjectPublicKeyInfo(ReadOnlySpan< byte > source, out int bytesRead)
Definition DSA.cs:638
override void FromXmlString(string xmlString)
Definition DSA.cs:688
static DSA Create(DSAParameters parameters)
Definition DSA.cs:50
bool VerifyData(byte[] data, int offset, int count, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
Definition DSA.cs:236
virtual byte[] HashData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm)
Definition DSA.cs:69
byte[] HashSpanToArray(ReadOnlySpan< byte > data, HashAlgorithmName hashAlgorithm)
Definition DSA.cs:498
virtual bool TrySignDataCore(ReadOnlySpan< byte > data, Span< byte > destination, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat, out int bytesWritten)
Definition DSA.cs:364
virtual byte[] SignData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm)
Definition DSA.cs:105
virtual bool TrySignData(ReadOnlySpan< byte > data, Span< byte > destination, HashAlgorithmName hashAlgorithm, out int bytesWritten)
Definition DSA.cs:337
virtual bool VerifyData(byte[] data, int offset, int count, byte[] signature, HashAlgorithmName hashAlgorithm)
Definition DSA.cs:210
bool TrySignData(ReadOnlySpan< byte > data, Span< byte > destination, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat, out int bytesWritten)
Definition DSA.cs:351
override bool TryExportEncryptedPkcs8PrivateKey(ReadOnlySpan< char > password, PbeParameters pbeParameters, Span< byte > destination, out int bytesWritten)
Definition DSA.cs:541
void ImportParameters(DSAParameters parameters)
bool VerifySignature(byte[] rgbHash, byte[] rgbSignature)
unsafe override void ImportEncryptedPkcs8PrivateKey(ReadOnlySpan< byte > passwordBytes, ReadOnlySpan< byte > source, out int bytesRead)
Definition DSA.cs:587
bool VerifyData(Stream data, byte[] signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
Definition DSA.cs:401
virtual bool VerifyDataCore(Stream data, ReadOnlySpan< byte > signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
Definition DSA.cs:422
static new? DSA Create(string algName)
Definition DSA.cs:19
DSAParameters ExportParameters(bool includePrivateParameters)
virtual byte[] CreateSignatureCore(ReadOnlySpan< byte > hash, DSASignatureFormat signatureFormat)
Definition DSA.cs:296
byte[] SignData(Stream data, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
Definition DSA.cs:178
bool TryCreateSignature(ReadOnlySpan< byte > hash, Span< byte > destination, DSASignatureFormat signatureFormat, out int bytesWritten)
Definition DSA.cs:312
virtual bool TryCreateSignatureCore(ReadOnlySpan< byte > hash, Span< byte > destination, DSASignatureFormat signatureFormat, out int bytesWritten)
Definition DSA.cs:321
byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm)
Definition DSA.cs:79
AsnWriter WriteSubjectPublicKeyInfo()
Definition DSA.cs:581
override string ToXmlString(bool includePrivateParameters)
Definition DSA.cs:721
static DSA Create(int keySizeInBits)
Definition DSA.cs:33
bool VerifyData(ReadOnlySpan< byte > data, ReadOnlySpan< byte > signature, HashAlgorithmName hashAlgorithm, DSASignatureFormat signatureFormat)
Definition DSA.cs:428
static Exception HashAlgorithmNameNullOrEmpty()
Definition DSA.cs:524
virtual bool VerifySignature(ReadOnlySpan< byte > hash, ReadOnlySpan< byte > signature)
Definition DSA.cs:465
int GetMaxSignatureSize(DSASignatureFormat signatureFormat)
Definition DSA.cs:645
static new DSA Create()
Definition DSA.cs:26
static AsnWriter WriteEncryptedPkcs8(ReadOnlySpan< char > password, AsnWriter pkcs8Writer, PbeParameters pbeParameters)
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)
Definition Span.cs:271