Added link to Weblate from translatable strings once the translator mode

is activated in the workspace settings. This required the addition of a
new lib (in source form) for a SipHash implementation.
This commit is contained in:
Zukero
2017-04-10 18:16:17 +02:00
parent bd8576df0c
commit 0a7cb40dbc
31 changed files with 1485 additions and 8 deletions

View File

@@ -0,0 +1,27 @@
package com.zackehh.siphash;
import org.testng.Assert;
import org.testng.annotations.Test;
public class SipHashCaseTest {
@Test
public void ensureAllValues() throws Exception {
SipHashCase[] cases = SipHashCase.values();
Assert.assertEquals(cases[0], SipHashCase.UPPER);
Assert.assertEquals(cases[1], SipHashCase.LOWER);
}
@Test
public void ensureValueOf() throws Exception {
Assert.assertEquals(SipHashCase.valueOf("UPPER"), SipHashCase.UPPER);
Assert.assertEquals(SipHashCase.valueOf("LOWER"), SipHashCase.LOWER);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void invalidCaseValueOf() throws Exception {
SipHashCase.valueOf("invalid");
}
}

View File

@@ -0,0 +1,32 @@
package com.zackehh.siphash;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
public class SipHashConstantsTest {
@Test
public void ensureAllConstants() throws Exception {
Assert.assertEquals(SipHashConstants.INITIAL_V0, 0x736f6d6570736575L);
Assert.assertEquals(SipHashConstants.INITIAL_V1, 0x646f72616e646f6dL);
Assert.assertEquals(SipHashConstants.INITIAL_V2, 0x6c7967656e657261L);
Assert.assertEquals(SipHashConstants.INITIAL_V3, 0x7465646279746573L);
Assert.assertEquals(SipHashConstants.DEFAULT_C, 2);
Assert.assertEquals(SipHashConstants.DEFAULT_D, 4);
Assert.assertEquals(SipHashConstants.DEFAULT_CASE, SipHashCase.LOWER);
Assert.assertEquals(SipHashConstants.DEFAULT_PADDING, false);
}
@Test(expectedExceptions = InvocationTargetException.class)
public void ensureCannotInstance() throws Exception {
Constructor<SipHashConstants> ctor = SipHashConstants.class.getDeclaredConstructor();
ctor.setAccessible(true);
Assert.assertTrue(Modifier.isPrivate(ctor.getModifiers()));
ctor.newInstance();
}
}

View File

@@ -0,0 +1,148 @@
package com.zackehh.siphash;
import org.testng.Assert;
import org.testng.annotations.Test;
public class SipHashDigestTest {
@Test
public void initializeDigestWithKey() throws Exception {
SipHashDigest sipHash = new SipHashDigest("0123456789ABCDEF".getBytes());
long v0 = SipHashTestUtils.getPrivateField(sipHash, "v0", Long.class);
long v1 = SipHashTestUtils.getPrivateField(sipHash, "v1", Long.class);
long v2 = SipHashTestUtils.getPrivateField(sipHash, "v2", Long.class);
long v3 = SipHashTestUtils.getPrivateField(sipHash, "v3", Long.class);
Assert.assertEquals(v0, 4925064773550298181L);
Assert.assertEquals(v1, 2461839666708829781L);
Assert.assertEquals(v2, 6579568090023412561L);
Assert.assertEquals(v3, 3611922228250500171L);
int c = SipHashTestUtils.getPrivateField(sipHash, "c", Integer.class);
int d = SipHashTestUtils.getPrivateField(sipHash, "d", Integer.class);
Assert.assertEquals(c, SipHashConstants.DEFAULT_C);
Assert.assertEquals(d, SipHashConstants.DEFAULT_D);
}
@Test
public void initializeDigestWithKeyAndCD() throws Exception {
SipHashDigest sipHash = new SipHashDigest("0123456789ABCDEF".getBytes(), 4, 8);
long v0 = SipHashTestUtils.getPrivateField(sipHash, "v0", Long.class);
long v1 = SipHashTestUtils.getPrivateField(sipHash, "v1", Long.class);
long v2 = SipHashTestUtils.getPrivateField(sipHash, "v2", Long.class);
long v3 = SipHashTestUtils.getPrivateField(sipHash, "v3", Long.class);
Assert.assertEquals(v0, 4925064773550298181L);
Assert.assertEquals(v1, 2461839666708829781L);
Assert.assertEquals(v2, 6579568090023412561L);
Assert.assertEquals(v3, 3611922228250500171L);
int c = SipHashTestUtils.getPrivateField(sipHash, "c", Integer.class);
int d = SipHashTestUtils.getPrivateField(sipHash, "d", Integer.class);
Assert.assertEquals(c, 4);
Assert.assertEquals(d, 8);
}
@Test
public void initializeDigestWithKeyThenHash() throws Exception {
SipHashDigest sipHash = new SipHashDigest("0123456789ABCDEF".getBytes());
long v0 = SipHashTestUtils.getPrivateField(sipHash, "v0", Long.class);
long v1 = SipHashTestUtils.getPrivateField(sipHash, "v1", Long.class);
long v2 = SipHashTestUtils.getPrivateField(sipHash, "v2", Long.class);
long v3 = SipHashTestUtils.getPrivateField(sipHash, "v3", Long.class);
Assert.assertEquals(v0, 4925064773550298181L);
Assert.assertEquals(v1, 2461839666708829781L);
Assert.assertEquals(v2, 6579568090023412561L);
Assert.assertEquals(v3, 3611922228250500171L);
int c = SipHashTestUtils.getPrivateField(sipHash, "c", Integer.class);
int d = SipHashTestUtils.getPrivateField(sipHash, "d", Integer.class);
Assert.assertEquals(c, SipHashConstants.DEFAULT_C);
Assert.assertEquals(d, SipHashConstants.DEFAULT_D);
for(byte b : "zymotechnics".getBytes()){
sipHash.update(b);
}
SipHashResult hashResult = sipHash.finish();
Assert.assertEquals(hashResult.get(), 699588702094987020L);
Assert.assertEquals(hashResult.getHex(), "9b57037cd3f8f0c");
Assert.assertEquals(hashResult.getHex(true), "09b57037cd3f8f0c");
Assert.assertEquals(hashResult.getHex(SipHashCase.UPPER), "9B57037CD3F8F0C");
Assert.assertEquals(hashResult.getHex(true, SipHashCase.UPPER), "09B57037CD3F8F0C");
}
@Test
public void initializeStateWithKeyAndCDThenHash() throws Exception {
SipHashDigest sipHash = new SipHashDigest("0123456789ABCDEF".getBytes(), 4, 8);
long v0 = SipHashTestUtils.getPrivateField(sipHash, "v0", Long.class);
long v1 = SipHashTestUtils.getPrivateField(sipHash, "v1", Long.class);
long v2 = SipHashTestUtils.getPrivateField(sipHash, "v2", Long.class);
long v3 = SipHashTestUtils.getPrivateField(sipHash, "v3", Long.class);
Assert.assertEquals(v0, 4925064773550298181L);
Assert.assertEquals(v1, 2461839666708829781L);
Assert.assertEquals(v2, 6579568090023412561L);
Assert.assertEquals(v3, 3611922228250500171L);
int c = SipHashTestUtils.getPrivateField(sipHash, "c", Integer.class);
int d = SipHashTestUtils.getPrivateField(sipHash, "d", Integer.class);
Assert.assertEquals(c, 4);
Assert.assertEquals(d, 8);
for(byte b : "zymotechnics".getBytes()){
sipHash.update(b);
}
SipHashResult hashResult = sipHash.finish();
Assert.assertEquals(hashResult.get(), -3891084581787974112L); // overflow
Assert.assertEquals(hashResult.getHex(), "ca0017304f874620");
Assert.assertEquals(hashResult.getHex(true), "ca0017304f874620");
Assert.assertEquals(hashResult.getHex(SipHashCase.UPPER), "CA0017304F874620");
Assert.assertEquals(hashResult.getHex(true, SipHashCase.UPPER), "CA0017304F874620");
}
@Test
public void updateWithAByteArrayChunk() throws Exception {
SipHashDigest sipHash = new SipHashDigest("0123456789ABCDEF".getBytes());
long v0 = SipHashTestUtils.getPrivateField(sipHash, "v0", Long.class);
long v1 = SipHashTestUtils.getPrivateField(sipHash, "v1", Long.class);
long v2 = SipHashTestUtils.getPrivateField(sipHash, "v2", Long.class);
long v3 = SipHashTestUtils.getPrivateField(sipHash, "v3", Long.class);
Assert.assertEquals(v0, 4925064773550298181L);
Assert.assertEquals(v1, 2461839666708829781L);
Assert.assertEquals(v2, 6579568090023412561L);
Assert.assertEquals(v3, 3611922228250500171L);
int c = SipHashTestUtils.getPrivateField(sipHash, "c", Integer.class);
int d = SipHashTestUtils.getPrivateField(sipHash, "d", Integer.class);
Assert.assertEquals(c, SipHashConstants.DEFAULT_C);
Assert.assertEquals(d, SipHashConstants.DEFAULT_D);
sipHash.update("zymo".getBytes());
sipHash.update("techni".getBytes());
sipHash.update("cs".getBytes());
SipHashResult hashResult = sipHash.finish();
Assert.assertEquals(hashResult.get(), 699588702094987020L);
Assert.assertEquals(hashResult.getHex(), "9b57037cd3f8f0c");
Assert.assertEquals(hashResult.getHex(true), "09b57037cd3f8f0c");
Assert.assertEquals(hashResult.getHex(SipHashCase.UPPER), "9B57037CD3F8F0C");
Assert.assertEquals(hashResult.getHex(true, SipHashCase.UPPER), "09B57037CD3F8F0C");
}
}

View File

@@ -0,0 +1,27 @@
package com.zackehh.siphash;
import org.testng.Assert;
import org.testng.annotations.Test;
public class SipHashKeyTest {
@Test
public void initializeWithKey() throws Exception {
SipHashKey key = new SipHashKey("0123456789ABCDEF".getBytes());
long k0 = SipHashTestUtils.getPrivateField(key, "k0", Long.class);
long k1 = SipHashTestUtils.getPrivateField(key, "k1", Long.class);
Assert.assertEquals(k0, 3978425819141910832L);
Assert.assertEquals(k1, 5063528411713059128L);
}
@Test(
expectedExceptions = IllegalArgumentException.class,
expectedExceptionsMessageRegExp = "Key must be exactly 16 bytes!"
)
public void initializeWithKeyTooLong() throws Exception {
new SipHashKey("0123456789ABCDEFG".getBytes()); // 17 bytes
}
}

View File

@@ -0,0 +1,107 @@
package com.zackehh.siphash;
import org.testng.Assert;
import org.testng.annotations.Test;
public class SipHashTest {
@Test
public void initializeStateWithKey() throws Exception {
SipHash sipHash = new SipHash("0123456789ABCDEF".getBytes());
long v0 = SipHashTestUtils.getPrivateField(sipHash, "v0", Long.class);
long v1 = SipHashTestUtils.getPrivateField(sipHash, "v1", Long.class);
long v2 = SipHashTestUtils.getPrivateField(sipHash, "v2", Long.class);
long v3 = SipHashTestUtils.getPrivateField(sipHash, "v3", Long.class);
Assert.assertEquals(v0, 4925064773550298181L);
Assert.assertEquals(v1, 2461839666708829781L);
Assert.assertEquals(v2, 6579568090023412561L);
Assert.assertEquals(v3, 3611922228250500171L);
int c = SipHashTestUtils.getPrivateField(sipHash, "c", Integer.class);
int d = SipHashTestUtils.getPrivateField(sipHash, "d", Integer.class);
Assert.assertEquals(c, SipHashConstants.DEFAULT_C);
Assert.assertEquals(d, SipHashConstants.DEFAULT_D);
}
@Test
public void initializeStateWithKeyAndCD() throws Exception {
SipHash sipHash = new SipHash("0123456789ABCDEF".getBytes(), 4, 8);
long v0 = SipHashTestUtils.getPrivateField(sipHash, "v0", Long.class);
long v1 = SipHashTestUtils.getPrivateField(sipHash, "v1", Long.class);
long v2 = SipHashTestUtils.getPrivateField(sipHash, "v2", Long.class);
long v3 = SipHashTestUtils.getPrivateField(sipHash, "v3", Long.class);
Assert.assertEquals(v0, 4925064773550298181L);
Assert.assertEquals(v1, 2461839666708829781L);
Assert.assertEquals(v2, 6579568090023412561L);
Assert.assertEquals(v3, 3611922228250500171L);
int c = SipHashTestUtils.getPrivateField(sipHash, "c", Integer.class);
int d = SipHashTestUtils.getPrivateField(sipHash, "d", Integer.class);
Assert.assertEquals(c, 4);
Assert.assertEquals(d, 8);
}
@Test
public void initializeStateWithKeyThenHash() throws Exception {
SipHash sipHash = new SipHash("0123456789ABCDEF".getBytes());
long v0 = SipHashTestUtils.getPrivateField(sipHash, "v0", Long.class);
long v1 = SipHashTestUtils.getPrivateField(sipHash, "v1", Long.class);
long v2 = SipHashTestUtils.getPrivateField(sipHash, "v2", Long.class);
long v3 = SipHashTestUtils.getPrivateField(sipHash, "v3", Long.class);
Assert.assertEquals(v0, 4925064773550298181L);
Assert.assertEquals(v1, 2461839666708829781L);
Assert.assertEquals(v2, 6579568090023412561L);
Assert.assertEquals(v3, 3611922228250500171L);
int c = SipHashTestUtils.getPrivateField(sipHash, "c", Integer.class);
int d = SipHashTestUtils.getPrivateField(sipHash, "d", Integer.class);
Assert.assertEquals(c, SipHashConstants.DEFAULT_C);
Assert.assertEquals(d, SipHashConstants.DEFAULT_D);
SipHashResult hashResult = sipHash.hash("zymotechnics".getBytes());
Assert.assertEquals(hashResult.get(), 699588702094987020L);
Assert.assertEquals(hashResult.getHex(), "9b57037cd3f8f0c");
Assert.assertEquals(hashResult.getHex(true), "09b57037cd3f8f0c");
Assert.assertEquals(hashResult.getHex(SipHashCase.UPPER), "9B57037CD3F8F0C");
Assert.assertEquals(hashResult.getHex(true, SipHashCase.UPPER), "09B57037CD3F8F0C");
}
@Test
public void initializeStateWithKeyAndCDThenHash() throws Exception {
SipHash sipHash = new SipHash("0123456789ABCDEF".getBytes(), 4, 8);
long v0 = SipHashTestUtils.getPrivateField(sipHash, "v0", Long.class);
long v1 = SipHashTestUtils.getPrivateField(sipHash, "v1", Long.class);
long v2 = SipHashTestUtils.getPrivateField(sipHash, "v2", Long.class);
long v3 = SipHashTestUtils.getPrivateField(sipHash, "v3", Long.class);
Assert.assertEquals(v0, 4925064773550298181L);
Assert.assertEquals(v1, 2461839666708829781L);
Assert.assertEquals(v2, 6579568090023412561L);
Assert.assertEquals(v3, 3611922228250500171L);
int c = SipHashTestUtils.getPrivateField(sipHash, "c", Integer.class);
int d = SipHashTestUtils.getPrivateField(sipHash, "d", Integer.class);
Assert.assertEquals(c, 4);
Assert.assertEquals(d, 8);
SipHashResult hashResult = sipHash.hash("zymotechnics".getBytes());
Assert.assertEquals(hashResult.get(), -3891084581787974112L); // overflow
Assert.assertEquals(hashResult.getHex(), "ca0017304f874620");
Assert.assertEquals(hashResult.getHex(true), "ca0017304f874620");
Assert.assertEquals(hashResult.getHex(SipHashCase.UPPER), "CA0017304F874620");
Assert.assertEquals(hashResult.getHex(true, SipHashCase.UPPER), "CA0017304F874620");
}
}

View File

@@ -0,0 +1,13 @@
package com.zackehh.siphash;
import java.lang.reflect.Field;
public class SipHashTestUtils {
static <T> T getPrivateField(Object obj, String name, Class<T> clazz) throws Exception {
Field f = obj.getClass().getDeclaredField(name);
f.setAccessible(true);
return clazz.cast(f.get(obj));
}
}