kp = new KeyPair(publicKey, new EdDSAPrivateKey(new EdDSAPrivateKeySpec(privKey, EdDSANamedCurveTable.getByName("Ed25519")))); break; case RSA:
/** * As of 0.9.25, supports PKCS8EncodedKeySpec */ protected PrivateKey engineGeneratePrivate(KeySpec keySpec) throws InvalidKeySpecException { if (keySpec instanceof EdDSAPrivateKeySpec) { return new EdDSAPrivateKey((EdDSAPrivateKeySpec) keySpec); } if (keySpec instanceof PKCS8EncodedKeySpec) { return new EdDSAPrivateKey((PKCS8EncodedKeySpec) keySpec); } throw new InvalidKeySpecException("key spec not recognised: " + keySpec.getClass()); }
public KeyPair generateKeyPair() { if (!initialized) initialize(DEFAULT_KEYSIZE, RandomSource.getInstance()); byte[] seed = new byte[edParams.getCurve().getField().getb()/8]; random.nextBytes(seed); EdDSAPrivateKeySpec privKey = new EdDSAPrivateKeySpec(seed, edParams); EdDSAPublicKeySpec pubKey = new EdDSAPublicKeySpec(privKey.getA(), edParams); return new KeyPair(new EdDSAPublicKey(pubKey), new EdDSAPrivateKey(privKey)); }
@Test public void testSignResetsForReuse() throws Exception { EdDSAParameterSpec spec = EdDSANamedCurveTable.getByName(EdDSANamedCurveTable.ED_25519); Signature sgr = new EdDSAEngine(MessageDigest.getInstance(spec.getHashAlgorithm())); EdDSAPrivateKeySpec privKey = new EdDSAPrivateKeySpec(TEST_SEED, spec); PrivateKey sKey = new EdDSAPrivateKey(privKey); sgr.initSign(sKey); // First usage sgr.update(new byte[] {0}); sgr.sign(); // Second usage sgr.update(TEST_MSG); assertThat("Second sign failed", sgr.sign(), is(equalTo(TEST_MSG_SIG))); }
/** * @since 0.9.15 */ private static EdDSAPrivateKey cvtToJavaEdDSAKey(SigningPrivateKey pk) throws GeneralSecurityException { try { return new EdDSAPrivateKey(new EdDSAPrivateKeySpec( pk.getData(), (EdDSAParameterSpec) pk.getType().getParams())); } catch (IllegalArgumentException iae) { throw new InvalidKeyException(iae); } }
@Test public void testSign() throws Exception { EdDSAParameterSpec spec = EdDSANamedCurveTable.getByName(EdDSANamedCurveTable.ED_25519); //Signature sgr = Signature.getInstance("EdDSA", "I2P"); Signature sgr = new EdDSAEngine(MessageDigest.getInstance(spec.getHashAlgorithm())); for (Ed25519TestVectors.TestTuple testCase : Ed25519TestVectors.testCases) { EdDSAPrivateKeySpec privKey = new EdDSAPrivateKeySpec(testCase.seed, spec); PrivateKey sKey = new EdDSAPrivateKey(privKey); sgr.initSign(sKey); sgr.update(testCase.message); assertThat("Test case " + testCase.caseNum + " failed", sgr.sign(), is(equalTo(testCase.sig))); } }
@Test public void testSignOneShotMode() throws Exception { EdDSAParameterSpec spec = EdDSANamedCurveTable.getByName(EdDSANamedCurveTable.ED_25519); Signature sgr = new EdDSAEngine(MessageDigest.getInstance(spec.getHashAlgorithm())); EdDSAPrivateKeySpec privKey = new EdDSAPrivateKeySpec(TEST_SEED, spec); PrivateKey sKey = new EdDSAPrivateKey(privKey); sgr.initSign(sKey); sgr.setParameter(EdDSAEngine.ONE_SHOT_MODE); sgr.update(TEST_MSG); assertThat("One-shot mode sign failed", sgr.sign(), is(equalTo(TEST_MSG_SIG))); }
@Test public void testSignOneShotModeMultipleUpdates() throws Exception { EdDSAParameterSpec spec = EdDSANamedCurveTable.getByName(EdDSANamedCurveTable.ED_25519); Signature sgr = new EdDSAEngine(MessageDigest.getInstance(spec.getHashAlgorithm())); EdDSAPrivateKeySpec privKey = new EdDSAPrivateKeySpec(TEST_SEED, spec); PrivateKey sKey = new EdDSAPrivateKey(privKey); sgr.initSign(sKey); sgr.setParameter(EdDSAEngine.ONE_SHOT_MODE); sgr.update(TEST_MSG); exception.expect(SignatureException.class); exception.expectMessage("update() already called"); sgr.update(TEST_MSG); }
@Test public void testSignOneShot() throws Exception { EdDSAParameterSpec spec = EdDSANamedCurveTable.getByName(EdDSANamedCurveTable.ED_25519); EdDSAPrivateKeySpec privKey = new EdDSAPrivateKeySpec(TEST_SEED, spec); EdDSAEngine sgr = new EdDSAEngine(MessageDigest.getInstance(spec.getHashAlgorithm())); PrivateKey sKey = new EdDSAPrivateKey(privKey); sgr.initSign(sKey); assertThat("signOneShot() failed", sgr.signOneShot(TEST_MSG), is(equalTo(TEST_MSG_SIG))); }
protected PrivateKey engineGeneratePrivate(KeySpec keySpec) throws InvalidKeySpecException { if (keySpec instanceof EdDSAPrivateKeySpec) { return new EdDSAPrivateKey((EdDSAPrivateKeySpec) keySpec); } if (keySpec instanceof PKCS8EncodedKeySpec) { return new EdDSAPrivateKey((PKCS8EncodedKeySpec) keySpec); } throw new InvalidKeySpecException("key spec not recognised: " + keySpec.getClass()); }
/** * Create a new instance of AirPlayAuth, to be used to pair/authenticate with an AppleTV for AirPlay * * @param address The address of the AppleTV that you retrieve via mdns, eg. 192.168.1.142:7000 * @param authToken An AuthToken which must be generated via {@code AirPlayAuth.generateNewAuthToken()}. * @throws InvalidKeySpecException */ public AirPlayAuth(InetSocketAddress address, String authToken) { try { this.address = address; String[] authTokenSplit = authToken.split("@"); this.clientId = authTokenSplit[0]; PKCS8EncodedKeySpec encoded = new PKCS8EncodedKeySpec(net.i2p.crypto.eddsa.Utils.hexToBytes(authTokenSplit[1])); this.authKey = new EdDSAPrivateKey(encoded); } catch (InvalidKeySpecException e) { throw new RuntimeException(e); } }
public SshEd25519PrivateKey(byte[] sk, byte[] pk) { this.sk = Arrays.copyOfRange(sk, 0, 32); EdDSAPrivateKeySpec spec = new EdDSAPrivateKeySpec(this.sk, EdDSANamedCurveTable.getByName("Ed25519")); key = new EdDSAPrivateKey(spec); }
@Override public byte[] signMessage(byte[] message) { try { EdDSAEngine sgr = new EdDSAEngine(MessageDigest.getInstance("SHA-512")); PrivateKey sKey = new EdDSAPrivateKey(keySpec); sgr.initSign(sKey); sgr.update(message); return sgr.sign(); } catch (Exception e) { throw new RuntimeException(e); } }
/** * Creates an ED25519 key pair with a specified private key * * @param privateKey * the private key in "PKCS#8" format * @throws InvalidKeySpecException */ public Key(byte[] privateKey) throws InvalidKeySpecException { this.sk = new EdDSAPrivateKey(new PKCS8EncodedKeySpec(privateKey)); this.pk = new EdDSAPublicKey(new EdDSAPublicKeySpec(sk.getA(), sk.getParams())); }
/** * @return A Java security keypair that represents this NKey in Java security * form. * * @throws GeneralSecurityException if there is an encryption problem * @throws IOException if there is a problem encoding or decoding */ public KeyPair getKeyPair() throws GeneralSecurityException, IOException { if (privateKeyAsSeed == null) { throw new IllegalStateException("Public-only NKey"); } DecodedSeed decoded = decodeSeed(privateKeyAsSeed); byte[] seedBytes = new byte[ED25519_SEED_SIZE]; byte[] pubBytes = new byte[ED25519_PUBLIC_KEYSIZE]; System.arraycopy(decoded.bytes, 0, seedBytes, 0, seedBytes.length); System.arraycopy(decoded.bytes, seedBytes.length, pubBytes, 0, pubBytes.length); EdDSAPrivateKeySpec privKeySpec = new EdDSAPrivateKeySpec(seedBytes, NKey.ed25519); EdDSAPrivateKey privKey = new EdDSAPrivateKey(privKeySpec); EdDSAPublicKeySpec pubKeySpec = new EdDSAPublicKeySpec(pubBytes, NKey.ed25519); EdDSAPublicKey pubKey = new EdDSAPublicKey(pubKeySpec); return new KeyPair(pubKey, privKey); }
public KeyPair generateKeyPair() { if (!initialized) initialize(DEFAULT_KEYSIZE, new SecureRandom()); byte[] seed = new byte[edParams.getCurve().getField().getb()/8]; random.nextBytes(seed); EdDSAPrivateKeySpec privKey = new EdDSAPrivateKeySpec(seed, edParams); EdDSAPublicKeySpec pubKey = new EdDSAPublicKeySpec(privKey.getA(), edParams); return new KeyPair(new EdDSAPublicKey(pubKey), new EdDSAPrivateKey(privKey)); }
protected byte[] signWithoutClamp(byte[] message, byte[] privateKey, byte[] publicKey) { try { EdDSAPrivateKeySpec edDSAPrivateKeySpec = new EdDSAPrivateKeySpec(privateKey, EdDSANamedCurveTable.getByName("ed25519-sha-512")); mEdDSAEngine.initSign(new EdDSAPrivateKey(edDSAPrivateKeySpec)); mEdDSAEngine.update(message); return mEdDSAEngine.sign(); } catch (InvalidKeyException e) { throw new IllegalArgumentException(e); } catch (SignatureException e) { throw new IllegalArgumentException(e); } }
private static NKey createPair(Type type, byte[] seed) throws IOException, NoSuchProviderException, NoSuchAlgorithmException { EdDSAPrivateKeySpec privKeySpec = new EdDSAPrivateKeySpec(seed, NKey.ed25519); EdDSAPrivateKey privKey = new EdDSAPrivateKey(privKeySpec); EdDSAPublicKeySpec pubKeySpec = new EdDSAPublicKeySpec(privKey.getA(), NKey.ed25519); EdDSAPublicKey pubKey = new EdDSAPublicKey(pubKeySpec); byte[] pubBytes = pubKey.getAbyte(); byte[] bytes = new byte[pubBytes.length + seed.length]; System.arraycopy(seed, 0, bytes, 0, seed.length); System.arraycopy(pubBytes, 0, bytes, seed.length, pubBytes.length); char[] encoded = encodeSeed(type, bytes); return new NKey(type, null, encoded); }
private static NKey createPair(Type type, byte[] seed) throws IOException, NoSuchProviderException, NoSuchAlgorithmException { EdDSAPrivateKeySpec privKeySpec = new EdDSAPrivateKeySpec(seed, NKey.ed25519); EdDSAPrivateKey privKey = new EdDSAPrivateKey(privKeySpec); EdDSAPublicKeySpec pubKeySpec = new EdDSAPublicKeySpec(privKey.getA(), NKey.ed25519); EdDSAPublicKey pubKey = new EdDSAPublicKey(pubKeySpec); byte[] pubBytes = pubKey.getAbyte(); byte[] bytes = new byte[pubBytes.length + seed.length]; System.arraycopy(seed, 0, bytes, 0, seed.length); System.arraycopy(pubBytes, 0, bytes, seed.length, pubBytes.length); char[] encoded = encodeSeed(type, bytes); return new NKey(type, null, encoded); }
public EdsaSigner(byte[] privateKeyBytes) { EdDSAParameterSpec spec = EdDSANamedCurveTable.getByName("ed25519-sha-512"); EdDSAPrivateKeySpec privateKeySpec = new EdDSAPrivateKeySpec(privateKeyBytes, spec); EdDSAPublicKeySpec pubKeySpec = new EdDSAPublicKeySpec(privateKeySpec.getA(), spec); publicKey = new EdDSAPublicKey(pubKeySpec); privateKey = new EdDSAPrivateKey(privateKeySpec); }