Я пытаюсь повторно реализовать некоторый код, который использует libsodium в Java.
Исходный код объявляет массив типа uint8:
#define SECRET ((uint8_t[]){ 0xAA, 0xBB, 0xCC ... }) // not the real secret!
и кормит это либодиуму crypto_hash_sha256_update
Моя задача при реализации этого в Java состоит в том, что в Java нет беззнаковых байтов, поэтому я не могу набрать 0xAA
как байт.
Вещи, которые я пробовал:
- Объявление моего массива как short / int: я думаю, что это ломается из-за заполнения 0
- Объявление литералов в формате
0b11110000...
, это не дает правильных ответов (у меня есть некоторые тестовые данные из оригинальной реализации)
- Объявление массива
char []
и конкатенация литералов: final char [] salt = {0xAABB, 0xCCDD, ...} `, также не дает правильных ответов
EDIT
это моя короткая попытка
final short[] salt = { 0xAA, 0xBB, ...};
final Hasher hasher = Hashing.sha256().newHasher();
hasher.putLong(input);
for (int i=0; i < salt.length; i++) {
hasher.putShort(salt[i]);
}
return hasher.hash().asBytes();