Skip to content

Commit e708032

Browse files
chore(kms-connector): limit decryption attempts (#1329)
* chore(kms-connector): limit decryption attempts * chore(kms-connector): code cleaning
1 parent b38b805 commit e708032

16 files changed

Lines changed: 541 additions & 263 deletions

kms-connector/.sqlx/query-12d768492b153b53cf4cb6c9f3e66c1940b5f4f6306113ff9648f690f1379240.json renamed to kms-connector/.sqlx/query-60f58397e8588260d3c79b89bfdef430f7bcdfba000a3166c7d68fd54908f6c9.json

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

kms-connector/.sqlx/query-f9e4703b71b26e3c08ecb4960d8c9ff833085240442de258975cde391de302a2.json renamed to kms-connector/.sqlx/query-e0d8f33e5502609d10d0a141bb2bd20421f84523b5a88dcd3f44305effaa5c6e.json

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

kms-connector/config/kms-worker.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ address = "0x5ffdaAB0373E62E2ea2944776209aEf29E631A64"
8787
# ENV: KMS_CONNECTOR_GRPC_REQUEST_RETRIES
8888
# grpc_request_retries = 3
8989

90+
# The maximum number of decryption attempts before a decryption request is permanently removed (optional, defaults to 200)
91+
# ENV: KMS_CONNECTOR_MAX_DECRYPTION_ATTEMPTS
92+
# max_decryption_attempts = 200
93+
9094
# Timeout to get public decryption responses from KMS Core in seconds (optional, defaults to 300s / 5min)
9195
# ENV: KMS_CONNECTOR_PUBLIC_DECRYPTION_TIMEOUT_SECS
9296
# public_decryption_timeout_secs = 300
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE public_decryption_requests ADD COLUMN error_counter SMALLINT DEFAULT 0 NOT NULL;
2+
ALTER TABLE user_decryption_requests ADD COLUMN error_counter SMALLINT DEFAULT 0 NOT NULL;

kms-connector/crates/gw-listener/src/core/publish.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,9 @@ async fn publish_user_decryption(
9090

9191
sqlx::query!(
9292
"INSERT INTO user_decryption_requests(\
93-
decryption_id, sns_ct_materials, user_address, public_key, extra_data, otlp_context\
94-
) \
95-
VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT DO NOTHING",
93+
decryption_id, sns_ct_materials, user_address, public_key, extra_data, otlp_context\
94+
) \
95+
VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT DO NOTHING",
9696
request.decryptionId.as_le_slice(),
9797
sns_ciphertexts_db as Vec<SnsCiphertextMaterialDbItem>,
9898
request.userAddress.as_slice(),

kms-connector/crates/kms-worker/src/core/config/parsed.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ pub struct Config {
4040
pub events_batch_size: u8,
4141
/// Number of retries for GRPC requests sent to the KMS Core.
4242
pub grpc_request_retries: u8,
43+
/// The maximum number of decryption attempts.
44+
pub max_decryption_attempts: u16,
4345

4446
/// Number of retries for S3 ciphertext retrieval.
4547
pub s3_ciphertext_retrieval_retries: u8,
@@ -121,6 +123,7 @@ impl Config {
121123
service_name: raw_config.service_name,
122124
events_batch_size: raw_config.events_batch_size,
123125
grpc_request_retries: raw_config.grpc_request_retries,
126+
max_decryption_attempts: raw_config.max_decryption_attempts,
124127
s3_ciphertext_retrieval_retries: raw_config.s3_ciphertext_retrieval_retries,
125128
s3_connect_timeout: s3_ciphertext_retrieval_timeout,
126129
task_limit: raw_config.task_limit,
@@ -158,6 +161,7 @@ mod tests {
158161
env::remove_var("KMS_CONNECTOR_SERVICE_NAME");
159162
env::remove_var("KMS_CONNECTOR_EVENTS_BATCH_SIZE");
160163
env::remove_var("KMS_CONNECTOR_GRPC_REQUEST_RETRIES");
164+
env::remove_var("KMS_CONNECTOR_MAX_DECRYPTION_ATTEMPTS");
161165
env::remove_var("KMS_CONNECTOR_S3_CIPHERTEXT_RETRIEVAL_RETRIES");
162166
env::remove_var("KMS_CONNECTOR_S3_CONNECT_TIMEOUT");
163167
}
@@ -237,6 +241,7 @@ mod tests {
237241
env::set_var("KMS_CONNECTOR_SERVICE_NAME", "kms-connector-test");
238242
env::set_var("KMS_CONNECTOR_EVENTS_BATCH_SIZE", "15");
239243
env::set_var("KMS_CONNECTOR_GRPC_REQUEST_RETRIES", "5");
244+
env::set_var("KMS_CONNECTOR_MAX_DECRYPTION_ATTEMPTS", "300");
240245
env::set_var("KMS_CONNECTOR_S3_CIPHERTEXT_RETRIEVAL_RETRIES", "5");
241246
env::set_var("KMS_CONNECTOR_S3_CONNECT_TIMEOUT", "4");
242247
}
@@ -266,6 +271,7 @@ mod tests {
266271
assert_eq!(config.service_name, "kms-connector-test");
267272
assert_eq!(config.events_batch_size, 15);
268273
assert_eq!(config.grpc_request_retries, 5);
274+
assert_eq!(config.max_decryption_attempts, 300);
269275
assert_eq!(config.s3_ciphertext_retrieval_retries, 5);
270276
assert_eq!(config.s3_connect_timeout.as_secs(), 4);
271277

kms-connector/crates/kms-worker/src/core/config/raw.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ pub struct RawConfig {
3636
pub events_batch_size: u8,
3737
#[serde(default = "default_grpc_request_retries")]
3838
pub grpc_request_retries: u8,
39+
#[serde(default = "default_max_decryption_attempts")]
40+
pub max_decryption_attempts: u16,
3941
#[serde(default = "default_s3_ciphertext_retrieval_retries")]
4042
pub s3_ciphertext_retrieval_retries: u8,
4143
#[serde(default = "default_s3_connect_timeout")]
@@ -68,6 +70,10 @@ fn default_grpc_request_retries() -> u8 {
6870
3
6971
}
7072

73+
fn default_max_decryption_attempts() -> u16 {
74+
200
75+
}
76+
7177
fn default_s3_ciphertext_retrieval_retries() -> u8 {
7278
3
7379
}
@@ -137,6 +143,7 @@ impl Default for RawConfig {
137143
service_name: "kms-connector".to_string(),
138144
events_batch_size: 10,
139145
grpc_request_retries: 3,
146+
max_decryption_attempts: default_max_decryption_attempts(),
140147
s3_ciphertext_retrieval_retries: 3,
141148
s3_connect_timeout: 2,
142149
task_limit: default_task_limit(),

kms-connector/crates/kms-worker/src/core/event_picker/picker.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ impl DbEventPicker {
121121
LIMIT $1 FOR UPDATE SKIP LOCKED
122122
) AS req
123123
WHERE public_decryption_requests.decryption_id = req.decryption_id
124-
RETURNING req.decryption_id, sns_ct_materials, extra_data, otlp_context, already_sent
124+
RETURNING req.decryption_id, sns_ct_materials, extra_data, otlp_context, already_sent, error_counter
125125
",
126126
)
127127
.bind(self.events_batch_size as i16)
@@ -144,7 +144,7 @@ impl DbEventPicker {
144144
LIMIT $1 FOR UPDATE SKIP LOCKED
145145
) AS req
146146
WHERE user_decryption_requests.decryption_id = req.decryption_id
147-
RETURNING req.decryption_id, sns_ct_materials, user_address, public_key, extra_data, otlp_context, already_sent
147+
RETURNING req.decryption_id, sns_ct_materials, user_address, public_key, extra_data, otlp_context, already_sent, error_counter
148148
",
149149
)
150150
.bind(self.events_batch_size as i16)

0 commit comments

Comments
 (0)