import { OBJECT_IDENTIFIER } from "@wildboar/asn1";
import * as $ from "@wildboar/asn1/functional";
/**
 * @summary ALGORITHM
 * @description
 *
 * ### ASN.1 Definition:
 *
 * ```asn1
 * ALGORITHM ::= CLASS {
 *   &Type          OPTIONAL,
 *   &DynParms      OPTIONAL,
 *   &id            OBJECT IDENTIFIER UNIQUE }
 * WITH SYNTAX {
 *   [PARMS         &Type]
 *   [DYN-PARMS     &DynParms ]
 *   IDENTIFIED BY  &id }
 * ```
 *
 * @interface
 */
export interface ALGORITHM<Type = any, DynParms = any> {
    /**
     * @summary A fixed string that can be used for external programs to determine the object class of this object.
     */
    readonly class: "ALGORITHM";
    /**
     * @summary A map of type fields to their corresponding decoders.
     */
    readonly decoderFor: Partial<{
        [_K in keyof ALGORITHM<Type, DynParms>]: $.ASN1Decoder<ALGORITHM<Type, DynParms>[_K]>;
    }>;
    /**
     * @summary A map of type fields to their corresponding encoders.
     */
    readonly encoderFor: Partial<{
        [_K in keyof ALGORITHM<Type, DynParms>]: $.ASN1Encoder<ALGORITHM<Type, DynParms>[_K]>;
    }>;
    /**
     * @summary &Type
     */
    readonly "&Type": Type;
    /**
     * @summary &DynParms
     */
    readonly "&DynParms"?: DynParms;
    /**
     * @summary &id
     */
    readonly "&id"?: OBJECT_IDENTIFIER;
}
//# sourceMappingURL=ALGORITHM.oca.d.mts.map