diff --git a/src/main/java/io/ipfs/multihash/Multihash.java b/src/main/java/io/ipfs/multihash/Multihash.java index 2fb6776..df31766 100644 --- a/src/main/java/io/ipfs/multihash/Multihash.java +++ b/src/main/java/io/ipfs/multihash/Multihash.java @@ -20,8 +20,8 @@ public enum Type { sha3_224(0x17, 24), sha3_256(0x16, 32), sha3_512(0x14, 64), - shake_128(0x18, 32), - shake_256(0x19, 64), + shake_128(0x18, -1), + shake_256(0x19, -1), keccak_224(0x1a, 24), keccak_256(0x1b, 32), keccak_384(0x1c, 48), @@ -158,7 +158,7 @@ public Multihash(Type type, byte[] hash) { throw new IllegalStateException("Unsupported hash size: "+hash.length); if (hash.length > MAX_IDENTITY_HASH_LENGTH) throw new IllegalStateException("Unsupported hash size: "+hash.length); - if (hash.length != type.length && type != Type.id) + if (hash.length != type.length && type.length != -1) throw new IllegalStateException("Incorrect hash length: " + hash.length + " != "+type.length); this.type = type; this.hash = hash; diff --git a/src/test/java/io/ipfs/multihash/MultihashTest.java b/src/test/java/io/ipfs/multihash/MultihashTest.java index b4050da..c6d31b9 100755 --- a/src/test/java/io/ipfs/multihash/MultihashTest.java +++ b/src/test/java/io/ipfs/multihash/MultihashTest.java @@ -39,6 +39,19 @@ void decodeTest() throws IOException { } } + @Test + void variableLengthMultihashTest() throws Exception { + Object[][] examples = new Object[][]{ + {Multihash.Type.shake_128, "18108eb4b6a932f280335ee1a279f8c208a3"}, + {Multihash.Type.shake_128, "18208eb4b6a932f280335ee1a279f8c208a349e7bc65daf831d3021c213825292463"}, + {Multihash.Type.shake_128, "18308eb4b6a932f280335ee1a279f8c208a349e7bc65daf831d3021c213825292463c59e22d0fe2c767cd7cacc4df42dd5f6"}, + }; + for(Object[] ex: examples) { + Multihash m = Multihash.fromHex((String)ex[1]); + assertEquals(ex[0], m.getType()); + } + } + @Test void multihashTest() { Object[][] examples = new Object[][]{