Compressed privkey decoding tests
authorCryptoManiac <balthazar.ad@gmail.com>
Wed, 19 Aug 2015 08:12:04 +0000 (11:12 +0300)
committerCryptoManiac <balthazar.ad@gmail.com>
Wed, 19 Aug 2015 08:12:04 +0000 (11:12 +0300)
Novacoin/CKeyPair.cs
NovacoinTest/Program.cs

index 90bcae2..f59f45f 100644 (file)
@@ -40,6 +40,7 @@ namespace Novacoin
         /// Init key pair using secret sequence of bytes
         /// </summary>
         /// <param name="secretBytes">Byte sequence</param>
+        /// <param name="Compressed">Compression flag</param>
         public CKeyPair(IEnumerable<byte> secretBytes, bool Compressed=true)
         {
             // Deserialize secret value
@@ -65,6 +66,15 @@ namespace Novacoin
             }
         }
 
+        /// <summary>
+        /// Init key pair using secret sequence of bytes
+        /// </summary>
+        /// <param name="secretBytes">Byte sequence</param>
+        public CKeyPair(IEnumerable<byte> secretBytes) : 
+            this (secretBytes.Take(32), (secretBytes.Count() == 33 && secretBytes.Last() == 0x01))
+        {
+        }
+
         public CKeyPair(string strBase58)
         {
             List<byte> rawBytes = AddressTools.Base58DecodeCheck(strBase58).ToList();
@@ -129,7 +139,24 @@ namespace Novacoin
         /// </summary>
         public IEnumerable<byte> Secret
         {
-            get { return _Private.D.ToByteArray(); }
+            get
+            {
+                List<byte> secretBytes = new List<byte>(_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);
         }
     }
index f354961..e77bf59 100644 (file)
@@ -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