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
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.