More arraycopy improvements

In fact, most arraycopy and copyOfRange calls in the class are unneeded,
since Kerl can also directly operate on array slices. Care has been
taken not to introduce new side effects, therefore one copyOfRange call
in `digests` needs to stay. Existing side effects are kept, although
probably undesirable (`signatureFragment` clobbers the `keyFragment`
input parameter).
This commit is contained in:
Michael Schierl
2017-09-07 22:01:31 +02:00
parent f694178ac1
commit 53df67d490
+6 -20
View File
@@ -81,19 +81,12 @@ public class Signing {
public int[] signatureFragment(int[] normalizedBundleFragment, int[] keyFragment) {
int[] hash;
for (int i = 0; i < 27; i++) {
hash = Arrays.copyOfRange(keyFragment, i * 243, (i + 1) * 243);
for (int j = 0; j < 13 - normalizedBundleFragment[i]; j++) {
curl.reset()
.absorb(hash, 0, hash.length)
.squeeze(hash, 0, hash.length);
.absorb(keyFragment, i * 243, 243)
.squeeze(keyFragment, i * 243, 243);
}
System.arraycopy(hash, 0, keyFragment, i * 243, 243);
}
return keyFragment;
@@ -110,41 +103,34 @@ public class Signing {
public int[] digests(int[] key) {
int[] digests = new int[(int) Math.floor(key.length / 6561) * 243];
int[] buffer = new int[243];
for (int i = 0; i < Math.floor(key.length / 6561); i++) {
int[] keyFragment = Arrays.copyOfRange(key, i * 6561, (i + 1) * 6561);
for (int j = 0; j < 27; j++) {
buffer = Arrays.copyOfRange(keyFragment, j * 243, (j + 1) * 243);
for (int k = 0; k < 26; k++) {
curl.reset()
.absorb(buffer)
.squeeze(buffer);
.absorb(keyFragment, j * 243, 243)
.squeeze(keyFragment, j * 243, 243);
}
System.arraycopy(buffer, 0, keyFragment, j * 243, 243);
}
curl.reset();
curl.absorb(keyFragment, 0, keyFragment.length);
curl.squeeze(buffer, 0, buffer.length);
System.arraycopy(buffer, 0, digests, i * 243, 243);
curl.squeeze(digests, i * 243, 243);
}
return digests;
}
public int[] digest(int[] normalizedBundleFragment, int[] signatureFragment) {
curl.reset();
ICurl jCurl = SpongeFactory.create(SpongeFactory.Mode.KERL);
int[] buffer = new int[243];
for (int i = 0; i < 27; i++) {
buffer = Arrays.copyOfRange(signatureFragment, i * 243, (i + 1) * 243);
for (int j = normalizedBundleFragment[i] + 13; j-- > 0; ) {
ICurl jCurl = SpongeFactory.create(SpongeFactory.Mode.KERL);
jCurl.reset();
jCurl.absorb(buffer);
jCurl.squeeze(buffer);