Skip to content

Commit

Permalink
Add Base16Upper, Base32Pad, Base32PadUpper, Base32HexPad, Base32HexPa…
Browse files Browse the repository at this point in the history
…dUpper, Base36Upper, Base64Url, Base64UrlPad

Update junit
  • Loading branch information
ianopolous committed Sep 6, 2022
1 parent 8d2851f commit 6d3a2b1
Showing 8 changed files with 52 additions and 10 deletions.
4 changes: 2 additions & 2 deletions build.xml
Original file line number Diff line number Diff line change
@@ -49,8 +49,8 @@
<junit printsummary="yes" fork="true" haltonfailure="yes">
<jvmarg value="-Xmx1g"/>
<classpath>
<pathelement location="lib/junit-4.11.jar" />
<pathelement location="lib/hamcrest-core-1.3.jar" />
<pathelement location="lib/junit-4.13.2.jar" />
<pathelement location="lib/hamcrest-2.2.jar" />
<pathelement location="dist/multibase.jar" />
</classpath>
<test name="io.ipfs.multibase.MultibaseTest" haltonfailure="yes">
Binary file added lib/hamcrest-2.2.jar
Binary file not shown.
Binary file removed lib/hamcrest-core-1.3.jar
Binary file not shown.
Binary file removed lib/junit-4.12.jar
Binary file not shown.
Binary file added lib/junit-4.13.2.jar
Binary file not shown.
10 changes: 5 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -32,8 +32,8 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<version.junit>4.13.1</version.junit>
<version.hamcrest>1.3</version.hamcrest>
<version.junit>4.13.2</version.junit>
<version.hamcrest>2.2</version.hamcrest>
</properties>

<dependencies>
@@ -45,7 +45,7 @@
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<artifactId>hamcrest</artifactId>
<version>${version.hamcrest}</version>
<scope>test</scope>
</dependency>
@@ -58,8 +58,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
<plugin>
40 changes: 37 additions & 3 deletions src/main/java/io/ipfs/multibase/Multibase.java
Original file line number Diff line number Diff line change
@@ -13,15 +13,23 @@ public enum Base {
Base8('7'),
Base10('9'),
Base16('f'),
Base16Upper('F'),
Base32('b'),
Base32Upper('B'),
Base32Pad('c'),
Base32PadUpper('C'),
Base32Hex('v'),
Base32HexUpper('V'),
Base32HexPad('t'),
Base32HexPadUpper('T'),
Base36('k'),
Base58Flickr('Z'),
Base36Upper('K'),
Base58BTC('z'),
Base58Flickr('Z'),
Base64('m'),
Base64Pad('M');
Base64Url('u'),
Base64Pad('M'),
Base64UrlPad('U');

public char prefix;

@@ -48,20 +56,36 @@ public static String encode(Base b, byte[] data) {
return b.prefix + Base58.encode(data);
case Base16:
return b.prefix + Base16.encode(data);
case Base16Upper:
return b.prefix + Base16.encode(data).toUpperCase();
case Base32:
return b.prefix + new String(new Base32().encode(data)).toLowerCase().replaceAll("=", "");
case Base32Pad:
return b.prefix + new String(new Base32().encode(data)).toLowerCase();
case Base32PadUpper:
return b.prefix + new String(new Base32().encode(data));
case Base32Upper:
return b.prefix + new String(new Base32().encode(data)).replaceAll("=", "");
case Base32Hex:
return b.prefix + new String(new Base32(true).encode(data)).toLowerCase().replaceAll("=", "");
case Base32HexPad:
return b.prefix + new String(new Base32(true).encode(data)).toLowerCase();
case Base32HexPadUpper:
return b.prefix + new String(new Base32(true).encode(data));
case Base32HexUpper:
return b.prefix + new String(new Base32(true).encode(data)).replaceAll("=", "");
case Base36:
return b.prefix + Base36.encode(data);
case Base36Upper:
return b.prefix + Base36.encode(data).toUpperCase();
case Base64:
return b.prefix + Base64.encodeBase64String(data).replaceAll("=", "");
case Base64Url:
return b.prefix + Base64.encodeBase64URLSafeString(data).replaceAll("=", "");
case Base64Pad:
return b.prefix + Base64.encodeBase64String(data);
case Base64UrlPad:
return b.prefix + Base64.encodeBase64String(data).replaceAll("\\+", "-").replaceAll("/", "_");
default:
throw new IllegalStateException("Unsupported base encoding: " + b.name());
}
@@ -79,18 +103,28 @@ public static byte[] decode(String data) {
return Base58.decode(rest);
case Base16:
return Base16.decode(rest);
case Base16Upper:
return Base16.decode(rest.toLowerCase());
case Base32:
case Base32Pad:
return new Base32().decode(rest);
case Base32PadUpper:
case Base32Upper:
return new Base32().decode(rest.toLowerCase());
case Base32Hex:
case Base32HexPad:
return new Base32(true).decode(rest);
case Base32HexPadUpper:
case Base32HexUpper:
return new Base32(true).decode(rest.toLowerCase());
case Base36:
return Base36.decode(rest);
case Base64Pad:
case Base36Upper:
return Base36.decode(rest.toLowerCase());
case Base64:
case Base64Url:
case Base64Pad:
case Base64UrlPad:
return Base64.decodeBase64(rest);
default:
throw new IllegalStateException("Unsupported base encoding: " + b.name());
8 changes: 8 additions & 0 deletions src/test/java/io/ipfs/multibase/MultibaseTest.java
Original file line number Diff line number Diff line change
@@ -40,19 +40,27 @@ public static Collection<Object[]> data() {
{Multibase.Base.Base16, hexToBytes(""), "f"},
{Multibase.Base.Base16, hexToBytes("01"), "f01"},
{Multibase.Base.Base16, hexToBytes("0123456789ABCDEF"), "f0123456789abcdef"},
{Multibase.Base.Base16Upper, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "F446563656E7472616C697A652065766572797468696E67212121"},
{Multibase.Base.Base32, hexToBytes("4D756C74696261736520697320617765736F6D6521205C6F2F"), "bjv2wy5djmjqxgzjanfzsaylxmvzw63lfeeqfy3zp"},
{Multibase.Base.Base32, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "birswgzloorzgc3djpjssazlwmvzhs5dinfxgoijbee"},
{Multibase.Base.Base32, hexToBytes("01711220bb6ef01d25459cc803d0864cde4227cd2b779965eb1df34abeaec22c20fa42ea"), "bafyreif3n3yb2jkftteahuegjtpeej6nfn3zszpldxzuvpvoyiwcb6sc5i"},
{Multibase.Base.Base32, hexToBytes("0000000000"), "baaaaaaaa"},
{Multibase.Base.Base32, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "birswgzloorzgc3djpjssazlwmvzhs5dinfxgoijbee"},
{Multibase.Base.Base32Pad, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "cirswgzloorzgc3djpjssazlwmvzhs5dinfxgoijbee======"},
{Multibase.Base.Base32PadUpper, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "CIRSWGZLOORZGC3DJPJSSAZLWMVZHS5DINFXGOIJBEE======"},
{Multibase.Base.Base32Upper, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "BIRSWGZLOORZGC3DJPJSSAZLWMVZHS5DINFXGOIJBEE"},
{Multibase.Base.Base32Hex, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "v8him6pbeehp62r39f9ii0pbmclp7it38d5n6e89144"},
{Multibase.Base.Base32HexPad, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "t8him6pbeehp62r39f9ii0pbmclp7it38d5n6e89144======"},
{Multibase.Base.Base32HexPadUpper, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "T8HIM6PBEEHP62R39F9II0PBMCLP7IT38D5N6E89144======"},
{Multibase.Base.Base32HexUpper, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "V8HIM6PBEEHP62R39F9II0PBMCLP7IT38D5N6E89144"},
{Multibase.Base.Base36, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "km552ng4dabi4neu1oo8l4i5mndwmpc3mkukwtxy9"},
{Multibase.Base.Base36, hexToBytes("00446563656e7472616c697a652065766572797468696e67212121"), "k0m552ng4dabi4neu1oo8l4i5mndwmpc3mkukwtxy9"},
{Multibase.Base.Base36Upper, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "KM552NG4DABI4NEU1OO8L4I5MNDWMPC3MKUKWTXY9"},
{Multibase.Base.Base58BTC, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "z36UQrhJq9fNDS7DiAHM9YXqDHMPfr4EMArvt"},
{Multibase.Base.Base64, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "mRGVjZW50cmFsaXplIGV2ZXJ5dGhpbmchISE"},
{Multibase.Base.Base64Url, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "uRGVjZW50cmFsaXplIGV2ZXJ5dGhpbmchISE"},
{Multibase.Base.Base64Pad, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "MRGVjZW50cmFsaXplIGV2ZXJ5dGhpbmchISE="},
{Multibase.Base.Base64UrlPad, hexToBytes("446563656e7472616c697a652065766572797468696e67212121"), "URGVjZW50cmFsaXplIGV2ZXJ5dGhpbmchISE="},
});
}

0 comments on commit 6d3a2b1

Please sign in to comment.