Add input length validation in scryptFromU8a function (#1990)
* fix: add input length validation in scryptFromU8a function * fix: improve input validation in scryptFromU8a function * fix: linting * fix: update default Scrypt parameters for improved security * revert: 9070615 * fix: remove dymanic calculation
This commit is contained in:
@@ -14,10 +14,19 @@ interface Result {
|
||||
}
|
||||
|
||||
export function scryptFromU8a (data: Uint8Array): Result {
|
||||
if (!(data instanceof Uint8Array)) {
|
||||
throw new Error('Expected input to be a Uint8Array');
|
||||
}
|
||||
|
||||
// Ensure the input is exactly 44 bytes: 32 for salt + 3 * 4 for N, p, r
|
||||
if (data.length < 32 + 12) {
|
||||
throw new Error(`Invalid input length: expected 44 bytes, found ${data.length}`);
|
||||
}
|
||||
|
||||
const salt = data.subarray(0, 32);
|
||||
const N = u8aToBn(data.subarray(32 + 0, 32 + 4), BN_LE_OPTS).toNumber();
|
||||
const p = u8aToBn(data.subarray(32 + 4, 32 + 8), BN_LE_OPTS).toNumber();
|
||||
const r = u8aToBn(data.subarray(32 + 8, 32 + 12), BN_LE_OPTS).toNumber();
|
||||
const N = u8aToBn(data.subarray(32, 36), BN_LE_OPTS).toNumber();
|
||||
const p = u8aToBn(data.subarray(36, 40), BN_LE_OPTS).toNumber();
|
||||
const r = u8aToBn(data.subarray(40, 44), BN_LE_OPTS).toNumber();
|
||||
|
||||
// FIXME At this moment we assume these to be fixed params, this is not a great idea
|
||||
// since we lose flexibility and updates for greater security. However we need some
|
||||
|
||||
Reference in New Issue
Block a user