

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS Encryption SDK Rust のサンプルコード
<a name="rust-examples"></a>

次の例は、 AWS Encryption SDK for Rust でプログラミングするときに使用する基本的なコーディングパターンを示しています。具体的には、 AWS Encryption SDK とマテリアルプロバイダーライブラリをインスタンス化します。次に、各メソッドを呼び出す前に、メソッドの入力を定義する オブジェクトをインスタンス化します。

代替アルゴリズムスイートの指定や暗号化されたデータキーの制限など AWS Encryption SDK、 でオプションを設定する方法の例については、GitHub の aws-encryption-sdk リポジトリの [Rust の例](https://github.com/aws/aws-encryption-sdk-dafny/tree/mainline/AwsEncryptionSDK/runtimes/rust/examples/)を参照してください。

## AWS Encryption SDK for Rust でのデータの暗号化と復号
<a name="rust-example-encrypt"></a>

この例では、データを暗号化および復号するための基本的なパターンを示しています。1 つのラ AWS KMS ッピングキーで保護されたデータキーを使用して小さなファイルを暗号化します。

**ステップ 1: をインスタンス化します AWS Encryption SDK。**  
のメソッドを使用して、データを AWS Encryption SDK 暗号化および復号します。  

```
let esdk_config = AwsEncryptionSdkConfig::builder().build()?;
let esdk_client = esdk_client::Client::from_conf(esdk_config)?;
```

**ステップ 2: AWS KMS クライアントを作成する。**  

```
let sdk_config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await;
let kms_client = aws_sdk_kms::Client::new(&sdk_config);
```

**オプション: 暗号化コンテキストを作成します。**  

```
let encryption_context = HashMap::from([
    ("encryption".to_string(), "context".to_string()),
    ("is not".to_string(), "secret".to_string()),
    ("but adds".to_string(), "useful metadata".to_string()),
    ("that can help you".to_string(), "be confident that".to_string()),
    ("the data you are handling".to_string(), "is what you think it is".to_string()),
]);
```

**ステップ 3: マテリアルプロバイダーライブラリをインスタンス化します。**  
マテリアルプロバイダライブラリのメソッドを使用して、データを保護するキーを指定するキーリングを作成します。  

```
let mpl_config = MaterialProvidersConfig::builder().build()?;
let mpl = mpl_client::Client::from_conf(mpl_config)?;
```

**ステップ 4: AWS KMS キーリングを作成します。**  
キーリングを作成するには、キーリング入力オブジェクトを使用してキーリングメソッドを呼び出します。この例では、 `create_aws_kms_keyring()`メソッドを使用し、1 つの KMS キーを指定します。  

```
let kms_keyring = mpl
    .create_aws_kms_keyring()
    .kms_key_id(kms_key_id)
    .kms_client(kms_client)
    .send()
    .await?;
```

**ステップ 5: プレーンテキストを暗号化します。**  

```
let plaintext = example_data.as_bytes();

let encryption_response = esdk_client.encrypt()
    .plaintext(plaintext)
    .keyring(kms_keyring.clone())
    .encryption_context(encryption_context.clone())
    .send()
    .await?;

let ciphertext = encryption_response
                    .ciphertext
                    .expect("Unable to unwrap ciphertext from encryption response");
```

**ステップ 6: 暗号化に使用したのと同じキーリングを使用して、暗号化されたデータを復号します。**  

```
let decryption_response = esdk_client.decrypt()
    .ciphertext(ciphertext)
    .keyring(kms_keyring)
    // Provide the encryption context that was supplied to the encrypt method
    .encryption_context(encryption_context)
    .send()
    .await?;

let decrypted_plaintext = decryption_response
                            .plaintext
                            .expect("Unable to unwrap plaintext from decryption response");
```