kp = new KeyPair(publicKey, new EdDSAPrivateKey(new EdDSAPrivateKeySpec(privKey, EdDSANamedCurveTable.getByName("Ed25519")))); break; case RSA:
/** * @since 0.9.25 */ public EdDSAPrivateKey(PKCS8EncodedKeySpec spec) throws InvalidKeySpecException { this(new EdDSAPrivateKeySpec(decode(spec.getEncoded()), EdDSANamedCurveTable.ED_25519_CURVE_SPEC)); }
/** * @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 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))); }
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 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 method for {@link net.i2p.crypto.eddsa.spec.EdDSAPrivateKeySpec#EdDSAPrivateKeySpec(byte[], net.i2p.crypto.eddsa.spec.EdDSAParameterSpec)}. */ @Test public void testEdDSAPrivateKeySpecFromSeed() { EdDSAPrivateKeySpec key = new EdDSAPrivateKeySpec(ZERO_SEED, ed25519); assertThat(key.getSeed(), is(equalTo(ZERO_SEED))); assertThat(key.getH(), is(equalTo(ZERO_H))); assertThat(key.getA().toByteArray(), is(equalTo(ZERO_PK))); }
/** * Test method for {@link net.i2p.crypto.eddsa.spec.EdDSAPrivateKeySpec#EdDSAPrivateKeySpec(net.i2p.crypto.eddsa.spec.EdDSAParameterSpec, byte[])}. */ @Test public void testEdDSAPrivateKeySpecFromH() { EdDSAPrivateKeySpec key = new EdDSAPrivateKeySpec(ed25519, ZERO_H); assertThat(key.getSeed(), is(nullValue())); assertThat(key.getH(), is(equalTo(ZERO_H))); assertThat(key.getA().toByteArray(), is(equalTo(ZERO_PK))); }
@Test public void incorrectSeedLengthThrows() { exception.expect(IllegalArgumentException.class); exception.expectMessage("seed length is wrong"); EdDSAPrivateKeySpec key = new EdDSAPrivateKeySpec(new byte[2], ed25519); }
@Test public void incorrectHashLengthThrows() { exception.expect(IllegalArgumentException.class); exception.expectMessage("hash length is wrong"); EdDSAPrivateKeySpec key = new EdDSAPrivateKeySpec(ed25519, new byte[2]); } }
@SuppressWarnings("unchecked") protected <T extends KeySpec> T engineGetKeySpec(Key key, Class<T> keySpec) throws InvalidKeySpecException { if (keySpec.isAssignableFrom(EdDSAPublicKeySpec.class) && key instanceof EdDSAPublicKey) { EdDSAPublicKey k = (EdDSAPublicKey) key; if (k.getParams() != null) { return (T) new EdDSAPublicKeySpec(k.getA(), k.getParams()); } } else if (keySpec.isAssignableFrom(EdDSAPrivateKeySpec.class) && key instanceof EdDSAPrivateKey) { EdDSAPrivateKey k = (EdDSAPrivateKey) key; if (k.getParams() != null) { return (T) new EdDSAPrivateKeySpec(k.getSeed(), k.getH(), k.geta(), k.getA(), k.getParams()); } } throw new InvalidKeySpecException("not implemented yet " + key + " " + keySpec); }
@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))); }
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 EdDSAPrivateKey clonePrivateKey(EdDSAPrivateKey key) throws GeneralSecurityException { if (key == null) { return null; } else { return generatePrivateKey(new EdDSAPrivateKeySpec(key.getSeed(), key.getParams())); } }
@Override public EdDSAPrivateKey clonePrivateKey(EdDSAPrivateKey key) throws GeneralSecurityException { if (key == null) { return null; } else { return generatePrivateKey(new EdDSAPrivateKeySpec(key.getSeed(), key.getParams())); } }
@Override public EdDSAPrivateKey clonePrivateKey(EdDSAPrivateKey key) throws GeneralSecurityException { if (key == null) { return null; } else { return generatePrivateKey(new EdDSAPrivateKeySpec(key.getSeed(), key.getParams())); } }
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)); }
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); }