package net.i2p.crypto.eddsa.math.bigint; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import java.math.BigInteger; import net.i2p.crypto.eddsa.Utils; import net.i2p.crypto.eddsa.math.Field; import net.i2p.crypto.eddsa.math.FieldElement; import org.junit.Test; /** * @author str4d * */ public class BigIntegerFieldElementTest { static final byte[] BYTES_ZERO = Utils.hexToBytes("0000000000000000000000000000000000000000000000000000000000000000"); static final byte[] BYTES_ONE = Utils.hexToBytes("0100000000000000000000000000000000000000000000000000000000000000"); static final byte[] BYTES_TEN = Utils.hexToBytes("0a00000000000000000000000000000000000000000000000000000000000000"); static final Field ed25519Field = new Field( 256, // b Utils.hexToBytes("edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f"), // q new BigIntegerLittleEndianEncoding()); static final FieldElement ZERO = new BigIntegerFieldElement(ed25519Field, BigInteger.ZERO); static final FieldElement ONE = new BigIntegerFieldElement(ed25519Field, BigInteger.ONE); static final FieldElement TWO = new BigIntegerFieldElement(ed25519Field, BigInteger.valueOf(2)); /** * Test method for {@link BigIntegerFieldElement#BigIntegerFieldElement(Field, BigInteger)}. */ @Test public void testFieldElementBigInteger() { assertThat(new BigIntegerFieldElement(ed25519Field, BigInteger.ZERO).bi, is(BigInteger.ZERO)); assertThat(new BigIntegerFieldElement(ed25519Field, BigInteger.ONE).bi, is(BigInteger.ONE)); assertThat(new BigIntegerFieldElement(ed25519Field, BigInteger.valueOf(2)).bi, is(BigInteger.valueOf(2))); } /** * Test method for {@link FieldElement#toByteArray()}. */ @Test public void testToByteArray() { byte[] zero = ZERO.toByteArray(); assertThat(zero.length, is(equalTo(BYTES_ZERO.length))); assertThat(zero, is(equalTo(BYTES_ZERO))); byte[] one = ONE.toByteArray(); assertThat(one.length, is(equalTo(BYTES_ONE.length))); assertThat(one, is(equalTo(BYTES_ONE))); byte[] ten = new BigIntegerFieldElement(ed25519Field, BigInteger.TEN).toByteArray(); assertThat(ten.length, is(equalTo(BYTES_TEN.length))); assertThat(ten, is(equalTo(BYTES_TEN))); } // region isNonZero @Test public void isNonZeroReturnsFalseIfFieldElementIsZero() { // Assert: assertThat(ZERO.isNonZero(), is(equalTo(false))); } @Test public void isNonZeroReturnsTrueIfFieldElementIsNonZero() { // Assert: assertThat(TWO.isNonZero(), is(equalTo(true))); } // endregion /** * Test method for {@link FieldElement#isNegative()}. */ @Test public void testIsNegative() { //fail("Not yet implemented"); } /** * Test method for {@link FieldElement#add(FieldElement)}. */ @Test public void testAdd() { //fail("Not yet implemented"); } /** * Test method for {@link FieldElement#subtract(FieldElement)}. */ @Test public void testSubtract() { //fail("Not yet implemented"); } /** * Test method for {@link FieldElement#negate()}. */ @Test public void testNegate() { //fail("Not yet implemented"); } /** * Test method for {@link FieldElement#multiply(FieldElement)}. */ @Test public void testMultiply() { //fail("Not yet implemented"); } /** * Test method for {@link FieldElement#square()}. */ @Test public void testSquare() { //fail("Not yet implemented"); } /** * Test method for {@link FieldElement#squareAndDouble()}. */ @Test public void testSquareAndDouble() { //fail("Not yet implemented"); } /** * Test method for {@link FieldElement#invert()}. */ @Test public void testInvert() { //fail("Not yet implemented"); } /** * Test method for {@link FieldElement#pow22523()}. */ @Test public void testPow22523() { //fail("Not yet implemented"); } /** * Test method for {@link FieldElement#equals(java.lang.Object)}. */ @Test public void testEqualsObject() { assertThat(new BigIntegerFieldElement(ed25519Field, BigInteger.ZERO), is(equalTo(ZERO))); assertThat(new BigIntegerFieldElement(ed25519Field, BigInteger.valueOf(1000)), is(equalTo(new BigIntegerFieldElement(ed25519Field, BigInteger.valueOf(1000))))); assertThat(ONE, is(not(equalTo(TWO)))); } }