import type { MetadataBearer as __MetadataBearer } from "@smithy/types"; import type { GenerateDataKeyPairWithoutPlaintextRequest, GenerateDataKeyPairWithoutPlaintextResponse } from "../models/models_0"; /** * @public */ export type { __MetadataBearer }; /** * @public * * The input for {@link GenerateDataKeyPairWithoutPlaintextCommand}. */ export interface GenerateDataKeyPairWithoutPlaintextCommandInput extends GenerateDataKeyPairWithoutPlaintextRequest { } /** * @public * * The output of {@link GenerateDataKeyPairWithoutPlaintextCommand}. */ export interface GenerateDataKeyPairWithoutPlaintextCommandOutput extends GenerateDataKeyPairWithoutPlaintextResponse, __MetadataBearer { } declare const GenerateDataKeyPairWithoutPlaintextCommand_base: { new (input: GenerateDataKeyPairWithoutPlaintextCommandInput): import("@smithy/core/client").CommandImpl; new (input: GenerateDataKeyPairWithoutPlaintextCommandInput): import("@smithy/core/client").CommandImpl; getEndpointParameterInstructions(): import("@smithy/types").EndpointParameterInstructions; }; /** *

Returns a unique asymmetric data key pair for use outside of KMS. This operation returns * a plaintext public key and a copy of the private key that is encrypted under the symmetric * encryption KMS key you specify. Unlike GenerateDataKeyPair, this operation * does not return a plaintext private key. The bytes in the keys are random; they are not * related to the caller or to the KMS key that is used to encrypt the private key.

*

You can use the public key that GenerateDataKeyPairWithoutPlaintext returns * to encrypt data or verify a signature outside of KMS. Then, store the encrypted private key * with the data. When you are ready to decrypt data or sign a message, you can use the Decrypt operation to decrypt the encrypted private key.

*

To generate a data key pair, you must specify a symmetric encryption KMS key to encrypt * the private key in a data key pair. You cannot use an asymmetric KMS key or a KMS key in a * custom key store. To get the type and origin of your KMS key, use the DescribeKey operation.

*

Use the KeyPairSpec parameter to choose an RSA or Elliptic Curve (ECC) data * key pair. In China Regions, you can also choose an SM2 data key pair. KMS recommends that * you use ECC key pairs for signing, and use RSA and SM2 key pairs for either encryption or * signing, but not both. However, KMS cannot enforce any restrictions on the use of data key * pairs outside of KMS.

*

* GenerateDataKeyPairWithoutPlaintext returns a unique data key pair for each * request. The bytes in the key are not related to the caller or KMS key that is used to encrypt * the private key. The public key is a DER-encoded X.509 SubjectPublicKeyInfo, as specified in * RFC 5280.

* *

For ML-KEM data key pairs, the DER-encoded PKCS8 PrivateKeyInfo contains the private key * in seed format. As a result, the length of the private key is the same for all ML-KEM key pair * specs.

*
*

You can use an optional encryption context to add additional security to the encryption * operation. If you specify an EncryptionContext, you must specify the same * encryption context (a case-sensitive exact match) when decrypting the encrypted data key. * Otherwise, the request to decrypt fails with an InvalidCiphertextException. For more information, see Encryption Context in the * Key Management Service Developer Guide.

*

The KMS key that you use for this operation must be in a compatible key state. For * details, see Key states of KMS keys in the Key Management Service Developer Guide.

*

* Cross-account use: Yes. To perform this operation with a KMS key in a different Amazon Web Services account, specify * the key ARN or alias ARN in the value of the KeyId parameter.

*

* Required permissions: kms:GenerateDataKeyPairWithoutPlaintext (key * policy)

*

* Related operations: *

* *

* Eventual consistency: The KMS API follows an eventual consistency model. * For more information, see KMS eventual consistency.

* @example * Use a bare-bones client and the command you need to make an API call. * ```javascript * import { KMSClient, GenerateDataKeyPairWithoutPlaintextCommand } from "@aws-sdk/client-kms"; // ES Modules import * // const { KMSClient, GenerateDataKeyPairWithoutPlaintextCommand } = require("@aws-sdk/client-kms"); // CommonJS import * // import type { KMSClientConfig } from "@aws-sdk/client-kms"; * const config = {}; // type is KMSClientConfig * const client = new KMSClient(config); * const input = { // GenerateDataKeyPairWithoutPlaintextRequest * EncryptionContext: { // EncryptionContextType * "": "STRING_VALUE", * }, * KeyId: "STRING_VALUE", // required * KeyPairSpec: "RSA_2048" || "RSA_3072" || "RSA_4096" || "ECC_NIST_P256" || "ECC_NIST_P384" || "ECC_NIST_P521" || "ECC_SECG_P256K1" || "SM2" || "ECC_NIST_EDWARDS25519" || "ML_KEM_512" || "ML_KEM_768" || "ML_KEM_1024", // required * GrantTokens: [ // GrantTokenList * "STRING_VALUE", * ], * DryRun: true || false, * }; * const command = new GenerateDataKeyPairWithoutPlaintextCommand(input); * const response = await client.send(command); * // { // GenerateDataKeyPairWithoutPlaintextResponse * // PrivateKeyCiphertextBlob: new Uint8Array(), * // PublicKey: new Uint8Array(), * // KeyId: "STRING_VALUE", * // KeyPairSpec: "RSA_2048" || "RSA_3072" || "RSA_4096" || "ECC_NIST_P256" || "ECC_NIST_P384" || "ECC_NIST_P521" || "ECC_SECG_P256K1" || "SM2" || "ECC_NIST_EDWARDS25519" || "ML_KEM_512" || "ML_KEM_768" || "ML_KEM_1024", * // KeyMaterialId: "STRING_VALUE", * // }; * * ``` * * @param GenerateDataKeyPairWithoutPlaintextCommandInput - {@link GenerateDataKeyPairWithoutPlaintextCommandInput} * @returns {@link GenerateDataKeyPairWithoutPlaintextCommandOutput} * @see {@link GenerateDataKeyPairWithoutPlaintextCommandInput} for command's `input` shape. * @see {@link GenerateDataKeyPairWithoutPlaintextCommandOutput} for command's `response` shape. * @see {@link KMSClientResolvedConfig | config} for KMSClient's `config` shape. * * @throws {@link DependencyTimeoutException} (server fault) *

The system timed out while trying to fulfill the request. You can retry the * request.

* * @throws {@link DisabledException} (client fault) *

The request was rejected because the specified KMS key is not enabled.

* * @throws {@link DryRunOperationException} (client fault) *

The request was rejected because the DryRun parameter was specified.

* * @throws {@link InvalidGrantTokenException} (client fault) *

The request was rejected because the specified grant token is not valid.

* * @throws {@link InvalidKeyUsageException} (client fault) *

The request was rejected for one of the following reasons:

*
    *
  • *

    The KeyUsage value of the KMS key is incompatible with the API * operation.

    *
  • *
  • *

    The encryption algorithm or signing algorithm specified for the operation is * incompatible with the type of key material in the KMS key (KeySpec).

    *
  • *
*

For encrypting, decrypting, re-encrypting, and generating data keys, the * KeyUsage must be ENCRYPT_DECRYPT. For signing and verifying * messages, the KeyUsage must be SIGN_VERIFY. For generating and * verifying message authentication codes (MACs), the KeyUsage must be * GENERATE_VERIFY_MAC. For deriving key agreement secrets, the * KeyUsage must be KEY_AGREEMENT. For encapsulating and decapsulating * shared secrets, the KeyUsage must be ENCAPSULATE_DECAPSULATE. To find * the KeyUsage of a KMS key, use the DescribeKey operation.

*

To find the encryption or signing algorithms supported for a particular KMS key, use the * DescribeKey operation.

* * @throws {@link KeyUnavailableException} (server fault) *

The request was rejected because the specified KMS key was not available. You can retry * the request.

* * @throws {@link KMSInternalException} (server fault) *

The request was rejected because an internal exception occurred. The request can be * retried.

* * @throws {@link KMSInvalidStateException} (client fault) *

The request was rejected because the state of the specified resource is not valid for this * request.

*

This exceptions means one of the following:

*
    *
  • *

    The key state of the KMS key is not compatible with the operation.

    *

    To find the key state, use the DescribeKey operation. For more * information about which key states are compatible with each KMS operation, see * Key states of KMS keys in the * Key Management Service Developer Guide * .

    *
  • *
  • *

    For cryptographic operations on KMS keys in custom key stores, this exception * represents a general failure with many possible causes. To identify the cause, see the * error message that accompanies the exception.

    *
  • *
* * @throws {@link NotFoundException} (client fault) *

The request was rejected because the specified entity or resource could not be * found.

* * @throws {@link UnsupportedOperationException} (client fault) *

The request was rejected because a specified parameter is not supported or a specified * resource is not valid for this operation.

* * @throws {@link KMSServiceException} *

Base exception class for all service exceptions from KMS service.

* * * @example To generate an asymmetric data key pair without a plaintext key * ```javascript * // This example returns an asymmetric elliptic curve (ECC) data key pair. The private key is encrypted under the symmetric encryption KMS key that you specify. This operation doesn't return a plaintext (unencrypted) private key. * const input = { * KeyId: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", * KeyPairSpec: "ECC_NIST_P521" * }; * const command = new GenerateDataKeyPairWithoutPlaintextCommand(input); * const response = await client.send(command); * /* response is * { * KeyId: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", * KeyMaterialId: "0b7fd7ddbac6eef27907413567cad8c810e2883dc8a7534067a82ee1142fc1e6", * KeyPairSpec: "ECC_NIST_P521", * PrivateKeyCiphertextBlob: "", * PublicKey: "" * } * *\/ * ``` * * @public */ export declare class GenerateDataKeyPairWithoutPlaintextCommand extends GenerateDataKeyPairWithoutPlaintextCommand_base { /** @internal type navigation helper, not in runtime. */ protected static __types: { api: { input: GenerateDataKeyPairWithoutPlaintextRequest; output: GenerateDataKeyPairWithoutPlaintextResponse; }; sdk: { input: GenerateDataKeyPairWithoutPlaintextCommandInput; output: GenerateDataKeyPairWithoutPlaintextCommandOutput; }; }; }