iota.lib.java/src/main/java/jota/utils/Signing.java
Gianluigi Davassi cad499448b Pinpong PR + refactoring (#7)
* implemented toTrytes and toStrings

* added TrytesConverterTest

* WIP

* added checksum calculation, pls review

* updated checksum

* updated tests

* fixed getnewaddress

* fixed test

* updated node config

* updated tests

* newAddress

* improved newAddress
2016-12-05 23:49:35 +01:00

92 lines
2.5 KiB
Java

package jota.utils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Signing {
static int[] key(int[] seed, int index, int length) {
for (int i = 0; i < index; i++) {
for (int j = 0; j < 243; j++) {
if (++seed[j] > 1) {
seed[j] = -1;
} else {
break;
}
}
}
final Curl curl = new Curl();
curl.reset();
curl.absorb(seed, 0, seed.length);
curl.squeeze(seed, 0, seed.length);
curl.reset();
curl.absorb(seed, 0, seed.length);
final List<Integer> key = new ArrayList<>();
int[] buffer = new int[seed.length];
int offset = 0;
while (length-- > 0) {
for (int i = 0; i < 27; i++) {
curl.squeeze(buffer, offset, buffer.length);
for (int j = 0; j < 243; j++) {
key.add(buffer[j]);
}
}
}
return to(key);
}
private static int[] to(List<Integer> key) {
int a[] = new int[key.size()];
int i = 0;
for (Integer v : key) {
a[i++] = v;
}
return a;
}
public static int[] digests(int[] key) {
final Curl curl = new Curl();
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();
curl.absorb(buffer, 0, buffer.length);
curl.squeeze(buffer, 0, buffer.length);
}
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);
}
return digests;
}
public static int[] address(int[] digests) {
final Curl curl = new Curl();
int[] address = new int[243];
curl.reset();
curl.absorb(digests, 0, digests.length);
curl.squeeze(address, 0, address.length);
return address;
}
}