Skip to content

Commit 6573a46

Browse files
committed
chore(aws_kms): AWS KMS keyring / key-provider test
1 parent f25a390 commit 6573a46

File tree

3 files changed

+84
-3
lines changed

3 files changed

+84
-3
lines changed

performance_tests/consolidate_results.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@ def calculate_statistics(_csv_file):
1515

1616
# Calculate statistics
1717
if data:
18+
data = np.sort(data)
1819
_total_entries = len(data)
1920
_average = sum(data) / _total_entries
21+
_trimmed_average_99 = np.mean(data[0:int(0.99 * len(data))])
2022
_minimum = min(data)
2123
_maximum = max(data)
22-
_perc_99 = np.percentile(data, 99)
23-
return _total_entries, _average, _minimum, _maximum, _perc_99
24+
_perc_99 = np.percentile(data, 99)
25+
return _total_entries, _average, _trimmed_average_99, _minimum, _maximum, _perc_99
2426

2527
return None
2628

@@ -33,10 +35,11 @@ def calculate_statistics(_csv_file):
3335

3436
statistics = calculate_statistics(args.csv_file)
3537
if statistics:
36-
total_entries, average, minimum, maximum, perc_99 = statistics
38+
total_entries, average, trimmend_average_99, minimum, maximum, perc_99 = statistics
3739
print("CSV File:", args.csv_file)
3840
print("Total Entries:", total_entries)
3941
print("Average:", average)
42+
print("99th percentile trimmed average:", trimmend_average_99)
4043
print("Minimum:", minimum)
4144
print("Maximum:", maximum)
4245
print("99th percentile:", perc_99)

performance_tests/src/aws_encryption_sdk_performance_tests/keyrings/aws_kms_keyring.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,49 @@ def create_keyring(
4242
return keyring
4343

4444

45+
def create_kms_client():
46+
"""Create an AWS KMS client.
47+
48+
Usage: create_kms_client()
49+
"""
50+
# Create a boto3 client for KMS.
51+
kms_client = boto3.client('kms', region_name="us-west-2")
52+
53+
return kms_client
54+
55+
56+
def create_keyring_given_kms_client(
57+
kms_key_id: str,
58+
kms_client: boto3.client,
59+
):
60+
"""Demonstrate how to create an AWS KMS keyring with given KMS client.
61+
62+
Usage: create_keyring(kms_key_id, kms_client)
63+
:param kms_key_id: KMS Key identifier for the KMS key you want to use.
64+
:type kms_key_id: string
65+
:param kms_client: boto3 client for KMS.
66+
:type kms_client: boto3.client
67+
68+
For more information on KMS Key identifiers, see
69+
https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id
70+
"""
71+
# Create a KMS keyring
72+
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
73+
config=MaterialProvidersConfig()
74+
)
75+
76+
keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput(
77+
kms_key_id=kms_key_id,
78+
kms_client=kms_client
79+
)
80+
81+
keyring: IKeyring = mat_prov.create_aws_kms_keyring(
82+
input=keyring_input
83+
)
84+
85+
return keyring
86+
87+
4588
def encrypt_using_keyring(
4689
plaintext_data: bytes,
4790
keyring: IKeyring

performance_tests/test/keyrings/test_aws_kms_keyring.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
from aws_encryption_sdk_performance_tests.keyrings.aws_kms_keyring import (
1111
create_keyring,
12+
create_kms_client,
13+
create_keyring_given_kms_client,
1214
decrypt_using_keyring,
1315
encrypt_using_keyring,
1416
)
@@ -46,6 +48,38 @@ def create(
4648
PerfTestUtils.print_time_list_to_csv(time_list, output_file)
4749

4850

51+
@click.group()
52+
def create_kms_keyring_given_kms_client():
53+
"""Click group helper function"""
54+
55+
56+
@create_kms_keyring_given_kms_client.command()
57+
@click.option('--kms_key_id',
58+
default='arn:aws:kms:us-west-2:658956600833:key/b3537ef1-d8dc-4780-9f5a-55776cbb2f7f')
59+
@click.option('--n_iters',
60+
default=PerfTestUtils.DEFAULT_N_ITERS)
61+
@click.option('--output_file',
62+
default='kms_keyring_create_given_kms_client')
63+
def create_given_kms_client(
64+
kms_key_id: str,
65+
n_iters: int,
66+
output_file: str
67+
):
68+
"""Performance test for the create_keyring function."""
69+
kms_client = create_kms_client()
70+
time_list = []
71+
for _ in tqdm(range(n_iters)):
72+
curr_time = time.time()
73+
74+
create_keyring_given_kms_client(kms_key_id, kms_client)
75+
76+
# calculate elapsed time in milliseconds
77+
elapsed_time = (time.time() - curr_time) * 1000
78+
time_list.append(elapsed_time)
79+
80+
PerfTestUtils.print_time_list_to_csv(time_list, output_file)
81+
82+
4983
@click.group()
5084
def encrypt_kms_keyring():
5185
"""Click group helper function"""
@@ -125,6 +159,7 @@ def decrypt(
125159

126160

127161
kms_keyring_test = click.CommandCollection(sources=[create_kms_keyring,
162+
create_kms_keyring_given_kms_client,
128163
encrypt_kms_keyring,
129164
decrypt_kms_keyring])
130165

0 commit comments

Comments
 (0)