@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; }
@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); }
/** 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(); }