1
0
mirror of https://github.com/octoleo/plantuml.git synced 2024-05-30 15:10:48 +00:00
plantuml/src/ext/plantuml/com/at/gadermaier/argon2/algorithm/FillBlock.java
2021-04-25 22:59:17 +02:00

56 lines
1.7 KiB
Java

/* This file is taken from
https://github.com/andreas1327250/argon2-java
Original Author: Andreas Gadermaier <up.gadermaier@gmail.com>
*/
package ext.plantuml.com.at.gadermaier.argon2.algorithm;
import ext.plantuml.com.at.gadermaier.argon2.model.Block;
class FillBlock {
static void fillBlock(Block X, Block Y, Block currentBlock, boolean withXor) {
Block R = new Block();
Block Z = new Block();
R.xor(X, Y);
Z.copyBlock(R);
/* Apply Blake2 on columns of 64-bit words: (0,1,...,15) , then
(16,17,..31)... finally (112,113,...127) */
for (int i = 0; i < 8; i++) {
Functions.roundFunction(Z,
16 * i, 16 * i + 1, 16 * i + 2,
16 * i + 3, 16 * i + 4, 16 * i + 5,
16 * i + 6, 16 * i + 7, 16 * i + 8,
16 * i + 9, 16 * i + 10, 16 * i + 11,
16 * i + 12, 16 * i + 13, 16 * i + 14,
16 * i + 15
);
}
/* Apply Blake2 on rows of 64-bit words: (0,1,16,17,...112,113), then
(2,3,18,19,...,114,115).. finally (14,15,30,31,...,126,127) */
for (int i = 0; i < 8; i++) {
Functions.roundFunction(Z,
2 * i, 2 * i + 1, 2 * i + 16,
2 * i + 17, 2 * i + 32, 2 * i + 33,
2 * i + 48, 2 * i + 49, 2 * i + 64,
2 * i + 65, 2 * i + 80, 2 * i + 81,
2 * i + 96, 2 * i + 97, 2 * i + 112,
2 * i + 113
);
}
if (withXor) {
currentBlock.xor(R, Z, currentBlock);
} else {
currentBlock.xor(R, Z);
}
}
}