Unshackle-Services/AbemaTV/javascript/abemaHmac.js

68 lines
1.9 KiB
JavaScript

const crypto = require('crypto').webcrypto;
function ne(e) {
return btoa(String.fromCharCode.apply(null, Array.from(e))).split("=").join("").split("+").join("-").split("/").join("_")
}
async function re(e, t) {
const n = await crypto.subtle.sign("HMAC", e, t);
return new Uint8Array(n)
}
async function ie(e, t, n) {
let r = t;
for (let t = 0; t < n + 1; t += 1)
r = await re(e, r);
return r
}
async function oe(e, t, n) {
const r = await async function(e) {
const t = (new TextEncoder).encode(e);
return crypto.subtle.importKey("raw", t, {
name: "HMAC",
hash: {
name: "SHA-256"
}
}, !1, ["sign"])
}(e), i = new TextEncoder, o = await ie(r, i.encode(e), n.getUTCMonth() + 1).then((e => ie(r, i.encode(ne(e) + t), n.getUTCDate() % 5))).then((e => ie(r, i.encode(ne(e) + String((0,
z)(n.getTime()))), n.getUTCHours() % 5)));
return ne(o)
}
function ae(e, t) {
return oe("v+Gjs=25Aw5erR!J8ZuvRrCx*rGswhB&qdHd_SYerEWdU&a?3DzN9BRbp5KwY4hEmcj5#fykMjJ=AuWz5GSMY-d@H7DMEh3M@9n2G552Us$$k9cD=3TxwWe86!x#Zyhe", e, t)
}
function K(e) {
return e ?? Date.now()
}
function z(e) {
const t = K(e);
return Math.floor(t / 1e3)
}
function genId() {
for (var e, n = "", r = 0; r < 32; r++)
e = 16 * Math.random() | 0,
r > 4 && r < 21 && !(r % 4) && (n += "-"),
n += (12 === r ? 4 : 16 === r ? 3 & e | 8 : e).toString(16);
return n
}
function te() {
const e = new Date;
return e.setHours(e.getHours() + 1),
e.setMinutes(0),
e.setSeconds(0),
e
}
async function genJson() {
var e = genId()
return {
deviceId: e,
applicationKeySecret: await ae(e, te())
}
}
genJson().then((result) => console.log(JSON.stringify(result)));