From e6724f8f1d99d872e84551affc1d9a820a7903d8 Mon Sep 17 00:00:00 2001 From: CryptoManiac Date: Wed, 19 Aug 2015 11:12:04 +0300 Subject: [PATCH] Compressed privkey decoding tests --- Novacoin/CKeyPair.cs | 41 ++++++++++++++++++++++++++++------------- NovacoinTest/Program.cs | 4 ++++ 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/Novacoin/CKeyPair.cs b/Novacoin/CKeyPair.cs index 90bcae2..f59f45f 100644 --- a/Novacoin/CKeyPair.cs +++ b/Novacoin/CKeyPair.cs @@ -40,6 +40,7 @@ namespace Novacoin /// Init key pair using secret sequence of bytes /// /// Byte sequence + /// Compression flag public CKeyPair(IEnumerable secretBytes, bool Compressed=true) { // Deserialize secret value @@ -65,6 +66,15 @@ namespace Novacoin } } + /// + /// Init key pair using secret sequence of bytes + /// + /// Byte sequence + public CKeyPair(IEnumerable secretBytes) : + this (secretBytes.Take(32), (secretBytes.Count() == 33 && secretBytes.Last() == 0x01)) + { + } + public CKeyPair(string strBase58) { List rawBytes = AddressTools.Base58DecodeCheck(strBase58).ToList(); @@ -129,7 +139,24 @@ namespace Novacoin /// public IEnumerable Secret { - get { return _Private.D.ToByteArray(); } + get + { + List secretBytes = new List(_Private.D.ToByteArray()); + + if (secretBytes[0] == 0x00) + { + // Remove sign + secretBytes.RemoveAt(0); + } + + if (IsCompressed) + { + // Set compression flag + secretBytes.Add(0x01); + } + + return secretBytes; + } } public string ToHex() @@ -144,18 +171,6 @@ namespace Novacoin r.Add((byte)(128 + AddrType.PUBKEY_ADDRESS)); // Key version r.AddRange(Secret); // Key data - if (r[1] == 0x00) - { - // Remove sign - r.RemoveAt(1); - } - - if (IsCompressed) - { - // Set compression flag - r.Add(0x01); - } - return AddressTools.Base58EncodeCheck(r); } } diff --git a/NovacoinTest/Program.cs b/NovacoinTest/Program.cs index f354961..e77bf59 100644 --- a/NovacoinTest/Program.cs +++ b/NovacoinTest/Program.cs @@ -70,6 +70,10 @@ namespace NovacoinTest Console.WriteLine("Hard-Coded privkey address: {0}", keyPair4.GetKeyID().ToString()); Console.WriteLine("Hard-Coded privkey: {0}\n", keyPair4.ToString()); + // Privkey hex deserialization test + CKeyPair keyPair5 = new CKeyPair(keyPair4.Secret.ToArray()); + Console.WriteLine("Decoded privkey in Hex: {0}", keyPair5.ToHex()); + Console.WriteLine("Decoded privkey address: {0}\n", keyPair5.GetKeyID().ToString()); /// ECDSA keypair signing test -- 1.7.1