import { KnownJwaSignatureAlgorithm } from "../jwk/jwa.js";
import { KmsJwkPublicFromCreateType } from "../jwk/knownJwk.js";
import { z } from "zod";

//#region src/modules/kms/options/KmsCreateKeyOptions.d.ts
declare const zKmsCreateKeyTypeEc: z.ZodObject<{
  kty: z.ZodLiteral<"EC">;
  crv: z.ZodEnum<{
    "P-256": "P-256";
    "P-384": "P-384";
    "P-521": "P-521";
    secp256k1: "secp256k1";
  }>;
}, z.core.$strip>;
type KmsCreateKeyTypeEc = z.output<typeof zKmsCreateKeyTypeEc>;
/**
 * Octer key pair, commonly used for Ed25519 and X25519 key types
 */
declare const zKmsCreateKeyTypeOkp: z.ZodObject<{
  kty: z.ZodLiteral<"OKP">;
  crv: z.ZodEnum<{
    Ed25519: "Ed25519";
    X25519: "X25519";
  }>;
}, z.core.$strip>;
type KmsCreateKeyTypeOkp = z.output<typeof zKmsCreateKeyTypeOkp>;
/**
 * RSA key pair.
 */
declare const zKmsCreateKeyTypeRsa: z.ZodObject<{
  kty: z.ZodLiteral<"RSA">;
  modulusLength: z.ZodUnion<readonly [z.ZodLiteral<2048>, z.ZodLiteral<3072>, z.ZodLiteral<4096>]>;
}, z.core.$strip>;
type KmsCreateKeyTypeRsa = z.output<typeof zKmsCreateKeyTypeRsa>;
/**
 * Represents an octect sequence for symmetric keys
 */
declare const zKmsCreateKeyTypeOct: z.ZodDiscriminatedUnion<[z.ZodObject<{
  kty: z.ZodLiteral<"oct">;
  algorithm: z.ZodLiteral<"aes">;
  length: z.ZodUnion<readonly [z.ZodLiteral<128>, z.ZodLiteral<192>, z.ZodLiteral<256>, z.ZodNumber]>;
}, z.core.$strip>, z.ZodObject<{
  kty: z.ZodLiteral<"oct">;
  algorithm: z.ZodLiteral<"hmac">;
  length: z.ZodUnion<readonly [z.ZodLiteral<256>, z.ZodLiteral<384>, z.ZodLiteral<512>]>;
}, z.core.$strip>, z.ZodObject<{
  kty: z.ZodLiteral<"oct">;
  algorithm: z.ZodLiteral<"C20P">;
}, z.core.$strip>], "algorithm">;
type KmsCreateKeyTypeOct = z.output<typeof zKmsCreateKeyTypeOct>;
declare const zKmsCreateKeyTypeAssymetric: z.ZodUnion<readonly [z.ZodObject<{
  kty: z.ZodLiteral<"EC">;
  crv: z.ZodEnum<{
    "P-256": "P-256";
    "P-384": "P-384";
    "P-521": "P-521";
    secp256k1: "secp256k1";
  }>;
}, z.core.$strip>, z.ZodObject<{
  kty: z.ZodLiteral<"OKP">;
  crv: z.ZodEnum<{
    Ed25519: "Ed25519";
    X25519: "X25519";
  }>;
}, z.core.$strip>, z.ZodObject<{
  kty: z.ZodLiteral<"RSA">;
  modulusLength: z.ZodUnion<readonly [z.ZodLiteral<2048>, z.ZodLiteral<3072>, z.ZodLiteral<4096>]>;
}, z.core.$strip>]>;
type KmsCreateKeyTypeAssymetric = z.output<typeof zKmsCreateKeyTypeAssymetric>;
declare const zKmsCreateKeyType: z.ZodUnion<readonly [z.ZodObject<{
  kty: z.ZodLiteral<"EC">;
  crv: z.ZodEnum<{
    "P-256": "P-256";
    "P-384": "P-384";
    "P-521": "P-521";
    secp256k1: "secp256k1";
  }>;
}, z.core.$strip>, z.ZodObject<{
  kty: z.ZodLiteral<"OKP">;
  crv: z.ZodEnum<{
    Ed25519: "Ed25519";
    X25519: "X25519";
  }>;
}, z.core.$strip>, z.ZodObject<{
  kty: z.ZodLiteral<"RSA">;
  modulusLength: z.ZodUnion<readonly [z.ZodLiteral<2048>, z.ZodLiteral<3072>, z.ZodLiteral<4096>]>;
}, z.core.$strip>, z.ZodDiscriminatedUnion<[z.ZodObject<{
  kty: z.ZodLiteral<"oct">;
  algorithm: z.ZodLiteral<"aes">;
  length: z.ZodUnion<readonly [z.ZodLiteral<128>, z.ZodLiteral<192>, z.ZodLiteral<256>, z.ZodNumber]>;
}, z.core.$strip>, z.ZodObject<{
  kty: z.ZodLiteral<"oct">;
  algorithm: z.ZodLiteral<"hmac">;
  length: z.ZodUnion<readonly [z.ZodLiteral<256>, z.ZodLiteral<384>, z.ZodLiteral<512>]>;
}, z.core.$strip>, z.ZodObject<{
  kty: z.ZodLiteral<"oct">;
  algorithm: z.ZodLiteral<"C20P">;
}, z.core.$strip>], "algorithm">]>;
type KmsCreateKeyType = z.output<typeof zKmsCreateKeyType>;
interface KmsCreateKeyOptions<Type extends KmsCreateKeyType = KmsCreateKeyType> {
  /**
   * The `kid` for the key.
   */
  keyId?: string;
  /**
   * The type of key to generate
   */
  type: Type;
}
interface KmsCreateKeyForSignatureAlgorithmOptions {
  /**
   * The `kid` for the key.
   */
  keyId?: string;
  /**
   * The JWA signature algorithm to create the key for.
   */
  algorithm: KnownJwaSignatureAlgorithm;
}
interface KmsCreateKeyReturn<Type extends KmsCreateKeyType = KmsCreateKeyType> {
  keyId: string;
  /**
   * The public JWK representation of the created key. `kid` will always
   * be defined.
   *
   * In case of a symmetric (oct) key this won't include any key material, but
   * will include additional JWK claims such as `use`, `kty`, and `kid`
   */
  publicJwk: KmsJwkPublicFromCreateType<Type> & {
    kid: string;
  };
}
//#endregion
export { KmsCreateKeyForSignatureAlgorithmOptions, KmsCreateKeyOptions, KmsCreateKeyReturn, KmsCreateKeyType, KmsCreateKeyTypeAssymetric, KmsCreateKeyTypeEc, KmsCreateKeyTypeOct, KmsCreateKeyTypeOkp, KmsCreateKeyTypeRsa };
//# sourceMappingURL=KmsCreateKeyOptions.d.ts.map