Files
NapCatQQ/.pnpm-store/v3/files/9d/89e916c8298ad214fa18c96a00c3465891711b6157c41174757b4b4045cff8af312f612057b6838215bc2d5cd957d7f847e3fe597ded151ca8e76db0333138
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

64 lines
2.1 KiB
Plaintext

import * as asn1js from "asn1js";
import { BufferSourceConverter } from "pvtsutils";
export class BitString {
constructor(params, unusedBits = 0) {
this.unusedBits = 0;
this.value = new ArrayBuffer(0);
if (params) {
if (typeof params === "number") {
this.fromNumber(params);
}
else if (BufferSourceConverter.isBufferSource(params)) {
this.unusedBits = unusedBits;
this.value = BufferSourceConverter.toArrayBuffer(params);
}
else {
throw TypeError("Unsupported type of 'params' argument for BitString");
}
}
}
fromASN(asn) {
if (!(asn instanceof asn1js.BitString)) {
throw new TypeError("Argument 'asn' is not instance of ASN.1 BitString");
}
this.unusedBits = asn.valueBlock.unusedBits;
this.value = asn.valueBlock.valueHex;
return this;
}
toASN() {
return new asn1js.BitString({ unusedBits: this.unusedBits, valueHex: this.value });
}
toSchema(name) {
return new asn1js.BitString({ name });
}
toNumber() {
let res = "";
const uintArray = new Uint8Array(this.value);
for (const octet of uintArray) {
res += octet.toString(2).padStart(8, "0");
}
res = res.split("").reverse().join("");
if (this.unusedBits) {
res = res.slice(this.unusedBits).padStart(this.unusedBits, "0");
}
return parseInt(res, 2);
}
fromNumber(value) {
let bits = value.toString(2);
const octetSize = (bits.length + 7) >> 3;
this.unusedBits = (octetSize << 3) - bits.length;
const octets = new Uint8Array(octetSize);
bits = bits
.padStart(octetSize << 3, "0")
.split("")
.reverse()
.join("");
let index = 0;
while (index < octetSize) {
octets[index] = parseInt(bits.slice(index << 3, (index << 3) + 8), 2);
index++;
}
this.value = octets.buffer;
}
}