huaweicloud-encryption-sdk-python 1.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- huaweicloud_encryption_sdk_python-1.2.1/PKG-INFO +18 -0
- huaweicloud_encryption_sdk_python-1.2.1/README.md +26 -0
- huaweicloud_encryption_sdk_python-1.2.1/examples/file_encryption_example.py +57 -0
- huaweicloud_encryption_sdk_python-1.2.1/examples/key_capsule_encryption_example.py +240 -0
- huaweicloud_encryption_sdk_python-1.2.1/examples/kms_discovery_encryption_example.py +56 -0
- huaweicloud_encryption_sdk_python-1.2.1/examples/local_aes_encryption_example.py +59 -0
- huaweicloud_encryption_sdk_python-1.2.1/examples/test_rsa.py +42 -0
- huaweicloud_encryption_sdk_python-1.2.1/examples/test_sm2.py +38 -0
- huaweicloud_encryption_sdk_python-1.2.1/examples/test_sm4_cbc.py +37 -0
- huaweicloud_encryption_sdk_python-1.2.1/examples/test_sm4_gcm.py +37 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryption_sdk_python.egg-info/PKG-INFO +18 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryption_sdk_python.egg-info/SOURCES.txt +177 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryption_sdk_python.egg-info/dependency_links.txt +1 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryption_sdk_python.egg-info/requires.txt +14 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryption_sdk_python.egg-info/top_level.txt +5 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/__init__.py +5 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_apig_sdk/__init__.py +1 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_apig_sdk/signer.py +278 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_apig_sdk/signer_v11.py +70 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_apig_sdk/sm3_hash.py +141 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/auth/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/auth/signer.py +174 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/client/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/client/consumer_client_adapter.py +59 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/client/http_client.py +211 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/core/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/core/client_consumer_worker.py +106 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/core/consumer_heartbeat.py +73 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/core/log_shard_consumer.py +179 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/interface/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/interface/consumer_check_point_tracker.py +120 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/interface/consumer_processor.py +18 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/interface/consumer_processor_factory.py +3 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/model/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/model/check_point.py +20 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/model/consumer_config.py +27 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/model/log_data.py +18 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/model/task_result.py +40 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/task/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/task/consumer_fetch_task.py +53 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/task/initial_task.py +55 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/task/process_task.py +25 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer/task/shutdown_task.py +24 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/consumer_main.py +88 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/parallel_main.py +64 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/callback/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/callback/call_back.py +7 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/core/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/core/accumulator.py +135 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/core/io_thread_pool.py +107 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/core/io_worker.py +124 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/core/mover.py +69 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/core/producer.py +98 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/lts_http/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/lts_http/http_client.py +63 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/lts_http/simple_request.py +14 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/model/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/model/config.py +50 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/model/error.py +18 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/model/log.py +87 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/model/log_batch.py +154 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/model/lts_store.py +21 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/model/result.py +17 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/producer/model/retry_queue.py +39 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/serial_main.py +77 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/utils/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/utils/common.py +57 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/_lts_sdk/utils/lts_threading.py +32 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/cache/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/cache/data_key_cache.py +79 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/cache/local_data_key_cache.py +161 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/common/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/common/constants.py +15 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/common/counting_output_stream.py +18 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/common/crypto_factory.py +48 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/common/ec_private_key_loader.py +43 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/common/ecs_metadata_service.py +42 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/common/file_path_for_example_constants.py +4 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/common/utils.py +162 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/exception/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/exception/errors.py +109 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/handler/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/handler/cipher_handler.py +294 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/handler/crypto_handler.py +24 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/handler/default_crypto_handler.py +148 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/handler/default_serialize_handler.py +45 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/handler/file_decrypt_handler.py +101 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/handler/file_encrypt_handler.py +30 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/handler/serialize_handler.py +14 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/huawei_config.py +49 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/huawei_crypto.py +311 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/keyring.py +14 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/keyring_factory.py +10 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/kms_keyring_factory.py +21 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/kmskeyring/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/kmskeyring/kms_discovery_keyring.py +51 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/kmskeyring/kms_key_capsule_keyring.py +100 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/kmskeyring/kms_keyring.py +155 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/kmskeyring/kms_multi_region_keyring.py +8 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/raw_keyring_factory.py +27 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/rawkeyring/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/rawkeyring/raw_aes_keyring.py +63 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/rawkeyring/raw_keyring.py +112 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/rawkeyring/raw_rsa_keyring.py +55 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/rawkeyring/raw_sm2_keyring.py +75 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/rawkeyring/raw_sm4_cbc_keyring.py +66 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/keyrings/rawkeyring/raw_sm4_keyring.py +70 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/kms/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/kms/create_key_capsule_request.py +35 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/kms/create_key_capsule_response.py +19 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/kms/decrypt_key_capsule_request.py +32 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/kms/decrypt_key_capsule_response.py +19 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/kms/kms_http_client.py +116 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/log/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/log/log_config.py +30 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/log/log_file_backup.py +144 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/log/log_metrics.py +132 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/log/log_reporter_manager.py +163 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/log/lts_sdk_producer.py +386 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/log/lts_struct_log_builder.py +106 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/meterialmanager/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/meterialmanager/cache_crypto_meterial_manager.py +221 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/meterialmanager/crypto_meterial_manager.py +19 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/meterialmanager/data_key_generate.py +10 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/meterialmanager/data_key_generate_factory.py +20 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/meterialmanager/default_crypto_meterials_manager.py +71 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/meterialmanager/key_capsule_data_key_generate.py +63 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/meterialmanager/kms_data_key_generate.py +65 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/meterialmanager/local_data_key_generate.py +13 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/access_point_config.py +9 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/cipher_body.py +81 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/cipher_header.py +405 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/ciphertext_data_key.py +166 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/crypto_result.py +11 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/data_key_materials.py +17 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/data_materials.py +11 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/enums/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/enums/access_point_type.py +28 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/enums/crypto_algorithm.py +75 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/enums/data_key_generate_type.py +20 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/enums/key_provider_enum.py +19 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/enums/keyring_type_enum.py +27 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/key_capsule.py +10 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/key_capsule_config.py +12 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/kms_config.py +10 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/request/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/request/encrypt_request.py +10 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/request/sign_request.py +2 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/model/request/verify_request.py +2 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/proof/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/proof/attestation_document.py +36 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/proof/collector/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/proof/collector/cce_proof_collector.py +24 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/proof/collector/ecs_proof_collector.py +11 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/proof/collector/key_pair_proof_collector.py +55 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/proof/collector/ma_proof_collector.py +51 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/proof/private_key_decrypt_callback.py +7 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/proof/proof_collector.py +11 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/proof/proof_collector_factory.py +53 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/proof/proof_info.py +10 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/util/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/huaweicloud_encryptionsdk/util/common_utils.py +12 -0
- huaweicloud_encryption_sdk_python-1.2.1/pyproject.toml +32 -0
- huaweicloud_encryption_sdk_python-1.2.1/setup.cfg +4 -0
- huaweicloud_encryption_sdk_python-1.2.1/tests/__init__.py +0 -0
- huaweicloud_encryption_sdk_python-1.2.1/tests/test_enums.py +84 -0
- huaweicloud_encryption_sdk_python-1.2.1/tests/test_exceptions.py +38 -0
- huaweicloud_encryption_sdk_python-1.2.1/tests/test_factories.py +71 -0
- huaweicloud_encryption_sdk_python-1.2.1/tests/test_huawei_crypto.py +67 -0
- huaweicloud_encryption_sdk_python-1.2.1/tests/test_imports.py +46 -0
- huaweicloud_encryption_sdk_python-1.2.1/tests/test_kms_models.py +95 -0
- huaweicloud_encryption_sdk_python-1.2.1/tests/test_log_file_backup.py +45 -0
- huaweicloud_encryption_sdk_python-1.2.1/tests/test_lts_struct_log_builder.py +97 -0
- huaweicloud_encryption_sdk_python-1.2.1/tests/test_models.py +142 -0
- huaweicloud_encryption_sdk_python-1.2.1/tests/test_utils.py +111 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: huaweicloud-encryption-sdk-python
|
|
3
|
+
Version: 1.2.1
|
|
4
|
+
Summary: HuaweiCloud Encryption SDK for Python
|
|
5
|
+
License: Apache-2.0
|
|
6
|
+
Requires-Python: >=3.9
|
|
7
|
+
Requires-Dist: cryptography>=42.0.0
|
|
8
|
+
Requires-Dist: gmssl>=3.2.2
|
|
9
|
+
Requires-Dist: huaweicloudsdkkms>=3.1.190
|
|
10
|
+
Requires-Dist: huaweicloudsdkcore>=3.1.190
|
|
11
|
+
Requires-Dist: requests>=2.31.0
|
|
12
|
+
Requires-Dist: cachetools>=5.3.0
|
|
13
|
+
Provides-Extra: lts
|
|
14
|
+
Requires-Dist: loguru; extra == "lts"
|
|
15
|
+
Requires-Dist: six; extra == "lts"
|
|
16
|
+
Provides-Extra: dev
|
|
17
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
18
|
+
Requires-Dist: pytest-cov>=4.0; extra == "dev"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# HuaweiCloud Encryption SDK (Python)
|
|
2
|
+
|
|
3
|
+
华为云加密 SDK Python 版,提供数据加解密、密钥胶囊、LTS 日志上报等功能,支持 AES-GCM、SM4-GCM/CBC、SM2 等算法。
|
|
4
|
+
|
|
5
|
+
## 环境要求
|
|
6
|
+
|
|
7
|
+
- Python >= 3.9
|
|
8
|
+
- Linux(x86_64 / ARM64)
|
|
9
|
+
|
|
10
|
+
## 文档
|
|
11
|
+
|
|
12
|
+
- [密钥胶囊开发指南](doc/development_guide_key_capsule.md) — 密钥胶囊加解密的完整开发指南
|
|
13
|
+
|
|
14
|
+
## 项目结构
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
├── doc/ # 文档
|
|
18
|
+
├── examples/ # 示例程序和测试脚本
|
|
19
|
+
├── src/ # SDK 源码
|
|
20
|
+
├── tests/ # 单元测试
|
|
21
|
+
└── pyproject.toml # 项目构建配置
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## License
|
|
25
|
+
|
|
26
|
+
Apache-2.0
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
from huaweicloud_encryptionsdk import HuaweiCrypto, HuaweiConfig
|
|
5
|
+
from huaweicloud_encryptionsdk.model.enums.crypto_algorithm import CryptoAlgorithm
|
|
6
|
+
from huaweicloud_encryptionsdk.model.enums.keyring_type_enum import KeyringTypeEnum
|
|
7
|
+
from huaweicloud_encryptionsdk.keyrings.raw_keyring_factory import RawKeyringFactory
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def compare_file(source_file_path: str, target_file_path: str) -> bool:
|
|
11
|
+
import os
|
|
12
|
+
if os.path.getsize(source_file_path) != os.path.getsize(target_file_path):
|
|
13
|
+
return False
|
|
14
|
+
with open(source_file_path, "rb") as sf, open(target_file_path, "rb") as tf:
|
|
15
|
+
while True:
|
|
16
|
+
source_chunk = sf.read(1024)
|
|
17
|
+
target_chunk = tf.read(1024)
|
|
18
|
+
if not source_chunk:
|
|
19
|
+
break
|
|
20
|
+
if source_chunk != target_chunk:
|
|
21
|
+
return False
|
|
22
|
+
return True
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def main():
|
|
26
|
+
if len(sys.argv) < 5:
|
|
27
|
+
print("Usage: python file_encryption_example.py <symmetric_key> <source_file> <encrypted_file> <decrypted_file>")
|
|
28
|
+
sys.exit(1)
|
|
29
|
+
|
|
30
|
+
symmetry_key = sys.argv[1]
|
|
31
|
+
source_file_path = sys.argv[2]
|
|
32
|
+
target_file_path = sys.argv[3]
|
|
33
|
+
backup_file_path = sys.argv[4]
|
|
34
|
+
|
|
35
|
+
huawei_config = HuaweiConfig(
|
|
36
|
+
crypto_algorithm=CryptoAlgorithm.AES_256_GCM_NOPADDING,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
keyring = RawKeyringFactory().get_keyring(KeyringTypeEnum.RAW_AES.type)
|
|
40
|
+
|
|
41
|
+
key_bytes = base64.b64decode(symmetry_key.encode("utf-8"))
|
|
42
|
+
keyring.set_symmetric_key([key_bytes])
|
|
43
|
+
|
|
44
|
+
huawei_crypto = HuaweiCrypto(huawei_config).with_keyring(keyring)
|
|
45
|
+
|
|
46
|
+
encryption_context = {"key": "value", "context": "encrypt"}
|
|
47
|
+
|
|
48
|
+
huawei_crypto.encrypt_file(source_file_path, target_file_path, encryption_context)
|
|
49
|
+
|
|
50
|
+
huawei_crypto.decrypt_file(target_file_path, backup_file_path)
|
|
51
|
+
|
|
52
|
+
assert compare_file(source_file_path, backup_file_path), "Decrypted file does not match original"
|
|
53
|
+
print("File encryption example completed successfully!")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
if __name__ == "__main__":
|
|
57
|
+
main()
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
import logging
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
from huaweicloud_encryptionsdk import HuaweiCrypto, HuaweiConfig
|
|
7
|
+
from huaweicloud_encryptionsdk.cache.local_data_key_cache import LocalDataKeyCache
|
|
8
|
+
from huaweicloud_encryptionsdk.keyrings.kms_keyring_factory import KmsKeyringFactory
|
|
9
|
+
from huaweicloud_encryptionsdk.log.log_config import LogConfig
|
|
10
|
+
from huaweicloud_encryptionsdk.meterialmanager.cache_crypto_meterial_manager import CacheCryptoMaterialsManager
|
|
11
|
+
from huaweicloud_encryptionsdk.model.access_point_config import AccessPointConfig
|
|
12
|
+
from huaweicloud_encryptionsdk.model.kms_config import KMSConfig
|
|
13
|
+
from huaweicloud_encryptionsdk.model.key_capsule_config import KeyCapsuleConfig
|
|
14
|
+
from huaweicloud_encryptionsdk.model.enums.crypto_algorithm import CryptoAlgorithm
|
|
15
|
+
from huaweicloud_encryptionsdk.model.enums.keyring_type_enum import KeyringTypeEnum
|
|
16
|
+
from huaweicloud_encryptionsdk.model.request.encrypt_request import EncryptRequest
|
|
17
|
+
from huaweicloud_encryptionsdk.common import utils as _utils
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def bytes_to_hex(data: bytes) -> str:
|
|
23
|
+
return data.hex()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def load_properties(filepath: str) -> dict:
|
|
27
|
+
props = {}
|
|
28
|
+
with open(filepath, "r", encoding="utf-8") as f:
|
|
29
|
+
for line in f:
|
|
30
|
+
line = line.strip()
|
|
31
|
+
if not line or line.startswith("#"):
|
|
32
|
+
continue
|
|
33
|
+
sep = line.find("=")
|
|
34
|
+
if sep > 0:
|
|
35
|
+
key = line[:sep].strip()
|
|
36
|
+
value = line[sep + 1:].strip()
|
|
37
|
+
props[key] = value
|
|
38
|
+
return props
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def main():
|
|
42
|
+
if len(sys.argv) < 2:
|
|
43
|
+
print("Usage: python key_capsule_encryption_example.py <config.properties>")
|
|
44
|
+
sys.exit(1)
|
|
45
|
+
|
|
46
|
+
props = load_properties(sys.argv[1])
|
|
47
|
+
|
|
48
|
+
ak = props.get("ak")
|
|
49
|
+
sk = props.get("sk")
|
|
50
|
+
|
|
51
|
+
kms_config_list = [KMSConfig(
|
|
52
|
+
region=props.get("kms.region"),
|
|
53
|
+
key_id=props.get("kms.keyId"),
|
|
54
|
+
project_id=props.get("kms.projectId"),
|
|
55
|
+
end_point=props.get("kms.endpoint"),
|
|
56
|
+
)]
|
|
57
|
+
|
|
58
|
+
access_point_config = AccessPointConfig(
|
|
59
|
+
type=int(props.get("keyCapsule.accessPointType", "2")),
|
|
60
|
+
encrypted_private_key=props.get("keyCapsule.encryptedPrivateKey"),
|
|
61
|
+
private_key_decrypt_callback=lambda encrypted_key: props.get("keyCapsule.plainPrivateKey"),
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
key_capsule_config = KeyCapsuleConfig(
|
|
65
|
+
region=props.get("keyCapsule.region"),
|
|
66
|
+
default_policy_id=props.get("keyCapsule.defaultPolicyId"),
|
|
67
|
+
default_key_policy=props.get("keyCapsule.defaultKeyPolicy"),
|
|
68
|
+
access_point_config=access_point_config,
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
log_enabled = props.get("log.enabled", "false").lower() == "true"
|
|
72
|
+
log_config = None
|
|
73
|
+
if log_enabled:
|
|
74
|
+
log_config = LogConfig(
|
|
75
|
+
log_group_id=props.get("log.groupId"),
|
|
76
|
+
log_stream_id=props.get("log.streamId"),
|
|
77
|
+
log_group_name=props.get("log.groupName", "DSC"),
|
|
78
|
+
log_stream_name=props.get("log.streamName", "crypto_operation_log"),
|
|
79
|
+
region=props.get("log.region"),
|
|
80
|
+
lts_endpoint=props.get("log.ltsEndpoint"),
|
|
81
|
+
project_id=props.get("log.projectId"),
|
|
82
|
+
batch_count_threshold=int(props.get("log.batchCountThreshold", "1000")),
|
|
83
|
+
linger_ms=int(props.get("log.lingerMs", "30000")),
|
|
84
|
+
batch_size_threshold_in_bytes=int(props.get("log.batchSizeThresholdInBytes", "524288")),
|
|
85
|
+
io_thread_count=int(props.get("log.ioThreadCount", "4")),
|
|
86
|
+
total_size_in_bytes=int(props.get("log.totalSizeInBytes", "104857600")),
|
|
87
|
+
max_block_ms=int(props.get("log.maxBlockMs", "0")),
|
|
88
|
+
retries=int(props.get("log.retries", "5")),
|
|
89
|
+
base_retry_backoff_ms=int(props.get("log.baseRetryBackoffMs", "100")),
|
|
90
|
+
max_retry_backoff_ms=int(props.get("log.maxRetryBackoffMs", "500")),
|
|
91
|
+
backup_dir=props.get("log.backupDir", "/home/logbackup"),
|
|
92
|
+
enable_recovery_on_startup=props.get("log.enableRecoveryOnStartup", "true").lower() == "true",
|
|
93
|
+
recovery_batch_size=int(props.get("log.recoveryBatchSize", "1000")),
|
|
94
|
+
recovery_batch_interval=int(props.get("log.recoveryBatchInterval", "1000")),
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
config = HuaweiConfig(
|
|
98
|
+
ak=ak,
|
|
99
|
+
sk=sk,
|
|
100
|
+
crypto_algorithm=CryptoAlgorithm.AES_256_GCM_NOPADDING,
|
|
101
|
+
kms_config_list=kms_config_list,
|
|
102
|
+
key_capsule_config=key_capsule_config,
|
|
103
|
+
log_config=log_config,
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
keyring = KmsKeyringFactory().get_keyring(KeyringTypeEnum.KMS_KEY_CAPSULE.type)
|
|
107
|
+
crypto = HuaweiCrypto(config).with_keyring(keyring)
|
|
108
|
+
|
|
109
|
+
decrypt_config = HuaweiConfig(
|
|
110
|
+
ak=ak,
|
|
111
|
+
sk=sk,
|
|
112
|
+
key_capsule_config=key_capsule_config,
|
|
113
|
+
log_config=log_config,
|
|
114
|
+
)
|
|
115
|
+
decrypt_keyring = KmsKeyringFactory().get_keyring(KeyringTypeEnum.KMS_KEY_CAPSULE.type)
|
|
116
|
+
decrypt_crypto = HuaweiCrypto(decrypt_config).with_keyring(decrypt_keyring)
|
|
117
|
+
|
|
118
|
+
cache_enabled = props.get("cache.enabled", "false").lower() == "true"
|
|
119
|
+
if cache_enabled:
|
|
120
|
+
local_data_key_cache = LocalDataKeyCache()
|
|
121
|
+
local_data_key_cache.set_capacity(int(props.get("cache.capacity", "10")))
|
|
122
|
+
cache_manager = CacheCryptoMaterialsManager(local_data_key_cache, config)
|
|
123
|
+
cache_manager.set_max_byte_limit(int(props.get("cache.maxByteLimit", "3000")))
|
|
124
|
+
cache_manager.set_max_message_limit(int(props.get("cache.maxMessageLimit", "1000")))
|
|
125
|
+
cache_manager.set_survival_time(int(props.get("cache.survivalTime", "5000")))
|
|
126
|
+
crypto.with_crypto_material_manager(cache_manager)
|
|
127
|
+
decrypt_cache_manager = CacheCryptoMaterialsManager(local_data_key_cache, decrypt_config)
|
|
128
|
+
decrypt_cache_manager.set_max_byte_limit(int(props.get("cache.maxByteLimit", "3000")))
|
|
129
|
+
decrypt_cache_manager.set_max_message_limit(int(props.get("cache.maxMessageLimit", "1000")))
|
|
130
|
+
decrypt_cache_manager.set_survival_time(int(props.get("cache.survivalTime", "5000")))
|
|
131
|
+
decrypt_crypto.with_crypto_material_manager(decrypt_cache_manager)
|
|
132
|
+
|
|
133
|
+
test_file_enabled = props.get("test.file.enabled", "false").lower() == "true"
|
|
134
|
+
cross_lang_enabled = props.get("test.crossLang.enabled", "false").lower() == "true"
|
|
135
|
+
|
|
136
|
+
if cross_lang_enabled:
|
|
137
|
+
cross_lang_mode = props.get("test.crossLang.mode", "decrypt").lower()
|
|
138
|
+
if cross_lang_mode == "decrypt":
|
|
139
|
+
cipher_hex = props.get("test.crossLang.cipherHex", "")
|
|
140
|
+
if not cipher_hex:
|
|
141
|
+
logger.error("test.crossLang.cipherHex 未配置")
|
|
142
|
+
crypto.close()
|
|
143
|
+
decrypt_crypto.close()
|
|
144
|
+
os._exit(1)
|
|
145
|
+
cipher_data = bytes.fromhex(cipher_hex)
|
|
146
|
+
decrypt_result = decrypt_crypto.decrypt(cipher_data)
|
|
147
|
+
logger.info("跨语言解密成功: %s", decrypt_result.result.decode("utf-8"))
|
|
148
|
+
print("Cross-language decrypt passed! Plain text:", decrypt_result.result.decode("utf-8"))
|
|
149
|
+
elif cross_lang_mode == "encrypt":
|
|
150
|
+
plain_text = props.get("test.plainText", "Hello, Key Capsule!")
|
|
151
|
+
encrypt_request = EncryptRequest(plain_text=plain_text.encode("utf-8"))
|
|
152
|
+
custom_policy_id = props.get("test.encrypt.policyId")
|
|
153
|
+
custom_key_policy = props.get("test.encrypt.keyPolicy")
|
|
154
|
+
if custom_policy_id:
|
|
155
|
+
encrypt_request.policy_id = custom_policy_id
|
|
156
|
+
if custom_key_policy:
|
|
157
|
+
encrypt_request.key_policy = custom_key_policy
|
|
158
|
+
result = crypto.encrypt(encrypt_request)
|
|
159
|
+
cipher_hex = bytes_to_hex(result.result)
|
|
160
|
+
logger.info("跨语言加密成功, 密文HEX: %s", cipher_hex)
|
|
161
|
+
|
|
162
|
+
cipher_file_path = props.get("test.crossLang.cipherFile", "")
|
|
163
|
+
if cipher_file_path:
|
|
164
|
+
with open(cipher_file_path, "wb") as f:
|
|
165
|
+
f.write(result.result)
|
|
166
|
+
logger.info("密文已写入文件: %s", cipher_file_path)
|
|
167
|
+
else:
|
|
168
|
+
print("cipherHex=" + cipher_hex)
|
|
169
|
+
print("Cross-language encrypt passed!")
|
|
170
|
+
elif cross_lang_mode == "decryptFile":
|
|
171
|
+
cipher_file_path = props.get("test.crossLang.cipherFile", "")
|
|
172
|
+
if not cipher_file_path:
|
|
173
|
+
logger.error("test.crossLang.cipherFile 未配置")
|
|
174
|
+
crypto.close()
|
|
175
|
+
decrypt_crypto.close()
|
|
176
|
+
os._exit(1)
|
|
177
|
+
with open(cipher_file_path, "rb") as f:
|
|
178
|
+
cipher_data = f.read()
|
|
179
|
+
decrypt_result = decrypt_crypto.decrypt(cipher_data)
|
|
180
|
+
logger.info("跨语言文件解密成功: %s", decrypt_result.result.decode("utf-8"))
|
|
181
|
+
print("Cross-language decrypt file passed! Plain text:", decrypt_result.result.decode("utf-8"))
|
|
182
|
+
else:
|
|
183
|
+
logger.error("不支持的 test.crossLang.mode: %s (支持: decrypt/encrypt/decryptFile)", cross_lang_mode)
|
|
184
|
+
crypto.close()
|
|
185
|
+
decrypt_crypto.close()
|
|
186
|
+
os._exit(1)
|
|
187
|
+
elif test_file_enabled:
|
|
188
|
+
origin_file_path = props.get("test.file.path.origin")
|
|
189
|
+
encrypt_file_path = props.get("test.file.path.encrypt")
|
|
190
|
+
decrypt_file_path = props.get("test.file.path.decrypt")
|
|
191
|
+
crypto.encrypt_file(origin_file_path, encrypt_file_path, None)
|
|
192
|
+
logger.info("加密成功,源文件:%s,加密后文件:%s", origin_file_path, encrypt_file_path)
|
|
193
|
+
crypto.decrypt_file(encrypt_file_path, decrypt_file_path)
|
|
194
|
+
logger.info("解密成功:源文件:%s,解密后文件:%s", encrypt_file_path, decrypt_file_path)
|
|
195
|
+
else:
|
|
196
|
+
encrypt_request = EncryptRequest()
|
|
197
|
+
custom_policy_id = props.get("test.encrypt.policyId")
|
|
198
|
+
custom_key_policy = props.get("test.encrypt.keyPolicy")
|
|
199
|
+
if custom_policy_id:
|
|
200
|
+
encrypt_request.policy_id = custom_policy_id
|
|
201
|
+
if custom_key_policy:
|
|
202
|
+
encrypt_request.key_policy = custom_key_policy
|
|
203
|
+
|
|
204
|
+
plain_text = props.get("test.plainText", "Hello, Key Capsule!")
|
|
205
|
+
encrypt_request.plain_text = plain_text.encode("utf-8")
|
|
206
|
+
logger.info("原文: %s, HEX: %s", plain_text, bytes_to_hex(plain_text.encode("utf-8")))
|
|
207
|
+
|
|
208
|
+
# 第一次加密:创建密钥胶囊,生成数据密钥
|
|
209
|
+
result = crypto.encrypt(encrypt_request)
|
|
210
|
+
logger.info("第1次加密成功,密文HEX: %s", bytes_to_hex(result.result))
|
|
211
|
+
|
|
212
|
+
# 第二次加密:相同策略,命中加密缓存,复用数据密钥
|
|
213
|
+
plain_text2 = "xxxxxxxxxxxxxxxxxxxxxxxxxxssssssssssssss"
|
|
214
|
+
encrypt_request.plain_text = plain_text2.encode("utf-8")
|
|
215
|
+
result2 = crypto.encrypt(encrypt_request)
|
|
216
|
+
logger.info("第2次加密成功(命中加密缓存),密文HEX: %s", bytes_to_hex(result2.result))
|
|
217
|
+
|
|
218
|
+
# encHex1 = "0200020000010a6875617765692d6b6d737b012463633035383832662d366532362d346235372d613435302d6463353032306163663466340a636e2d6e6f7274682d372064346535353962343962336234303364613532373937323332393965643461362868747470733a2f2f6b6d732e636e2d6e6f7274682d372e6d79687561776569636c6f75642e636f6d01520101240030313965663362382d623235302d373030302d626334612d303761636162646136346232023d0082a8706f6c6963794964d92430313965663362662d343238332d373030302d623832342d356461666361326362306337a776657273696f6ea476312e30039c00050064006b98fe4b2aced0f515d0d49ce68a2cdd35d4da2f07072d05108dc5ad99570a6c635231abfef85cc9e82f082ed4a0b4e1bece2c25fedf2ec95430dc0763633035383832662d366532362d346235372d613435302d6463353032306163663466340000000014131211100f0e0d0c0b0a0908070605040302013c6dfd5c78023edf345ab0c6e5f60e0806e44ba6cb943733aa0f1e4d73718413044800304602210094322b0eeddc0c04f5744b7668f83e2492b3c5e8f611a5059ba5521aeb942dd90221009b9cf773b896a6dbee3fe52e523437f3f45ccef7cb1b407d4511b0d31352231d010c000002d40000002463633035383832662d366532362d346235372d613435302d646335303230616366346634000002a43031303132343030333033313339363536363333363233383264363233323335333032643337333033303330326436323633333436313264333033373631363336313632363436313336333436323332303233643030383261383730366636633639363337393439363464393234333033313339363536363333363236363264333433323338333332643337333033303330326436323338333233343264333536343631363636333631333236333632333036333337613737363635373237333639366636656134373633313265333030333963303030353030363430303662393866653462326163656430663531356430643439636536386132636464333564346461326630373037326430353130386463356164393935373061366336333532333161626665663835636339653832663038326564346130623465316265636532633235666564663265633935343330646330373633363333303335333833383332363632643336363533323336326433343632333533373264363133343335333032643634363333353330333233303631363336363334363633343030303030303030313431333132313131303066306530643063306230613039303830373036303530343033303230313363366466643563373830323365646633343561623063366535663630653038303665343462613663623934333733336161306631653464373337313834313330343438303033303436303232313030393433323262306565646463306330346635373434623736363866383365323439326233633565386636313161353035396261353532316165623934326464393032323130303962396366373733623839366136646265653366653532653532333433376633663435636365663763623162343037643435313162306433313335323233316400000001001ca65bef18a898010f701c7df2ab96ef7863d4c58c56086c19aaf48cd2240ed6b618f19470f42bccc90000000000000013a9bb136da90ef53d47207bb28a79619036b6e53483934fe0a3145687a048fba23db06a"
|
|
219
|
+
# encHex2 = "0200020000010a6875617765692d6b6d737b012463633035383832662d366532362d346235372d613435302d6463353032306163663466340a636e2d6e6f7274682d372064346535353962343962336234303364613532373937323332393965643461362868747470733a2f2f6b6d732e636e2d6e6f7274682d372e6d79687561776569636c6f75642e636f6d01510101240030313965663362382d623235302d373030302d626334612d303761636162646136346232023d0082a8706f6c6963794964d92430313965663362662d343238332d373030302d623832342d356461666361326362306337a776657273696f6ea476312e30039c0005006400ab449c495f299a35b8e01dff7444364d038afbd721eeba85faaf103f3bce848bc430e9d45dc9e9ab2fd1ee5287216e5f1552a2168c1894f94ddabeaf63633035383832662d366532362d346235372d613435302d6463353032306163663466340000000014131211100f0e0d0c0b0a0908070605040302017364ec6d796b69f52a79674f21d71ba9a5613594e0a8434205581372e55885f504470030450220765e71084e3768faabf363698a92b0be4c7f58c6d706ab86267870139f313ee0022100d5d93f83fdfe701b9286875c043d8820c319da8b085820dec42f511e09a0669d010c000002d20000002463633035383832662d366532362d346235372d613435302d646335303230616366346634000002a2303130313234303033303331333936353636333336323338326436323332333533303264333733303330333032643632363333343631326433303337363136333631363236343631333633343632333230323364303038326138373036663663363936333739343936346439323433303331333936353636333336323636326433343332333833333264333733303330333032643632333833323334326433353634363136363633363133323633363233303633333761373736363537323733363936663665613437363331326533303033396330303035303036343030616234343963343935663239396133356238653031646666373434343336346430333861666264373231656562613835666161663130336633626365383438626334333065396434356463396539616232666431656535323837323136653566313535326132313638633138393466393464646162656166363336333330333533383338333236363264333636353332333632643334363233353337326436313334333533303264363436333335333033323330363136333636333436363334303030303030303031343133313231313130306630653064306330623061303930383037303630353034303330323031373336346563366437393662363966353261373936373466323164373162613961353631333539346530613834333432303535383133373265353538383566353034343730303330343530323230373635653731303834653337363866616162663336333639386139326230626534633766353863366437303661623836323637383730313339663331336565303032323130306435643933663833666466653730316239323836383735633034336438383230633331396461386230383538323064656334326635313165303961303636396400000001001ca9b08b8751b75fdbb3b3ca65138a9c5de8ab50f451896d8a40041301ae1092d6ea48c33de6c961a7000000000000000f8a5e5b4a4befaea03920a18cbb6dfdf8ae1463cc3048f00da4b4b46f1591c8"
|
|
220
|
+
|
|
221
|
+
# 第一次解密:解密密钥胶囊
|
|
222
|
+
decrypt_result = decrypt_crypto.decrypt(result.result)
|
|
223
|
+
logger.info("第1次解密成功: %s", decrypt_result.result.decode("utf-8"))
|
|
224
|
+
|
|
225
|
+
# 第二次解密:同一密文,命中解密缓存
|
|
226
|
+
decrypt_result2 = decrypt_crypto.decrypt(result2.result)
|
|
227
|
+
logger.info("第2次解密成功: %s", decrypt_result2.result.decode("utf-8"))
|
|
228
|
+
|
|
229
|
+
assert plain_text.encode("utf-8") == decrypt_result.result, "Decrypted data does not match original"
|
|
230
|
+
assert plain_text2.encode("utf-8") == decrypt_result2.result, "Decrypted data from cache does not match original"
|
|
231
|
+
print("Key Capsule encryption example completed successfully!")
|
|
232
|
+
|
|
233
|
+
crypto.close()
|
|
234
|
+
decrypt_crypto.close()
|
|
235
|
+
os._exit(0)
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
if __name__ == "__main__":
|
|
239
|
+
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s - %(message)s")
|
|
240
|
+
main()
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
from huaweicloud_encryptionsdk import HuaweiCrypto, HuaweiConfig
|
|
5
|
+
from huaweicloud_encryptionsdk.model.kms_config import KMSConfig
|
|
6
|
+
from huaweicloud_encryptionsdk.model.enums.crypto_algorithm import CryptoAlgorithm
|
|
7
|
+
from huaweicloud_encryptionsdk.model.enums.keyring_type_enum import KeyringTypeEnum
|
|
8
|
+
from huaweicloud_encryptionsdk.model.request.encrypt_request import EncryptRequest
|
|
9
|
+
from huaweicloud_encryptionsdk.keyrings.kms_keyring_factory import KmsKeyringFactory
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def main():
|
|
13
|
+
if len(sys.argv) < 5:
|
|
14
|
+
print("Usage: python kms_discovery_encryption_example.py <project_id> <region> <key_id> <plain_text>")
|
|
15
|
+
sys.exit(1)
|
|
16
|
+
|
|
17
|
+
ak = os.environ.get("CLOUD_SDK_AK")
|
|
18
|
+
sk = os.environ.get("CLOUD_SDK_SK")
|
|
19
|
+
|
|
20
|
+
project_id = sys.argv[1]
|
|
21
|
+
region = sys.argv[2]
|
|
22
|
+
key_id = sys.argv[3]
|
|
23
|
+
plain_text = sys.argv[4]
|
|
24
|
+
|
|
25
|
+
kms_config_list = [KMSConfig(region=region, key_id=key_id, project_id=project_id)]
|
|
26
|
+
|
|
27
|
+
huawei_config = HuaweiConfig(
|
|
28
|
+
ak=ak,
|
|
29
|
+
sk=sk,
|
|
30
|
+
kms_config_list=kms_config_list,
|
|
31
|
+
crypto_algorithm=CryptoAlgorithm.AES_256_GCM_NOPADDING,
|
|
32
|
+
is_discovery=True,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
keyring = KmsKeyringFactory().get_keyring(KeyringTypeEnum.KMS_MULTI_REGION.type)
|
|
36
|
+
|
|
37
|
+
huawei_crypto = HuaweiCrypto(huawei_config).with_keyring(keyring)
|
|
38
|
+
|
|
39
|
+
encryption_context = {"encryption": "context", "simple": "test", "caching": "encrypt"}
|
|
40
|
+
|
|
41
|
+
result = huawei_crypto.encrypt(
|
|
42
|
+
EncryptRequest(encryption_context=encryption_context, plain_text=plain_text.encode("utf-8"))
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
huawei_config_discovery = HuaweiConfig(ak=ak, sk=sk)
|
|
46
|
+
keyring_discovery = KmsKeyringFactory().get_keyring(KeyringTypeEnum.KMS_DISCOVERY.type)
|
|
47
|
+
huawei_crypto_decrypt = HuaweiCrypto(huawei_config_discovery).with_keyring(keyring_discovery)
|
|
48
|
+
|
|
49
|
+
decrypt_result = huawei_crypto_decrypt.decrypt(result.result)
|
|
50
|
+
|
|
51
|
+
assert plain_text.encode("utf-8") == decrypt_result.result, "Decrypted data does not match original"
|
|
52
|
+
print("KMS discovery encryption example completed successfully!")
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
if __name__ == "__main__":
|
|
56
|
+
main()
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
import logging
|
|
3
|
+
import sys
|
|
4
|
+
|
|
5
|
+
from huaweicloud_encryptionsdk import HuaweiCrypto, HuaweiConfig
|
|
6
|
+
from huaweicloud_encryptionsdk.model.enums.crypto_algorithm import CryptoAlgorithm
|
|
7
|
+
from huaweicloud_encryptionsdk.model.enums.keyring_type_enum import KeyringTypeEnum
|
|
8
|
+
from huaweicloud_encryptionsdk.keyrings.raw_keyring_factory import RawKeyringFactory
|
|
9
|
+
from huaweicloud_encryptionsdk.model.request.encrypt_request import EncryptRequest
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def bytes_to_hex(data: bytes) -> str:
|
|
15
|
+
return data.hex()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def main():
|
|
19
|
+
if len(sys.argv) < 2:
|
|
20
|
+
print("Usage: python local_aes_encryption_example.py <symmetric_key_base64> [plain_text]")
|
|
21
|
+
print(" symmetric_key_base64: Base64 encoded 16-byte (AES-128) or 32-byte (AES-256) key")
|
|
22
|
+
print(" plain_text: optional, default 'Hello, AES!'")
|
|
23
|
+
sys.exit(1)
|
|
24
|
+
|
|
25
|
+
symmetric_key = sys.argv[1]
|
|
26
|
+
plain_text = sys.argv[2] if len(sys.argv) > 2 else "Hello, AES!"
|
|
27
|
+
|
|
28
|
+
key_bytes = base64.b64decode(symmetric_key.encode("utf-8"))
|
|
29
|
+
key_len = len(key_bytes)
|
|
30
|
+
if key_len == 16:
|
|
31
|
+
algorithm = CryptoAlgorithm.AES_128_GCM_NOPADDING
|
|
32
|
+
elif key_len == 32:
|
|
33
|
+
algorithm = CryptoAlgorithm.AES_256_GCM_NOPADDING
|
|
34
|
+
else:
|
|
35
|
+
print(f"Error: key length must be 16 or 32 bytes, got {key_len}")
|
|
36
|
+
sys.exit(1)
|
|
37
|
+
|
|
38
|
+
config = HuaweiConfig(crypto_algorithm=algorithm)
|
|
39
|
+
keyring = RawKeyringFactory().get_keyring(KeyringTypeEnum.RAW_AES.type)
|
|
40
|
+
keyring.set_symmetric_key([key_bytes])
|
|
41
|
+
|
|
42
|
+
crypto = HuaweiCrypto(config).with_keyring(keyring)
|
|
43
|
+
|
|
44
|
+
encrypt_request = EncryptRequest(plain_text=plain_text.encode("utf-8"))
|
|
45
|
+
logger.info("原文: %s, HEX: %s", plain_text, bytes_to_hex(plain_text.encode("utf-8")))
|
|
46
|
+
|
|
47
|
+
result = crypto.encrypt(encrypt_request)
|
|
48
|
+
logger.info("加密成功,密文HEX: %s", bytes_to_hex(result.result))
|
|
49
|
+
|
|
50
|
+
decrypt_result = crypto.decrypt(result.result)
|
|
51
|
+
logger.info("解密成功: %s, HEX: %s", decrypt_result.result.decode("utf-8"), bytes_to_hex(decrypt_result.result))
|
|
52
|
+
|
|
53
|
+
assert plain_text.encode("utf-8") == decrypt_result.result, "Decrypted data does not match original"
|
|
54
|
+
print("Local AES encryption example completed successfully!")
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
if __name__ == "__main__":
|
|
58
|
+
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s - %(message)s")
|
|
59
|
+
main()
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
import logging
|
|
3
|
+
import sys
|
|
4
|
+
|
|
5
|
+
from huaweicloud_encryptionsdk import HuaweiCrypto, HuaweiConfig
|
|
6
|
+
from huaweicloud_encryptionsdk.keyrings.raw_keyring_factory import RawKeyringFactory
|
|
7
|
+
from huaweicloud_encryptionsdk.model.enums.crypto_algorithm import CryptoAlgorithm
|
|
8
|
+
from huaweicloud_encryptionsdk.model.enums.keyring_type_enum import KeyringTypeEnum
|
|
9
|
+
from huaweicloud_encryptionsdk.model.request.encrypt_request import EncryptRequest
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
RSA_PUB = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgxDL8ovgpDITH2v5QlRAsTJ9/toepH9dwyh+Nw+6LMS6Xlyp2QLrSLzPLpW0XsNFPYb6l910e7SpDOSuaualCNb3UqlIphiZmZ3DTzIqsSqY+rTY6S65oFM/wMstZjgy5DYwuNNMrB1JOuLb5JwX9inotcHel4UFH0OnjRzPj+PTfFqv+/PIA2yFBdKVMLqn0fjKRnTxKEhM1hRz/YRTVFwUqvSRbU/bqBmd/2chtRKi5gVpyx37/HYHdZywYSIf8ckM9hGsdxigAThmrLUKud7jOFSAHAtUSIlXTOhQRNWDSiPY9FDE4tCujoUOOGJ0WVaNHGQop8NjCPIlZUmj0QIDAQAB"
|
|
14
|
+
RSA_PRI = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCDEMvyi+CkMhMfa/lCVECxMn3+2h6kf13DKH43D7osxLpeXKnZAutIvM8ulbRew0U9hvqX3XR7tKkM5K5q5qUI1vdSqUimGJmZncNPMiqxKpj6tNjpLrmgUz/Ayy1mODLkNjC400ysHUk64tvknBf2Kei1wd6XhQUfQ6eNHM+P49N8Wq/788gDbIUF0pUwuqfR+MpGdPEoSEzWFHP9hFNUXBSq9JFtT9uoGZ3/ZyG1EqLmBWnLHfv8dgd1nLBhIh/xyQz2Eax3GKABOGastQq53uM4VIAcC1RIiVdM6FBE1YNKI9j0UMTi0K6OhQ44YnRZVo0cZCinw2MI8iVlSaPRAgMBAAECggEAXg5Uvdehu1NwI7GBrBb4YfFhN93h9Zytddr+UJdJvMzlDcij3udYX9eXOtAWI5cwfkn6VbeH2yq30lfdzzt7nc9ep4RybTfkKrhrq87NklyGcgwMSbLNZX+4lat5Bg04gEtfRZPlRvKxVb/tm65lB7Plm2HoUoYUOe58NClDzvbeDHN/czJbk8EpJBi0re2czQ7NK0icS9zorhclhazssYKxBCS37cQDIgwr5+5HFIGpkZLirnB+yR+iGUelSsYLt+X+wQy+wp6ymhm0+poNOm3NbJbzmnY5b8OZJHai2k9OXVLvgA7F3IiTmZ20vG8wYkCWxX6B48jr40j/xfpMfQKBgQDam3UECjPdO4Z6asELsz93EeAVjxKUh48FQjJMOU0EYSyIGdcWDnVaiCiXq/26t0zBb7lYwNDVziD6c006UHxF7R26BGJm4pypQjTU9P4OrDd82sOn8UMi/QH/OAQNAF8KKah/o9la/EdLKS1SFtZppI1AN9/CMfm2pXXqLJ6tlwKBgQCZe/+p30P7URXggw3JtK9LXTNqIKFLDJGxjTuVhkURHNRnrHJvD46azjiG7qPzEt3pgB0+G7rGOuHLfrNBCPA8aQAMsZPAfciU1aq8Rsdab6XjL+7pvbNqlcCRsp75bM6bJ4pA3Qk86SF1zcTpvS91iEsqHvQ9bXMmV8F5ZNg21wKBgQCIIj8goOnjX2pDWa+WBa4EDFGrm0lKzZA3Ch4gcZ6Ql6MPrmfPCHn0Qs5khWqgl/1oiJa3untSaecHkD4LjouVUDAu4wQUZhKBJQWZiGed44k6a1FkiE3yv/Q6Zzu+jPiib4bK1dJJYslS+PWMJUSozRxZXXIukMidATUI+3hlSQKBgCUDt3ODKYTpWCpN0LxtO70kG+sjNWLBBD3afp0fxXZMCpl6CBrqmIyS4SUBVj6ftS7Du8mnrFJ0DtIhmx87BZy8AcwN40EP1Ji4MrW3KAqSVGJGxApQun0g4lEAz7/9UpIuZfQgmkK7QluDpVJtUo24sc/VqTdLNvLvRPR+snn/AoGAfrHketzlE6W9btyKcw7G6mf2utTdAkKaD/TFmVFCNtLc+Aw5cMlmWWhiMGP3ec0oFw9qHg1xUTdz38ThhRvThNlB/tbJbqscIfqC9+rY722GThZIl1jGCW8jR4O24lWS3jfF+B0iOdxFdTEn6bhTGtY5i4eZrqq7d44n70f3jRg="
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def main():
|
|
18
|
+
rsa_pub = base64.b64decode(RSA_PUB)
|
|
19
|
+
rsa_pri = base64.b64decode(RSA_PRI)
|
|
20
|
+
|
|
21
|
+
config = HuaweiConfig(crypto_algorithm=CryptoAlgorithm.AES_256_GCM_NOPADDING)
|
|
22
|
+
keyring = RawKeyringFactory().get_keyring(KeyringTypeEnum.RAW_RSA.type)
|
|
23
|
+
keyring.set_public_key([rsa_pub])
|
|
24
|
+
keyring.set_private_key([rsa_pri])
|
|
25
|
+
|
|
26
|
+
crypto = HuaweiCrypto(config).with_keyring(keyring)
|
|
27
|
+
|
|
28
|
+
plain_text = b"Hello, RSA!"
|
|
29
|
+
req = EncryptRequest(plain_text=plain_text)
|
|
30
|
+
result = crypto.encrypt(req)
|
|
31
|
+
logger.info("加密成功, 密文HEX: %s", result.result.hex())
|
|
32
|
+
|
|
33
|
+
decrypt_result = crypto.decrypt(result.result)
|
|
34
|
+
logger.info("解密成功: %s", decrypt_result.result.decode("utf-8"))
|
|
35
|
+
|
|
36
|
+
assert plain_text == decrypt_result.result
|
|
37
|
+
print("RSA test passed!")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
if __name__ == "__main__":
|
|
41
|
+
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s - %(message)s")
|
|
42
|
+
main()
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
from huaweicloud_encryptionsdk import HuaweiCrypto, HuaweiConfig
|
|
5
|
+
from huaweicloud_encryptionsdk.keyrings.raw_keyring_factory import RawKeyringFactory
|
|
6
|
+
from huaweicloud_encryptionsdk.model.enums.crypto_algorithm import CryptoAlgorithm
|
|
7
|
+
from huaweicloud_encryptionsdk.model.enums.keyring_type_enum import KeyringTypeEnum
|
|
8
|
+
from huaweicloud_encryptionsdk.model.request.encrypt_request import EncryptRequest
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
SM2_PRIVATE_KEY = "d7dd778833db7bca5f67a5df84497cc709f0bf1955146c8a82ab22a3d9566631"
|
|
13
|
+
SM2_PUBLIC_KEY = "da8582c7d9e6c621f9d4a56ff0b95e7544c14c37aa763ed160473ffa2c7acee333d02543c1e06eaf100fd479f98175f94021a35143aab17fff3d36e23295a45d"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def main():
|
|
17
|
+
keyring = RawKeyringFactory().get_keyring(KeyringTypeEnum.RAW_SM2.type)
|
|
18
|
+
keyring.set_public_key([bytes.fromhex(SM2_PUBLIC_KEY)])
|
|
19
|
+
keyring.set_private_key([bytes.fromhex(SM2_PRIVATE_KEY)])
|
|
20
|
+
|
|
21
|
+
config = HuaweiConfig(crypto_algorithm=CryptoAlgorithm.SM4_128_GCM_NOPADDING)
|
|
22
|
+
crypto = HuaweiCrypto(config).with_keyring(keyring)
|
|
23
|
+
|
|
24
|
+
plain_text = b"Hello, SM2!"
|
|
25
|
+
req = EncryptRequest(plain_text=plain_text)
|
|
26
|
+
result = crypto.encrypt(req)
|
|
27
|
+
logger.info("加密成功, 密文HEX: %s", result.result.hex())
|
|
28
|
+
|
|
29
|
+
decrypt_result = crypto.decrypt(result.result)
|
|
30
|
+
logger.info("解密成功: %s", decrypt_result.result.decode("utf-8"))
|
|
31
|
+
|
|
32
|
+
assert plain_text == decrypt_result.result
|
|
33
|
+
print("SM2 test passed!")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
if __name__ == "__main__":
|
|
37
|
+
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s - %(message)s")
|
|
38
|
+
main()
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
import logging
|
|
3
|
+
import sys
|
|
4
|
+
|
|
5
|
+
from huaweicloud_encryptionsdk import HuaweiCrypto, HuaweiConfig
|
|
6
|
+
from huaweicloud_encryptionsdk.keyrings.raw_keyring_factory import RawKeyringFactory
|
|
7
|
+
from huaweicloud_encryptionsdk.model.enums.crypto_algorithm import CryptoAlgorithm
|
|
8
|
+
from huaweicloud_encryptionsdk.model.enums.keyring_type_enum import KeyringTypeEnum
|
|
9
|
+
from huaweicloud_encryptionsdk.model.request.encrypt_request import EncryptRequest
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def main():
|
|
15
|
+
key_bytes = base64.b64decode("I+BmZXZEftgtsDfs5YNnUg==")
|
|
16
|
+
|
|
17
|
+
config = HuaweiConfig(crypto_algorithm=CryptoAlgorithm.SM4_128_CBC_PADDING)
|
|
18
|
+
keyring = RawKeyringFactory().get_keyring(KeyringTypeEnum.RAW_SM4_CBC.type)
|
|
19
|
+
keyring.set_symmetric_key([key_bytes])
|
|
20
|
+
|
|
21
|
+
crypto = HuaweiCrypto(config).with_keyring(keyring)
|
|
22
|
+
|
|
23
|
+
plain_text = b"Hello, SM4-CBC!"
|
|
24
|
+
req = EncryptRequest(plain_text=plain_text)
|
|
25
|
+
result = crypto.encrypt(req)
|
|
26
|
+
logger.info("加密成功, 密文HEX: %s", result.result.hex())
|
|
27
|
+
|
|
28
|
+
decrypt_result = crypto.decrypt(result.result)
|
|
29
|
+
logger.info("解密成功: %s", decrypt_result.result.decode("utf-8"))
|
|
30
|
+
|
|
31
|
+
assert plain_text == decrypt_result.result
|
|
32
|
+
print("SM4-CBC test passed!")
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
if __name__ == "__main__":
|
|
36
|
+
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s - %(message)s")
|
|
37
|
+
main()
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
import logging
|
|
3
|
+
import sys
|
|
4
|
+
|
|
5
|
+
from huaweicloud_encryptionsdk import HuaweiCrypto, HuaweiConfig
|
|
6
|
+
from huaweicloud_encryptionsdk.keyrings.raw_keyring_factory import RawKeyringFactory
|
|
7
|
+
from huaweicloud_encryptionsdk.model.enums.crypto_algorithm import CryptoAlgorithm
|
|
8
|
+
from huaweicloud_encryptionsdk.model.enums.keyring_type_enum import KeyringTypeEnum
|
|
9
|
+
from huaweicloud_encryptionsdk.model.request.encrypt_request import EncryptRequest
|
|
10
|
+
|
|
11
|
+
logger = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def main():
|
|
15
|
+
key_bytes = base64.b64decode("I+BmZXZEftgtsDfs5YNnUg==")
|
|
16
|
+
|
|
17
|
+
config = HuaweiConfig(crypto_algorithm=CryptoAlgorithm.SM4_128_GCM_NOPADDING)
|
|
18
|
+
keyring = RawKeyringFactory().get_keyring(KeyringTypeEnum.RAW_SM4_GCM.type)
|
|
19
|
+
keyring.set_symmetric_key([key_bytes])
|
|
20
|
+
|
|
21
|
+
crypto = HuaweiCrypto(config).with_keyring(keyring)
|
|
22
|
+
|
|
23
|
+
plain_text = b"Hello, SM4-GCM!"
|
|
24
|
+
req = EncryptRequest(plain_text=plain_text)
|
|
25
|
+
result = crypto.encrypt(req)
|
|
26
|
+
logger.info("加密成功, 密文HEX: %s", result.result.hex())
|
|
27
|
+
|
|
28
|
+
decrypt_result = crypto.decrypt(result.result)
|
|
29
|
+
logger.info("解密成功: %s", decrypt_result.result.decode("utf-8"))
|
|
30
|
+
|
|
31
|
+
assert plain_text == decrypt_result.result
|
|
32
|
+
print("SM4-GCM test passed!")
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
if __name__ == "__main__":
|
|
36
|
+
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s - %(message)s")
|
|
37
|
+
main()
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: huaweicloud-encryption-sdk-python
|
|
3
|
+
Version: 1.2.1
|
|
4
|
+
Summary: HuaweiCloud Encryption SDK for Python
|
|
5
|
+
License: Apache-2.0
|
|
6
|
+
Requires-Python: >=3.9
|
|
7
|
+
Requires-Dist: cryptography>=42.0.0
|
|
8
|
+
Requires-Dist: gmssl>=3.2.2
|
|
9
|
+
Requires-Dist: huaweicloudsdkkms>=3.1.190
|
|
10
|
+
Requires-Dist: huaweicloudsdkcore>=3.1.190
|
|
11
|
+
Requires-Dist: requests>=2.31.0
|
|
12
|
+
Requires-Dist: cachetools>=5.3.0
|
|
13
|
+
Provides-Extra: lts
|
|
14
|
+
Requires-Dist: loguru; extra == "lts"
|
|
15
|
+
Requires-Dist: six; extra == "lts"
|
|
16
|
+
Provides-Extra: dev
|
|
17
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
18
|
+
Requires-Dist: pytest-cov>=4.0; extra == "dev"
|