76 lines
2.2 KiB
JavaScript
76 lines
2.2 KiB
JavaScript
;(function (root, factory) {
|
|
if (typeof exports === "object") {
|
|
// CommonJS
|
|
module.exports = exports = factory(require("./core"));
|
|
}
|
|
else if (typeof define === "function" && define.amd) {
|
|
// AMD
|
|
define(["./core"], factory);
|
|
}
|
|
else {
|
|
// Global (browser)
|
|
factory(root.CryptoJS);
|
|
}
|
|
}(this, function (CryptoJS) {
|
|
|
|
(function () {
|
|
// Check if typed arrays are supported
|
|
if (typeof ArrayBuffer != 'function') {
|
|
return;
|
|
}
|
|
|
|
// Shortcuts
|
|
var C = CryptoJS;
|
|
var C_lib = C.lib;
|
|
var WordArray = C_lib.WordArray;
|
|
|
|
// Reference original init
|
|
var superInit = WordArray.init;
|
|
|
|
// Augment WordArray.init to handle typed arrays
|
|
var subInit = WordArray.init = function (typedArray) {
|
|
// Convert buffers to uint8
|
|
if (typedArray instanceof ArrayBuffer) {
|
|
typedArray = new Uint8Array(typedArray);
|
|
}
|
|
|
|
// Convert other array views to uint8
|
|
if (
|
|
typedArray instanceof Int8Array ||
|
|
(typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) ||
|
|
typedArray instanceof Int16Array ||
|
|
typedArray instanceof Uint16Array ||
|
|
typedArray instanceof Int32Array ||
|
|
typedArray instanceof Uint32Array ||
|
|
typedArray instanceof Float32Array ||
|
|
typedArray instanceof Float64Array
|
|
) {
|
|
typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);
|
|
}
|
|
|
|
// Handle Uint8Array
|
|
if (typedArray instanceof Uint8Array) {
|
|
// Shortcut
|
|
var typedArrayByteLength = typedArray.byteLength;
|
|
|
|
// Extract bytes
|
|
var words = [];
|
|
for (var i = 0; i < typedArrayByteLength; i++) {
|
|
words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);
|
|
}
|
|
|
|
// Initialize this word array
|
|
superInit.call(this, words, typedArrayByteLength);
|
|
} else {
|
|
// Else call normal init
|
|
superInit.apply(this, arguments);
|
|
}
|
|
};
|
|
|
|
subInit.prototype = WordArray;
|
|
}());
|
|
|
|
|
|
return CryptoJS.lib.WordArray;
|
|
|
|
})); |