asn1-ts
Version:
ASN.1 encoding and decoding, including BER, CER, and DER.
20 lines (19 loc) • 822 B
JavaScript
import { ASN1TagClass, CANONICAL_TAG_CLASS_ORDERING } from "../values.mjs";
export default function isInCanonicalOrder(elements) {
let previousTagClass = null;
let previousTagNumber = null;
return (elements.every((element) => {
if (previousTagClass !== null
&& element.tagClass !== previousTagClass
&& CANONICAL_TAG_CLASS_ORDERING.indexOf(element.tagClass)
<= CANONICAL_TAG_CLASS_ORDERING.indexOf(previousTagClass))
return false;
if (element.tagClass !== previousTagClass)
previousTagNumber = null;
if (previousTagNumber !== null && element.tagNumber < previousTagNumber)
return false;
previousTagClass = element.tagClass;
previousTagNumber = element.tagNumber;
return true;
}));
}