import { ASN1Construction, ASN1TagClass } from "./values.mjs";
import type Byteable from "./interfaces/Byteable.mjs";
import type Named from "./interfaces/Named.mjs";
import type Long from "./interfaces/Long.mjs";
import type CharacterString from "./types/CharacterString.mjs";
import type Elementable from "./interfaces/Elementable.mjs";
import type { SingleThreadBuffer, BOOLEAN, INTEGER, BIT_STRING, OCTET_STRING, OBJECT_IDENTIFIER, ObjectDescriptor, EXTERNAL, REAL, ENUMERATED, EMBEDDED_PDV, UTF8String, RELATIVE_OID, SEQUENCE, SET, GraphicString, NumericString, VisibleString, PrintableString, TeletexString, GeneralString, UniversalString, VideotexString, BMPString, IA5String, UTCTime, GeneralizedTime, TIME, DATE, TIME_OF_DAY, DATE_TIME, DURATION, OID_IRI, RELATIVE_OID_IRI } from "./macros.mjs";
export default abstract class ASN1Element implements Byteable, Elementable, Named, Long {
    recursionCount: number;
    protected static readonly nestingRecursionLimit: number;
    name: string;
    tagClass: ASN1TagClass;
    construction: ASN1Construction;
    private _tagNumber;
    get tagNumber(): number;
    set tagNumber(value: number);
    abstract get value(): Uint8Array;
    abstract set value(v: Uint8Array);
    abstract construct(els: ASN1Element[]): void;
    abstract tagAndLengthBytes(): Uint8Array;
    abstract toBuffers(): Uint8Array[];
    tagLength(): number;
    abstract lengthLength(valueLength?: number): number;
    abstract valueLength(): number;
    abstract tlvLength(): number;
    toBytes(): SingleThreadBuffer;
    get length(): number;
    abstract fromBytes(bytes: Uint8Array): number;
    abstract set boolean(value: BOOLEAN);
    abstract get boolean(): BOOLEAN;
    abstract set integer(value: INTEGER);
    abstract get integer(): INTEGER;
    abstract set bitString(value: BIT_STRING);
    abstract get bitString(): BIT_STRING;
    abstract set octetString(value: OCTET_STRING);
    abstract get octetString(): OCTET_STRING;
    abstract set objectIdentifier(value: OBJECT_IDENTIFIER);
    abstract get objectIdentifier(): OBJECT_IDENTIFIER;
    abstract set objectDescriptor(value: ObjectDescriptor);
    abstract get objectDescriptor(): ObjectDescriptor;
    abstract set external(value: EXTERNAL);
    abstract get external(): EXTERNAL;
    abstract set real(value: REAL);
    abstract get real(): REAL;
    abstract set enumerated(value: ENUMERATED);
    abstract get enumerated(): ENUMERATED;
    abstract set embeddedPDV(value: EMBEDDED_PDV);
    abstract get embeddedPDV(): EMBEDDED_PDV;
    abstract set utf8String(value: UTF8String);
    abstract get utf8String(): UTF8String;
    abstract set relativeObjectIdentifier(value: RELATIVE_OID);
    abstract get relativeObjectIdentifier(): RELATIVE_OID;
    abstract set time(value: TIME);
    abstract get time(): TIME;
    abstract set sequence(value: SEQUENCE<ASN1Element>);
    abstract get sequence(): SEQUENCE<ASN1Element>;
    abstract set set(value: SET<ASN1Element>);
    abstract get set(): SET<ASN1Element>;
    abstract set sequenceOf(value: SEQUENCE<ASN1Element>);
    abstract get sequenceOf(): SEQUENCE<ASN1Element>;
    abstract set setOf(value: SET<ASN1Element>);
    abstract get setOf(): SET<ASN1Element>;
    abstract set numericString(value: NumericString);
    abstract get numericString(): NumericString;
    abstract set printableString(value: PrintableString);
    abstract get printableString(): PrintableString;
    abstract set teletexString(value: TeletexString);
    abstract get teletexString(): TeletexString;
    abstract set videotexString(value: VideotexString);
    abstract get videotexString(): VideotexString;
    abstract set ia5String(value: IA5String);
    abstract get ia5String(): IA5String;
    abstract set utcTime(value: UTCTime);
    abstract get utcTime(): UTCTime;
    abstract set generalizedTime(value: GeneralizedTime);
    abstract get generalizedTime(): GeneralizedTime;
    abstract set graphicString(value: GraphicString);
    abstract get graphicString(): GraphicString;
    abstract set visibleString(value: VisibleString);
    abstract get visibleString(): VisibleString;
    abstract set generalString(value: GeneralString);
    abstract get generalString(): GeneralString;
    abstract set universalString(value: UniversalString);
    abstract get universalString(): UniversalString;
    abstract set characterString(value: CharacterString);
    abstract get characterString(): CharacterString;
    abstract set bmpString(value: BMPString);
    abstract get bmpString(): BMPString;
    abstract set date(value: DATE);
    abstract get date(): DATE;
    abstract set timeOfDay(value: TIME_OF_DAY);
    abstract get timeOfDay(): TIME_OF_DAY;
    abstract set dateTime(value: DATE_TIME);
    abstract get dateTime(): DATE_TIME;
    abstract set duration(value: DURATION);
    abstract get duration(): DURATION;
    abstract set oidIRI(value: OID_IRI);
    abstract get oidIRI(): OID_IRI;
    abstract set relativeOIDIRI(value: RELATIVE_OID_IRI);
    abstract get relativeOIDIRI(): RELATIVE_OID_IRI;
    private validateSize;
    private validateRange;
    sizeConstrainedBitString(min: number, max?: number): BIT_STRING;
    sizeConstrainedOctetString(min: number, max?: number): OCTET_STRING;
    sizeConstrainedObjectDescriptor(min: number, max?: number): ObjectDescriptor;
    sizeConstrainedUTF8String(min: number, max?: number): UTF8String;
    sizeConstrainedSequenceOf(min: number, max?: number): SEQUENCE<ASN1Element>;
    sizeConstrainedSetOf(min: number, max?: number): SET<ASN1Element>;
    sizeConstrainedNumericString(min: number, max?: number): NumericString;
    sizeConstrainedPrintableString(min: number, max?: number): PrintableString;
    sizeConstrainedTeletexString(min: number, max?: number): TeletexString;
    sizeConstrainedVideotexString(min: number, max?: number): VideotexString;
    sizeConstrainedIA5String(min: number, max?: number): IA5String;
    sizeConstrainedGraphicString(min: number, max?: number): GraphicString;
    sizeConstrainedVisibleString(min: number, max?: number): VisibleString;
    sizeConstrainedGeneralString(min: number, max?: number): GeneralString;
    sizeConstrainedUniversalString(min: number, max?: number): UniversalString;
    sizeConstrainedBMPString(min: number, max?: number): BMPString;
    rangeConstrainedInteger(min: bigint, max?: bigint): INTEGER;
    rangeConstrainedReal(min: bigint, max?: bigint): REAL;
    abstract deconstruct(dataType: string): Uint8Array;
    validateTag(permittedClasses: ASN1TagClass[], permittedConstruction: ASN1Construction[], permittedNumbers: number[]): number;
    abstract get inner(): ASN1Element;
    abstract get components(): ASN1Element[];
    toElement(): ASN1Element;
    fromElement(el: ASN1Element): void;
    toString(): string;
    toJSON(recurse?: boolean): unknown;
}
