added simplepack implementation and tests
This commit is contained in:
parent
3085a8e438
commit
70957e5ab2
35
SimplePack/SimplePack.cs
Normal file
35
SimplePack/SimplePack.cs
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using Base58Check;
|
||||||
|
|
||||||
|
namespace simplepack
|
||||||
|
{
|
||||||
|
|
||||||
|
public class SimplePack
|
||||||
|
{
|
||||||
|
private string head;
|
||||||
|
private string foot;
|
||||||
|
public SimplePack(string header, string footer){
|
||||||
|
head = header;
|
||||||
|
foot = footer;
|
||||||
|
if (header.Length == 0 | footer.Length == 0){
|
||||||
|
throw new InvalidSimplePackHeader();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] decode(string data){
|
||||||
|
if (! data.Contains(head) | ! data.Contains(foot)){ throw new InvalidSimplePackHeader();}
|
||||||
|
|
||||||
|
string base58Data = "";
|
||||||
|
for (int i = head.Length; i < data.Length - foot.Length; i++){
|
||||||
|
base58Data += data[i];
|
||||||
|
}
|
||||||
|
return Base58CheckEncoding.Decode(base58Data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string encode(byte[] data){
|
||||||
|
// OutOfMemoryException may be thrown for large payloads
|
||||||
|
return head + Base58CheckEncoding.Encode(data) + foot;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
11
SimplePack/SimplePack.csproj
Normal file
11
SimplePack/SimplePack.csproj
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Base58Check" Version="0.2.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
22
SimplePack/exception.cs
Normal file
22
SimplePack/exception.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
namespace simplepack{
|
||||||
|
public class InvalidSimplePackHeader : Exception
|
||||||
|
{
|
||||||
|
public InvalidSimplePackHeader()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public InvalidSimplePackHeader(string message)
|
||||||
|
: base(message)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public InvalidSimplePackHeader(string message, Exception inner)
|
||||||
|
: base(message, inner)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
12
cli/SimplePackCLI.cs
Normal file
12
cli/SimplePackCLI.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace cli
|
||||||
|
{
|
||||||
|
class Program
|
||||||
|
{
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Hello World!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
cli/cli.csproj
Normal file
12
cli/cli.csproj
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\SimplePack\SimplePack.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
85
tests/testSimplePack.cs
Normal file
85
tests/testSimplePack.cs
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
using NUnit.Framework;
|
||||||
|
using System.Text;
|
||||||
|
using Base58Check;
|
||||||
|
using simplepack;
|
||||||
|
|
||||||
|
|
||||||
|
namespace tests
|
||||||
|
{
|
||||||
|
public class Tests
|
||||||
|
{
|
||||||
|
[SetUp]
|
||||||
|
public void Setup()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestRequireHeader(){
|
||||||
|
string header = "";
|
||||||
|
string footer = " test-footer";
|
||||||
|
byte[] expected_result = UTF8Encoding.UTF8.GetBytes("hello world");
|
||||||
|
string encoded = header + Base58CheckEncoding.Encode(expected_result) + footer;
|
||||||
|
try{
|
||||||
|
SimplePack packer = new SimplePack(header, footer);
|
||||||
|
}
|
||||||
|
catch(InvalidSimplePackHeader){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Assert.Fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestRequireFooter(){
|
||||||
|
string header = "test-header";
|
||||||
|
string footer = "";
|
||||||
|
byte[] expected_result = UTF8Encoding.UTF8.GetBytes("hello world");
|
||||||
|
string encoded = header + Base58CheckEncoding.Encode(expected_result) + footer;
|
||||||
|
try{
|
||||||
|
SimplePack packer = new SimplePack(header, footer);
|
||||||
|
}
|
||||||
|
catch(InvalidSimplePackHeader){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Assert.Fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestInvalidChecksum(){
|
||||||
|
byte[] expected_result = UTF8Encoding.UTF8.GetBytes("hello world");
|
||||||
|
string header = "header-part ";
|
||||||
|
string footer = " footer part.";
|
||||||
|
string encoded = header + Base58CheckEncoding.EncodePlain(expected_result) + footer;
|
||||||
|
SimplePack packer = new SimplePack(header, footer);
|
||||||
|
try{
|
||||||
|
packer.decode(encoded);
|
||||||
|
}
|
||||||
|
catch(System.FormatException){return;}
|
||||||
|
Assert.Fail(); // Did not catch no checksum, fail
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestDecode()
|
||||||
|
{
|
||||||
|
byte[] expected_result = UTF8Encoding.UTF8.GetBytes("hello world");
|
||||||
|
string header = "header-part ";
|
||||||
|
string footer = " footer part.";
|
||||||
|
string encoded = header + Base58CheckEncoding.Encode(expected_result) + footer;
|
||||||
|
SimplePack packer = new SimplePack(header, footer);
|
||||||
|
Assert.AreEqual(packer.decode(encoded),
|
||||||
|
expected_result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestEncode()
|
||||||
|
{
|
||||||
|
byte[] message = UTF8Encoding.UTF8.GetBytes("hello world");
|
||||||
|
string expected_header = "header-part ";
|
||||||
|
string expected_footer = " footer part.";
|
||||||
|
string expected_result = expected_header + Base58CheckEncoding.Encode(message) + expected_footer;
|
||||||
|
SimplePack packer = new SimplePack(expected_header, expected_footer);
|
||||||
|
string actual_result = packer.encode(message);
|
||||||
|
Assert.AreEqual(actual_result, expected_result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
19
tests/tests.csproj
Normal file
19
tests/tests.csproj
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
|
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="nunit" Version="3.12.0" />
|
||||||
|
<PackageReference Include="NUnit3TestAdapter" Version="3.15.1" />
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\SimplePack\SimplePack.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
Loading…
Reference in New Issue
Block a user