package peergos.shared.crypto.asymmetric.curve25519; import peergos.shared.crypto.*; import peergos.shared.crypto.random.JSNaCl; public interface Ed25519 { byte[] crypto_sign_open(byte[] signed, byte[] publicSigningKey); byte[] crypto_sign(byte[] message, byte[] secretSigningKey); void crypto_sign_keypair(byte[] pk, byte[] sk); class Java implements Ed25519 { @Override public byte[] crypto_sign_open(byte[] signed, byte[] publicSigningKey) { return TweetNaCl.crypto_sign_open(signed, publicSigningKey); } @Override public byte[] crypto_sign(byte[] message, byte[] secretSigningKey) { return TweetNaCl.crypto_sign(message, secretSigningKey); } @Override public void crypto_sign_keypair(byte[] pk, byte[] sk) { TweetNaCl.crypto_sign_keypair(pk, sk, true); } } class Javascript implements Ed25519 { JSNaCl scriptJS = new JSNaCl(); @Override public byte[] crypto_sign_open(byte[] signed, byte[] publicSigningKey) { return scriptJS.crypto_sign_open(signed, publicSigningKey); } @Override public byte[] crypto_sign(byte[] message, byte[] secretSigningKey) { return scriptJS.crypto_sign(message, secretSigningKey); } @Override public void crypto_sign_keypair(byte[] pk, byte[] sk) { byte[][] bytes = scriptJS.crypto_sign_keypair(pk, sk); for(int i=0; i < bytes[0].length; i++) { pk[i] = bytes[0][i]; } for(int i=0; i < bytes[1].length; i++) { sk[i] = bytes[1][i]; } } } }