* @param {'argon2d' | 'argon2i' | 'argon2id'} algorithm * @param {object} parameters * @param {ArrayBufferLike} parameters.message * @param {ArrayBufferLike} parameters.nonce * @param {number} parameters.parallelism * @param {number} parameters.tagLength * @param {number} parameters.memory *
(algorithm, parameters)
| 136 | * @returns {object} |
| 137 | */ |
| 138 | function check(algorithm, parameters) { |
| 139 | if (Argon2Job === undefined) |
| 140 | throw new ERR_CRYPTO_ARGON2_NOT_SUPPORTED(); |
| 141 | |
| 142 | validateString(algorithm, 'algorithm'); |
| 143 | validateOneOf(algorithm, 'algorithm', ['argon2d', 'argon2i', 'argon2id']); |
| 144 | |
| 145 | const type = { |
| 146 | '__proto__': null, |
| 147 | 'argon2d': kTypeArgon2d, |
| 148 | 'argon2i': kTypeArgon2i, |
| 149 | 'argon2id': kTypeArgon2id, |
| 150 | }[algorithm]; |
| 151 | |
| 152 | validateObject(parameters, 'parameters'); |
| 153 | |
| 154 | const { parallelism, tagLength, memory, passes } = parameters; |
| 155 | const MAX_POSITIVE_UINT_32 = MathPow(2, 32) - 1; |
| 156 | |
| 157 | const message = getArrayBufferOrView(parameters.message, 'parameters.message'); |
| 158 | validateInteger(message.byteLength, 'parameters.message.byteLength', 0, MAX_POSITIVE_UINT_32); |
| 159 | |
| 160 | const nonce = getArrayBufferOrView(parameters.nonce, 'parameters.nonce'); |
| 161 | validateInteger(nonce.byteLength, 'parameters.nonce.byteLength', 8, MAX_POSITIVE_UINT_32); |
| 162 | |
| 163 | validateInteger(parallelism, 'parameters.parallelism', 1, MathPow(2, 24) - 1); |
| 164 | validateInteger(tagLength, 'parameters.tagLength', 4, MAX_POSITIVE_UINT_32); |
| 165 | validateInteger(memory, 'parameters.memory', 8 * parallelism, MAX_POSITIVE_UINT_32); |
| 166 | validateUint32(passes, 'parameters.passes', true); |
| 167 | |
| 168 | let secret; |
| 169 | if (parameters.secret === undefined) { |
| 170 | secret = new Uint8Array(0); |
| 171 | } else { |
| 172 | secret = getArrayBufferOrView(parameters.secret); |
| 173 | validateInteger(secret.byteLength, 'parameters.secret.byteLength', 0, MAX_POSITIVE_UINT_32); |
| 174 | } |
| 175 | |
| 176 | let associatedData; |
| 177 | if (parameters.associatedData === undefined) { |
| 178 | associatedData = new Uint8Array(0); |
| 179 | } else { |
| 180 | associatedData = getArrayBufferOrView(parameters.associatedData); |
| 181 | validateInteger(associatedData.byteLength, 'parameters.associatedData.byteLength', 0, MAX_POSITIVE_UINT_32); |
| 182 | } |
| 183 | |
| 184 | return { message, nonce, secret, associatedData, tagLength, passes, parallelism, memory, type }; |
| 185 | } |
| 186 | |
| 187 | function validateArgon2DeriveBitsLength(length) { |
| 188 | if (length === null) |
no outgoing calls
no test coverage detected
searching dependent graphs…