import type { Uint8Array_ } from '../types/index.js';
/**
 * Fundamental values that are needed to discern the more specific COSE public key types below.
 *
 * The use of `Maps` here is due to CBOR encoding being used with public keys, and the CBOR "Map"
 * type is being decoded to JavaScript's `Map` type instead of, say, a basic Object as us JS
 * developers might prefer.
 *
 * These types are an unorthodox way of saying "these Maps should involve these discrete lists of
 * keys", but it works.
 * @module
 */
/**
 * COSE public key common values
 */
export type COSEPublicKey = {
    get(key: COSEKEYS.kty): COSEKTY | undefined;
    get(key: COSEKEYS.alg): COSEALG | undefined;
    set(key: COSEKEYS.kty, value: COSEKTY): void;
    set(key: COSEKEYS.alg, value: COSEALG): void;
};
/**
 * Values specific to Octet Key Pair public keys
 */
export type COSEPublicKeyOKP = COSEPublicKey & {
    get(key: COSEKEYS.crv): number | undefined;
    get(key: COSEKEYS.x): Uint8Array_ | undefined;
    set(key: COSEKEYS.crv, value: number): void;
    set(key: COSEKEYS.x, value: Uint8Array_): void;
};
/**
 * Values specific to Elliptic Curve Cryptography public keys
 */
export type COSEPublicKeyEC2 = COSEPublicKey & {
    get(key: COSEKEYS.crv): number | undefined;
    get(key: COSEKEYS.x): Uint8Array_ | undefined;
    get(key: COSEKEYS.y): Uint8Array_ | undefined;
    set(key: COSEKEYS.crv, value: number): void;
    set(key: COSEKEYS.x, value: Uint8Array_): void;
    set(key: COSEKEYS.y, value: Uint8Array_): void;
};
/**
 * Values specific to RSA public keys
 */
export type COSEPublicKeyRSA = COSEPublicKey & {
    get(key: COSEKEYS.n): Uint8Array_ | undefined;
    get(key: COSEKEYS.e): Uint8Array_ | undefined;
    set(key: COSEKEYS.n, value: Uint8Array_): void;
    set(key: COSEKEYS.e, value: Uint8Array_): void;
};
/**
 * A type guard for determining if a COSE public key is an OKP key pair
 */
export declare function isCOSEPublicKeyOKP(cosePublicKey: COSEPublicKey): cosePublicKey is COSEPublicKeyOKP;
/**
 * A type guard for determining if a COSE public key is an EC2 key pair
 */
export declare function isCOSEPublicKeyEC2(cosePublicKey: COSEPublicKey): cosePublicKey is COSEPublicKeyEC2;
/**
 * A type guard for determining if a COSE public key is an RSA key pair
 */
export declare function isCOSEPublicKeyRSA(cosePublicKey: COSEPublicKey): cosePublicKey is COSEPublicKeyRSA;
/**
 * COSE Keys
 *
 * https://www.iana.org/assignments/cose/cose.xhtml#key-common-parameters
 * https://www.iana.org/assignments/cose/cose.xhtml#key-type-parameters
 */
export declare enum COSEKEYS {
    kty = 1,
    alg = 3,
    crv = -1,
    x = -2,
    y = -3,
    n = -1,
    e = -2
}
/**
 * COSE Key Types
 *
 * https://www.iana.org/assignments/cose/cose.xhtml#key-type
 */
export declare enum COSEKTY {
    OKP = 1,
    EC2 = 2,
    RSA = 3
}
export declare function isCOSEKty(kty: number | undefined): kty is COSEKTY;
/**
 * COSE Curves
 *
 * https://www.iana.org/assignments/cose/cose.xhtml#elliptic-curves
 */
export declare enum COSECRV {
    P256 = 1,
    P384 = 2,
    P521 = 3,
    ED25519 = 6,
    SECP256K1 = 8
}
export declare function isCOSECrv(crv: number | undefined): crv is COSECRV;
/**
 * COSE Algorithms
 *
 * https://www.iana.org/assignments/cose/cose.xhtml#algorithms
 */
export declare enum COSEALG {
    ES256 = -7,
    EdDSA = -8,
    ES384 = -35,
    ES512 = -36,
    PS256 = -37,
    PS384 = -38,
    PS512 = -39,
    ES256K = -47,
    RS256 = -257,
    RS384 = -258,
    RS512 = -259,
    RS1 = -65535
}
export declare function isCOSEAlg(alg: number | undefined): alg is COSEALG;
//# sourceMappingURL=cose.d.ts.map