Changeset e34b646 for router


Ignore:
Timestamp:
Feb 19, 2019 7:11:34 PM (17 months ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
17270b15
Parents:
14ac8fe5
Message:

Crypto: New ChaCha20 wrapper around ChaChaCore?, for use with Encrypted LS2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • router/java/src/com/southernstorm/noise/protocol/ChaChaPolyCipherState.java

    r14ac8fe5 re34b646  
    9090                return haskey;
    9191        }
    92 
    93         /**
    94          * XOR's the output of ChaCha20 with a byte buffer.
    95          *
    96          * @param input The input byte buffer.
    97          * @param inputOffset The offset of the first input byte.
    98          * @param output The output byte buffer (can be the same as the input).
    99          * @param outputOffset The offset of the first output byte.
    100          * @param length The number of bytes to XOR between 1 and 64.
    101          * @param block The ChaCha20 output block.
    102          */
    103         private static void xorBlock(byte[] input, int inputOffset, byte[] output, int outputOffset, int length, int[] block)
    104         {
    105                 int posn = 0;
    106                 int value;
    107                 while (length >= 4) {
    108                         value = block[posn++];
    109                         output[outputOffset] = (byte)(input[inputOffset] ^ value);
    110                         output[outputOffset + 1] = (byte)(input[inputOffset + 1] ^ (value >> 8));
    111                         output[outputOffset + 2] = (byte)(input[inputOffset + 2] ^ (value >> 16));
    112                         output[outputOffset + 3] = (byte)(input[inputOffset + 3] ^ (value >> 24));
    113                         inputOffset += 4;
    114                         outputOffset += 4;
    115                         length -= 4;
    116                 }
    117                 if (length == 3) {
    118                         value = block[posn];
    119                         output[outputOffset] = (byte)(input[inputOffset] ^ value);
    120                         output[outputOffset + 1] = (byte)(input[inputOffset + 1] ^ (value >> 8));
    121                         output[outputOffset + 2] = (byte)(input[inputOffset + 2] ^ (value >> 16));
    122                 } else if (length == 2) {
    123                         value = block[posn];
    124                         output[outputOffset] = (byte)(input[inputOffset] ^ value);
    125                         output[outputOffset + 1] = (byte)(input[inputOffset + 1] ^ (value >> 8));
    126                 } else if (length == 1) {
    127                         value = block[posn];
    128                         output[outputOffset] = (byte)(input[inputOffset] ^ value);
    129                 }
    130         }
    13192       
    13293        /**
     
    142103                ChaChaCore.hash(output, input);
    143104                Arrays.fill(polyKey, (byte)0);
    144                 xorBlock(polyKey, 0, polyKey, 0, 32, output);
     105                ChaChaCore.xorBlock(polyKey, 0, polyKey, 0, 32, output);
    145106                poly.reset(polyKey, 0);
    146107                if (ad != null) {
     
    202163                                tempLen = length;
    203164                        ChaChaCore.hash(output, input);
    204                         xorBlock(plaintext, plaintextOffset, ciphertext, ciphertextOffset, tempLen, output);
     165                        ChaChaCore.xorBlock(plaintext, plaintextOffset, ciphertext, ciphertextOffset, tempLen, output);
    205166                        if (++(input[12]) == 0)
    206167                                ++(input[13]);
Note: See TracChangeset for help on using the changeset viewer.