@xnstream/player-sdk
Version:
XStream Player SDK - A powerful video player SDK for streaming content
59 lines • 2.25 kB
JavaScript
import { Buffer } from "buffer";
import HmacSHA256 from "crypto-js/hmac-sha256";
import CryptoJS from "crypto-js";
export function generateSignature(message, key) {
const hash = HmacSHA256(message, key);
return hash;
}
export function generateRandomSalt() {
const array = new Uint8Array(16);
crypto.getRandomValues(array);
return Array.from(array, (byte) => byte.toString(16).padStart(2, "0")).join("");
}
export function base64Encode(data) {
if (data instanceof Uint8Array) {
return Buffer.from(data).toString("base64");
}
else {
// Convert WordArray to Uint8Array
const words = data.words;
const sigBytes = data.sigBytes;
const u8 = new Uint8Array(sigBytes);
for (let i = 0; i < sigBytes; i++) {
u8[i] = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
}
return Buffer.from(u8).toString("base64");
}
}
export function base64Decode(str) {
return new Uint8Array(Buffer.from(str, "base64"));
}
export function wordArrayToUint8Array(wordArray) {
const words = wordArray.words;
const sigBytes = wordArray.sigBytes;
const u8 = new Uint8Array(sigBytes);
for (let i = 0; i < sigBytes; i++) {
u8[i] = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
}
return u8;
}
export function uint8ArrayToWordArray(u8) {
const words = [];
for (let i = 0; i < u8.length; i += 4) {
let word = 0;
for (let j = 0; j < 4 && i + j < u8.length; j++) {
word |= u8[i + j] << (24 - j * 8);
}
words.push(word);
}
return CryptoJS.lib.WordArray.create(words, u8.length);
}
export function decryptAESWithCryptoJS(encryptedData, key) {
const rawBytes = CryptoJS.enc.Base64.parse(encryptedData);
const keyWordArray = CryptoJS.enc.Base64.parse(key);
const iv = CryptoJS.lib.WordArray.create(rawBytes.words.slice(0, 4), 16);
const messageBytes = CryptoJS.lib.WordArray.create(rawBytes.words.slice(4));
const decrypted = CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(messageBytes), keyWordArray, { iv: iv, mode: CryptoJS.mode.CTR, padding: CryptoJS.pad.NoPadding });
return decrypted.toString(CryptoJS.enc.Utf8);
}
//# sourceMappingURL=crypto.js.map