PKCS1Encoding в BC: контрольный байт не равен нулю - PullRequest
0 голосов
/ 06 мая 2019

Я нашел этот код в BouncyCastle в классе PKCS1Encoding , когда метод checkPkcs1Encoding пытается проверить, что байтовый массив не содержит нулевой (0) байт.

private static int checkPkcs1Encoding(byte[] encoded, int pLen)
{
    int correct = 0;

    [...]

    for (int i = 1; i < plen; i++)
    {
        int tmp = encoded[i];
        tmp |= tmp >> 1;
        tmp |= tmp >> 2;
        tmp |= tmp >> 4;
        correct |= (tmp & 1) - 1;
    }

    [...]
}

Я спрашивал себя, почему это был бы лучший подход при проверке того, что байт не равен 0, вместо того, чтобы просто делать что-то вроде:

encoded[i] != (byte) 0x00;

Это просто из-за постоянного поведения времени выполнения или что-то вродеболее короткая версия действительно не работает из-за определенных угловых случаев (подписанный байт, ...)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...