Быстрый битовый сдвиг байтового массива - подразделы CMAC
Мне нужно реализовать как можно быстрее сдвиг влево 16-байтового массива вJavaCard.
Я попробовал этот код:
private static final void rotateLeft(final byte[] output, final byte[] input) {
short carry = 0;
short i = (short) 16;
do {
--i;
carry = (short)((input[i] << 1) | carry);
output[i] = (byte)carry;
carry = (short)((carry >> 8) & 1);
} while (i > 0);
}
Есть идеи, как улучшить производительность? Я думал о некоторыхUtil.getShort(...)
а такжеUtil.setShort(...)
волшебство, но мне не удалось заставить это работать быстрее чем реализация выше.
Это одна из частей подсистем CMAC, и, к сожалению, это делается довольно часто. Если вы знаете какой-нибудь более быстрый способ вычисления подразделов CMAC (оба подключа в одном цикле или что-то в этом роде), пожалуйста, дайте мне знать.