public TestTuple(String line) { caseNum = ++numCases; String[] x = line.split(":"); seed = Utils.hexToBytes(x[0].substring(0, 64)); pk = Utils.hexToBytes(x[1]); message = Utils.hexToBytes(x[2]); sig = Utils.hexToBytes(x[3].substring(0, 128)); } }
/** * Test method for {@link net.i2p.crypto.eddsa.math.bigint.BigIntegerScalarOps#multiplyAndAdd(byte[], byte[], byte[])}. */ @Test public void testMultiplyAndAdd() { // Example from test case 1 byte[] h = Utils.hexToBytes("86eabc8e4c96193d290504e7c600df6cf8d8256131ec2c138a3e7e162e525404"); byte[] a = Utils.hexToBytes("307c83864f2833cb427a2ef1c00a013cfdff2768d980c0a3a520f006904de94f"); byte[] r = Utils.hexToBytes("f38907308c893deaf244787db4af53682249107418afc2edc58f75ac58a07404"); byte[] S = Utils.hexToBytes("5fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b"); assertThat(scalarOps.multiplyAndAdd(h, a, r), is(equalTo(S))); }
@Test public void hexToBytesReturnsCorrectByteArray() { Assert.assertThat(Utils.hexToBytes(hex1), IsEqual.equalTo(bytes1)); Assert.assertThat(Utils.hexToBytes(hex2), IsEqual.equalTo(bytes2)); Assert.assertThat(Utils.hexToBytes(hex3), IsEqual.equalTo(bytes3)); }
/** * Test method for {@link net.i2p.crypto.eddsa.math.bigint.BigIntegerScalarOps#reduce(byte[])}. */ @Test public void testReduce() { // Example from test case 1 byte[] r = Utils.hexToBytes("b6b19cd8e0426f5983fa112d89a143aa97dab8bc5deb8d5b6253c928b65272f4044098c2a990039cde5b6a4818df0bfb6e40dc5dee54248032962323e701352d"); assertThat(scalarOps.reduce(r), is(equalTo(Utils.hexToBytes("f38907308c893deaf244787db4af53682249107418afc2edc58f75ac58a07404")))); }
/** * Test method for {@link net.i2p.crypto.eddsa.math.bigint.BigIntegerScalarOps#multiplyAndAdd(byte[], byte[], byte[])}. */ @Test public void testMultiplyAndAdd() { ScalarOps sc = new BigIntegerScalarOps(ed25519Field, new BigInteger("5")); assertThat(sc.multiplyAndAdd(new byte[] {7}, new byte[] {2}, new byte[] {5}), is(equalTo(Utils.hexToBytes("0400000000000000000000000000000000000000000000000000000000000000")))); ScalarOps sc2 = new BigIntegerScalarOps(ed25519Field, new BigInteger("7237005577332262213973186563042994240857116359379907606001950938285454250989")); // Example from test case 1 byte[] h = Utils.hexToBytes("86eabc8e4c96193d290504e7c600df6cf8d8256131ec2c138a3e7e162e525404"); byte[] a = Utils.hexToBytes("307c83864f2833cb427a2ef1c00a013cfdff2768d980c0a3a520f006904de94f"); byte[] r = Utils.hexToBytes("f38907308c893deaf244787db4af53682249107418afc2edc58f75ac58a07404"); byte[] S = Utils.hexToBytes("5fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b"); assertThat(sc2.multiplyAndAdd(h, a, r), is(equalTo(S))); }
/** * Test method for {@link net.i2p.crypto.eddsa.math.bigint.BigIntegerScalarOps#reduce(byte[])}. */ @Test public void testReduce() { ScalarOps sc = new BigIntegerScalarOps(ed25519Field, new BigInteger("5")); assertThat(sc.reduce(new byte[] {7}), is(equalTo(Utils.hexToBytes("0200000000000000000000000000000000000000000000000000000000000000")))); ScalarOps sc2 = new BigIntegerScalarOps(ed25519Field, new BigInteger("7237005577332262213973186563042994240857116359379907606001950938285454250989")); // Example from test case 1 byte[] r = Utils.hexToBytes("b6b19cd8e0426f5983fa112d89a143aa97dab8bc5deb8d5b6253c928b65272f4044098c2a990039cde5b6a4818df0bfb6e40dc5dee54248032962323e701352d"); assertThat(sc2.reduce(r), is(equalTo(Utils.hexToBytes("f38907308c893deaf244787db4af53682249107418afc2edc58f75ac58a07404")))); }
String ypxStr = line.substring(4, line.lastIndexOf(' ')); FieldElement ypx = field.fromByteArray( Utils.hexToBytes(ypxStr)); line = file.readLine(); String ymxStr = line.substring(4, line.lastIndexOf(' ')); FieldElement ymx = field.fromByteArray( Utils.hexToBytes(ymxStr)); line = file.readLine(); String xy2dStr = line.substring(4, line.lastIndexOf(' ')); FieldElement xy2d = field.fromByteArray( Utils.hexToBytes(xy2dStr)); precmp[row][col] = GroupElement.precomp(curve, ypx, ymx, xy2d);
String ypxStr = line.substring(4, line.lastIndexOf(' ')); FieldElement ypx = field.fromByteArray( Utils.hexToBytes(ypxStr)); line = file.readLine(); String ymxStr = line.substring(4, line.lastIndexOf(' ')); FieldElement ymx = field.fromByteArray( Utils.hexToBytes(ymxStr)); line = file.readLine(); String xy2dStr = line.substring(4, line.lastIndexOf(' ')); FieldElement xy2d = field.fromByteArray( Utils.hexToBytes(xy2dStr)); dblPrecmp[row] = GroupElement.precomp(curve, ypx, ymx, xy2d);
/** * Gets the underlying finite field with q=2^255 - 19 elements. * * @return The finite field. */ public static Field getField() { return new Field( 256, // b Utils.hexToBytes("edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f"), // q new Ed25519LittleEndianEncoding()); }
/** * Test method for {@link GroupElement#scalarMultiply(byte[])}. * Test values generated with Python Ed25519 implementation. */ @Test public void testScalarMultiplyByteArray() { // Little-endian byte[] zero = Utils.hexToBytes("0000000000000000000000000000000000000000000000000000000000000000"); byte[] one = Utils.hexToBytes("0100000000000000000000000000000000000000000000000000000000000000"); byte[] two = Utils.hexToBytes("0200000000000000000000000000000000000000000000000000000000000000"); byte[] a = Utils.hexToBytes("d072f8dd9c07fa7bc8d22a4b325d26301ee9202f6db89aa7c3731529e37e437c"); GroupElement A = new GroupElement(curve, Utils.hexToBytes("d4cf8595571830644bd14af416954d09ab7159751ad9e0f7a6cbd92379e71a66")); assertThat("scalarMultiply(0) failed", ed25519.getB().scalarMultiply(zero), is(equalTo(curve.getZero(GroupElement.Representation.P3)))); assertThat("scalarMultiply(1) failed", ed25519.getB().scalarMultiply(one), is(equalTo(ed25519.getB()))); assertThat("scalarMultiply(2) failed", ed25519.getB().scalarMultiply(two), is(equalTo(ed25519.getB().dbl()))); assertThat("scalarMultiply(a) failed", ed25519.getB().scalarMultiply(a), is(equalTo(A))); }
@Test public void testDoubleScalarMultiplyVariableTime() { byte[] zero = Utils.hexToBytes("0000000000000000000000000000000000000000000000000000000000000000"); byte[] one = Utils.hexToBytes("0100000000000000000000000000000000000000000000000000000000000000"); byte[] two = Utils.hexToBytes("0200000000000000000000000000000000000000000000000000000000000000"); byte[] a = Utils.hexToBytes("d072f8dd9c07fa7bc8d22a4b325d26301ee9202f6db89aa7c3731529e37e437c"); GroupElement A = new GroupElement(curve, Utils.hexToBytes("d4cf8595571830644bd14af416954d09ab7159751ad9e0f7a6cbd92379e71a66")); GroupElement B = ed25519.getB(); GroupElement geZero = curve.getZero(GroupElement.Representation.P3PrecomputedDouble);
/** * 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); } }
private static String deriveEd25519PrivateKey(final String seed, final int... indexes) { try { return Utils.bytesToHex(SLIP10.deriveEd25519PrivateKey(Utils.hexToBytes(seed), indexes)); } catch (Exception e) { throw new RuntimeException(e); } } }