summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/crypto/00_crypto.js15
1 files changed, 6 insertions, 9 deletions
diff --git a/ext/crypto/00_crypto.js b/ext/crypto/00_crypto.js
index 5826132d2..907308325 100644
--- a/ext/crypto/00_crypto.js
+++ b/ext/crypto/00_crypto.js
@@ -27,6 +27,7 @@
Int8ArrayPrototype,
JSONParse,
JSONStringify,
+ MathCeil,
ObjectAssign,
ObjectPrototypeIsPrototypeOf,
StringPrototypeToLowerCase,
@@ -4396,14 +4397,11 @@
// 8.
if (length === null) {
return buf.buffer;
- }
- if (
- length === 0 || buf.buffer.byteLength * 8 < length ||
- length % 8 !== 0
- ) {
+ } else if (buf.buffer.byteLength * 8 < length) {
throw new DOMException("Invalid length", "OperationError");
+ } else {
+ return buf.buffer.slice(0, MathCeil(length / 8));
}
- return buf.buffer.slice(0, length / 8);
} else {
throw new DOMException("Not implemented", "NotSupportedError");
}
@@ -4469,12 +4467,11 @@
if (length === null) {
return secret.buffer;
} else if (
- length === 0 || secret.buffer.byteLength * 8 < length ||
- secret.length * 8 < length
+ secret.buffer.byteLength * 8 < length
) {
throw new DOMException("Invalid length", "OperationError");
} else {
- return secret.subarray(0, length / 8).buffer;
+ return secret.buffer.slice(0, MathCeil(length / 8));
}
}
default: