diff --git a/router/java/src/net/i2p/router/CommandLine.java b/router/java/src/net/i2p/router/CommandLine.java index f4a6c15088..ba415832ce 100644 --- a/router/java/src/net/i2p/router/CommandLine.java +++ b/router/java/src/net/i2p/router/CommandLine.java @@ -20,6 +20,7 @@ public class CommandLine extends net.i2p.util.CommandLine { "net.i2p.router.Router", "net.i2p.router.RouterLaunch", "net.i2p.router.RouterVersion", + "net.i2p.router.crypto.FamilyKeyCrypto", "net.i2p.router.naming.BlockfileNamingService", "net.i2p.router.peermanager.ProfileOrganizer", "net.i2p.router.tasks.CryptoChecker", diff --git a/router/java/src/net/i2p/router/crypto/FamilyKeyCrypto.java b/router/java/src/net/i2p/router/crypto/FamilyKeyCrypto.java index 8cc288fa81..8ab5835943 100644 --- a/router/java/src/net/i2p/router/crypto/FamilyKeyCrypto.java +++ b/router/java/src/net/i2p/router/crypto/FamilyKeyCrypto.java @@ -486,4 +486,35 @@ public class FamilyKeyCrypto { throw new GeneralSecurityException("Error loading family key " + _fname, ioe); } } + + /** @since 0.9.36 */ + public static void main(String[] args) { + if (args.length != 2) { + System.err.println("Usage: FamilyKeyCrypto keystore.ks familyname"); + System.exit(1); + } + File ks = new File(args[0]); + if (ks.exists()) { + System.err.println("Keystore already exists: " + ks); + System.exit(1); + } + String fname = args[1]; + String cname = fname + CN_SUFFIX; + String keyPassword = KeyStoreUtil.randomString(); + try { + KeyStoreUtil.createKeysAndCRL(ks, KeyStoreUtil.DEFAULT_KEYSTORE_PASSWORD, fname, cname, "family", + DEFAULT_KEY_VALID_DAYS, DEFAULT_KEY_ALGORITHM, + DEFAULT_KEY_SIZE, keyPassword); + System.out.println("Family keys generated and saved in " + ks + '\n' + + "Copy to " + KS_DIR + '/' + KEYSTORE_PREFIX + fname + KEYSTORE_SUFFIX + " in the i2p configuration directory\n" + + "Family key configuration for router.config:\n" + + PROP_FAMILY_NAME + '=' + fname + '\n' + + PROP_KEYSTORE_PASSWORD + '=' + KeyStoreUtil.DEFAULT_KEYSTORE_PASSWORD + '\n' + + PROP_KEY_PASSWORD + '=' + keyPassword); + } catch (Exception e) { + System.err.println("Failed"); + e.printStackTrace(); + System.exit(1); + } + } }