diff --git a/apps/sam/java/src/net/i2p/sam/SAMUtils.java b/apps/sam/java/src/net/i2p/sam/SAMUtils.java index f80948232..44beee5b0 100644 --- a/apps/sam/java/src/net/i2p/sam/SAMUtils.java +++ b/apps/sam/java/src/net/i2p/sam/SAMUtils.java @@ -77,31 +77,27 @@ class SAMUtils { return false; } } - - public static class InvalidDestinationException extends Exception { - private static final long serialVersionUID = 0x1; - } - /** * Check whether a base64-encoded {dest,privkey,signingprivkey} is valid * * @param dest The base64-encoded destination and keys to be checked (same format as PrivateKeyFile) - * - * @throws InvalidDestination if invalid + * @return true if valid */ - public static void checkPrivateDestination(String dest) throws InvalidDestinationException { + public static boolean checkPrivateDestination(String dest) { ByteArrayInputStream destKeyStream = new ByteArrayInputStream(Base64.decode(dest)); - try { Destination d = new Destination(); d.readBytes(destKeyStream); new PrivateKey().readBytes(destKeyStream); SigningPrivateKey spk = new SigningPrivateKey(d.getSigningPublicKey().getType()); spk.readBytes(destKeyStream); - } catch (Exception e) { - throw new InvalidDestinationException(); + } catch (DataFormatException e) { + return false; + } catch (IOException e) { + return false; } + return destKeyStream.available() == 0; } diff --git a/apps/sam/java/src/net/i2p/sam/SAMv3Handler.java b/apps/sam/java/src/net/i2p/sam/SAMv3Handler.java index 1fff83c2e..00d95594a 100644 --- a/apps/sam/java/src/net/i2p/sam/SAMv3Handler.java +++ b/apps/sam/java/src/net/i2p/sam/SAMv3Handler.java @@ -500,11 +500,8 @@ class SAMv3Handler extends SAMv1Handler _log.debug("Custom destination specified [" + dest + "]"); } - try { - SAMUtils.checkPrivateDestination(dest); - } catch ( SAMUtils.InvalidDestinationException e ) { - return writeString("SESSION STATUS RESULT=INVALID_KEY\n"); - } + if (!SAMUtils.checkPrivateDestination(dest)) + return writeString("SESSION STATUS RESULT=INVALID_KEY\n"); nick = props.getProperty("ID"); if (nick == null) {