Changeset b8c97a1


Ignore:
Timestamp:
May 17, 2017 3:54:37 PM (3 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
96bdfb3
Parents:
a5551c1
Message:

AES: More cleanups and javadocs

Location:
core/java/src/net/i2p/crypto
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • core/java/src/net/i2p/crypto/CryptixAESKeyCache.java

    ra5551c1 rb8c97a1  
    99 * data referenced in it is needed (which often is only one or two lines
    1010 * of code)
     11 *
     12 * Not for external use, not a public API.
    1113 *
    1214 * Unused as a class, as the keys are cached in the SessionKey objects,
  • core/java/src/net/i2p/crypto/CryptixRijndael_Algorithm.java

    ra5551c1 rb8c97a1  
    112112            _alog[i] = j;
    113113        }
    114         for (i = 1; i < 255; i++)
     114        for (i = 1; i < 255; i++) {
    115115            _log[_alog[i]] = i;
     116        }
    116117        byte[][] A = new byte[][] { { 1, 1, 1, 1, 1, 0, 0, 0}, { 0, 1, 1, 1, 1, 1, 0, 0}, { 0, 0, 1, 1, 1, 1, 1, 0},
    117118                                   { 0, 0, 0, 1, 1, 1, 1, 1}, { 1, 0, 0, 0, 1, 1, 1, 1}, { 1, 1, 0, 0, 0, 1, 1, 1},
     
    127128        for (i = 2; i < 256; i++) {
    128129            j = _alog[255 - _log[i]];
    129             for (t = 0; t < 8; t++)
     130            for (t = 0; t < 8; t++) {
    130131                box[i][t] = (byte) ((j >>> (7 - t)) & 0x01);
     132            }
    131133        }
    132134        //
     
    134136        //
    135137        byte[][] cox = new byte[256][8];
    136         for (i = 0; i < 256; i++)
     138        for (i = 0; i < 256; i++) {
    137139            for (t = 0; t < 8; t++) {
    138140                cox[i][t] = B[t];
    139                 for (j = 0; j < 8; j++)
     141                for (j = 0; j < 8; j++) {
    140142                    cox[i][t] ^= A[t][j] * box[i][j];
    141             }
     143                }
     144            }
     145        }
    142146        //
    143147        // S-boxes and inverse S-boxes
     
    145149        for (i = 0; i < 256; i++) {
    146150            _S[i] = (byte) (cox[i][0] << 7);
    147             for (t = 1; t < 8; t++)
     151            for (t = 1; t < 8; t++) {
    148152                _S[i] ^= cox[i][t] << (7 - t);
     153            }
    149154            _Si[_S[i] & 0xFF] = (byte) i;
    150155        }
     
    155160        byte[][] AA = new byte[4][8];
    156161        for (i = 0; i < 4; i++) {
    157             for (j = 0; j < 4; j++)
     162            for (j = 0; j < 4; j++) {
    158163                AA[i][j] = G[i][j];
     164            }
    159165            AA[i][i + 4] = 1;
    160166        }
     
    177183                pivot = AA[i][i];
    178184            }
    179             for (j = 0; j < 8; j++)
     185            for (j = 0; j < 8; j++) {
    180186                if (AA[i][j] != 0) AA[i][j] = (byte) _alog[(255 + _log[AA[i][j] & 0xFF] - _log[pivot & 0xFF]) % 255];
    181             for (t = 0; t < 4; t++)
     187            }
     188            for (t = 0; t < 4; t++) {
    182189                if (i != t) {
    183190                    for (j = i + 1; j < 8; j++)
     
    185192                    AA[t][i] = 0;
    186193                }
    187         }
    188         for (i = 0; i < 4; i++)
    189             for (j = 0; j < 4; j++)
     194            }
     195        }
     196        for (i = 0; i < 4; i++) {
     197            for (j = 0; j < 4; j++) {
    190198                iG[i][j] = AA[i][j + 4];
     199            }
     200        }
    191201
    192202        int s;
     
    214224        _rcon[0] = 1;
    215225        int r = 1;
    216         for (t = 1; t < 30;)
     226        for (t = 1; t < 30;) {
    217227            _rcon[t++] = (byte) (r = mul(2, r));
     228        }
    218229
    219230/****
     
    373384     * @param k The 128/192/256-bit user-key to use.
    374385     * @throws  InvalidKeyException  If the key is invalid.
     386     * @return an array of two int[][] containing { Ke, Kd }
    375387     */
    376388    public static final Object makeKey(byte[] k) throws InvalidKeyException {
     
    385397     * @param  result     The resulting ciphertext.
    386398     * @param  inOffset   Index of in from which to start considering data.
    387      * @param  sessionKey The session key to use for encryption.
     399     * @param  sessionKey The session key to use for encryption. This is an array of two int[][].
     400                          We use the first one, i.e. sessionKey[0], for encryption.
    388401     */
    389402    public static final void blockEncrypt(byte[] in, byte[] result, int inOffset, int outOffset, Object sessionKey) {
     
    459472     * @param  result     The resulting ciphertext
    460473     * @param  inOffset   Index of in from which to start considering data.
    461      * @param  sessionKey The session key to use for decryption.
     474     * @param  sessionKey The session key to use for decryption. This is an array of two int[][].
     475                          We use the second one, i.e. sessionKey[1], for decryption.
    462476     */
    463477    public static final void blockDecrypt(byte[] in, byte[] result, int inOffset, int outOffset, Object sessionKey) {
     
    550564     *
    551565     * @param k          The 128/192/256-bit user-key to use.
    552      * @param blockSize  The block size in bytes of this Rijndael.
     566     * @param blockSize  The block size in bytes of this Rijndael, must be 16, 24, or 32.
    553567     * @throws  InvalidKeyException  If the key is invalid.
     568     * @return an array of two int[][] containing { Ke, Kd }
    554569     */
    555570    public static final Object makeKey(byte[] k, int blockSize) throws InvalidKeyException {
     
    557572    }
    558573
     574    /**
     575     * Expand a user-supplied key material into a session key.
     576     * Not for external use, not a public API.
     577     *
     578     * @param k          The 128/192/256-bit user-key to use.
     579     * @param blockSize  The block size in bytes of this Rijndael, must be 16, 24, or 32.
     580     * @param keyData a cached data structure to fill in, or null.
     581     * @throws  InvalidKeyException  If the key is invalid.
     582     * @return an array of two int[][] containing { Ke, Kd }.
     583     *         If keyData is non-null, this is keyData.key.
     584     *         If keyData is null, this is newly allocated.
     585     */
    559586    public static final Object makeKey(byte[] k, int blockSize, CryptixAESKeyCache.KeyCacheEntry keyData) throws InvalidKeyException {
    560587        //if (_RDEBUG) trace(_IN, "makeKey(" + k + ", " + blockSize + ")");
     
    586613
    587614        // copy user material bytes into temporary ints
    588         for (i = 0, j = 0; i < KC;)
     615        for (i = 0, j = 0; i < KC;) {
    589616            tk[i++] = (k[j++] & 0xFF) << 24 | (k[j++] & 0xFF) << 16 | (k[j++] & 0xFF) << 8 | (k[j++] & 0xFF);
     617        }
    590618        // copy values into round key arrays
    591619        int t = 0;
     
    601629                     ^ (_S[tt & 0xFF] & 0xFF) << 8 ^ (_S[(tt >>> 24) & 0xFF] & 0xFF)
    602630                     ^ (_rcon[rconpointer++] & 0xFF) << 24;
    603             if (KC != 8)
     631            if (KC != 8) {
    604632                for (i = 1, j = 0; i < KC;) {
    605633                    //tk[i++] ^= tk[j++];
     
    609637                    i++;
    610638                }
    611             else {
     639            } else {
    612640                for (i = 1, j = 0; i < KC / 2;) {
    613641                    //tk[i++] ^= tk[j++];
     
    650678     * @param  result     The resulting ciphertext.
    651679     * @param  inOffset   Index of in from which to start considering data.
    652      * @param  sessionKey The session key to use for encryption.
     680     * @param  sessionKey The session key to use for encryption. This is an array of two int[][].
     681                          We use the first one, i.e. sessionKey[0], for encryption.
    653682     * @param  blockSize  The block size in bytes of this Rijndael.
    654683     */
     
    674703        int tt;
    675704
    676         for (i = 0; i < BC; i++)
     705        for (i = 0; i < BC; i++) {
    677706            // plaintext to ints + key
    678707            t[i] = ((in[inOffset++] & 0xFF) << 24 | (in[inOffset++] & 0xFF) << 16 | (in[inOffset++] & 0xFF) << 8 | (in[inOffset++] & 0xFF))
    679708                   ^ Ke[0][i];
     709        }
    680710        for (int r = 1; r < ROUNDS; r++) { // apply round transforms
    681             for (i = 0; i < BC; i++)
     711            for (i = 0; i < BC; i++) {
    682712                a[i] = (_T1[(t[i] >>> 24) & 0xFF] ^ _T2[(t[(i + s1) % BC] >>> 16) & 0xFF]
    683713                        ^ _T3[(t[(i + s2) % BC] >>> 8) & 0xFF] ^ _T4[t[(i + s3) % BC] & 0xFF])
    684714                       ^ Ke[r][i];
     715            }
    685716            System.arraycopy(a, 0, t, 0, BC);
    686717            //if (_RDEBUG && _debuglevel > 6) System.out.println("CT" + r + "=" + toString(t));
     
    708739     * @param  result     The resulting ciphertext.
    709740     * @param  inOffset   Index of in from which to start considering data.
    710      * @param  sessionKey The session key to use for decryption.
     741     * @param  sessionKey The session key to use for decryption. This is an array of two int[][].
     742                          We use the second one, i.e. sessionKey[1], for decryption.
    711743     * @param  blockSize  The block size in bytes of this Rijndael.
    712744     */
     
    733765        int tt;
    734766
    735         for (i = 0; i < BC; i++)
     767        for (i = 0; i < BC; i++) {
    736768            // ciphertext to ints + key
    737769            t[i] = ((in[inOffset++] & 0xFF) << 24 | (in[inOffset++] & 0xFF) << 16 | (in[inOffset++] & 0xFF) << 8 | (in[inOffset++] & 0xFF))
    738770                   ^ Kd[0][i];
     771        }
    739772        for (int r = 1; r < ROUNDS; r++) { // apply round transforms
    740             for (i = 0; i < BC; i++)
     773            for (i = 0; i < BC; i++) {
    741774                a[i] = (_T5[(t[i] >>> 24) & 0xFF] ^ _T6[(t[(i + s1) % BC] >>> 16) & 0xFF]
    742775                        ^ _T7[(t[(i + s2) % BC] >>> 8) & 0xFF] ^ _T8[t[(i + s3) % BC] & 0xFF])
    743776                       ^ Kd[r][i];
     777            }
    744778            System.arraycopy(a, 0, t, 0, BC);
    745779            //if (_RDEBUG && _debuglevel > 6) System.out.println("PT" + r + "=" + toString(t));
Note: See TracChangeset for help on using the changeset viewer.