Skip to content

feat: copy migrated key from new key ID to the old one - #530

Merged
kc1212 merged 15 commits into
mainfrom
kc1212/feat/2988/copy-compressed-key-to-orig
Apr 30, 2026
Merged

feat: copy migrated key from new key ID to the old one#530
kc1212 merged 15 commits into
mainfrom
kc1212/feat/2988/copy-compressed-key-to-orig

Conversation

@kc1212

@kc1212 kc1212 commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

Description of changes

Implement a function that

  • copied the compressed xof keyset from the new key ID to an old one
  • replaces the ThresholdFheKey from the new key ID with the one in the old key ID

Manual testing


cargo run -- -f config/client_local_threshold.toml insecure-key-gen  -u
# assign output to KEYID=...

# test decryption
cargo run -- -f config/client_local_threshold.toml public-decrypt from-args -d euint64 -k ${KEYID_OLD} --to-encrypt abcd --num-requests 1

cargo run -- -f config/client_local_threshold.toml preproc-key-gen --from-existing-shares
# assign output to PREPID=...
cargo run -- -f config/client_local_threshold.toml key-gen -i $PREPID --existing-keyset-id $KEYID_OLD --use-existing-key-tag --copy-compressed-key-to-original
# assign output to KEYID_NEW

# test the same decryption using old ID (it should also work using the uncompressed key)
cargo run -- -f config/client_local_threshold.toml public-decrypt from-args -d euint64 -k ${KEYID_OLD} --to-encrypt abcd --num-requests 1
cargo run -- -f config/client_local_threshold.toml public-decrypt from-args -d euint64 -k ${KEYID_OLD} --to-encrypt abcd --num-requests 1 -u

# the same should work using the new ID
cargo run -- -f config/client_local_threshold.toml public-decrypt from-args -d euint64 -k ${KEYID_NEW} --to-encrypt abcd --num-requests 1

Issue ticket number and link

Closes zama-ai/kms-internal#2988

PR Checklist

I attest that all checked items are satisfied. Any deviation is clearly justified above.

  • Title follows conventional commits (e.g. chore: ...).
  • Tests added for every new pub item and test coverage has not decreased.
  • Public APIs and non-obvious logic documented; unfinished work marked as TODO(#issue).
  • unwrap/expect/panic only in tests or for invariant bugs (documented if present).
  • No dependency version changes OR (if changed) only minimal required fixes.
  • No architectural protocol changes OR linked spec PR/issue provided.
  • No breaking deployment config changes OR devops label + infra notified + infra-team reviewer assigned.
  • No breaking gRPC / serialized data changes OR commit marked with ! and affected teams notified.
  • No modifications to existing versionized structs OR backward compatibility tests updated.
  • No critical business logic / crypto changes OR ≥2 reviewers assigned.
  • No new sensitive data fields added OR Zeroize + ZeroizeOnDrop implemented.
  • No new public storage data OR data is verifiable (signature / digest).
  • No unsafe; if unavoidable: minimal, justified, documented, and test/fuzz covered.
  • Strongly typed boundaries: typed inputs validated at the edge; no untyped values or errors cross modules.
  • Self-review completed.

Dependency Update Questionnaire (only if deps changed or added)

Answer in the Cargo.toml next to the dependency (or here if updating):

  1. Ownership changes or suspicious concentration?
  2. Low popularity?
  3. Unusual version jump?
  4. Lacking documentation?
  5. Missing CI?
  6. No security / disclosure policy?
  7. Significant size increase?

More details and explanations for the checklist and dependency updates can be found in CONTRIBUTING.md

@kc1212 kc1212 self-assigned this Apr 16, 2026
@kc1212
kc1212 requested a review from a team as a code owner April 16, 2026 15:59
@cla-bot cla-bot Bot added the cla-signed The CLA has been signed. label Apr 16, 2026
@kc1212
kc1212 marked this pull request as draft April 16, 2026 15:59
@kc1212
kc1212 force-pushed the kc1212/feat/2988/copy-compressed-key-to-orig branch from 5f5e39e to e08b202 Compare April 16, 2026 15:59
@github-actions

github-actions Bot commented Apr 16, 2026

Copy link
Copy Markdown

Consolidated Tests Results 2026-04-30 - 09:48:55

Test Results

passed 1157 passed

Details

tests 1157 tests
clock not captured
tool junit-to-ctrf
build main arrow-right test-reporter link #4385
pull-request feat: copy migrated key from new key ID to the old one link #530

test-reporter: Run #4385

Tests 📝 Passed ✅ Failed ❌ Skipped ⏭️ Pending ⏳ Other ❓ Flaky 🍂 Duration ⏱️
1157 1157 0 0 0 0 0 not captured

🎉 All tests passed!

Tests

View All Tests
Test Name Status Flaky Duration
backup::custodian::tests::invalid_threshold_should_fail 6ms
client::tests::testing_infra_tests::test_threshold_material_validation 5ms
client::tests::threshold::crs_gen_tests::secure_threshold_crs 7m 15s
client::tests::threshold::crs_gen_tests::test_crs_gen_threshold 44.6s
client::tests::threshold::crs_gen_tests::test_insecure_crs_gen_threshold 42.5s
client::tests::threshold::custodian_backup_tests::test_auto_update_backups_threshold::case_1 5.1s
client::tests::threshold::custodian_backup_tests::test_auto_update_backups_threshold::case_2 5.1s
client::tests::threshold::custodian_backup_tests::test_backup_after_crs_threshold::case_1 45.2s
client::tests::threshold::custodian_backup_tests::test_backup_after_crs_threshold::case_2 44.7s
client::tests::threshold::custodian_backup_tests::test_backup_after_reshare_threshold 46.0s
client::tests::threshold::custodian_backup_tests::test_custodian_reencryption_with_existing_data_threshold 7.0s
client::tests::threshold::custodian_backup_tests::test_decrypt_after_recovery_threshold::case_1 11.7s
client::tests::threshold::custodian_backup_tests::test_decrypt_after_recovery_threshold::case_2 11.7s
client::tests::threshold::custodian_backup_tests::test_decrypt_after_recovery_threshold_negative 5.2s
client::tests::threshold::custodian_backup_tests::test_keygen_backup_presence_threshold 6.9s
client::tests::threshold::custodian_backup_tests::test_mpc_context_backup_threshold 5.1s
client::tests::threshold::custodian_backup_tests::test_prss_in_custodian_backup_threshold 5.1s
client::tests::threshold::custodian_context_tests::test_new_custodian_context_threshold::case_1 7.8s
client::tests::threshold::custodian_context_tests::test_new_custodian_context_threshold::case_2 7.9s
client::tests::threshold::key_gen_tests::default_insecure_dkg 2m 24s
client::tests::threshold::key_gen_tests::secure_threshold_compressed_keygen_from_existing 3m 52s
client::tests::threshold::key_gen_tests::secure_threshold_compressed_keygen_test 1m 53s
client::tests::threshold::key_gen_tests::secure_threshold_keygen 2m 52s
client::tests::threshold::key_gen_tests::secure_threshold_keygen_crash_online 2m 31s
client::tests::threshold::key_gen_tests::secure_threshold_keygen_crash_preprocessing 2m 9s
client::tests::threshold::key_gen_tests::test_insecure_compressed_dkg::case_1 8.5s
client::tests::threshold::key_gen_tests::test_insecure_dkg 5.1s
client::tests::threshold::key_gen_tests::test_insecure_threshold_decompression_keygen 47.1s
client::tests::threshold::misc_tests::test_ratelimiter 241ms
client::tests::threshold::misc_tests::test_threshold_close_after_drop 1.0s
client::tests::threshold::misc_tests::test_threshold_health_endpoint_availability 4.7s
client::tests::threshold::misc_tests::test_threshold_shutdown 2.1s
client::tests::threshold::mpc_context_tests::test_context_switch_4p 12.4s
client::tests::threshold::mpc_epoch_tests::test_new_epoch_with_reshare 7m 4s
client::tests::threshold::public_decryption_tests::default_decryption_threshold::case_1 38.0s
client::tests::threshold::public_decryption_tests::default_decryption_threshold_precompute_sns::case_1::compression_1_true 28.4s
client::tests::threshold::public_decryption_tests::default_decryption_threshold_precompute_sns::case_1::compression_2_false 28.2s
client::tests::threshold::public_decryption_tests::default_decryption_threshold_with_crash::case_1 28.1s
client::tests::threshold::public_decryption_tests::test_decryption_threshold::case_1 18.6s
client::tests::threshold::public_decryption_tests::test_decryption_threshold::case_2 14.3s
client::tests::threshold::public_decryption_tests::test_decryption_threshold::case_3 14.5s
client::tests::threshold::public_decryption_tests::test_decryption_threshold_no_decompression::case_1 12.4s
client::tests::threshold::public_decryption_tests::test_decryption_threshold_no_decompression::case_2 11.1s
client::tests::threshold::public_decryption_tests::test_decryption_threshold_no_decompression::case_3 11.2s
client::tests::threshold::public_decryption_tests::test_decryption_threshold_precompute_sns::case_1::compression_1_true 14.3s
client::tests::threshold::public_decryption_tests::test_decryption_threshold_precompute_sns::case_1::compression_2_false 14.4s
client::tests::threshold::restore_from_backup_tests::test_insecure_threshold_crs_backup 16.2s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_1 7.9s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_2 8.7s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_3 11.0s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_4 10.9s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_5 14.2s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_6 12.8s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_7 12.1s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold_all_malicious_failure 9.5s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold_malicious::case_1 11.0s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold_malicious::case_2 10.9s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold_malicious_failure 11.0s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold_precompute_sns::case_1 11.0s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold_precompute_sns::case_2 11.0s
conf::tests::test_threshold_config 7ms
conf::tests::test_threshold_config_negative 7ms
conf::threshold::test_pem_serialization 5ms
engine::migration::tests::s3_tests::test_0_13_x_to_0_13_10_threshold_s3 67ms
engine::migration::tests::s3_tests::test_after_0_13_x_threshold_s3 55ms
engine::migration::tests::s3_tests::test_migrate_threshold_s3 60ms
engine::migration::tests::s3_tests::test_remove_old_keys_threshold_s3 49ms
engine::migration::tests::test_0_13_x_to_0_13_10_threshold_file 8ms
engine::migration::tests::test_0_13_x_to_0_13_10_threshold_ram 6ms
engine::migration::tests::test_after_0_13_x_threshold_file 7ms
engine::migration::tests::test_after_0_13_x_threshold_ram 5ms
engine::migration::tests::test_migrate_threshold_file 6ms
engine::migration::tests::test_migrate_threshold_ram 5ms
engine::migration::tests::test_migrate_to_0_13_10_threshold 5ms
engine::migration::tests::test_migrate_to_0_13_x_threshold 5ms
engine::migration::tests::test_remove_old_keys_threshold_file 6ms
engine::migration::tests::test_remove_old_keys_threshold_ram 5ms
engine::threshold::service::crs_generator::tests::abort_during_crs_gen 6ms
engine::threshold::service::crs_generator::tests::abort_not_found 6ms
engine::threshold::service::crs_generator::tests::already_exists 6ms
engine::threshold::service::crs_generator::tests::internal_failure 6ms
engine::threshold::service::crs_generator::tests::invalid_argument 6ms
engine::threshold::service::crs_generator::tests::not_found 6ms
engine::threshold::service::crs_generator::tests::resource_exhausted 6ms
engine::threshold::service::crs_generator::tests::sunshine 45ms
engine::threshold::service::crs_generator::tests::unavailable 1m
engine::threshold::service::epoch_manager::tests::already_exists 7ms
engine::threshold::service::epoch_manager::tests::invalid_argument 7ms
engine::threshold::service::epoch_manager::tests::load_all_prss 6ms
engine::threshold::service::epoch_manager::tests::not_found 6ms
engine::threshold::service::epoch_manager::tests::prss_from_storage_test 53.3s
engine::threshold::service::epoch_manager::tests::sunshine 7ms
engine::threshold::service::epoch_manager::tests::test_destroy_epoch_not_found 7ms
engine::threshold::service::epoch_manager::tests::test_destroy_epoch_success 6ms
engine::threshold::service::epoch_manager::tests::test_resource_exhausted 6ms
engine::threshold::service::epoch_manager::tests::test_verify_epoch_info 5ms
engine::threshold::service::key_generator::tests::abort_during_key_gen 7ms
engine::threshold::service::key_generator::tests::abort_key_gen_not_found 6ms
engine::threshold::service::key_generator::tests::aborted 5ms
engine::threshold::service::key_generator::tests::already_exists 6ms
engine::threshold::service::key_generator::tests::internal 6ms
engine::threshold::service::key_generator::tests::invalid_argument 6ms
engine::threshold::service::key_generator::tests::not_found 6ms
engine::threshold::service::key_generator::tests::resource_exhausted 6ms
engine::threshold::service::key_generator::tests::sunshine 141ms
engine::threshold::service::key_generator::tests::use_existing_key_tag_with_wrong_keyset_id 8ms
engine::threshold::service::kms_impl::tests::deser_v2_compressed_upgrades_and_reserializes_smaller 151ms
engine::threshold::service::kms_impl::tests::roundtrip_v3_compressed_and_lazy_decompress 175ms
engine::threshold::service::kms_impl::tests::upgrade_public_key_material_v0_compressed_drops_decompressed_keys 98ms
engine::threshold::service::preprocessor::tests::abort_during_preproc 8ms
engine::threshold::service::preprocessor::tests::abort_preproc_not_found 7ms
engine::threshold::service::preprocessor::tests::already_exists 7ms
engine::threshold::service::preprocessor::tests::cannot_start_same_preproc_id_after_completion 795ms
engine::threshold::service::preprocessor::tests::internal 8ms
engine::threshold::service::preprocessor::tests::invalid_argument 7ms
engine::threshold::service::preprocessor::tests::not_found 7ms
engine::threshold::service::preprocessor::tests::resource_exhausted 6ms
engine::threshold::service::preprocessor::tests::sunshine 801ms
engine::threshold::service::public_decryptor::tests::already_exists 83ms
engine::threshold::service::public_decryptor::tests::invalid_argument 80ms
engine::threshold::service::public_decryptor::tests::not_found 228ms
engine::threshold::service::public_decryptor::tests::sunshine 85ms
engine::threshold::service::public_decryptor::tests::test_resource_exhausted 77ms
engine::threshold::service::reshare_utils::tests::bad_digests_get_verified_public_materials 162ms
engine::threshold::service::reshare_utils::tests::bad_digests_get_verified_public_materials_compressed 237ms
engine::threshold::service::reshare_utils::tests::empty_storage_fetch_public_materials_from_peers 173ms
engine::threshold::service::reshare_utils::tests::sunshine_fetch_public_materials_from_peers 174ms
engine::threshold::service::reshare_utils::tests::sunshine_fetch_public_materials_from_peers_compressed 90ms
engine::threshold::service::reshare_utils::tests::sunshine_get_verified_public_materials 13ms
engine::threshold::service::reshare_utils::tests::sunshine_get_verified_public_materials_compressed 86ms
engine::threshold::service::reshare_utils::tests::test_split_url 6ms
engine::threshold::service::reshare_utils::tests::wrong_digest_fetch_public_materials_from_peers 19ms
engine::threshold::service::reshare_utils::tests::wrong_digest_fetch_public_materials_from_peers_compressed 87ms
engine::threshold::service::user_decryptor::tests::already_exists 75ms
engine::threshold::service::user_decryptor::tests::invalid_argument 74ms
engine::threshold::service::user_decryptor::tests::not_found 222ms
engine::threshold::service::user_decryptor::tests::resource_exhausted 78ms
engine::threshold::service::user_decryptor::tests::sunshine 85ms
testing::material::manager::tests::test_setup_threshold_material 19ms
testing::material::spec::tests::test_threshold_basic_spec 5ms
testing::material::spec::tests::test_threshold_default_no_prss_spec 5ms
testing::material::spec::tests::test_threshold_default_spec_requires_prss 5ms
vault::storage::crypto_material::tests::read_guarded_threshold_fhe_keys_not_found 6ms
vault::storage::crypto_material::tests::write_threshold_compressed_empty_update_cleans_up 162ms
vault::storage::crypto_material::tests::write_threshold_empty_update 73ms
vault::storage::crypto_material::tests::write_threshold_keys_failed_storage 74ms
vault::storage::crypto_material::tests::write_threshold_keys_meta_update 75ms
vault::storage::file::tests::storage_helper_methods::threshold_1_true 14ms
vault::storage::file::tests::storage_helper_methods::threshold_2_false 13ms
test_backward_compatibility_threshold_fhe 113ms
kms_gen_keys_binary_test::gen_key_tempdir_threshold 623ms
kms_gen_keys_binary_test::gen_key_threshold 1.9s
kms_gen_keys_binary_test::threshold_signing_key 56ms
kms_gen_keys_binary_test::threshold_signing_key_wrong_party_id 125ms
kms_gen_keys_binary_test::threshold_wrong_num_parties 127ms
kms_server_binary_test::subcommand_dev_threshold 5.8s
config_conformance_client_local_threshold 5ms
test_threshold_abort_crs_gen 554ms
test_threshold_abort_key_gen 552ms
test_threshold_concurrent_preproc_keygen 2m 16s
test_threshold_custodian_backup 590ms
test_threshold_default_preproc_keygen 5m 13s
test_threshold_insecure 14m 18s
test_threshold_insecure_default_keygen 943ms
test_threshold_mpc_context_init 2m 28s
test_threshold_mpc_context_switch 1.6s
test_threshold_mpc_context_switch_6 8m 13s
test_threshold_reshare 2m 49s
test_threshold_restore_from_backup 981ms
backup::custodian::tests::internal_custodian_context_duplicate_role_should_fail 6ms
backup::custodian::tests::internal_custodian_context_role_greater_than_nodes_should_fail 5ms
backup::custodian::tests::internal_custodian_context_zero_role_should_fail 5ms
backup::operator::tests::operator_new_fails_with_bad_n_t 5ms
backup::operator::tests::operator_new_fails_with_duplicate_roles 5ms
backup::operator::tests::operator_new_fails_with_insufficient_messages 5ms
backup::operator::tests::operator_new_fails_with_invalid_header 5ms
backup::operator::tests::operator_new_fails_with_invalid_role 5ms
backup::operator::tests::operator_new_fails_with_invalid_timestamp_future 5ms
backup::operator::tests::operator_new_fails_with_invalid_timestamp_past 5ms
backup::operator::tests::operator_new_fails_with_not_enough 5ms
backup::operator::tests::operator_new_fails_with_zero_n 4ms
backup::operator::tests::operator_new_fails_with_zero_t 4ms
backup::operator::tests::operator_timestamp_validation 5ms
backup::operator::tests::validate_recovery_validation_material 6ms
backup::secretsharing::pkcs7::tests::padding_sunshine 5ms
backup::secretsharing::pkcs7::tests::padding_wrong_data 5ms
backup::secretsharing::tests::sharing_missing_shares 217ms
backup::secretsharing::tests::sharing_no_error 296ms
backup::secretsharing::tests::sharing_randomness_test 16.6s
backup::secretsharing::tests::sharing_too_many_missing_shares 14ms
backup::secretsharing::tests::sharing_wrong_params 6ms
backup::secretsharing::tests::sharing_wrong_shares 132ms
backup::seed_phrase::tests::difference 6ms
backup::seed_phrase::tests::mnemonic_robustness 6ms
backup::seed_phrase::tests::sunshine 6ms
backup::tests::custodian_reencrypt 10ms
backup::tests::full_flow::case_1 164ms
backup::tests::full_flow::case_2 147ms
backup::tests::full_flow::case_3 213ms
backup::tests::full_flow_drop_msg 151ms
backup::tests::full_flow_malicious_custodian_init 12ms
backup::tests::full_flow_malicious_custodian_not_enough 133ms
backup::tests::full_flow_malicious_custodian_second 181ms
backup::tests::full_flow_malicious_operator 147ms
backup::tests::operator_setup 9ms
client::crs_gen::tests::process_distributed_crs_result_invalid_signature_does_not_insert_key 10.8s
client::crs_gen::tests::verify_pp_with_tfhers 15.8s
client::tests::centralized::crs_gen_tests::test_crs_gen_centralized 7m 30s
client::tests::centralized::crs_gen_tests::test_crs_gen_manual 5.6s
client::tests::centralized::crs_gen_tests::test_insecure_crs_gen_centralized 11.0s
client::tests::centralized::custodian_backup_tests::test_auto_update_backups_central 4.8s
client::tests::centralized::custodian_backup_tests::test_backup_after_crs_central 10.9s
client::tests::centralized::custodian_backup_tests::test_decrypt_after_recovery_central 6.7s
client::tests::centralized::custodian_backup_tests::test_decrypt_after_recovery_centralized_negative 5.3s
client::tests::centralized::custodian_backup_tests::test_keygen_backup_presence_central 5.4s
client::tests::centralized::custodian_backup_tests::test_mpc_context_backup_central 4.7s
client::tests::centralized::custodian_context_tests::test_new_custodian_context_central 4.3s
client::tests::centralized::key_gen_tests::default_decompression_key_gen_centralized 3m 6s
client::tests::centralized::key_gen_tests::default_key_gen_centralized 1m 24s
client::tests::centralized::key_gen_tests::test_compressed_key_gen_centralized 10.5s
client::tests::centralized::key_gen_tests::test_decompression_key_gen_centralized 3m 24s
client::tests::centralized::key_gen_tests::test_key_gen_centralized 14.2s
client::tests::centralized::misc_tests::test_central_close_after_drop 399ms
client::tests::centralized::misc_tests::test_central_health_endpoint_availability 785ms
client::tests::centralized::misc_tests::test_largecipher 1m 16s
client::tests::centralized::public_decryption_tests::default_decryption_centralized::case_1 25.2s
client::tests::centralized::public_decryption_tests::default_decryption_centralized_precompute_sns::case_1 26.2s
client::tests::centralized::public_decryption_tests::test_decryption_central 14.3s
client::tests::centralized::public_decryption_tests::test_decryption_central_no_decompression 14.3s
client::tests::centralized::public_decryption_tests::test_decryption_central_precompute_sns 14.3s
client::tests::centralized::restore_from_backup_tests::test_insecure_central_autobackup_after_deletion 1.5s
client::tests::centralized::restore_from_backup_tests::test_insecure_central_dkg_backup 1.7s
client::tests::centralized::user_decryption_tests::default_user_decryption_centralized::secure_1_true 25.0s
client::tests::centralized::user_decryption_tests::default_user_decryption_centralized::secure_2_false 25.1s
client::tests::centralized::user_decryption_tests::default_user_decryption_centralized_no_compression::secure_1_true 24.8s
client::tests::centralized::user_decryption_tests::default_user_decryption_centralized_no_compression::secure_2_false 24.9s
client::tests::centralized::user_decryption_tests::default_user_decryption_centralized_precompute_sns::secure_1_true::compression_1_true 26.1s
client::tests::centralized::user_decryption_tests::default_user_decryption_centralized_precompute_sns::secure_1_true::compression_2_false 26.0s
client::tests::centralized::user_decryption_tests::default_user_decryption_centralized_precompute_sns::secure_2_false::compression_1_true 26.1s
client::tests::centralized::user_decryption_tests::default_user_decryption_centralized_precompute_sns::secure_2_false::compression_2_false 25.9s
client::tests::centralized::user_decryption_tests::test_user_decryption_centralized::secure_1_true 13.9s
client::tests::centralized::user_decryption_tests::test_user_decryption_centralized::secure_2_false 13.9s
client::tests::centralized::user_decryption_tests::test_user_decryption_centralized_precompute_sns::secure_1_true::compression_1_true 14.0s
client::tests::centralized::user_decryption_tests::test_user_decryption_centralized_precompute_sns::secure_1_true::compression_2_false 14.1s
client::tests::centralized::user_decryption_tests::test_user_decryption_centralized_precompute_sns::secure_2_false::compression_1_true 14.1s
client::tests::centralized::user_decryption_tests::test_user_decryption_centralized_precompute_sns::secure_2_false::compression_2_false 14.1s
client::tests::common::num_blocks_sunshine 6ms
client::tests::make_extra_data_unknown_version_errors 6ms
client::tests::make_extra_data_v0_ignores_ids 5ms
client::tests::make_extra_data_v1_requires_context 5ms
client::tests::make_extra_data_v2_requires_both_ids 5ms
client::tests::testing_infra_tests::test_centralized_material_validation 6ms
client::tests::testing_infra_tests::tests::test_material_spec_creation 5ms
client::tests::testing_infra_tests::tests::test_material_spec_serialization 5ms
conf::tests::config_conformance_compose_1 6ms
conf::tests::config_conformance_compose_centralized 6ms
conf::tests::test_centralized_config 6ms
cryptography::decompression::test::test_1024b 3.6s
cryptography::decompression::test::test_128b 1.9s
cryptography::decompression::test::test_16b 1.7s
cryptography::decompression::test::test_2048b 5.5s
cryptography::decompression::test::test_256b 2.1s
cryptography::decompression::test::test_32b 1.7s
cryptography::decompression::test::test_4b 1.7s
cryptography::decompression::test::test_512b 2.6s
cryptography::decompression::test::test_64b 1.8s
cryptography::decompression::test::test_8b 1.7s
cryptography::decompression::test::test_bad_ciphertext 1.4s
cryptography::decompression::test::test_bad_fhe_type 1.7s
cryptography::decompression::test::test_bool 1.8s
cryptography::decompression::test::test_full_chain_client_copro_kms_uint8::case_1 38ms
cryptography::decompression::test::test_full_chain_client_copro_kms_uint8::case_2 2.0s
cryptography::decompression::test::test_tolerate_non_compressed 608ms
cryptography::encryption::tests::deserialize_and_validate_accepts_mlkem512 6ms
cryptography::encryption::tests::deserialize_and_validate_rejects_invalid_bytes 6ms
cryptography::encryption::tests::deserialize_and_validate_rejects_mlkem1024 5ms
cryptography::encryption::tests::nested_pke_sunshine 6ms
cryptography::encryption::tests::pke_wrong_ct_enc 5ms
cryptography::encryption::tests::pke_wrong_kem_key 5ms
cryptography::hybrid_ml_kem::tests::pke_sunshine 59ms
cryptography::hybrid_ml_kem::tests::pke_wrong_ct_hybrid 55ms
cryptography::hybrid_ml_kem::tests::pke_wrong_kem 54ms
cryptography::hybrid_ml_kem::tests::pke_wrong_key 68ms
cryptography::hybrid_ml_kem::tests::pke_wrong_nonce 55ms
cryptography::hybrid_ml_kem::tests::test_pke_serialize_size 6ms
cryptography::hybrid_ml_kem::tests::validate_consistent_cipher_encoding 6ms
cryptography::signatures::tests::bad_dsep 6ms
cryptography::signatures::tests::bad_signature 6ms
cryptography::signatures::tests::plain_signing 6ms
cryptography::signatures::tests::regression_consistent_enc 5ms
cryptography::signatures::tests::sunshine_verf_key_legacy_serialization 5ms
cryptography::signatures::tests::unnormalized_signature 6ms
cryptography::signatures::tests::validate_zeroize_signing_key 5ms
cryptography::signcryption::tests::bad_signcryption 8ms
cryptography::signcryption::tests::incorrect_server_verf_key 5ms
cryptography::signcryption::tests::signcryption_with_bad_link 7ms
cryptography::signcryption::tests::sunshine 7ms
cryptography::signcryption::tests::sunshine_encoding_decoding 6ms
cryptography::signcryption::tests::test_signcryption_payload_v0_serialization_locked 5ms
engine::backup_operator::tests::test_filter_custodian_data_invalid_custodian_role 7ms
engine::backup_operator::tests::test_filter_custodian_data_invalid_operator_role 7ms
engine::backup_operator::tests::test_filter_custodian_data_invalid_signature 6ms
engine::backup_operator::tests::test_filter_custodian_data_missing_verification_key 6ms
engine::backup_operator::tests::test_filter_custodian_missing_cus_output 7ms
engine::backup_operator::tests::test_update_backup_vault 5ms
engine::backup_operator::tests::test_update_backup_vault_with_overwrite 5ms
engine::backup_operator::tests::test_update_backup_vault_without_overwrite 5ms
engine::backup_operator::tests::test_update_epoch_backup_vault 5ms
engine::backup_operator::tests::test_update_epoch_backup_vault_with_overwrite 5ms
engine::backup_operator::tests::test_update_epoch_backup_vault_without_overwrite 5ms
engine::base::tests::crs_gen_metadata_q126_upgrade 6ms
engine::base::tests::keygen_metadata_q126_upgrade 6ms
engine::base::tests::sunshine_plaintext_as_u256 5ms
engine::base::tests::test_abi_encoding_fhevm_ebytes 5ms
engine::base::tests::test_compute_external_signature_preproc 7ms
engine::base::tests::test_compute_info_crs 880ms
engine::base::tests::test_compute_info_standard_keygen 139ms
engine::base::tests::test_compute_pt_message_hash 6ms
engine::base::tests::test_deserialize_ciphertext_missing_decompression_key 99ms
engine::base::tests::test_deserialize_ciphertext_wrong_ct_format 94ms
engine::base::tests::test_deserialize_ciphertext_wrong_type 94ms
engine::centralized::central_kms::tests::decrypt_with_bad_client_key 287ms
engine::centralized::central_kms::tests::multiple_default_keys_decrypt 23.5s
engine::centralized::central_kms::tests::multiple_default_keys_user_decrypt 23.3s
engine::centralized::central_kms::tests::multiple_test_keys_access 37ms
engine::centralized::central_kms::tests::multiple_test_keys_decrypt 121ms
engine::centralized::central_kms::tests::multiple_test_keys_user_decrypt 122ms
engine::centralized::central_kms::tests::sanity_check_sns_compression_test_params 63ms
engine::centralized::central_kms::tests::sunshine_default_decrypt 23.3s
engine::centralized::central_kms::tests::sunshine_default_user_decrypt 23.3s
engine::centralized::central_kms::tests::sunshine_test_decrypt 122ms
engine::centralized::central_kms::tests::sunshine_test_user_decrypt 122ms
engine::centralized::central_kms::tests::test_gen_keys 1m 3s
engine::centralized::central_kms::tests::test_generate_fhe_keys 151ms
engine::centralized::central_kms::tests::user_decrypt_with_bad_client_key 129ms
engine::centralized::central_kms::tests::user_decrypt_with_bad_ephemeral_key 121ms
engine::centralized::central_kms::tests::user_decrypt_with_bad_sig_key 124ms
engine::centralized::service::crs_gen::tests::abort_already_finished 746ms
engine::centralized::service::crs_gen::tests::abort_during_crs_gen 8ms
engine::centralized::service::crs_gen::tests::abort_not_found 7ms
engine::centralized::service::crs_gen::tests::already_exists 7ms
engine::centralized::service::crs_gen::tests::default_epoch_id 720ms
engine::centralized::service::crs_gen::tests::invalid_argument 8ms
engine::centralized::service::crs_gen::tests::not_found 8ms
engine::centralized::service::crs_gen::tests::resource_exhausted 7ms
engine::centralized::service::crs_gen::tests::sunshine 763ms
engine::centralized::service::decryption::test_user_decryption::already_exists 163ms
engine::centralized::service::decryption::test_user_decryption::invalid_argument 164ms
engine::centralized::service::decryption::test_user_decryption::not_found 165ms
engine::centralized::service::decryption::test_user_decryption::resource_exhausted 163ms
engine::centralized::service::decryption::test_user_decryption::sunshine 168ms
engine::centralized::service::decryption::tests_public_decryption::already_exists 162ms
engine::centralized::service::decryption::tests_public_decryption::invalid_argument 162ms
engine::centralized::service::decryption::tests_public_decryption::not_found 163ms
engine::centralized::service::decryption::tests_public_decryption::resource_exhausted 164ms
engine::centralized::service::decryption::tests_public_decryption::sunshine 166ms
engine::centralized::service::initiator::tests::already_exists 8ms
engine::centralized::service::initiator::tests::invalid_argument 7ms
engine::centralized::service::initiator::tests::sunshine 7ms
engine::centralized::service::key_gen::tests::abort_during_key_gen 8ms
engine::centralized::service::key_gen::tests::abort_not_found 7ms
engine::centralized::service::key_gen::tests::abort_with_existing_preproc 7ms
engine::centralized::service::key_gen::tests::already_exists 128ms
engine::centralized::service::key_gen::tests::invalid_argument 8ms
engine::centralized::service::key_gen::tests::not_found 129ms
engine::centralized::service::key_gen::tests::resource_exhausted 9ms
engine::centralized::service::key_gen::tests::sunshine 131ms
engine::centralized::service::preprocessing::tests::already_exists 9ms
engine::centralized::service::preprocessing::tests::invalid_argument 8ms
engine::centralized::service::preprocessing::tests::not_found 7ms
engine::centralized::service::preprocessing::tests::resource_exhausted 7ms
engine::centralized::service::preprocessing::tests::sunshine 8ms
engine::context::tests::parse_software_semantic_version 5ms
engine::context::tests::test_context_info_duplicate_party_ids 6ms
engine::context::tests::test_software_version_display 5ms
engine::context::tests::test_software_version_equality 5ms
engine::context::tests::test_software_version_major_comparison 5ms
engine::context::tests::test_software_version_minor_comparison 5ms
engine::context::tests::test_software_version_no_tag 5ms
engine::context::tests::test_software_version_patch_comparison 5ms
engine::context::tests::test_software_version_unordered_tag 5ms
engine::context_manager::tests::test_centralized_context_cache 7ms
engine::context_manager::tests::test_centralized_context_exists_and_consistent 6ms
engine::context_manager::tests::test_centralized_multiple_contexts 7ms
engine::context_manager::tests::test_custodian_context 14ms
engine::context_manager::tests::test_custodian_context_fails_on_backup_update_failure 10ms
engine::context_manager::tests::test_gen_recovery_request_payloads 9ms
engine::context_manager::tests::test_kms_context 7ms
engine::context_manager::tests::test_kms_context_load_from_storage 7ms
engine::context_manager::tests::test_kms_context_load_multiple_from_storage 8ms
engine::context_manager::tests::test_kms_context_load_multiple_from_storage_with_error 8ms
engine::context_manager::tests::test_load_mpc_context_without_signing_key 7ms
engine::keyset_configuration::tests::test_internal_keyset_config_decompression_only_missing_added_info 5ms
engine::keyset_configuration::tests::test_internal_keyset_config_decompression_only_with_added_info_missing_ids 5ms
engine::keyset_configuration::tests::test_internal_keyset_config_decompression_only_with_added_info_with_ids 5ms
engine::keyset_configuration::tests::test_internal_keyset_config_none_defaults_to_standard 5ms
engine::keyset_configuration::tests::test_internal_keyset_config_standard_default 5ms
engine::keyset_configuration::tests::test_internal_keyset_config_standard_use_existing_missing_added_info 5ms
engine::keyset_configuration::tests::test_internal_keyset_config_standard_use_existing_with_added_info_missing_ids 5ms
engine::keyset_configuration::tests::test_internal_keyset_config_standard_use_existing_with_added_info_with_ids 5ms
engine::keyset_configuration::tests::test_new_decompression_only_unparseable_from_id 5ms
engine::keyset_configuration::tests::test_new_decompression_only_unparseable_to_id 5ms
engine::migration::tests::s3_tests::test_0_13_x_to_0_13_10_centralized_s3 33ms
engine::migration::tests::s3_tests::test_0_13_x_to_0_13_10_idempotent_s3 34ms
engine::migration::tests::s3_tests::test_0_13_x_to_0_13_10_no_legacy_s3 14ms
engine::migration::tests::s3_tests::test_0_13_x_to_0_13_10_skips_existing_s3 32ms
engine::migration::tests::s3_tests::test_after_0_13_x_centralized_s3 28ms
engine::migration::tests::s3_tests::test_after_0_13_x_idempotent_s3 29ms
engine::migration::tests::s3_tests::test_after_0_13_x_no_legacy_s3 14ms
engine::migration::tests::s3_tests::test_migrate_centralized_s3 30ms
engine::migration::tests::s3_tests::test_migrate_idempotent_s3 28ms
engine::migration::tests::s3_tests::test_migrate_no_legacy_data_s3 14ms
engine::migration::tests::s3_tests::test_migrate_skips_existing_s3 27ms
engine::migration::tests::s3_tests::test_remove_old_keys_centralized_s3 27ms
engine::migration::tests::s3_tests::test_remove_old_keys_no_legacy_s3 13ms
engine::migration::tests::s3_tests::test_remove_old_keys_skips_without_new_epoch_s3 21ms
engine::migration::tests::test_0_13_x_to_0_13_10_centralized_file 7ms
engine::migration::tests::test_0_13_x_to_0_13_10_centralized_ram 6ms
engine::migration::tests::test_0_13_x_to_0_13_10_idempotent_file 7ms
engine::migration::tests::test_0_13_x_to_0_13_10_idempotent_ram 5ms
engine::migration::tests::test_0_13_x_to_0_13_10_no_legacy_file 6ms
engine::migration::tests::test_0_13_x_to_0_13_10_no_legacy_ram 5ms
engine::migration::tests::test_0_13_x_to_0_13_10_skips_existing_file 6ms
engine::migration::tests::test_0_13_x_to_0_13_10_skips_existing_ram 5ms
engine::migration::tests::test_after_0_13_x_centralized_file 6ms
engine::migration::tests::test_after_0_13_x_centralized_ram 5ms
engine::migration::tests::test_after_0_13_x_idempotent_file 6ms
engine::migration::tests::test_after_0_13_x_idempotent_ram 5ms
engine::migration::tests::test_after_0_13_x_no_legacy_file 5ms
engine::migration::tests::test_after_0_13_x_no_legacy_ram 5ms
engine::migration::tests::test_migrate_centralized_file 6ms
engine::migration::tests::test_migrate_centralized_ram 5ms
engine::migration::tests::test_migrate_combined_prss_no_data_file 5ms
engine::migration::tests::test_migrate_combined_prss_no_data_ram 5ms
engine::migration::tests::test_migrate_combined_prss_sunshine 5ms
engine::migration::tests::test_migrate_context_idempotent 5ms
engine::migration::tests::test_migrate_context_no_legacy 5ms
engine::migration::tests::test_migrate_context_sunshine 5ms
engine::migration::tests::test_migrate_idempotent_file 6ms
engine::migration::tests::test_migrate_idempotent_ram 5ms
engine::migration::tests::test_migrate_legacy_prss_sunshine 5ms
engine::migration::tests::test_migrate_no_legacy_data_file 5ms
engine::migration::tests::test_migrate_no_legacy_data_ram 5ms
engine::migration::tests::test_migrate_prss_already_migrated_skips 5ms
engine::migration::tests::test_migrate_prss_missing_z128_errors 6ms
engine::migration::tests::test_migrate_prss_missing_z64_errors 5ms
engine::migration::tests::test_migrate_prss_no_legacy_data_errors 5ms
engine::migration::tests::test_migrate_skips_existing_file 6ms
engine::migration::tests::test_migrate_skips_existing_ram 5ms
engine::migration::tests::test_migrate_to_0_13_10_centralized 5ms
engine::migration::tests::test_migrate_to_0_13_10_empty_storage 5ms
engine::migration::tests::test_migrate_to_0_13_x_centralized 5ms
engine::migration::tests::test_migrate_to_0_13_x_empty_storage 5ms
engine::migration::tests::test_remove_old_keys_centralized_file 6ms
engine::migration::tests::test_remove_old_keys_centralized_ram 5ms
engine::migration::tests::test_remove_old_keys_no_legacy_file 5ms
engine::migration::tests::test_remove_old_keys_no_legacy_ram 5ms
engine::migration::tests::test_remove_old_keys_skips_without_new_epoch_file 6ms
engine::migration::tests::test_remove_old_keys_skips_without_new_epoch_ram 5ms
engine::utils::tests::sanity_check_crs_invalid_digest 442ms
engine::utils::tests::sanity_check_crs_legacy_readability_only 446ms
engine::utils::tests::sanity_check_crs_valid_digest 429ms
engine::utils::tests::sanity_check_current_compressed_keys_invalid_compressed_keyset_digest 131ms
engine::utils::tests::sanity_check_current_compressed_keys_invalid_public_key_digest 123ms
engine::utils::tests::sanity_check_current_compressed_keys_missing_public_key_fails 120ms
engine::utils::tests::sanity_check_current_compressed_keys_valid_digests 129ms
engine::utils::tests::sanity_check_current_compressed_keyset_without_public_key_fails_as_inconsistent 122ms
engine::utils::tests::sanity_check_current_standard_keys_invalid_digest 13ms
engine::utils::tests::sanity_check_current_standard_keys_valid_digests 12ms
engine::utils::tests::sanity_check_extra_data_empty 6ms
engine::utils::tests::sanity_check_extra_data_unknown_version 5ms
engine::utils::tests::sanity_check_extra_data_version_0_valid 5ms
engine::utils::tests::sanity_check_extra_data_version_0_wrong_length 5ms
engine::utils::tests::sanity_check_extra_data_version_1_context_mismatch 5ms
engine::utils::tests::sanity_check_extra_data_version_1_valid 5ms
engine::utils::tests::sanity_check_extra_data_version_1_wrong_length 5ms
engine::utils::tests::sanity_check_extra_data_version_2_context_mismatch 5ms
engine::utils::tests::sanity_check_extra_data_version_2_epoch_mismatch 5ms
engine::utils::tests::sanity_check_extra_data_version_2_valid 5ms
engine::utils::tests::sanity_check_extra_data_version_2_wrong_length 5ms
engine::utils::tests::sanity_check_legacy_metadata_with_compressed_keyset_fails 120ms
engine::utils::tests::sanity_check_legacy_metadata_with_only_public_key_fails 12ms
engine::utils::tests::sanity_check_legacy_metadata_with_only_server_key_fails 12ms
engine::utils::tests::sanity_check_legacy_standard_metadata_readability_only 11ms
engine::utils::tests::test_metriced_error_creation 6ms
engine::utils::tests::test_metriced_error_drop_without_return 6ms
engine::utils::tests::test_metriced_error_no_dropping 6ms
engine::validation_non_wasm::tests::test_max_num_bits_verification 5ms
engine::validation_non_wasm::tests::test_select_most_common_dec 5ms
engine::validation_non_wasm::tests::test_validate_new_mpc_epoch_request 6ms
engine::validation_non_wasm::tests::test_validate_public_decrypt_meta_response 8ms
engine::validation_non_wasm::tests::test_validate_public_decrypt_meta_response_with_eip712 7ms
engine::validation_non_wasm::tests::test_validate_public_decrypt_req 5ms
engine::validation_non_wasm::tests::test_validate_public_decrypt_responses 10ms
engine::validation_non_wasm::tests::test_validate_public_decrypt_responses_against_request 11ms
engine::validation_non_wasm::tests::test_validate_request_id 5ms
engine::validation_non_wasm::tests::test_validate_user_decrypt_req 5ms
engine::validation_non_wasm::tests::test_verify_user_decrypt_eip712 6ms
engine::validation_wasm::tests::test_check_ext_user_decryption_signature 8ms
engine::validation_wasm::tests::test_select_most_common_user_dec 5ms
engine::validation_wasm::tests::test_validate_user_decrypt_meta_data_and_signature 7ms
engine::validation_wasm::tests::test_validate_user_decrypt_responses 143ms
engine::validation_wasm::tests::test_validate_user_decrypt_responses_against_request 9ms
engine::validation_wasm::tests::test_validate_user_decrypt_responses_with_5_responses 10ms
grpc::tests::regression_tests::test_request_id_compile_time_interface_stability 5ms
grpc::tests::regression_tests::test_request_id_core_structure_and_api_consistency 5ms
grpc::tests::regression_tests::test_request_id_validation_and_error_handling 5ms
grpc::tests::unit_tests::test_get_meta_store_info_with_real_stores 5ms
grpc::tests::unit_tests::test_get_meta_store_info_with_unavailable_stores 5ms
grpc::tests::unit_tests::test_list_requests_invalid_store_type 5ms
grpc::tests::unit_tests::test_list_requests_pagination 5ms
grpc::tests::unit_tests::test_list_requests_with_real_stores 5ms
grpc::tests::unit_tests::test_list_requests_with_unavailable_stores 5ms
grpc::tests::unit_tests::test_service_with_mixed_store_availability 5ms
testing::material::manager::tests::test_setup_centralized_material 11ms
testing::material::spec::tests::test_centralized_basic_spec 5ms
testing::material::spec::tests::test_comprehensive_spec 5ms
testing::material::spec::tests::test_key_type_covers_all_priv_data_types 5ms
testing::material::spec::tests::test_key_type_covers_all_pub_data_types 5ms
testing::material::spec::tests::test_serialization 5ms
testing::utils::test_purge 7ms
util::file_handling::tests::read_write_element 6ms
util::file_handling::tests::read_write_text 6ms
util::key_setup::tests::test_max_num_bits 4.7s
util::meta_store::tests::auto_remove 6ms
util::meta_store::tests::delete 6ms
util::meta_store::tests::double_insert 6ms
util::meta_store::tests::sunshine 6ms
util::meta_store::tests::test_kickout_of_errors 5ms
util::meta_store::tests::test_subscription 5.0s
util::meta_store::tests::too_many_elements 6ms
util::rate_limiter::tests::test_rate_limiting_1 6ms
util::rate_limiter::tests::test_rate_limiting_more 6ms
util::rate_limiter::tests::test_rate_limiting_refusal 6ms
util::retry::tests::fatal_loop_fails 50ms
util::retry::tests::retry_loop_fails 51ms
util::retry::tests::sunshine_fatal_loop 62ms
util::retry::tests::sunshine_retry_loop 62ms
vault::keychain::secretsharing::tests::test_encrypt_and_decrypt_roundtrip 7ms
vault::keychain::secretsharing::tests::test_new_keychain_without_pub_storage 6ms
vault::keychain::secretsharing::tests::test_operator_public_key_bytes_error 6ms
vault::keychain::secretsharing::tests::test_set_and_get_backup_enc_key 6ms
vault::keychain::secretsharing::tests::test_validate_recovery_material_invalid_signature 7ms
vault::keychain::secretsharing::tests::test_validate_recovery_material_no_material_is_ok 5ms
vault::keychain::secretsharing::tests::test_validate_recovery_material_valid_signature 7ms
vault::keychain::tests::test_verify_root_key_measurements 5ms
vault::storage::crypto_material::tests::compressed_fhe_keys_exist_requires_standalone_public_key 126ms
vault::storage::crypto_material::tests::migration::test_copy_compressed_key_legacy_metadata_fails 217ms
vault::storage::crypto_material::tests::migration::test_copy_compressed_key_missing_source 119ms
vault::storage::crypto_material::tests::migration::test_copy_compressed_key_overwrite 384ms
vault::storage::crypto_material::tests::migration::test_copy_compressed_key_to_original_success 244ms
vault::storage::crypto_material::tests::migration::test_copy_compressed_key_updates_backup_vault 241ms
vault::storage::crypto_material::tests::migration::test_copy_compressed_key_validation_failure_is_atomic 222ms
vault::storage::crypto_material::tests::read_guarded_crypto_material_from_cache_not_found 6ms
vault::storage::crypto_material::tests::read_public_key 6ms
vault::storage::crypto_material::tests::write_central_keys 13ms
vault::storage::crypto_material::tests::write_central_keys_failed_storage_sets_terminal_error 12ms
vault::storage::crypto_material::tests::write_crs 413ms
vault::storage::file::tests::test_all_data_ids_from_all_epochs_file 8ms
vault::storage::file::tests::test_data_ids_with_only_epoch_data_file 7ms
vault::storage::file::tests::test_delete_at_epoch_keeps_dir_when_not_empty 7ms
vault::storage::file::tests::test_delete_at_epoch_removes_empty_epoch_dir 6ms
vault::storage::file::tests::test_epoch_ids_with_only_non_epoch_data_file 6ms
vault::storage::file::tests::test_epoch_storage 7ms
vault::storage::file::tests::test_mixed_epoch_and_non_epoch_data_file 7ms
vault::storage::file::tests::test_overwrite_logic_files 6ms
vault::storage::file::tests::test_store_bytes_at_epoch_does_not_overwrite_file 6ms
vault::storage::file::tests::test_store_load_bytes_at_epoch_file 7ms
vault::storage::ram::tests::storage_helper_methods 5ms
vault::storage::ram::tests::test_all_data_ids_from_all_epochs_ram 6ms
vault::storage::ram::tests::test_data_ids_with_only_epoch_data_ram 5ms
vault::storage::ram::tests::test_epoch_ids_with_only_non_epoch_data_ram 5ms
vault::storage::ram::tests::test_mixed_epoch_and_non_epoch_data_ram 5ms
vault::storage::ram::tests::test_overwrite_logic_ram 5ms
vault::storage::ram::tests::test_overwrite_logic_ram_on_epoch 5ms
vault::storage::ram::tests::test_store_load_bytes_at_epoch_ram 6ms
vault::storage::s3::test_find_region 5ms
vault::storage::s3::tests::s3_storage_helper_methods 81ms
vault::storage::s3::tests::test_all_data_ids_from_all_epochs_s3 58ms
vault::storage::s3::tests::test_data_ids_with_only_epoch_data_s3 29ms
vault::storage::s3::tests::test_epoch_ids_with_only_non_epoch_data_s3 28ms
vault::storage::s3::tests::test_epoch_methods_in_s3 42ms
vault::storage::s3::tests::test_mixed_epoch_and_non_epoch_data_s3 56ms
vault::storage::s3::tests::test_overwrite_logic_files 29ms
vault::storage::s3::tests::test_s3_anon 19ms
vault::storage::s3::tests::test_store_bytes_at_epoch_does_not_overwrite_s3 21ms
vault::storage::s3::tests::test_store_load_bytes_at_epoch_s3 35ms
vault::tests::regression_test_vault_data_type_serialization 6ms
vault::tests::test_custodian_backup_folder_hierarchy 6ms
test_backward_compatibility_kms 790ms
test_backward_compatibility_kms_grpc 5ms
kms_custodian_binary_tests::sunshine_decrypt_custodian 277ms
kms_custodian_binary_tests::sunshine_generate 24ms
kms_custodian_binary_tests::sunshine_verify 23ms
kms_gen_keys_binary_test::central_s3 37ms
kms_gen_keys_binary_test::central_signing_address_format 20ms
kms_gen_keys_binary_test::central_signing_keys_overwrite 35ms
kms_gen_keys_binary_test::gen_key_centralized 1.7s
kms_gen_keys_binary_test::gen_key_tempdir_centralized 665ms
kms_gen_keys_binary_test::help 23ms
kms_init_binary_test::help 12ms
kms_init_binary_test::init 314ms
kms_server_binary_test::help 7ms
kms_server_binary_test::subcommand_dev_centralized 5.9s
client::tests::threshold::user_decryption_tests::default_user_decryption_threshold::case_1::secure_1_true 8m 2s
client::tests::threshold::user_decryption_tests::default_user_decryption_threshold::case_2::secure_1_true 32.2s
client::tests::threshold::user_decryption_tests::default_user_decryption_threshold_precompute_sns::case_1::secure_1_true 32.0s
client::tests::threshold::user_decryption_tests::default_user_decryption_threshold_with_crash::case_1::secure_1_true 32.8s
client::tests::threshold::user_decryption_tests::default_user_decryption_threshold_with_crash::case_1::secure_2_false 32.8s
backup::custodian::tests::internal_custodian_context_duplicate_role_should_fail 7ms
backup::custodian::tests::internal_custodian_context_role_greater_than_nodes_should_fail 6ms
backup::custodian::tests::internal_custodian_context_zero_role_should_fail 6ms
backup::custodian::tests::invalid_threshold_should_fail 5ms
backup::operator::tests::operator_new_fails_with_bad_n_t 5ms
backup::operator::tests::operator_new_fails_with_duplicate_roles 6ms
backup::operator::tests::operator_new_fails_with_insufficient_messages 6ms
backup::operator::tests::operator_new_fails_with_invalid_header 6ms
backup::operator::tests::operator_new_fails_with_invalid_role 6ms
backup::operator::tests::operator_new_fails_with_invalid_timestamp_future 5ms
backup::operator::tests::operator_new_fails_with_invalid_timestamp_past 5ms
backup::operator::tests::operator_new_fails_with_not_enough 5ms
backup::operator::tests::operator_new_fails_with_zero_n 5ms
backup::operator::tests::operator_new_fails_with_zero_t 5ms
backup::operator::tests::operator_timestamp_validation 5ms
backup::operator::tests::validate_recovery_validation_material 6ms
backup::secretsharing::pkcs7::tests::padding_sunshine 5ms
backup::secretsharing::pkcs7::tests::padding_wrong_data 5ms
backup::secretsharing::tests::sharing_missing_shares 221ms
backup::secretsharing::tests::sharing_no_error 279ms
backup::secretsharing::tests::sharing_randomness_test 16.4s
backup::secretsharing::tests::sharing_too_many_missing_shares 14ms
backup::secretsharing::tests::sharing_wrong_params 6ms
backup::secretsharing::tests::sharing_wrong_shares 125ms
backup::seed_phrase::tests::difference 6ms
backup::seed_phrase::tests::mnemonic_robustness 6ms
backup::seed_phrase::tests::sunshine 6ms
backup::tests::custodian_reencrypt 11ms
backup::tests::full_flow::case_1 164ms
backup::tests::full_flow::case_2 146ms
backup::tests::full_flow::case_3 208ms
backup::tests::full_flow_drop_msg 156ms
backup::tests::full_flow_malicious_custodian_init 12ms
backup::tests::full_flow_malicious_custodian_not_enough 133ms
backup::tests::full_flow_malicious_custodian_second 189ms
backup::tests::full_flow_malicious_operator 153ms
backup::tests::operator_setup 9ms
client::crs_gen::tests::process_distributed_crs_result_invalid_signature_does_not_insert_key 10.8s
client::crs_gen::tests::verify_pp_with_tfhers 16.6s
client::tests::centralized::crs_gen_tests::test_crs_gen_centralized 10.0s
client::tests::centralized::crs_gen_tests::test_crs_gen_manual 2.0s
client::tests::centralized::crs_gen_tests::test_insecure_crs_gen_centralized 8.1s
client::tests::centralized::custodian_backup_tests::test_auto_update_backups_central 3.9s
client::tests::centralized::custodian_backup_tests::test_backup_after_crs_central 10.4s
client::tests::centralized::custodian_backup_tests::test_decrypt_after_recovery_central 5.8s
client::tests::centralized::custodian_backup_tests::test_decrypt_after_recovery_centralized_negative 4.3s
client::tests::centralized::custodian_backup_tests::test_keygen_backup_presence_central 4.5s
client::tests::centralized::custodian_backup_tests::test_mpc_context_backup_central 3.9s
client::tests::centralized::custodian_context_tests::test_new_custodian_context_central 3.5s
client::tests::centralized::key_gen_tests::test_decompression_key_gen_centralized 2m 58s
client::tests::centralized::key_gen_tests::test_key_gen_centralized 5.2s
client::tests::centralized::misc_tests::test_central_close_after_drop 389ms
client::tests::centralized::misc_tests::test_central_health_endpoint_availability 781ms
client::tests::centralized::public_decryption_tests::test_decryption_central 5.2s
client::tests::centralized::public_decryption_tests::test_decryption_central_no_decompression 5.2s
client::tests::centralized::public_decryption_tests::test_decryption_central_precompute_sns 5.3s
client::tests::centralized::restore_from_backup_tests::test_insecure_central_autobackup_after_deletion 1.5s
client::tests::centralized::restore_from_backup_tests::test_insecure_central_dkg_backup 1.7s
client::tests::centralized::user_decryption_tests::test_user_decryption_centralized::secure_1_true 5.1s
client::tests::centralized::user_decryption_tests::test_user_decryption_centralized::secure_2_false 5.2s
client::tests::centralized::user_decryption_tests::test_user_decryption_centralized_precompute_sns::secure_1_true::compression_1_true 5.1s
client::tests::centralized::user_decryption_tests::test_user_decryption_centralized_precompute_sns::secure_1_true::compression_2_false 5.2s
client::tests::centralized::user_decryption_tests::test_user_decryption_centralized_precompute_sns::secure_2_false::compression_1_true 5.1s
client::tests::centralized::user_decryption_tests::test_user_decryption_centralized_precompute_sns::secure_2_false::compression_2_false 5.1s
client::tests::common::num_blocks_sunshine 6ms
client::tests::make_extra_data_unknown_version_errors 6ms
client::tests::make_extra_data_v0_ignores_ids 5ms
client::tests::make_extra_data_v1_requires_context 5ms
client::tests::make_extra_data_v2_requires_both_ids 5ms
client::tests::testing_infra_tests::test_centralized_material_validation 5ms
client::tests::testing_infra_tests::test_threshold_material_validation 5ms
client::tests::testing_infra_tests::tests::test_material_spec_creation 5ms
client::tests::testing_infra_tests::tests::test_material_spec_serialization 5ms
client::tests::threshold::crs_gen_tests::test_insecure_crs_gen_threshold 34.6s
client::tests::threshold::custodian_backup_tests::test_auto_update_backups_threshold::case_1 5.1s
client::tests::threshold::custodian_backup_tests::test_auto_update_backups_threshold::case_2 5.1s
client::tests::threshold::custodian_backup_tests::test_backup_after_crs_threshold::case_1 43.7s
client::tests::threshold::custodian_backup_tests::test_backup_after_crs_threshold::case_2 43.6s
client::tests::threshold::custodian_backup_tests::test_backup_after_reshare_threshold 45.2s
client::tests::threshold::custodian_backup_tests::test_custodian_reencryption_with_existing_data_threshold 7.1s
client::tests::threshold::custodian_backup_tests::test_decrypt_after_recovery_threshold::case_1 11.7s
client::tests::threshold::custodian_backup_tests::test_decrypt_after_recovery_threshold::case_2 11.7s
client::tests::threshold::custodian_backup_tests::test_decrypt_after_recovery_threshold_negative 5.2s
client::tests::threshold::custodian_backup_tests::test_keygen_backup_presence_threshold 6.9s
client::tests::threshold::custodian_backup_tests::test_mpc_context_backup_threshold 5.1s
client::tests::threshold::custodian_backup_tests::test_prss_in_custodian_backup_threshold 5.1s
client::tests::threshold::custodian_context_tests::test_new_custodian_context_threshold::case_1 6.9s
client::tests::threshold::custodian_context_tests::test_new_custodian_context_threshold::case_2 6.9s
client::tests::threshold::key_gen_tests::test_insecure_compressed_dkg::case_1 1.6s
client::tests::threshold::key_gen_tests::test_insecure_dkg 5.2s
client::tests::threshold::misc_tests::test_threshold_close_after_drop 1.0s
client::tests::threshold::misc_tests::test_threshold_health_endpoint_availability 4.7s
client::tests::threshold::misc_tests::test_threshold_shutdown 2.1s
client::tests::threshold::mpc_context_tests::test_context_switch_4p 5.3s
client::tests::threshold::public_decryption_tests::test_decryption_threshold::case_1 7.4s
client::tests::threshold::public_decryption_tests::test_decryption_threshold::case_2 7.2s
client::tests::threshold::public_decryption_tests::test_decryption_threshold::case_3 7.3s
client::tests::threshold::public_decryption_tests::test_decryption_threshold_no_decompression::case_1 4.2s
client::tests::threshold::public_decryption_tests::test_decryption_threshold_no_decompression::case_2 4.0s
client::tests::threshold::public_decryption_tests::test_decryption_threshold_no_decompression::case_3 4.0s
client::tests::threshold::public_decryption_tests::test_decryption_threshold_precompute_sns::case_1::compression_1_true 7.2s
client::tests::threshold::public_decryption_tests::test_decryption_threshold_precompute_sns::case_1::compression_2_false 7.2s
client::tests::threshold::restore_from_backup_tests::nightly_test_insecure_threshold_autobackup_after_deletion 5.2s
client::tests::threshold::restore_from_backup_tests::nightly_test_insecure_threshold_dkg_backup 13.5s
client::tests::threshold::restore_from_backup_tests::test_insecure_threshold_crs_backup 16.3s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_1 861ms
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_2 1.6s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_3 4.0s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_4 4.0s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_5 7.2s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_6 5.9s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold::case_7 4.1s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold_all_malicious_failure 2.5s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold_malicious::case_1 4.0s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold_malicious::case_2 4.0s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold_malicious_failure 4.1s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold_precompute_sns::case_1 4.0s
client::tests::threshold::user_decryption_tests::test_user_decryption_threshold_precompute_sns::case_2 4.0s
conf::tests::config_conformance_compose_1 7ms
conf::tests::config_conformance_compose_centralized 6ms
conf::tests::test_centralized_config 6ms
conf::tests::test_threshold_config 6ms
conf::tests::test_threshold_config_negative 6ms
conf::threshold::test_pem_serialization 5ms
cryptography::decompression::test::test_1024b 3.5s
cryptography::decompression::test::test_128b 1.8s
cryptography::decompression::test::test_16b 1.7s
cryptography::decompression::test::test_2048b 5.5s
cryptography::decompression::test::test_256b 2.0s
cryptography::decompression::test::test_32b 1.7s
cryptography::decompression::test::test_4b 1.7s
cryptography::decompression::test::test_512b 2.5s
cryptography::decompression::test::test_64b 1.8s
cryptography::decompression::test::test_8b 1.7s
cryptography::decompression::test::test_bad_ciphertext 1.4s
cryptography::decompression::test::test_bad_fhe_type 1.7s
cryptography::decompression::test::test_bool 1.8s
cryptography::decompression::test::test_full_chain_client_copro_kms_uint8::case_1 34ms
cryptography::decompression::test::test_full_chain_client_copro_kms_uint8::case_2 1.9s
cryptography::decompression::test::test_tolerate_non_compressed 602ms
cryptography::encryption::tests::deserialize_and_validate_accepts_mlkem512 6ms
cryptography::encryption::tests::deserialize_and_validate_rejects_invalid_bytes 5ms
cryptography::encryption::tests::deserialize_and_validate_rejects_mlkem1024 6ms
cryptography::encryption::tests::nested_pke_sunshine 6ms
cryptography::encryption::tests::pke_wrong_ct_enc 5ms
cryptography::encryption::tests::pke_wrong_kem_key 5ms
cryptography::hybrid_ml_kem::tests::pke_sunshine 59ms
cryptography::hybrid_ml_kem::tests::pke_wrong_ct_hybrid 54ms
cryptography::hybrid_ml_kem::tests::pke_wrong_kem 53ms
cryptography::hybrid_ml_kem::tests::pke_wrong_key 67ms
cryptography::hybrid_ml_kem::tests::pke_wrong_nonce 53ms
cryptography::hybrid_ml_kem::tests::test_pke_serialize_size 6ms
cryptography::hybrid_ml_kem::tests::validate_consistent_cipher_encoding 5ms
cryptography::signatures::tests::bad_dsep 6ms
cryptography::signatures::tests::bad_signature 6ms
cryptography::signatures::tests::plain_signing 6ms
cryptography::signatures::tests::regression_consistent_enc 5ms
cryptography::signatures::tests::sunshine_verf_key_legacy_serialization 5ms
cryptography::signatures::tests::unnormalized_signature 6ms
cryptography::signatures::tests::validate_zeroize_signing_key 5ms
cryptography::signcryption::tests::bad_signcryption 7ms
cryptography::signcryption::tests::incorrect_server_verf_key 5ms
cryptography::signcryption::tests::signcryption_with_bad_link 6ms
cryptography::signcryption::tests::sunshine 6ms
cryptography::signcryption::tests::sunshine_encoding_decoding 6ms
cryptography::signcryption::tests::test_signcryption_payload_v0_serialization_locked 4ms
engine::backup_operator::tests::test_filter_custodian_data_invalid_custodian_role 6ms
engine::backup_operator::tests::test_filter_custodian_data_invalid_operator_role 6ms
engine::backup_operator::tests::test_filter_custodian_data_invalid_signature 6ms
engine::backup_operator::tests::test_filter_custodian_data_missing_verification_key 6ms
engine::backup_operator::tests::test_filter_custodian_missing_cus_output 7ms
engine::backup_operator::tests::test_update_backup_vault 5ms
engine::backup_operator::tests::test_update_backup_vault_with_overwrite 5ms
engine::backup_operator::tests::test_update_backup_vault_without_overwrite 5ms
engine::backup_operator::tests::test_update_epoch_backup_vault 5ms
engine::backup_operator::tests::test_update_epoch_backup_vault_with_overwrite 5ms
engine::backup_operator::tests::test_update_epoch_backup_vault_without_overwrite 5ms
engine::base::tests::crs_gen_metadata_q126_upgrade 6ms
engine::base::tests::keygen_metadata_q126_upgrade 6ms
engine::base::tests::sunshine_plaintext_as_u256 5ms
engine::base::tests::test_abi_encoding_fhevm_ebytes 5ms
engine::base::tests::test_compute_external_signature_preproc 7ms
engine::base::tests::test_compute_info_crs 776ms
engine::base::tests::test_compute_info_standard_keygen 139ms
engine::base::tests::test_compute_pt_message_hash 6ms
engine::base::tests::test_deserialize_ciphertext_missing_decompression_key 97ms
engine::base::tests::test_deserialize_ciphertext_wrong_ct_format 92ms
engine::base::tests::test_deserialize_ciphertext_wrong_type 91ms
engine::centralized::central_kms::tests::decrypt_with_bad_client_key 285ms
engine::centralized::central_kms::tests::multiple_test_keys_access 35ms
engine::centralized::central_kms::tests::multiple_test_keys_decrypt 121ms
engine::centralized::central_kms::tests::multiple_test_keys_user_decrypt 121ms
engine::centralized::central_kms::tests::sanity_check_sns_compression_test_params 61ms
engine::centralized::central_kms::tests::sunshine_test_decrypt 121ms
engine::centralized::central_kms::tests::sunshine_test_user_decrypt 123ms
engine::centralized::central_kms::tests::test_gen_keys 1m 4s
engine::centralized::central_kms::tests::test_generate_fhe_keys 152ms
engine::centralized::central_kms::tests::user_decrypt_with_bad_client_key 131ms
engine::centralized::central_kms::tests::user_decrypt_with_bad_ephemeral_key 122ms
engine::centralized::central_kms::tests::user_decrypt_with_bad_sig_key 122ms
engine::centralized::service::crs_gen::tests::abort_already_finished 684ms
engine::centralized::service::crs_gen::tests::abort_during_crs_gen 12ms
engine::centralized::service::crs_gen::tests::abort_not_found 8ms
engine::centralized::service::crs_gen::tests::already_exists 7ms
engine::centralized::service::crs_gen::tests::default_epoch_id 703ms
engine::centralized::service::crs_gen::tests::invalid_argument 8ms
engine::centralized::service::crs_gen::tests::not_found 7ms
engine::centralized::service::crs_gen::tests::resource_exhausted 7ms
engine::centralized::service::crs_gen::tests::sunshine 693ms
engine::centralized::service::decryption::test_user_decryption::already_exists 164ms
engine::centralized::service::decryption::test_user_decryption::invalid_argument 165ms
engine::centralized::service::decryption::test_user_decryption::not_found 165ms
engine::centralized::service::decryption::test_user_decryption::resource_exhausted 165ms
engine::centralized::service::decryption::test_user_decryption::sunshine 168ms
engine::centralized::service::decryption::tests_public_decryption::already_exists 164ms
engine::centralized::service::decryption::tests_public_decryption::invalid_argument 165ms
engine::centralized::service::decryption::tests_public_decryption::not_found 165ms
engine::centralized::service::decryption::tests_public_decryption::resource_exhausted 165ms
engine::centralized::service::decryption::tests_public_decryption::sunshine 167ms
engine::centralized::service::initiator::tests::already_exists 8ms
engine::centralized::service::initiator::tests::invalid_argument 7ms
engine::centralized::service::initiator::tests::sunshine 7ms
engine::centralized::service::key_gen::tests::abort_during_key_gen 7ms
engine::centralized::service::key_gen::tests::abort_not_found 7ms
engine::centralized::service::key_gen::tests::abort_with_existing_preproc 7ms
engine::centralized::service::key_gen::tests::already_exists 130ms
engine::centralized::service::key_gen::tests::invalid_argument 8ms
engine::centralized::service::key_gen::tests::not_found 128ms
engine::centralized::service::key_gen::tests::resource_exhausted 8ms
engine::centralized::service::key_gen::tests::sunshine 129ms
engine::centralized::service::preprocessing::tests::already_exists 8ms
engine::centralized::service::preprocessing::tests::invalid_argument 7ms
engine::centralized::service::preprocessing::tests::not_found 7ms
engine::centralized::service::preprocessing::tests::resource_exhausted 7ms
engine::centralized::service::preprocessing::tests::sunshine 7ms
engine::context::tests::parse_software_semantic_version 5ms
engine::context::tests::test_context_info_duplicate_party_ids 6ms
engine::context::tests::test_software_version_display 5ms
engine::context::tests::test_software_version_equality 5ms
engine::context::tests::test_software_version_major_comparison 5ms
engine::context::tests::test_software_version_minor_comparison 5ms
engine::context::tests::test_software_version_no_tag 5ms
engine::context::tests::test_software_version_patch_comparison 5ms
engine::context::tests::test_software_version_unordered_tag 5ms
engine::context_manager::tests::test_centralized_context_cache 7ms
engine::context_manager::tests::test_centralized_context_exists_and_consistent 7ms
engine::context_manager::tests::test_centralized_multiple_contexts 7ms
engine::context_manager::tests::test_custodian_context 14ms
engine::context_manager::tests::test_custodian_context_fails_on_backup_update_failure 9ms
engine::context_manager::tests::test_gen_recovery_request_payloads 9ms
engine::context_manager::tests::test_kms_context 7ms
engine::context_manager::tests::test_kms_context_load_from_storage 7ms
engine::context_manager::tests::test_kms_context_load_multiple_from_storage 7ms
engine::context_manager::tests::test_kms_context_load_multiple_from_storage_with_error 8ms
engine::context_manager::tests::test_load_mpc_context_without_signing_key 6ms
engine::keyset_configuration::tests::test_internal_keyset_config_decompression_only_missing_added_info 5ms
engine::keyset_configuration::tests::test_internal_keyset_config_decompression_only_with_added_info_missing_ids 5ms
engine::keyset_configuration::tests::test_internal_keyset_config_decompression_only_with_added_info_with_ids 5ms
engine::keyset_configuration::tests::test_internal_keyset_config_none_defaults_to_standard 4ms
engine::keyset_configuration::tests::test_internal_keyset_config_standard_default 5ms
engine::keyset_configuration::tests::test_internal_keyset_config_standard_use_existing_missing_added_info 5ms
engine::keyset_configuration::tests::test_internal_keyset_config_standard_use_existing_with_added_info_missing_ids 5ms
engine::keyset_configuration::tests::test_internal_keyset_config_standard_use_existing_with_added_info_with_ids 5ms
engine::keyset_configuration::tests::test_new_decompression_only_unparseable_from_id 5ms
engine::keyset_configuration::tests::test_new_decompression_only_unparseable_to_id 5ms
engine::migration::tests::test_0_13_x_to_0_13_10_centralized_file 6ms
engine::migration::tests::test_0_13_x_to_0_13_10_centralized_ram 5ms
engine::migration::tests::test_0_13_x_to_0_13_10_idempotent_file 6ms
engine::migration::tests::test_0_13_x_to_0_13_10_idempotent_ram 5ms
engine::migration::tests::test_0_13_x_to_0_13_10_no_legacy_file 5ms
engine::migration::tests::test_0_13_x_to_0_13_10_no_legacy_ram 5ms
engine::migration::tests::test_0_13_x_to_0_13_10_skips_existing_file 6ms
engine::migration::tests::test_0_13_x_to_0_13_10_skips_existing_ram 5ms
engine::migration::tests::test_0_13_x_to_0_13_10_threshold_file 6ms
engine::migration::tests::test_0_13_x_to_0_13_10_threshold_ram 5ms
engine::migration::tests::test_after_0_13_x_centralized_file 6ms
engine::migration::tests::test_after_0_13_x_centralized_ram 5ms
engine::migration::tests::test_after_0_13_x_idempotent_file 6ms
engine::migration::tests::test_after_0_13_x_idempotent_ram 5ms
engine::migration::tests::test_after_0_13_x_no_legacy_file 5ms
engine::migration::tests::test_after_0_13_x_no_legacy_ram 5ms
engine::migration::tests::test_after_0_13_x_threshold_file 6ms
engine::migration::tests::test_after_0_13_x_threshold_ram 5ms
engine::migration::tests::test_migrate_centralized_file 6ms
engine::migration::tests::test_migrate_centralized_ram 5ms
engine::migration::tests::test_migrate_combined_prss_no_data_file 6ms
engine::migration::tests::test_migrate_combined_prss_no_data_ram 5ms
engine::migration::tests::test_migrate_combined_prss_sunshine 5ms
engine::migration::tests::test_migrate_context_idempotent 5ms
engine::migration::tests::test_migrate_context_no_legacy 5ms
engine::migration::tests::test_migrate_context_sunshine 5ms
engine::migration::tests::test_migrate_idempotent_file 6ms
engine::migration::tests::test_migrate_idempotent_ram 5ms
engine::migration::tests::test_migrate_legacy_prss_sunshine 5ms
engine::migration::tests::test_migrate_no_legacy_data_file 5ms
engine::migration::tests::test_migrate_no_legacy_data_ram 5ms
engine::migration::tests::test_migrate_prss_already_migrated_skips 5ms
engine::migration::tests::test_migrate_prss_missing_z128_errors 5ms
engine::migration::tests::test_migrate_prss_missing_z64_errors 5ms
engine::migration::tests::test_migrate_prss_no_legacy_data_errors 5ms
engine::migration::tests::test_migrate_skips_existing_file 6ms
engine::migration::tests::test_migrate_skips_existing_ram 5ms
engine::migration::tests::test_migrate_threshold_file 6ms
engine::migration::tests::test_migrate_threshold_ram 5ms
engine::migration::tests::test_migrate_to_0_13_10_centralized 5ms
engine::migration::tests::test_migrate_to_0_13_10_empty_storage 5ms
engine::migration::tests::test_migrate_to_0_13_10_threshold 5ms
engine::migration::tests::test_migrate_to_0_13_x_centralized 5ms
engine::migration::tests::test_migrate_to_0_13_x_empty_storage 5ms
engine::migration::tests::test_migrate_to_0_13_x_threshold 5ms
engine::migration::tests::test_remove_old_keys_centralized_file 6ms
engine::migration::tests::test_remove_old_keys_centralized_ram 5ms
engine::migration::tests::test_remove_old_keys_no_legacy_file 5ms
engine::migration::tests::test_remove_old_keys_no_legacy_ram 5ms
engine::migration::tests::test_remove_old_keys_skips_without_new_epoch_file 5ms
engine::migration::tests::test_remove_old_keys_skips_without_new_epoch_ram 5ms
engine::migration::tests::test_remove_old_keys_threshold_file 6ms
engine::migration::tests::test_remove_old_keys_threshold_ram 5ms
engine::threshold::service::crs_generator::tests::abort_during_crs_gen 7ms
engine::threshold::service::crs_generator::tests::abort_not_found 6ms
engine::threshold::service::crs_generator::tests::already_exists 6ms
engine::threshold::service::crs_generator::tests::internal_failure 6ms
engine::threshold::service::crs_generator::tests::invalid_argument 6ms
engine::threshold::service::crs_generator::tests::not_found 6ms
engine::threshold::service::crs_generator::tests::resource_exhausted 6ms
engine::threshold::service::crs_generator::tests::sunshine 52ms
engine::threshold::service::crs_generator::tests::unavailable 1m
engine::threshold::service::epoch_manager::tests::already_exists 7ms
engine::threshold::service::epoch_manager::tests::invalid_argument 7ms
engine::threshold::service::epoch_manager::tests::load_all_prss 6ms
engine::threshold::service::epoch_manager::tests::not_found 7ms
engine::threshold::service::epoch_manager::tests::prss_from_storage_test 10.4s
engine::threshold::service::epoch_manager::tests::sunshine 7ms
engine::threshold::service::epoch_manager::tests::test_destroy_epoch_not_found 6ms
engine::threshold::service::epoch_manager::tests::test_destroy_epoch_success 6ms
engine::threshold::service::epoch_manager::tests::test_resource_exhausted 6ms
engine::threshold::service::epoch_manager::tests::test_verify_epoch_info 6ms
engine::threshold::service::key_generator::tests::abort_during_key_gen 7ms
engine::threshold::service::key_generator::tests::abort_key_gen_not_found 6ms
engine::threshold::service::key_generator::tests::aborted 5ms
engine::threshold::service::key_generator::tests::already_exists 7ms
engine::threshold::service::key_generator::tests::internal 7ms
engine::threshold::service::key_generator::tests::invalid_argument 7ms
engine::threshold::service::key_generator::tests::not_found 7ms
engine::threshold::service::key_generator::tests::resource_exhausted 7ms
engine::threshold::service::key_generator::tests::sunshine 158ms
engine::threshold::service::key_generator::tests::use_existing_key_tag_with_wrong_keyset_id 8ms
engine::threshold::service::kms_impl::tests::deser_v2_compressed_upgrades_and_reserializes_smaller 166ms
engine::threshold::service::kms_impl::tests::roundtrip_v3_compressed_and_lazy_decompress 191ms
engine::threshold::service::kms_impl::tests::upgrade_public_key_material_v0_compressed_drops_decompressed_keys 109ms
engine::threshold::service::preprocessor::tests::abort_during_preproc 8ms
engine::threshold::service::preprocessor::tests::abort_preproc_not_found 6ms
engine::threshold::service::preprocessor::tests::already_exists 7ms
engine::threshold::service::preprocessor::tests::cannot_start_same_preproc_id_after_completion 929ms
engine::threshold::service::preprocessor::tests::internal 8ms
engine::threshold::service::preprocessor::tests::invalid_argument 7ms
engine::threshold::service::preprocessor::tests::not_found 7ms
engine::threshold::service::preprocessor::tests::resource_exhausted 6ms
engine::threshold::service::preprocessor::tests::sunshine 927ms
engine::threshold::service::public_decryptor::tests::already_exists 79ms
engine::threshold::service::public_decryptor::tests::invalid_argument 80ms
engine::threshold::service::public_decryptor::tests::not_found 249ms
engine::threshold::service::public_decryptor::tests::sunshine 84ms
engine::threshold::service::public_decryptor::tests::test_resource_exhausted 83ms
engine::threshold::service::reshare_utils::tests::bad_digests_get_verified_public_materials 175ms
engine::threshold::service::reshare_utils::tests::bad_digests_get_verified_public_materials_compressed 265ms
engine::threshold::service::reshare_utils::tests::empty_storage_fetch_public_materials_from_peers 179ms
engine::threshold::service::reshare_utils::tests::sunshine_fetch_public_materials_from_peers 183ms
engine::threshold::service::reshare_utils::tests::sunshine_fetch_public_materials_from_peers_compressed 102ms
engine::threshold::service::reshare_utils::tests::sunshine_get_verified_public_materials 12ms
engine::threshold::service::reshare_utils::tests::sunshine_get_verified_public_materials_compressed 97ms
engine::threshold::service::reshare_utils::tests::test_split_url 6ms
engine::threshold::service::reshare_utils::tests::wrong_digest_fetch_public_materials_from_peers 17ms
engine::threshold::service::reshare_utils::tests::wrong_digest_fetch_public_materials_from_peers_compressed 98ms
engine::threshold::service::user_decryptor::tests::already_exists 80ms
engine::threshold::service::user_decryptor::tests::invalid_argument 79ms
engine::threshold::service::user_decryptor::tests::not_found 252ms
engine::threshold::service::user_decryptor::tests::resource_exhausted 82ms
engine::threshold::service::user_decryptor::tests::sunshine 87ms
engine::utils::tests::sanity_check_crs_invalid_digest 424ms
engine::utils::tests::sanity_check_crs_legacy_readability_only 412ms
engine::utils::tests::sanity_check_crs_valid_digest 434ms
engine::utils::tests::sanity_check_current_compressed_keys_invalid_compressed_keyset_digest 130ms
engine::utils::tests::sanity_check_current_compressed_keys_invalid_public_key_digest 123ms
engine::utils::tests::sanity_check_current_compressed_keys_missing_public_key_fails 123ms
engine::utils::tests::sanity_check_current_compressed_keys_valid_digests 130ms
engine::utils::tests::sanity_check_current_compressed_keyset_without_public_key_fails_as_inconsistent 122ms
engine::utils::tests::sanity_check_current_standard_keys_invalid_digest 11ms
engine::utils::tests::sanity_check_current_standard_keys_valid_digests 11ms
engine::utils::tests::sanity_check_extra_data_empty 5ms
engine::utils::tests::sanity_check_extra_data_unknown_version 5ms
engine::utils::tests::sanity_check_extra_data_version_0_valid 5ms
engine::utils::tests::sanity_check_extra_data_version_0_wrong_length 5ms
engine::utils::tests::sanity_check_extra_data_version_1_context_mismatch 5ms
engine::utils::tests::sanity_check_extra_data_version_1_valid 5ms
engine::utils::tests::sanity_check_extra_data_version_1_wrong_length 5ms
engine::utils::tests::sanity_check_extra_data_version_2_context_mismatch 5ms
engine::utils::tests::sanity_check_extra_data_version_2_epoch_mismatch 5ms
engine::utils::tests::sanity_check_extra_data_version_2_valid 5ms
engine::utils::tests::sanity_check_extra_data_version_2_wrong_length 5ms
engine::utils::tests::sanity_check_legacy_metadata_with_compressed_keyset_fails 120ms
engine::utils::tests::sanity_check_legacy_metadata_with_only_public_key_fails 11ms
engine::utils::tests::sanity_check_legacy_metadata_with_only_server_key_fails 11ms
engine::utils::tests::sanity_check_legacy_standard_metadata_readability_only 11ms
engine::utils::tests::test_metriced_error_creation 6ms
engine::utils::tests::test_metriced_error_drop_without_return 6ms
engine::utils::tests::test_metriced_error_no_dropping 6ms
engine::validation_non_wasm::tests::test_max_num_bits_verification 5ms
engine::validation_non_wasm::tests::test_select_most_common_dec 5ms
engine::validation_non_wasm::tests::test_validate_new_mpc_epoch_request 5ms
engine::validation_non_wasm::tests::test_validate_public_decrypt_meta_response 8ms
engine::validation_non_wasm::tests::test_validate_public_decrypt_meta_response_with_eip712 7ms
engine::validation_non_wasm::tests::test_validate_public_decrypt_req 5ms
engine::validation_non_wasm::tests::test_validate_public_decrypt_responses 10ms
engine::validation_non_wasm::tests::test_validate_public_decrypt_responses_against_request 11ms
engine::validation_non_wasm::tests::test_validate_request_id 5ms
engine::validation_non_wasm::tests::test_validate_user_decrypt_req 6ms
engine::validation_non_wasm::tests::test_verify_user_decrypt_eip712 6ms
engine::validation_wasm::tests::test_check_ext_user_decryption_signature 8ms
engine::validation_wasm::tests::test_select_most_common_user_dec 5ms
engine::validation_wasm::tests::test_validate_user_decrypt_meta_data_and_signature 7ms
engine::validation_wasm::tests::test_validate_user_decrypt_responses 142ms
engine::validation_wasm::tests::test_validate_user_decrypt_responses_against_request 10ms
engine::validation_wasm::tests::test_validate_user_decrypt_responses_with_5_responses 10ms
grpc::tests::regression_tests::test_request_id_compile_time_interface_stability 5ms
grpc::tests::regression_tests::test_request_id_core_structure_and_api_consistency 5ms
grpc::tests::regression_tests::test_request_id_validation_and_error_handling 5ms
grpc::tests::unit_tests::test_get_meta_store_info_with_real_stores 5ms
grpc::tests::unit_tests::test_get_meta_store_info_with_unavailable_stores 5ms
grpc::tests::unit_tests::test_list_requests_invalid_store_type 5ms
grpc::tests::unit_tests::test_list_requests_pagination 5ms
grpc::tests::unit_tests::test_list_requests_with_real_stores 5ms
grpc::tests::unit_tests::test_list_requests_with_unavailable_stores 5ms
grpc::tests::unit_tests::test_service_with_mixed_store_availability 5ms
testing::material::manager::tests::test_setup_centralized_material 11ms
testing::material::manager::tests::test_setup_threshold_material 17ms
testing::material::spec::tests::test_centralized_basic_spec 5ms
testing::material::spec::tests::test_comprehensive_spec 5ms
testing::material::spec::tests::test_key_type_covers_all_priv_data_types 5ms
testing::material::spec::tests::test_key_type_covers_all_pub_data_types 5ms
testing::material::spec::tests::test_serialization 5ms
testing::material::spec::tests::test_threshold_basic_spec 5ms
testing::material::spec::tests::test_threshold_default_no_prss_spec 5ms
testing::material::spec::tests::test_threshold_default_spec_requires_prss 5ms
testing::utils::test_purge 7ms
util::file_handling::tests::read_write_element 6ms
util::file_handling::tests::read_write_text 5ms
util::key_setup::tests::test_max_num_bits 4.5s
util::meta_store::tests::auto_remove 6ms
util::meta_store::tests::delete 6ms
util::meta_store::tests::double_insert 5ms
util::meta_store::tests::sunshine 5ms
util::meta_store::tests::test_kickout_of_errors 5ms
util::meta_store::tests::test_subscription 5.0s
util::meta_store::tests::too_many_elements 6ms
util::rate_limiter::tests::test_rate_limiting_1 6ms
util::rate_limiter::tests::test_rate_limiting_more 6ms
util::rate_limiter::tests::test_rate_limiting_refusal 7ms
util::retry::tests::fatal_loop_fails 50ms
util::retry::tests::retry_loop_fails 51ms
util::retry::tests::sunshine_fatal_loop 62ms
util::retry::tests::sunshine_retry_loop 62ms
vault::keychain::secretsharing::tests::test_encrypt_and_decrypt_roundtrip 7ms
vault::keychain::secretsharing::tests::test_new_keychain_without_pub_storage 6ms
vault::keychain::secretsharing::tests::test_operator_public_key_bytes_error 6ms
vault::keychain::secretsharing::tests::test_set_and_get_backup_enc_key 6ms
vault::keychain::secretsharing::tests::test_validate_recovery_material_invalid_signature 7ms
vault::keychain::secretsharing::tests::test_validate_recovery_material_no_material_is_ok 6ms
vault::keychain::secretsharing::tests::test_validate_recovery_material_valid_signature 7ms
vault::keychain::tests::test_verify_root_key_measurements 6ms
vault::storage::crypto_material::tests::compressed_fhe_keys_exist_requires_standalone_public_key 127ms
vault::storage::crypto_material::tests::migration::test_copy_compressed_key_legacy_metadata_fails 224ms
vault::storage::crypto_material::tests::migration::test_copy_compressed_key_missing_source 122ms
vault::storage::crypto_material::tests::migration::test_copy_compressed_key_overwrite 392ms
vault::storage::crypto_material::tests::migration::test_copy_compressed_key_to_original_success 248ms
vault::storage::crypto_material::tests::migration::test_copy_compressed_key_updates_backup_vault 245ms
vault::storage::crypto_material::tests::migration::test_copy_compressed_key_validation_failure_is_atomic 222ms
vault::storage::crypto_material::tests::read_guarded_crypto_material_from_cache_not_found 7ms
vault::storage::crypto_material::tests::read_guarded_threshold_fhe_keys_not_found 6ms
vault::storage::crypto_material::tests::read_public_key 6ms
vault::storage::crypto_material::tests::write_central_keys 13ms
vault::storage::crypto_material::tests::write_central_keys_failed_storage_sets_terminal_error 13ms
vault::storage::crypto_material::tests::write_crs 450ms
vault::storage::crypto_material::tests::write_threshold_compressed_empty_update_cleans_up 177ms
vault::storage::crypto_material::tests::write_threshold_empty_update 77ms
vault::storage::crypto_material::tests::write_threshold_keys_failed_storage 77ms
vault::storage::crypto_material::tests::write_threshold_keys_meta_update 77ms
vault::storage::file::tests::storage_helper_methods::threshold_1_true 12ms
vault::storage::file::tests::storage_helper_methods::threshold_2_false 12ms
vault::storage::file::tests::test_all_data_ids_from_all_epochs_file 8ms
vault::storage::file::tests::test_data_ids_with_only_epoch_data_file 7ms
vault::storage::file::tests::test_delete_at_epoch_keeps_dir_when_not_empty 7ms
vault::storage::file::tests::test_delete_at_epoch_removes_empty_epoch_dir 6ms
vault::storage::file::tests::test_epoch_ids_with_only_non_epoch_data_file 6ms
vault::storage::file::tests::test_epoch_storage 7ms
vault::storage::file::tests::test_mixed_epoch_and_non_epoch_data_file 7ms
vault::storage::file::tests::test_overwrite_logic_files 6ms
vault::storage::file::tests::test_store_bytes_at_epoch_does_not_overwrite_file 6ms
vault::storage::file::tests::test_store_load_bytes_at_epoch_file 6ms
vault::storage::ram::tests::storage_helper_methods 6ms
vault::storage::ram::tests::test_all_data_ids_from_all_epochs_ram 5ms
vault::storage::ram::tests::test_data_ids_with_only_epoch_data_ram 5ms
vault::storage::ram::tests::test_epoch_ids_with_only_non_epoch_data_ram 5ms
vault::storage::ram::tests::test_mixed_epoch_and_non_epoch_data_ram 5ms
vault::storage::ram::tests::test_overwrite_logic_ram 5ms
vault::storage::ram::tests::test_overwrite_logic_ram_on_epoch 5ms
vault::storage::ram::tests::test_store_load_bytes_at_epoch_ram 5ms
vault::storage::s3::test_find_region 5ms
vault::tests::regression_test_vault_data_type_serialization 5ms
vault::tests::test_custodian_backup_folder_hierarchy 6ms
config_conformance_client_local_centralized 5ms
test_centralized_abort_crs_gen 766ms
test_centralized_abort_key_gen 760ms
test_centralized_crsgen_secure 888ms
test_centralized_custodian_backup 504ms
test_centralized_insecure 42.0s
test_centralized_insecure_default_keygen 770ms
test_centralized_restore_from_backup 920ms
tests::test_parse_previous_key_info 4ms
tests::test_parse_hex 5ms
tests::test_copy_compressed_key_to_original_requires_existing_keyset_id 5ms
tests::test_invalid_hex 5ms
tests::test_copy_compressed_key_to_original_conflicts_with_uncompressed 5ms
tests::test_core_client_config 5ms
tests::fetch_keys_auto_detect_downloads_public_key_for_compressed_layout 260ms
keygen::tests::test_eip712_sigs 403ms
crsgen::tests::test_eip712_sigs 437ms
identifiers::tests::request_id_ordering 4ms
identifiers::tests::test_id_type_conversions 4ms
identifiers::tests::test_invalid_id_all_zeros 4ms
identifiers::tests::test_request_id_random 4ms
identifiers::tests::test_invalid_v1_request_id 4ms
rpc_types::tests::test_old_fhe_type_enum_compatibility 4ms
identifiers::tests::test_key_id_from_str 4ms
rpc_types::tests::test_enum_default 4ms
rpc_types::tests::test_types_plaintext_ser 4ms
identifiers::tests::test_v1_request_id_conversion 4ms
rpc_types::tests::test_request_id 4ms
identifiers::tests::test_valid_hex_characters 4ms
rpc_types::tests::test_request_id_raw_string 4ms
identifiers::tests::test_v1_request_id_with_whitespace 4ms
rpc_types::tests::test_eip712_verification 4ms
identifiers::tests::test_v1_request_id_to_u128_conversion 5ms
identifiers::tests::test_key_id_protobuf_conversion 4ms
identifiers::tests::test_invalid_hex_length 5ms
identifiers::tests::test_v1_request_id_with_prefix 4ms
rpc_types::tests::idempotent_plaintext 4ms
rpc_types::tests::test_abi_encoding_fhevm 5ms

🍂 No flaky tests in this run.

Github Test Reporter by CTRF 💚

🔄 This comment has been updated

@kc1212
kc1212 force-pushed the kc1212/feat/2988/copy-compressed-key-to-orig branch 2 times, most recently from 5c7fbdd to 69f8197 Compare April 21, 2026 14:12
@kc1212
kc1212 force-pushed the kc1212/feat/2988/copy-compressed-key-to-orig branch 5 times, most recently from c4eaa32 to 3f6d2e6 Compare April 28, 2026 14:03
@kc1212
kc1212 marked this pull request as ready for review April 28, 2026 14:04
@kc1212
kc1212 force-pushed the kc1212/feat/2988/copy-compressed-key-to-orig branch from 3f6d2e6 to d327b58 Compare April 28, 2026 14:05

@dvdplm dvdplm left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still need to review core/service/src/vault/storage/crypto_material/tests/migration.rs.

Comment thread core/grpc/proto/kms.v1.proto
Comment thread core/service/src/client/tests/common.rs Outdated
Comment thread core/service/src/engine/threshold/service/key_generator.rs Outdated
Comment thread core-client/src/keygen.rs Outdated
Comment thread core-client/src/lib.rs Outdated
Comment thread core/service/src/vault/storage/crypto_material/threshold.rs Outdated
Comment thread core/service/src/vault/storage/crypto_material/threshold.rs
Comment thread core/service/src/vault/storage/crypto_material/threshold.rs
Comment thread core/service/src/vault/storage/crypto_material/threshold.rs Outdated
Comment thread docs/guides/core_client.md
@kc1212
kc1212 requested a review from a team as a code owner April 29, 2026 08:39
@kc1212 kc1212 added the docker Commits in PRs with this label trigger the build of docker images in CI label Apr 29, 2026
@dd23
dd23 requested a review from Copilot April 29, 2026 11:34

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an opt-in migration path for threshold key generation to copy newly generated compressed key material back onto an existing (old) key ID, so existing clients can keep using the old ID while benefiting from the compressed storage layout.

Changes:

  • Introduces copy_compressed_key_to_original flow in threshold crypto-material storage and wires it into the threshold key generator.
  • Extends CLI + gRPC configuration (KeySetAddedInfo) to request the copy-back migration behavior and documents the new flags.
  • Adds dedicated migration tests and refactors existing compressed-key test helpers.

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
docs/guides/core_client.md Documents --uncompressed default behavior and migration flags including copy-back to original key ID.
core/service/src/vault/storage/crypto_material/threshold.rs Adds copy_compressed_key_to_original to copy compressed pub material + re-sign and replace ThresholdFheKeys under the old ID.
core/service/src/vault/storage/crypto_material/tests/migration.rs New test suite covering successful copy, overwrite, atomicity, legacy-metadata rejection, and backup-vault update.
core/service/src/vault/storage/crypto_material/tests.rs Adds shared helpers used by migration tests and registers the new test module.
core/service/src/engine/threshold/service/key_generator.rs Calls the new copy-back operation after successful compressed keygen-from-existing when requested.
core/service/src/engine/keyset_configuration.rs Exposes copy_compressed_key_to_original() flag on InternalKeySetConfig.
core/service/src/client/tests/threshold/key_gen_tests.rs Updates test config struct initialization with the new proto field.
core/service/src/client/tests/common.rs Updates shared test helpers to set the new proto field.
core/grpc/proto/kms.v1.proto Adds copy_compressed_key_to_original to KeySetAddedInfo (but currently renumbers an existing field).
core-client/src/lib.rs Adds CLI flag --copy-compressed-key-to-original.
core-client/src/keygen.rs Validates flag combinations and populates the new gRPC field when building the request.
.github/workflows/main.yml Increases CI job timeout from 60 to 120 minutes.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread core/grpc/proto/kms.v1.proto
Comment thread core/service/src/engine/threshold/service/key_generator.rs
Comment thread core/service/src/vault/storage/crypto_material/threshold.rs
Comment thread .github/workflows/main.yml Outdated
Comment thread core/service/src/vault/storage/crypto_material/tests/migration.rs
Comment thread core/service/src/vault/storage/crypto_material/tests/migration.rs Outdated
Comment thread core/service/src/vault/storage/crypto_material/tests/migration.rs Outdated
Comment thread core/service/src/vault/storage/crypto_material/tests/migration.rs Outdated
Comment thread core/service/src/vault/storage/crypto_material/tests/migration.rs Outdated
@kc1212
kc1212 force-pushed the kc1212/feat/2988/copy-compressed-key-to-orig branch from 1dc1fd9 to e6e1917 Compare April 30, 2026 08:27

@dvdplm dvdplm left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, good job!

@kc1212
kc1212 merged commit 07b2a8f into main Apr 30, 2026
93 checks passed
@kc1212
kc1212 deleted the kc1212/feat/2988/copy-compressed-key-to-orig branch April 30, 2026 09:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The CLA has been signed. docker Commits in PRs with this label trigger the build of docker images in CI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants