function encodeObjectIdentifier()

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,
  ]);
}