Correct checksum computation
[NovacoinLibrary.git] / Novacoin / CNovacoinAddress.cs
1 \feffusing System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace Novacoin
8 {
9     public enum AddrType
10     {
11         PUBKEY_ADDRESS = 8,
12         SCRIPT_ADDRESS = 20,
13         PUBKEY_ADDRESS_TEST = 111,
14         SCRIPT_ADDRESS_TEST = 196
15     };
16
17     public class CNovacoinAddress
18     {
19         private byte nVersion;
20         private List<byte> addrData;
21
22         public CNovacoinAddress(byte nVersionIn, IEnumerable<byte> addrDataIn)
23         {
24             nVersion = nVersionIn;
25             addrData = addrDataIn.ToList();
26         }
27
28         public CNovacoinAddress(CKeyID keyID)
29         {
30             nVersion = (byte)AddrType.PUBKEY_ADDRESS;
31             addrData = new List<byte>(keyID.hashBytes);
32         }
33
34         public CNovacoinAddress(CScriptID scriptID)
35         {
36             nVersion = (byte)AddrType.SCRIPT_ADDRESS;
37             addrData = new List<byte>(scriptID.hashBytes);
38         }
39
40         public bool IsValid()
41         {
42             int nExpectedSize = 20;
43
44             switch ((AddrType) nVersion)
45             {
46                 case AddrType.PUBKEY_ADDRESS:
47                     nExpectedSize = 20; // Hash of public key
48                     break;
49                 case AddrType.SCRIPT_ADDRESS:
50                     nExpectedSize = 20; // Hash of CScript
51                     break;
52                 case AddrType.PUBKEY_ADDRESS_TEST:
53                     nExpectedSize = 20;
54                     break;
55                 case AddrType.SCRIPT_ADDRESS_TEST:
56                     nExpectedSize = 20;
57                     break;
58                 default:
59                     return false;
60             }
61
62             return addrData.Count == nExpectedSize;
63         }
64
65         public override string ToString()
66         {
67             List<byte> r = new List<byte>();
68
69             r.Add(nVersion);
70             r.AddRange(addrData);
71
72             return AddressTools.Base58EncodeCheck(r.ToArray());
73         }
74     }
75 }