asn1-ts
Version:
ASN.1 encoding and decoding, including BER, CER, and DER.
24 lines (23 loc) • 836 B
JavaScript
import * as errors from "../errors.mjs";
import { MIN_UINT_32, MAX_UINT_32 } from "../values.mjs";
import { Buffer } from "node:buffer";
export default function encodeUnsignedBigEndianInteger(value) {
if (value < MIN_UINT_32) {
throw new errors.ASN1OverflowError(`Number ${value} too small to be encoded as a big-endian unsigned integer.`);
}
if (value > MAX_UINT_32) {
throw new errors.ASN1OverflowError(`Number ${value} too big to be encoded as a big-endian unsigned integer.`);
}
const bytes = Buffer.alloc(4);
bytes.writeUInt32BE(value);
let startOfNonPadding = 0;
for (let i = 0; i < bytes.length - 1; i++) {
if (bytes[i] === 0x00) {
startOfNonPadding++;
}
else {
break;
}
}
return bytes.subarray(startOfNonPadding);
}