diff --git a/README.md b/README.md index 805ef2c..d2724b5 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ It contains both the classes to represent a UR, and a UR encoder and decoder to Hummingbird is hosted in Maven Central and can be added as a dependency with the following: ``` -implementation('com.sparrowwallet:hummingbird:1.5.1') +implementation('com.sparrowwallet:hummingbird:1.5.2') ``` ## Usage diff --git a/build.gradle b/build.gradle index f850624..772365d 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ apply plugin: 'com.bmuschko.nexus' archivesBaseName = 'hummingbird' group 'com.sparrowwallet' -version '1.5.1' +version '1.5.2' repositories { mavenCentral() diff --git a/src/main/java/com/sparrowwallet/hummingbird/LegacyURDecoder.java b/src/main/java/com/sparrowwallet/hummingbird/LegacyURDecoder.java index 0263386..5221e81 100644 --- a/src/main/java/com/sparrowwallet/hummingbird/LegacyURDecoder.java +++ b/src/main/java/com/sparrowwallet/hummingbird/LegacyURDecoder.java @@ -66,20 +66,20 @@ public class LegacyURDecoder { switch(components.length) { case 2 -> { - return new UR(components[0], BC32.decode(components[1])); + return new UR(components[0].substring(UR.UR_PREFIX.length() + 1), BC32.decode(components[1])); } case 3 -> { String digest = components[1]; String data = components[2]; checkDigest(data, digest); - return new UR(components[0], BC32.decode(data)); + return new UR(components[0].substring(UR.UR_PREFIX.length() + 1), BC32.decode(data)); } case 4 -> { checkAndGetSequence(components[1]); String digest = components[2]; String data = components[3]; checkDigest(digest, fragment); - return new UR(components[0], BC32.decode(data)); + return new UR(components[0].substring(UR.UR_PREFIX.length() + 1), BC32.decode(data)); } default -> throw new IllegalArgumentException("Invalid number of fragments: expected 2 / 3 / 4 but got " + components.length); } @@ -118,7 +118,11 @@ public class LegacyURDecoder { String payload = Arrays.stream(parts).reduce((cur, acc) -> cur+acc).orElse(""); checkDigest(payload, digest); - return new UR(type, BC32.decode(payload)); + if(type == null) { + throw new IllegalStateException("Type is null"); + } + + return new UR(type.substring(UR.UR_PREFIX.length() + 1), BC32.decode(payload)); } private static void checkDigest(String payload, String digest) { diff --git a/src/test/java/com/sparrowwallet/hummingbird/URTest.java b/src/test/java/com/sparrowwallet/hummingbird/URTest.java index 56ae0e4..345077b 100644 --- a/src/test/java/com/sparrowwallet/hummingbird/URTest.java +++ b/src/test/java/com/sparrowwallet/hummingbird/URTest.java @@ -3,6 +3,7 @@ package com.sparrowwallet.hummingbird; import co.nstant.in.cbor.CborBuilder; import co.nstant.in.cbor.CborEncoder; import com.sparrowwallet.hummingbird.fountain.RandomXoshiro256StarStar; +import com.sparrowwallet.hummingbird.registry.RegistryType; import org.junit.Assert; import org.junit.Test; @@ -157,6 +158,7 @@ public class URTest { }; UR ur = LegacyURDecoder.decode(fragments); + Assert.assertEquals(RegistryType.BYTES, ur.getRegistryType()); Assert.assertEquals(TestUtils.bytesToHex(ur.toBytes()), "7e4a61385e2550981b4b5633ab178eb077a30505fbd53f107ec1081e7cf0ca3c0dc0bfea5b8bfb5e6ffc91afd104c3aa756210b5dbc5118fd12c87ee04269815ba6a9968a0d0d3b7a9b631382a36bc70ab626d5670b4b48ff843f4d9a15631aa67c7aaf0ac6ce7e3bff03b2c9643e3375e47493c4e0f8635329d66fdec41b10ce74dcbf25fc15d829e7830c325643a98561f441b40a02e8353493e6afc16192fe99d90d8ca65539af77ddeaccc8943a37563a9ba83675bd5d4da7c60c9a172cf6940cbf0ec8fe04175a629932e3512c5d2aaea3cca3246f40a21ffdc33c3987dc7b880351230eb3759fe3c7dc7b2d3a20a95996ff0b7a0dba834f96beb64c14e3426fb051a936ba41569ab99c0066a6d9c0777a49e49e6cbad24d722a4c7da112432679264b9adc0a8cff9dd1fe0ee9ee2747f6a68537c389a7303a1af23c534ee6392bc17b04cf0fbce7689e66b673a440c04a9454005b0c76664639113458eb7d0902eff04d11138ce2a8ee16a9cd7c8926514efa9bd83ae7a4c139835f0fe0f68c628e0645c8524c30dfc314e825a7aa13224d98e2f7a9d12183a999bb1f28549c99a9072d99c05c24e0c84848c4fc147a094ab7b69e9cbea86952fccf15500fbb234ffe6ee6e6ded515c8016cb017ba36fb931ef276cec4ed22c1aed1495d2df3b3ce66c03f5b9ffa8434bf0e8fb149de94e050b3da178df1f76c00a366cb2801fabdf1a1e90cd3cd45ecb7a930a40b151455f76b726d552f31c21324992da257ff8bde2923dfd5d0d6b87233fae215ffacbecd96249099e7e3427d533db56cdb09c7475b4ce3314e33f43953a7370866cc11d85f00b71b15510b46c4b4fa490c660ddfeda0ceb1b8265995f7071c155ad1b57465fdc0fa81a73f9f19ac4872029d5844c1838f732e803043673e26cbc5b51297a324ff00a2d2d4222bad556b93d27c8e376e3ff8f9d37b3073410708ebb3d4dd7473d27212310b71a3c33a5c8f87f44824640e7f8970f4eda9364195c87a91172b8f085f1773641dde1ce21938746234055bc971ce2325f814e3eec60f781dd4faf52afd5be4a6b38656f7e9739f724cb7ccd4e4d01e802add3dc7b83191f894b3ee0ed752ee514d5ec55"); Arrays.stream(fragments).forEach(part -> Assert.assertTrue(LegacyURDecoder.isLegacyURFragment(part))); } @@ -192,6 +194,7 @@ public class URTest { "ur:bytes/24ly5cfctcj4pxqmfdtr82ch36c80gc9qhasmxdxs3" }; UR ur = LegacyURDecoder.decode(fragments); + Assert.assertEquals(RegistryType.BYTES, ur.getRegistryType()); Assert.assertEquals(TestUtils.bytesToHex(ur.toBytes()), "7e4a61385e2550981b4b5633ab178eb077a30505fb"); Assert.assertTrue(LegacyURDecoder.isLegacyURFragment(fragments[0])); }