This commit is contained in:
n1474335 2022-11-25 15:30:32 +00:00
parent 55809b2e87
commit 3f85c32c7c
2 changed files with 16 additions and 15 deletions

View file

@ -381,6 +381,7 @@ class Utils {
} }
} }
/** /**
* Converts a byte array to an integer. * Converts a byte array to an integer.
* *
@ -390,10 +391,10 @@ class Utils {
* *
* @example * @example
* // returns 67305985 * // returns 67305985
* Utils.byteArrayToInt([ 1, 2, 3, 4], "little"); * Utils.byteArrayToInt([1, 2, 3, 4], "little");
* *
* // returns 16909060 * // returns 16909060
* Utils.byteArrayToInt([ 1, 2, 3, 4], "big"); * Utils.byteArrayToInt([1, 2, 3, 4], "big");
*/ */
static byteArrayToInt(byteArray, byteorder) { static byteArrayToInt(byteArray, byteorder) {
let value = 0; let value = 0;
@ -409,6 +410,7 @@ class Utils {
return value; return value;
} }
/** /**
* Converts an integer to a byte array of {length} bytes. * Converts an integer to a byte array of {length} bytes.
* *
@ -418,13 +420,13 @@ class Utils {
* @returns {byteArray} * @returns {byteArray}
* *
* @example * @example
* // returns [ 5, 255, 109, 1 ] * // returns [5, 255, 109, 1]
* Utils.intToByteArray(23985925, 4, "little"); * Utils.intToByteArray(23985925, 4, "little");
* *
* // returns [ 1, 109, 255, 5 ] * // returns [1, 109, 255, 5]
* Utils.intToByteArray(23985925, 4, "big"); * Utils.intToByteArray(23985925, 4, "big");
* *
* // returns [ 0, 0, 0, 0, 1, 109, 255, 5 ] * // returns [0, 0, 0, 0, 1, 109, 255, 5]
* Utils.intToByteArray(23985925, 8, "big"); * Utils.intToByteArray(23985925, 8, "big");
*/ */
static intToByteArray(value, length, byteorder) { static intToByteArray(value, length, byteorder) {
@ -443,6 +445,7 @@ class Utils {
return arr; return arr;
} }
/** /**
* Converts a string to an ArrayBuffer. * Converts a string to an ArrayBuffer.
* Treats the string as UTF-8 if any values are over 255. * Treats the string as UTF-8 if any values are over 255.

View file

@ -159,9 +159,12 @@ class ChaCha extends Operation {
ChaCha uses a key of 16 or 32 bytes (128 or 256 bits).`); ChaCha uses a key of 16 or 32 bytes (128 or 256 bits).`);
} }
let counter, nonce;
let counterLength; let counter, nonce, counterLength;
if (nonceType !== "Integer") { if (nonceType === "Integer") {
nonce = Utils.intToByteArray(parseInt(args[1].string, 10), 12, "little");
counterLength = 4;
} else {
nonce = Utils.convertToByteArray(args[1].string, args[1].option); nonce = Utils.convertToByteArray(args[1].string, args[1].option);
if (!(nonce.length === 12 || nonce.length === 8)) { if (!(nonce.length === 12 || nonce.length === 8)) {
throw new OperationError(`Invalid nonce length: ${nonce.length} bytes. throw new OperationError(`Invalid nonce length: ${nonce.length} bytes.
@ -169,15 +172,10 @@ ChaCha uses a key of 16 or 32 bytes (128 or 256 bits).`);
ChaCha uses a nonce of 8 or 12 bytes (64 or 96 bits).`); ChaCha uses a nonce of 8 or 12 bytes (64 or 96 bits).`);
} }
counterLength = 16 - nonce.length; counterLength = 16 - nonce.length;
counter = Utils.intToByteArray(args[2], counterLength, "little");
} }
if (nonceType === "Integer") {
nonce = Utils.intToByteArray(parseInt(args[1].string, 10), 12, "little");
counterLength = 4;
counter = Utils.intToByteArray(args[2], counterLength, "little"); counter = Utils.intToByteArray(args[2], counterLength, "little");
}
const output = new Array(); const output = [];
input = Utils.convertToByteArray(input, inputType); input = Utils.convertToByteArray(input, inputType);
let counterAsInt = Utils.byteArrayToInt(counter, "little"); let counterAsInt = Utils.byteArrayToInt(counter, "little");