@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); }
public GroupElement getGroupElement() { return publicKey.getA(); }
@Override public EdDSAPublicKey clonePublicKey(EdDSAPublicKey key) throws GeneralSecurityException { if (key == null) { return null; } else { return generatePublicKey(new EdDSAPublicKeySpec(key.getA(), key.getParams())); } }
@Override public EdDSAPublicKey clonePublicKey(EdDSAPublicKey key) throws GeneralSecurityException { if (key == null) { return null; } else { return generatePublicKey(new EdDSAPublicKeySpec(key.getA(), key.getParams())); } }
@Override public EdDSAPublicKey clonePublicKey(EdDSAPublicKey key) throws GeneralSecurityException { if (key == null) { return null; } else { return generatePublicKey(new EdDSAPublicKeySpec(key.getA(), key.getParams())); } }
@Override public EdDSAPublicKey clonePublicKey(EdDSAPublicKey key) throws GeneralSecurityException { if (key == null) { return null; } else { return generatePublicKey(new EdDSAPublicKeySpec(key.getA(), key.getParams())); } }
public static StorageItem buildMutable(Object data, EdDSAPrivateKey key, byte[] salt, long sequenceNumber) throws InvalidKeyException, SignatureException { ByteBuffer raw = new BEncoder().encode(data, 1000); Signature sig = new EdDSAEngine(); sig.initSign(key); Map<String, Object> p = new TreeMap<>(); if(salt != null) p.put("salt", salt); p.put("seq", sequenceNumber); p.put("v", new BEncoder.RawData(raw)); ByteBuffer buf = new BEncoder().encode(p, 1500); // trim d ... e buf.position(buf.position() + 1); buf.limit(buf.limit() - 1); sig.update(buf.duplicate()); byte[] signature = sig.sign(); byte[] pubkey = new EdDSAPublicKey(new EdDSAPublicKeySpec(key.getA(), StorageItem.spec)).getA().toByteArray(); return new StorageItem(buf2ary(raw), pubkey, signature, salt, sequenceNumber); }
public static <B extends Buffer> B putRawEDDSAPublicKey(B buffer, PublicKey key) { ValidateUtils.checkTrue(SecurityUtils.isEDDSACurveSupported(), SecurityUtils.EDDSA + " not supported"); EdDSAPublicKey edKey = ValidateUtils.checkInstanceOf(key, EdDSAPublicKey.class, "Not an EDDSA public key: %s", key); byte[] seed = Ed25519PublicKeyDecoder.getSeedValue(edKey); ValidateUtils.checkNotNull(seed, "No seed extracted from key: %s", edKey.getA()); buffer.putString(KeyPairProvider.SSH_ED25519); buffer.putBytes(seed); return buffer; }
public static <B extends Buffer> B putRawEDDSAPublicKey(B buffer, PublicKey key) { ValidateUtils.checkTrue(SecurityUtils.isEDDSACurveSupported(), SecurityUtils.EDDSA + " not supported"); EdDSAPublicKey edKey = ValidateUtils.checkInstanceOf(key, EdDSAPublicKey.class, "Not an EDDSA public key: %s", key); byte[] seed = Ed25519PublicKeyDecoder.getSeedValue(edKey); ValidateUtils.checkNotNull(seed, "No seed extracted from key: %s", edKey.getA()); buffer.putString(KeyPairProvider.SSH_ED25519); buffer.putBytes(seed); return buffer; }
@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); }