Mudança rápida de bits de uma matriz de bytes - subchaves CMAC
Eu preciso implementar o mais rápido possível o deslocamento de bit esquerdo de uma matriz de 16 bytes emJavaCard.
Eu tentei este código:
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);
}
Alguma idéia de como melhorar o desempenho? Eu estava pensando em algunsUtil.getShort(...)
eUtil.setShort(...)
mágica, mas não consegui fazê-lo funcionar mais rápido que a implementação acima.
Essa é uma parte do cálculo das subchaves do CMAC e é feita com bastante frequência, infelizmente. Caso você conheça uma maneira mais rápida de calcular subchaves CMAC (as duas subchaves em um loop ou algo parecido), informe-me.