Welcome to mirror list, hosted at ThFree Co, Russian Federation.

DSA.cs « System.Security.Cryptography « corlib « class « mcs - github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 26f366888a0b4f62d1b820e265f4d13a57511ecd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//
// System.Security.Cryptography DSA.cs
//
// Author:
//   Thomas Neidhart (tome@sbox.tugraz.at)
//

using System;
using System.Text;

namespace System.Security.Cryptography
{

	/// <summary>
	/// Abstract base class for all implementations of the DSA algorithm
	/// </summary>
	public abstract class DSA : AsymmetricAlgorithm
	{
		internal DSA () {}
	
		public static new DSA Create()
		{
			return new DSACryptoServiceProvider();
		}

		[MonoTODO]
		public static new DSA Create(string algName)
		{
			// TODO: implement
			return null;
		}
		
		public abstract byte[] CreateSignature(byte[] rgbHash);
		
		public abstract DSAParameters ExportParameters(bool includePrivateParameters);

		[MonoTODO]
		public override void FromXmlString(string xmlString) 
		{
			if (xmlString == null)
				throw new ArgumentNullException();
			
			// TODO: implement
		}
		
		public abstract void ImportParameters(DSAParameters parameters);

		public override string ToXmlString(bool includePrivateParameters)
		{
			DSAParameters dsaParams = ExportParameters(includePrivateParameters);
			
			StringBuilder sb = new StringBuilder();
			
			sb.Append("<DSAKeyValue>");
			
			sb.Append("<P>");
			sb.Append(Convert.ToBase64String(dsaParams.P));
			sb.Append("</P>");
			
			sb.Append("<Q>");
			sb.Append(Convert.ToBase64String(dsaParams.Q));
			sb.Append("</Q>");

			sb.Append("<G>");
			sb.Append(Convert.ToBase64String(dsaParams.G));
			sb.Append("</G>");

			sb.Append("<Y>");
			sb.Append(Convert.ToBase64String(dsaParams.Y));
			sb.Append("</Y>");

			sb.Append("<J>");
			sb.Append(Convert.ToBase64String(dsaParams.J));
			sb.Append("</J>");
			
			sb.Append("<Seed>");
			sb.Append(Convert.ToBase64String(dsaParams.Seed));
			sb.Append("</Seed>");
			
			sb.Append("<PgenCounter>");
			string cnt = Convert.ToString(dsaParams.Counter);
			byte[] inArr = new ASCIIEncoding().GetBytes(cnt);
			sb.Append(Convert.ToBase64String(inArr));
			sb.Append("</PgenCounter>");

			if (dsaParams.X != null)  {
				sb.Append("<X>");
				sb.Append(Convert.ToBase64String(dsaParams.X));
				sb.Append("</X>");
			}

			sb.Append("</DSAKeyValue>");
			
			return sb.ToString();
		}
		
		public abstract bool VerifySignature(byte[] rgbHash, byte[] rgbSignature);
		
	} // DSA
	
} // System.Security.Cryptography