/* * Copyright 2010-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazonaws.services.kms.model; import java.io.Serializable; import com.amazonaws.AmazonWebServiceRequest; /** *

* Returns a random byte string that is cryptographically secure. *

*

* You must use the NumberOfBytes parameter to specify the length * of the random byte string. There is no default value for string length. *

*

* By default, the random byte string is generated in KMS. To generate the byte * string in the CloudHSM cluster associated with an CloudHSM key store, use the * CustomKeyStoreId parameter. *

*

* GenerateRandom also supports Amazon Web Services Nitro Enclaves, which provide an isolated compute * environment in Amazon EC2. To call GenerateRandom for a Nitro * enclave, use the Amazon Web Services Nitro Enclaves SDK or any Amazon Web Services SDK. * Use the Recipient parameter to provide the attestation document * for the enclave. Instead of plaintext bytes, the response includes the * plaintext bytes encrypted under the public key from the attestation document * (CiphertextForRecipient).For information about the interaction * between KMS and Amazon Web Services Nitro Enclaves, see How Amazon Web Services Nitro Enclaves uses KMS in the Key Management * Service Developer Guide. *

*

* For more information about entropy and random number generation, see Key * Management Service Cryptographic Details. *

*

* Cross-account use: Not applicable. GenerateRandom does * not use any account-specific resources, such as KMS keys. *

*

* Required permissions: kms:GenerateRandom (IAM policy) *

*/ public class GenerateRandomRequest extends AmazonWebServiceRequest implements Serializable { /** *

* The length of the random byte string. This parameter is required. *

*

* Constraints:
* Range: 1 - 1024
*/ private Integer numberOfBytes; /** *

* Generates the random byte string in the CloudHSM cluster that is * associated with the specified CloudHSM key store. To find the ID of a * custom key store, use the DescribeCustomKeyStores operation. *

*

* External key store IDs are not valid for this parameter. If you specify * the ID of an external key store, GenerateRandom throws an * UnsupportedOperationException. *

*

* Constraints:
* Length: 1 - 64
*/ private String customKeyStoreId; /** *

* A signed attestation document from an Amazon Web Services Nitro enclave and * the encryption algorithm to use with the enclave's public key. The only * valid encryption algorithm is RSAES_OAEP_SHA_256. *

*

* This parameter only supports attestation documents for Amazon Web * Services Nitro Enclaves. To include this parameter, use the Amazon Web Services Nitro Enclaves SDK or any Amazon Web Services * SDK. *

*

* When you use this parameter, instead of returning plaintext bytes, KMS * encrypts the plaintext bytes under the public key in the attestation * document, and returns the resulting ciphertext in the * CiphertextForRecipient field in the response. This * ciphertext can be decrypted only with the private key in the enclave. The * Plaintext field in the response is null or empty. *

*

* For information about the interaction between KMS and Amazon Web Services * Nitro Enclaves, see How Amazon Web Services Nitro Enclaves uses KMS in the Key * Management Service Developer Guide. *

*/ private RecipientInfo recipient; /** *

* The length of the random byte string. This parameter is required. *

*

* Constraints:
* Range: 1 - 1024
* * @return

* The length of the random byte string. This parameter is required. *

*/ public Integer getNumberOfBytes() { return numberOfBytes; } /** *

* The length of the random byte string. This parameter is required. *

*

* Constraints:
* Range: 1 - 1024
* * @param numberOfBytes

* The length of the random byte string. This parameter is * required. *

*/ public void setNumberOfBytes(Integer numberOfBytes) { this.numberOfBytes = numberOfBytes; } /** *

* The length of the random byte string. This parameter is required. *

*

* Returns a reference to this object so that method calls can be chained * together. *

* Constraints:
* Range: 1 - 1024
* * @param numberOfBytes

* The length of the random byte string. This parameter is * required. *

* @return A reference to this updated object so that method calls can be * chained together. */ public GenerateRandomRequest withNumberOfBytes(Integer numberOfBytes) { this.numberOfBytes = numberOfBytes; return this; } /** *

* Generates the random byte string in the CloudHSM cluster that is * associated with the specified CloudHSM key store. To find the ID of a * custom key store, use the DescribeCustomKeyStores operation. *

*

* External key store IDs are not valid for this parameter. If you specify * the ID of an external key store, GenerateRandom throws an * UnsupportedOperationException. *

*

* Constraints:
* Length: 1 - 64
* * @return

* Generates the random byte string in the CloudHSM cluster that is * associated with the specified CloudHSM key store. To find the ID * of a custom key store, use the DescribeCustomKeyStores * operation. *

*

* External key store IDs are not valid for this parameter. If you * specify the ID of an external key store, * GenerateRandom throws an * UnsupportedOperationException. *

*/ public String getCustomKeyStoreId() { return customKeyStoreId; } /** *

* Generates the random byte string in the CloudHSM cluster that is * associated with the specified CloudHSM key store. To find the ID of a * custom key store, use the DescribeCustomKeyStores operation. *

*

* External key store IDs are not valid for this parameter. If you specify * the ID of an external key store, GenerateRandom throws an * UnsupportedOperationException. *

*

* Constraints:
* Length: 1 - 64
* * @param customKeyStoreId

* Generates the random byte string in the CloudHSM cluster that * is associated with the specified CloudHSM key store. To find * the ID of a custom key store, use the * DescribeCustomKeyStores operation. *

*

* External key store IDs are not valid for this parameter. If * you specify the ID of an external key store, * GenerateRandom throws an * UnsupportedOperationException. *

*/ public void setCustomKeyStoreId(String customKeyStoreId) { this.customKeyStoreId = customKeyStoreId; } /** *

* Generates the random byte string in the CloudHSM cluster that is * associated with the specified CloudHSM key store. To find the ID of a * custom key store, use the DescribeCustomKeyStores operation. *

*

* External key store IDs are not valid for this parameter. If you specify * the ID of an external key store, GenerateRandom throws an * UnsupportedOperationException. *

*

* Returns a reference to this object so that method calls can be chained * together. *

* Constraints:
* Length: 1 - 64
* * @param customKeyStoreId

* Generates the random byte string in the CloudHSM cluster that * is associated with the specified CloudHSM key store. To find * the ID of a custom key store, use the * DescribeCustomKeyStores operation. *

*

* External key store IDs are not valid for this parameter. If * you specify the ID of an external key store, * GenerateRandom throws an * UnsupportedOperationException. *

* @return A reference to this updated object so that method calls can be * chained together. */ public GenerateRandomRequest withCustomKeyStoreId(String customKeyStoreId) { this.customKeyStoreId = customKeyStoreId; return this; } /** *

* A signed attestation document from an Amazon Web Services Nitro enclave and * the encryption algorithm to use with the enclave's public key. The only * valid encryption algorithm is RSAES_OAEP_SHA_256. *

*

* This parameter only supports attestation documents for Amazon Web * Services Nitro Enclaves. To include this parameter, use the Amazon Web Services Nitro Enclaves SDK or any Amazon Web Services * SDK. *

*

* When you use this parameter, instead of returning plaintext bytes, KMS * encrypts the plaintext bytes under the public key in the attestation * document, and returns the resulting ciphertext in the * CiphertextForRecipient field in the response. This * ciphertext can be decrypted only with the private key in the enclave. The * Plaintext field in the response is null or empty. *

*

* For information about the interaction between KMS and Amazon Web Services * Nitro Enclaves, see How Amazon Web Services Nitro Enclaves uses KMS in the Key * Management Service Developer Guide. *

* * @return

* A signed attestation document from an Amazon Web Services Nitro * enclave and the encryption algorithm to use with the enclave's * public key. The only valid encryption algorithm is * RSAES_OAEP_SHA_256. *

*

* This parameter only supports attestation documents for Amazon Web * Services Nitro Enclaves. To include this parameter, use the Amazon Web Services Nitro Enclaves SDK or any Amazon Web * Services SDK. *

*

* When you use this parameter, instead of returning plaintext * bytes, KMS encrypts the plaintext bytes under the public key in * the attestation document, and returns the resulting ciphertext in * the CiphertextForRecipient field in the response. * This ciphertext can be decrypted only with the private key in the * enclave. The Plaintext field in the response is null * or empty. *

*

* For information about the interaction between KMS and Amazon Web * Services Nitro Enclaves, see How Amazon Web Services Nitro Enclaves uses KMS in the * Key Management Service Developer Guide. *

*/ public RecipientInfo getRecipient() { return recipient; } /** *

* A signed attestation document from an Amazon Web Services Nitro enclave and * the encryption algorithm to use with the enclave's public key. The only * valid encryption algorithm is RSAES_OAEP_SHA_256. *

*

* This parameter only supports attestation documents for Amazon Web * Services Nitro Enclaves. To include this parameter, use the Amazon Web Services Nitro Enclaves SDK or any Amazon Web Services * SDK. *

*

* When you use this parameter, instead of returning plaintext bytes, KMS * encrypts the plaintext bytes under the public key in the attestation * document, and returns the resulting ciphertext in the * CiphertextForRecipient field in the response. This * ciphertext can be decrypted only with the private key in the enclave. The * Plaintext field in the response is null or empty. *

*

* For information about the interaction between KMS and Amazon Web Services * Nitro Enclaves, see How Amazon Web Services Nitro Enclaves uses KMS in the Key * Management Service Developer Guide. *

* * @param recipient

* A signed attestation document from an Amazon Web Services Nitro * enclave and the encryption algorithm to use with the enclave's * public key. The only valid encryption algorithm is * RSAES_OAEP_SHA_256. *

*

* This parameter only supports attestation documents for Amazon * Web Services Nitro Enclaves. To include this parameter, use * the Amazon Web Services Nitro Enclaves SDK or any Amazon Web * Services SDK. *

*

* When you use this parameter, instead of returning plaintext * bytes, KMS encrypts the plaintext bytes under the public key * in the attestation document, and returns the resulting * ciphertext in the CiphertextForRecipient field in * the response. This ciphertext can be decrypted only with the * private key in the enclave. The Plaintext field * in the response is null or empty. *

*

* For information about the interaction between KMS and Amazon * Web Services Nitro Enclaves, see How Amazon Web Services Nitro Enclaves uses KMS in the * Key Management Service Developer Guide. *

*/ public void setRecipient(RecipientInfo recipient) { this.recipient = recipient; } /** *

* A signed attestation document from an Amazon Web Services Nitro enclave and * the encryption algorithm to use with the enclave's public key. The only * valid encryption algorithm is RSAES_OAEP_SHA_256. *

*

* This parameter only supports attestation documents for Amazon Web * Services Nitro Enclaves. To include this parameter, use the Amazon Web Services Nitro Enclaves SDK or any Amazon Web Services * SDK. *

*

* When you use this parameter, instead of returning plaintext bytes, KMS * encrypts the plaintext bytes under the public key in the attestation * document, and returns the resulting ciphertext in the * CiphertextForRecipient field in the response. This * ciphertext can be decrypted only with the private key in the enclave. The * Plaintext field in the response is null or empty. *

*

* For information about the interaction between KMS and Amazon Web Services * Nitro Enclaves, see How Amazon Web Services Nitro Enclaves uses KMS in the Key * Management Service Developer Guide. *

*

* Returns a reference to this object so that method calls can be chained * together. * * @param recipient

* A signed attestation document from an Amazon Web Services Nitro * enclave and the encryption algorithm to use with the enclave's * public key. The only valid encryption algorithm is * RSAES_OAEP_SHA_256. *

*

* This parameter only supports attestation documents for Amazon * Web Services Nitro Enclaves. To include this parameter, use * the Amazon Web Services Nitro Enclaves SDK or any Amazon Web * Services SDK. *

*

* When you use this parameter, instead of returning plaintext * bytes, KMS encrypts the plaintext bytes under the public key * in the attestation document, and returns the resulting * ciphertext in the CiphertextForRecipient field in * the response. This ciphertext can be decrypted only with the * private key in the enclave. The Plaintext field * in the response is null or empty. *

*

* For information about the interaction between KMS and Amazon * Web Services Nitro Enclaves, see How Amazon Web Services Nitro Enclaves uses KMS in the * Key Management Service Developer Guide. *

* @return A reference to this updated object so that method calls can be * chained together. */ public GenerateRandomRequest withRecipient(RecipientInfo recipient) { this.recipient = recipient; return this; } /** * Returns a string representation of this object; useful for testing and * debugging. * * @return A string representation of this object. * @see java.lang.Object#toString() */ @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("{"); if (getNumberOfBytes() != null) sb.append("NumberOfBytes: " + getNumberOfBytes() + ","); if (getCustomKeyStoreId() != null) sb.append("CustomKeyStoreId: " + getCustomKeyStoreId() + ","); if (getRecipient() != null) sb.append("Recipient: " + getRecipient()); sb.append("}"); return sb.toString(); } @Override public int hashCode() { final int prime = 31; int hashCode = 1; hashCode = prime * hashCode + ((getNumberOfBytes() == null) ? 0 : getNumberOfBytes().hashCode()); hashCode = prime * hashCode + ((getCustomKeyStoreId() == null) ? 0 : getCustomKeyStoreId().hashCode()); hashCode = prime * hashCode + ((getRecipient() == null) ? 0 : getRecipient().hashCode()); return hashCode; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (obj instanceof GenerateRandomRequest == false) return false; GenerateRandomRequest other = (GenerateRandomRequest) obj; if (other.getNumberOfBytes() == null ^ this.getNumberOfBytes() == null) return false; if (other.getNumberOfBytes() != null && other.getNumberOfBytes().equals(this.getNumberOfBytes()) == false) return false; if (other.getCustomKeyStoreId() == null ^ this.getCustomKeyStoreId() == null) return false; if (other.getCustomKeyStoreId() != null && other.getCustomKeyStoreId().equals(this.getCustomKeyStoreId()) == false) return false; if (other.getRecipient() == null ^ this.getRecipient() == null) return false; if (other.getRecipient() != null && other.getRecipient().equals(this.getRecipient()) == false) return false; return true; } }