Remove unnecessary usings, rewrite pubkey serialization code
[NovacoinLibrary.git] / Novacoin / CKey.cs
1 \feffusing System.Collections.Generic;
2 using System.Linq;
3
4 using Org.BouncyCastle.Crypto;
5 using Org.BouncyCastle.Crypto.Parameters;
6
7 using Org.BouncyCastle.Asn1.X9;
8 using Org.BouncyCastle.Security;
9 using Org.BouncyCastle.Asn1.Sec;
10
11 namespace Novacoin
12 {
13     /// <summary>
14     /// Basic pubkey functionality
15     /// </summary>
16     public abstract class CKey
17     {
18         // These fields are inherited by CPubKey and CKeyPair
19         protected ECPublicKeyParameters _Public;
20
21         protected static X9ECParameters curve = SecNamedCurves.GetByName("secp256k1");
22         protected static ECDomainParameters domain = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H, curve.GetSeed());
23
24         /// <summary>
25         /// Does the signature matches our public key?
26         /// </summary>
27         /// <param name="data">Data bytes</param>
28         /// <param name="signature">Signature bytes</param>
29         /// <returns>Checking result</returns>
30         public bool VerifySignature(IEnumerable<byte> data, IEnumerable<byte> signature)
31         {
32             byte[] dataBytes = data.ToArray();
33
34             ISigner signer = SignerUtilities.GetSigner("SHA-256withECDSA");
35             signer.Init(false, _Public);
36             signer.BlockUpdate(dataBytes, 0, dataBytes.Length);
37
38             return signer.VerifySignature(signature.ToArray());
39         }
40
41         /// <summary>
42         /// Calculate Hash160 and create new CKeyID instance.
43         /// </summary>
44         /// <returns>New key ID</returns>
45         public CKeyID GetKeyID()
46         {
47             return new CKeyID(Hash160.Compute160(Public));
48         }
49
50         /// <summary>
51         /// Public part of key pair
52         /// </summary>
53         public IEnumerable<byte> Public
54         {
55             get { return _Public.Q.GetEncoded(); }
56         }
57     }
58 }