Files
@ 07d399b4c31c
Branch filter:
Location: CryptoJS/src/util.js - annotation
07d399b4c31c
3.6 KiB
text/javascript
updated .hgignore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | e2095e3881bf f425e00a94c6 e2095e3881bf e2095e3881bf 51344a25b55d 51344a25b55d e2095e3881bf e2095e3881bf f425e00a94c6 f425e00a94c6 e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf f425e00a94c6 f425e00a94c6 f425e00a94c6 f425e00a94c6 944bd9524df4 944bd9524df4 944bd9524df4 e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf f425e00a94c6 f425e00a94c6 f425e00a94c6 f425e00a94c6 944bd9524df4 944bd9524df4 944bd9524df4 e2095e3881bf e2095e3881bf 944bd9524df4 944bd9524df4 944bd9524df4 944bd9524df4 e2095e3881bf e2095e3881bf f425e00a94c6 f425e00a94c6 e2095e3881bf e2095e3881bf f425e00a94c6 f425e00a94c6 e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf f425e00a94c6 e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf f425e00a94c6 e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf f425e00a94c6 e2095e3881bf f425e00a94c6 f425e00a94c6 f425e00a94c6 f425e00a94c6 e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf f425e00a94c6 e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf f425e00a94c6 e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf f425e00a94c6 f425e00a94c6 e2095e3881bf f425e00a94c6 90018dea7eac e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf 90018dea7eac e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf 90018dea7eac e2095e3881bf e2095e3881bf e2095e3881bf 90018dea7eac 90018dea7eac 90018dea7eac 90018dea7eac e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf e2095e3881bf 90018dea7eac e2095e3881bf e2095e3881bf 90018dea7eac 90018dea7eac 90018dea7eac 12f10d9d5948 e2095e3881bf e2095e3881bf 12f10d9d5948 12f10d9d5948 12f10d9d5948 | export const MASK = 0xffffffff;
export function zeroPad(arr, length) {
return arr.concat((new Array(length)).fill(0)).slice(0, length);
}
export function bytes2int32(arr) {
return arr.reduce((acc, b, i) => acc | b << (i*8));
}
export function bytes2int32s(arr) {
let res = [];
for (let i = 0; i < arr.length; i += 4) {
res.push(bytes2int32(arr.slice(i, i+4)));
}
return res;
}
/**
* Converts a 32 bit integer into 4 bytes in little endian order.
*/
export function int322bytes(x) {
let res = [];
for (let i = 0; i < 4; i++) {
res.push(x & 0xff);
x >>>= 8;
}
return res;
}
/**
* Converts a 32 bit integer into 4 bytes in big endian order.
*/
export function int322bytesBE(x) {
let res = int322bytes(x);
res.reverse();
return res;
}
export function int32s2bytes(arr) {
return arr.map(int322bytes).reduce((acc, bytes) => acc.concat(bytes));
}
export function bytes2hex(arr) {
return arr.map(x => x.toString(16).padStart(2, "0")).join("");
}
export function str2utf8(s) {
let res = [];
let c = s.codePointAt(0);
for (let i=0; c!==undefined; i++, c=s.codePointAt(i)) {
if (c < 0x80) {res.push(c);}
else if (c < 0x800) {
res.push(0b11000000 | (c >>> 6));
res.push(0b10000000 | (c & 0b111111));
}
else if (c < 0x10000) {
res.push(0b11100000 | (c >>> 12));
res.push(0b10000000 | ((c >>> 6) & 0b111111));
res.push(0b10000000 | (c & 0b111111));
}
else {
res.push(0b11110000 | (c >>> 18));
res.push(0b10000000 | ((c >>> 12) & 0b111111));
res.push(0b10000000 | ((c >>> 6) & 0b111111));
res.push(0b10000000 | (c & 0b111111));
}
if (c > 0xffff) {i++;} // skip surrogate
}
return res;
}
export function utf82str(arr) {
let res = [];
for (let i = 0; i < arr.length; i++) {
let x = arr[i];
if (x <= 0b1111111) {res.push(x);}
else if (x <= 0b11011111) {
let a = x & 0b11111;
let b = arr[++i] & 0b111111;
res.push(a << 6 | b);
}
else if (x <= 0b11101111) {
let a = x & 0b1111;
let b = arr[++i] & 0b111111;
let c = arr[++i] & 0b111111;
res.push(a << 12 | b << 6 | c);
}
else {
let a = x & 0b111;
let b = arr[++i] & 0b111111;
let c = arr[++i] & 0b111111;
let d = arr[++i] & 0b111111;
res.push(a << 18 | b << 12 | c << 6 | d);
}
}
return res.map(x => String.fromCodePoint(x)).join("");
}
const mapping = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
const remapping = new Array(128);
mapping.forEach((c, i) => {remapping[c.charCodeAt(0)] = i;});
export function bytes2base64(byteArr) {
let arr = byteArr.concat();
let out = [];
let rem = (3 - arr.length%3) % 3;
for (let i = 0; i < rem; i++) {arr.push(0);} // pad array to a multiple of 3
for (let i = 0; i < arr.length; i += 3) { // encode 3 bytes into 4 characters
out.push(mapping[arr[i]>>>2 & 63]);
out.push(mapping[((arr[i]&3) << 4) + (arr[i+1]>>>4 & 15)]);
out.push(mapping[((arr[i+1]&15) << 2) + (arr[i+2]>>>6 & 3)]);
out.push(mapping[arr[i+2] & 63]);
}
for (let i = 0; i < rem; i++) {out.pop();}
for (let i = 0; i < rem; i++) {out.push("=");}
return out.join("");
}
export function base642bytes(str) {
let out = [];
for (let i = 0; i < str.length; i += 4) {
let b1 = remapping[str.charCodeAt(i)];
let b2 = remapping[str.charCodeAt(i+1)];
let b3 = remapping[str.charCodeAt(i+2)];
let b4 = remapping[str.charCodeAt(i+3)];
out.push((b1<<2) + (b2>>4 & 3));
out.push(((b2&15) << 4) + (b3>>2 & 15));
out.push(((b3&3) << 6) + b4);
}
for (let i=1; i<3 && str[str.length-i]=="="; i++) {out.pop();}
return out;
}
export function createRandomNonce(n) {
let nonce = new Uint8Array(n);
window.crypto.getRandomValues(nonce);
return Array.from(nonce);
}
|