asn1-ts
Version:
ASN.1 encoding and decoding, including BER, CER, and DER.
37 lines (36 loc) • 1.14 kB
JavaScript
import * as errors from "../errors.mjs";
import { MIN_SINT_32, MAX_SINT_32 } from "../values.mjs";
export default function encodeBigEndianSignedInteger(value) {
if (value < MIN_SINT_32) {
throw new errors.ASN1OverflowError(`Number ${value} too small to be encoded as a big-endian signed integer.`);
}
if (value > MAX_SINT_32) {
throw new errors.ASN1OverflowError(`Number ${value} too big to be encoded as a big-endian signed integer.`);
}
if (value <= 127 && value >= -128) {
return new Uint8Array([
(value & 255),
]);
}
else if (value <= 32767 && value >= -32768) {
return new Uint8Array([
((value >> 8) & 255),
(value & 255),
]);
}
else if (value <= 8388607 && value >= -8388608) {
return new Uint8Array([
((value >> 16) & 255),
((value >> 8) & 255),
(value & 255),
]);
}
else {
return new Uint8Array([
((value >> 24) & 255),
((value >> 16) & 255),
((value >> 8) & 255),
(value & 255),
]);
}
}