From 3379432e5f5ffe4a2f9474bd16df22989293177b Mon Sep 17 00:00:00 2001 From: zzz Date: Fri, 27 Jun 2014 21:05:54 +0000 Subject: [PATCH] SAM: Cherrypick from patch in ticket #1318: - Check for extra bytes in private key string - checkPrivateDestination() returns boolean instead of throws --- apps/sam/java/src/net/i2p/sam/SAMUtils.java | 18 +++++++----------- .../sam/java/src/net/i2p/sam/SAMv3Handler.java | 7 ++----- 2 files changed, 9 insertions(+), 16 deletions(-) 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) {