diff --git a/src/neo/SmartContract/ApplicationEngine.Binary.cs b/src/neo/SmartContract/ApplicationEngine.Binary.cs index d8fe76815d..b95d188bb3 100644 --- a/src/neo/SmartContract/ApplicationEngine.Binary.cs +++ b/src/neo/SmartContract/ApplicationEngine.Binary.cs @@ -1,3 +1,4 @@ +using Neo.Cryptography; using Neo.VM.Types; using static System.Convert; @@ -9,6 +10,8 @@ partial class ApplicationEngine public static readonly InteropDescriptor System_Binary_Deserialize = Register("System.Binary.Deserialize", nameof(BinaryDeserialize), 0_00500000, CallFlags.None, true); public static readonly InteropDescriptor System_Binary_Base64Encode = Register("System.Binary.Base64Encode", nameof(Base64Encode), 0_00100000, CallFlags.None, true); public static readonly InteropDescriptor System_Binary_Base64Decode = Register("System.Binary.Base64Decode", nameof(Base64Decode), 0_00100000, CallFlags.None, true); + public static readonly InteropDescriptor System_Binary_Base58Encode = Register("System.Binary.Base58Encode", nameof(Base58Encode), 0_00100000, CallFlags.None, true); + public static readonly InteropDescriptor System_Binary_Base58Decode = Register("System.Binary.Base58Decode", nameof(Base58Decode), 0_00100000, CallFlags.None, true); protected internal byte[] BinarySerialize(StackItem item) { @@ -29,5 +32,15 @@ protected internal byte[] Base64Decode(string s) { return FromBase64String(s); } + + protected internal string Base58Encode(byte[] data) + { + return Base58.Encode(data); + } + + protected internal byte[] Base58Decode(string s) + { + return Base58.Decode(s); + } } } diff --git a/tests/neo.UnitTests/Cryptography/ECC/UT_ECDSA.cs b/tests/neo.UnitTests/Cryptography/ECC/UT_ECDSA.cs index a29cd3cbe2..2abc85ed45 100644 --- a/tests/neo.UnitTests/Cryptography/ECC/UT_ECDSA.cs +++ b/tests/neo.UnitTests/Cryptography/ECC/UT_ECDSA.cs @@ -24,6 +24,7 @@ public void GenerateSignature() Assert.IsFalse(ecdsa.VerifySignature(new byte[] { 2 }, sig[0], sig[1])); Assert.IsFalse(ecdsa.VerifySignature(new byte[] { 1 }, sig[0] + 1, sig[1])); Assert.IsFalse(ecdsa.VerifySignature(new byte[] { 1 }, sig[0], sig[1] + 1)); + Assert.IsFalse(ecdsa.VerifySignature(new byte[33], sig[0], sig[1])); } } } diff --git a/tests/neo.UnitTests/SmartContract/UT_ApplicationEngine.cs b/tests/neo.UnitTests/SmartContract/UT_ApplicationEngine.cs index b2810f2571..d625f95689 100644 --- a/tests/neo.UnitTests/SmartContract/UT_ApplicationEngine.cs +++ b/tests/neo.UnitTests/SmartContract/UT_ApplicationEngine.cs @@ -26,10 +26,16 @@ public void TestBinary() var data = new byte[0]; CollectionAssert.AreEqual(data, engine.Base64Decode(engine.Base64Encode(data))); + CollectionAssert.AreEqual(data, engine.Base58Decode(engine.Base58Encode(data))); + data = new byte[] { 1, 2, 3 }; CollectionAssert.AreEqual(data, engine.Base64Decode(engine.Base64Encode(data))); + CollectionAssert.AreEqual(data, engine.Base58Decode(engine.Base58Encode(data))); + Assert.AreEqual("AQIDBA==", engine.Base64Encode(new byte[] { 1, 2, 3, 4 })); + + Assert.AreEqual("2VfUX", engine.Base58Encode(new byte[] { 1, 2, 3, 4 })); } [TestMethod]