package peergos.shared.crypto.asymmetric.curve25519;
import peergos.shared.crypto.TweetNaCl;
import peergos.shared.crypto.random.JSNaCl;
public interface Curve25519 {
byte[] crypto_box_open(byte[] cipher, byte[] nonce, byte[] theirPublicBoxingKey, byte[] secretBoxingKey);
byte[] crypto_box(byte[] message, byte[] nonce, byte[] theirPublicBoxingKey, byte[] ourSecretBoxingKey);
void crypto_box_keypair(byte[] pk, byte[] sk);
class Java implements Curve25519 {
@Override
public byte[] crypto_box_open(byte[] cipher, byte[] nonce, byte[] theirPublicBoxingKey, byte[] secretBoxingKey) {
return TweetNaCl.crypto_box_open(cipher, nonce, theirPublicBoxingKey, secretBoxingKey);
}
@Override
public byte[] crypto_box(byte[] message, byte[] nonce, byte[] theirPublicBoxingKey, byte[] ourSecretBoxingKey) {
return TweetNaCl.crypto_box(message, nonce, theirPublicBoxingKey, ourSecretBoxingKey);
}
@Override
public void crypto_box_keypair(byte[] pk, byte[] sk) {
TweetNaCl.crypto_box_keypair(pk, sk, true);
}
}
class Javascript implements Curve25519 {
JSNaCl scriptJS = new JSNaCl();
@Override
public byte[] crypto_box_open(byte[] cipher, byte[] nonce, byte[] theirPublicBoxingKey, byte[] secretBoxingKey) {
return scriptJS.crypto_box_open(cipher, nonce, theirPublicBoxingKey, secretBoxingKey);
}
@Override
public byte[] crypto_box(byte[] message, byte[] nonce, byte[] theirPublicBoxingKey, byte[] ourSecretBoxingKey) {
return scriptJS.crypto_box(message, nonce, theirPublicBoxingKey, ourSecretBoxingKey);
}
@Override
public void crypto_box_keypair(byte[] pk, byte[] sk) {
byte[] bytes = scriptJS.crypto_box_keypair(pk, sk);
for(int i=0; i < bytes.length; i++) {
pk[i] = bytes[i];
}
}
}
}