UNPKG

@xnstream/player-sdk

Version:

XStream Player SDK - A powerful video player SDK for streaming content

59 lines 2.25 kB
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