in src/asn1.ts [96:124]
function encodeObjectIdentifier(oid: string) {
const oidComponents = oid.split(".").map((i) => parseInt(i));
const firstSubidentifier = oidComponents[0] * 40 + oidComponents[1];
const subsequentSubidentifiers = oidComponents
.slice(2)
.reduce((expanded, component) => {
const bytes: number[] = [];
do {
bytes.push(component % 128);
component = component >> 7;
} while (component);
return expanded.concat(
bytes.map((b, index) => (index ? b + 128 : b)).reverse()
);
}, [] as number[]);
const oidBuffer = Buffer.from([
firstSubidentifier,
...subsequentSubidentifiers,
]);
return Buffer.concat([
encodeIdentifier({
class: Asn1Class.Universal,
primitiveOrConstructed: Asn1Encoding.Primitive,
tag: Asn1Tag.ObjectIdentifier,
}),
encodeLength(oidBuffer.length),
oidBuffer,
]);
}