@Override public PrivateKeyPair createPrivateKeyPair(byte[] bytes) throws GeneralSecurityException { PrivateKeyPair keyPair = new PrivateKeyPair(); ECPrivateKeySpec encryptionKeySpec = createPrivateKeySpec(Arrays.copyOf(bytes, keyLengthBytes)); keyPair.encryptionKey = ecdhKeyFactory.generatePrivate(encryptionKeySpec); ECPrivateKeySpec signingKeySpec = createPrivateKeySpec(Arrays.copyOfRange(bytes, keyLengthBytes, 2*keyLengthBytes)); keyPair.signingKey = ecdsaKeyFactory.generatePrivate(signingKeySpec); return keyPair; }
@Override public PrivateKeyPair createPrivateKeyPair(byte[] bytes) throws InvalidKeySpecException { PrivateKeyPair keyPair = new PrivateKeyPair(); byte[] encryptionKeyBytes = Arrays.copyOf(bytes, PRIVATE_ENCRYPTION_KEY_BYTES); keyPair.encryptionKey = new NtruEncrypt1087PrivateKey(encryptionKeyBytes); byte[] signingKeyBytes = Arrays.copyOfRange(bytes, PRIVATE_ENCRYPTION_KEY_BYTES, bytes.length); keyPair.signingKey = new Gmss512PrivateKey(signingKeyBytes); return keyPair; }
/** * Returns the two key pairs (public + private) as one Base64-encoded string. * @throws GeneralSecurityException */ public String getFullKey() throws GeneralSecurityException { PublicKeyPair publicKeys = new PublicKeyPair(publicEncryptionKey, publicSigningKey); PrivateKeyPair privateKeys = new PrivateKeyPair(privateEncryptionKey, privateSigningKey); String pubKeys = cryptoImpl.toBase64(publicKeys); String privKeys = cryptoImpl.toBase64(privateKeys); return pubKeys + privKeys; }
@Override public PrivateKeyPair createPrivateKeyPair(String base64) throws GeneralSecurityException { // convert to byte[] first because the two keys end at byte boundaries, but not at base64 char boundaries byte[] bytes = Base64.decode(base64); byte[] encryptionKeyBytes = Arrays.copyOfRange(bytes, 0, net.i2p.data.PrivateKey.KEYSIZE_BYTES); net.i2p.data.PrivateKey i2pEncryptionKey = new net.i2p.data.PrivateKey(encryptionKeyBytes); int signingKeyStart = net.i2p.data.PrivateKey.KEYSIZE_BYTES; int signingKeyEnd = signingKeyStart + net.i2p.data.SigningPrivateKey.KEYSIZE_BYTES; byte[] signingKeyBytes = Arrays.copyOfRange(bytes, signingKeyStart, signingKeyEnd); net.i2p.data.SigningPrivateKey i2pSigningKey = new net.i2p.data.SigningPrivateKey(signingKeyBytes); PrivateKeyPair keyPair = new PrivateKeyPair(); keyPair.encryptionKey = new ElGamalPrivateKey(i2pEncryptionKey); keyPair.signingKey = new DSAPrivateKey(i2pSigningKey); return keyPair; }