/** * 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; }
public byte[] toByteArray() { PublicKeyPair keys = new PublicKeyPair(publicEncryptionKey, publicSigningKey); return cryptoImpl.toByteArray(keys); }
@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; }
@Override public PublicKeyPair createPublicKeyPair(byte[] bytes) throws InvalidKeySpecException { PublicKeyPair keyPair = new PublicKeyPair(); byte[] encryptionKeyBytes = Arrays.copyOf(bytes, PUBLIC_ENCRYPTION_KEY_BYTES); keyPair.encryptionKey = new NtruEncrypt1087PublicKey(encryptionKeyBytes); byte[] signingKeyBytes = Arrays.copyOfRange(bytes, PUBLIC_ENCRYPTION_KEY_BYTES, PUBLIC_ENCRYPTION_KEY_BYTES+PUBLIC_SIGNING_KEY_BYTES); keyPair.signingKey = new Gmss512PublicKey(signingKeyBytes); return keyPair; }
@Override public KeyPair generateEncryptionKeyPair() throws KeyException { I2PSession i2pSession = createI2PSession(); net.i2p.data.PublicKey i2pPublicKey = i2pSession.getMyDestination().getPublicKey(); net.i2p.data.PrivateKey i2pPrivateKey = i2pSession.getDecryptionKey(); PublicKey publicKey = new ElGamalPublicKey(i2pPublicKey); PrivateKey privateKey = new ElGamalPrivateKey(i2pPrivateKey); return new KeyPair(publicKey, privateKey); }
@Override public KeyPair generateSigningKeyPair() throws KeyException { I2PSession i2pSession = createI2PSession(); net.i2p.data.SigningPublicKey i2pPublicKey = i2pSession.getMyDestination().getSigningPublicKey(); net.i2p.data.SigningPrivateKey i2pPrivateKey = i2pSession.getPrivateKey(); PublicKey publicKey = new DSAPublicKey(i2pPublicKey); PrivateKey privateKey = new DSAPrivateKey(i2pPrivateKey); return new KeyPair(publicKey, privateKey); }
@Override public PublicKeyPair createPublicKeyPair(String base64) throws GeneralSecurityException { Destination i2pDestination; base64 += "AAAA"; // add a null certificate try { i2pDestination = new Destination(base64); } catch (DataFormatException e) { throw new KeyException("Can't create I2P destination from Base64: <" + base64 + ">", e); } PublicKeyPair keyPair = new PublicKeyPair(); keyPair.encryptionKey = new ElGamalPublicKey(i2pDestination.getPublicKey()); keyPair.signingKey = new DSAPublicKey(i2pDestination.getSigningPublicKey()); return keyPair; }
/** Only accepts <code>ElGamalPublicKey</code>s. */ @Override public byte[] encrypt(byte[] data, PublicKey key) throws GeneralSecurityException { ElGamalPublicKey elGamalKey = castToElGamal(key); net.i2p.data.PublicKey i2pPublicKey = elGamalKey.getI2PKey(); return Util.encrypt(data, i2pPublicKey); }
@Override public PublicKeyPair createPublicKeyPair(byte[] bytes) throws GeneralSecurityException { PublicKeyPair keyPair = new PublicKeyPair(); ECPublicKeySpec encryptionKeySpec = createPublicKeySpec(Arrays.copyOf(bytes, keyLengthBytes)); keyPair.encryptionKey = ecdhKeyFactory.generatePublic(encryptionKeySpec); ECPublicKeySpec signingKeySpec = createPublicKeySpec(Arrays.copyOfRange(bytes, keyLengthBytes, 2*keyLengthBytes)); keyPair.signingKey = ecdsaKeyFactory.generatePublic(signingKeySpec); return keyPair; }
@Override protected byte[] toByteArray(PublicKey key) { ECPublicKey ecKey = castToEcKey(key); return ECUtils.encodePoint(ecKey.getParams(), ecKey.getW(), true); }
/** Only accepts <code>DSAPrivateKey</code>s. */ @Override public byte[] sign(byte[] data, PrivateKey privateKey, KeyUpdateHandler keyupdateHandler) throws GeneralSecurityException { DSAPrivateKey dsaKey = castToDSA(privateKey); Signature signature = DSAEngine.getInstance().sign(data, dsaKey.getI2PKey()); return signature.toByteArray(); }
public synchronized static List<CryptoImplementation> getInstances() { if (instances == null) init(); return instances; }
@Override public int getBase64CompleteKeySetLength() { return getBase64PublicKeyPairLength() + BASE64_PRIVATE_KEY_PAIR_LENGTH; }
protected int getBase64PrivateKeyPairLength() { return getBase64PublicKeyPairLength(); }
public static CryptoImplementation getCryptoImplementation(int id) { return CryptoFactory.getInstance(id); }
public List<CryptoImplementation> getCryptoImplementations() { return CryptoFactory.getInstances(); }
@Override public String encryptionKeyToBase64(PublicKey key) throws GeneralSecurityException { return toBase64(key); }