@@ -13,6 +13,8 @@ import (
1313
1414 mplsmithygenerated "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygenerated"
1515 mpltypes "github.com/aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygeneratedtypes"
16+ itemencryptor "github.com/aws/aws-database-encryption-sdk-dynamodb/releases/go/dynamodb-esdk/awscryptographydbencryptionsdkdynamodbitemencryptorsmithygenerated"
17+ dbesdkitemencryptortypes "github.com/aws/aws-database-encryption-sdk-dynamodb/releases/go/dynamodb-esdk/awscryptographydbencryptionsdkdynamodbitemencryptorsmithygeneratedtypes"
1618 dbesdkdynamodbencryptiontypes "github.com/aws/aws-database-encryption-sdk-dynamodb/releases/go/dynamodb-esdk/awscryptographydbencryptionsdkdynamodbsmithygeneratedtypes"
1719 dbesdkstructuredencryptiontypes "github.com/aws/aws-database-encryption-sdk-dynamodb/releases/go/dynamodb-esdk/awscryptographydbencryptionsdkstructuredencryptionsmithygeneratedtypes"
1820 "github.com/aws/aws-database-encryption-sdk-dynamodb/releases/go/dynamodb-esdk/dbesdkmiddleware"
@@ -32,12 +34,13 @@ const (
3234
3335// DBESDKBenchmark is the main benchmark struct
3436type DBESDKBenchmark struct {
35- Config TestConfig
36- DbesdkClient * dynamodb.Client
37- Keyring mpltypes.IKeyring
38- Results []BenchmarkResult
39- CPUCount int
40- TotalMemoryGB float64
37+ Config TestConfig
38+ DbesdkClient * dynamodb.Client
39+ ItemEncryptorClient * itemencryptor.Client
40+ Keyring mpltypes.IKeyring
41+ Results []BenchmarkResult
42+ CPUCount int
43+ TotalMemoryGB float64
4144}
4245
4346// New creates a new benchmark instance
@@ -64,7 +67,7 @@ func New(configPath string) (*DBESDKBenchmark, error) {
6467 }
6568
6669 // Setup DB-ESDK
67- if err := benchmark .setupDBESDK (); err != nil {
70+ if err := benchmark .setupDBESDK (false ); err != nil {
6871 return nil , fmt .Errorf ("failed to setup DB-ESDK: %w" , err )
6972 }
7073
@@ -95,35 +98,7 @@ func (b *DBESDKBenchmark) setupMPL() error {
9598}
9699
97100// setupDBESDK initializes the DynamoDB client with DB-ESDK middleware and creates a default keyring which is AES keyring
98- func (b * DBESDKBenchmark ) setupDBESDK () error {
99- ddbTableName := b .Config .TableName
100-
101- // Initialize the material providers client
102- matProvConfig := mpltypes.MaterialProvidersConfig {}
103- matProv , err := mplsmithygenerated .NewClient (matProvConfig )
104- if err != nil {
105- return fmt .Errorf ("failed to create material providers client: %w" , err )
106- }
107-
108- // Create default AES-256 keyring
109- key := make ([]byte , 32 ) // 256-bit key
110- if _ , err := rand .Read (key ); err != nil {
111- return fmt .Errorf ("failed to generate AES-256 key: %w" , err )
112- }
113-
114- keyringInput := mpltypes.CreateRawAesKeyringInput {
115- KeyName : "test-aes-256-key" ,
116- KeyNamespace : "DB-ESDK-performance-test" ,
117- WrappingKey : key ,
118- WrappingAlg : mpltypes .AesWrappingAlgAlgAes256GcmIv12Tag16 ,
119- }
120-
121- keyring , err := matProv .CreateRawAesKeyring (context .Background (), keyringInput )
122- if err != nil {
123- return fmt .Errorf ("failed to create keyring: %w" , err )
124- }
125- b .Keyring = keyring
126-
101+ func (b * DBESDKBenchmark ) setupDBESDK (useItemEncryptor bool ) error {
127102 attributeActions := map [string ]dbesdkstructuredencryptiontypes.CryptoAction {
128103 "partition_key" : dbesdkstructuredencryptiontypes .CryptoActionSignOnly ,
129104 "sort_key" : dbesdkstructuredencryptiontypes .CryptoActionSignOnly ,
@@ -137,22 +112,41 @@ func (b *DBESDKBenchmark) setupDBESDK() error {
137112 partitionKey := "partition_key"
138113 sortKeyName := "sort_key"
139114 algorithmSuiteID := mpltypes .DBEAlgorithmSuiteIdAlgAes256GcmHkdfSha512CommitKeyEcdsaP384SymsigHmacSha384
115+
116+ err := b .setupItemEncryptorClient (partitionKey , sortKeyName , allowedUnsignedAttributePrefix , algorithmSuiteID , attributeActions )
117+ if err != nil {
118+ return err
119+ }
120+
121+ err = b .SetupDDB (partitionKey , sortKeyName , allowedUnsignedAttributePrefix , algorithmSuiteID , attributeActions )
122+ if err != nil {
123+ return err
124+ }
125+
126+ log .Println ("ESDK client initialized successfully" )
127+ return nil
128+ }
129+
130+ func (b * DBESDKBenchmark ) SetupDDB (partitionKey , sortKeyName , allowedUnsignedAttributePrefix string , algorithmSuiteID mpltypes.DBEAlgorithmSuiteId , attributeActions map [string ]dbesdkstructuredencryptiontypes.CryptoAction ) error {
140131 tableConfig := dbesdkdynamodbencryptiontypes.DynamoDbTableEncryptionConfig {
141- LogicalTableName : ddbTableName ,
132+ LogicalTableName : b . Config . TableName ,
142133 PartitionKeyName : partitionKey ,
143134 SortKeyName : & sortKeyName ,
144135 AttributeActionsOnEncrypt : attributeActions ,
145- Keyring : keyring ,
136+ Keyring : b . Keyring ,
146137 AllowedUnsignedAttributePrefix : & allowedUnsignedAttributePrefix ,
147138 AlgorithmSuiteId : & algorithmSuiteID ,
148139 }
149140 tableConfigsMap := make (map [string ]dbesdkdynamodbencryptiontypes.DynamoDbTableEncryptionConfig )
150- tableConfigsMap [ddbTableName ] = tableConfig
141+ tableConfigsMap [b . Config . TableName ] = tableConfig
151142 listOfTableConfigs := dbesdkdynamodbencryptiontypes.DynamoDbTablesEncryptionConfig {
152143 TableEncryptionConfigs : tableConfigsMap ,
153144 }
154145
155146 cfg , err := config .LoadDefaultConfig (context .TODO ())
147+ if err != nil {
148+ return fmt .Errorf ("failed to load default config: %w" , err )
149+ }
156150
157151 dbEsdkMiddleware , err := dbesdkmiddleware .NewDBEsdkMiddleware (listOfTableConfigs )
158152 ddb := dynamodb .NewFromConfig (cfg , dbEsdkMiddleware .CreateMiddleware (), func (o * dynamodb.Options ) {
@@ -161,7 +155,24 @@ func (b *DBESDKBenchmark) setupDBESDK() error {
161155
162156 b .DbesdkClient = ddb
163157
164- log .Println ("ESDK client initialized successfully" )
158+ return nil
159+ }
160+
161+ func (b * DBESDKBenchmark ) setupItemEncryptorClient (partitionKey , sortKeyName , allowedUnsignedAttributePrefix string , algorithmSuiteID mpltypes.DBEAlgorithmSuiteId , attributeActions map [string ]dbesdkstructuredencryptiontypes.CryptoAction ) error {
162+ itemEncryptorConfig := dbesdkitemencryptortypes.DynamoDbItemEncryptorConfig {
163+ LogicalTableName : b .Config .TableName ,
164+ PartitionKeyName : partitionKey ,
165+ SortKeyName : & sortKeyName ,
166+ AttributeActionsOnEncrypt : attributeActions ,
167+ Keyring : b .Keyring ,
168+ AllowedUnsignedAttributePrefix : & allowedUnsignedAttributePrefix ,
169+ AlgorithmSuiteId : & algorithmSuiteID ,
170+ }
171+ itemEncryptorClient , err := itemencryptor .NewClient (itemEncryptorConfig )
172+ if err != nil {
173+ return fmt .Errorf ("failed to create item encryptor client: %w" , err )
174+ }
175+ b .ItemEncryptorClient = itemEncryptorClient
165176 return nil
166177}
167178
0 commit comments