79 lines
3.0 KiB
Python
79 lines
3.0 KiB
Python
import unittest
|
|
import sys
|
|
import os
|
|
|
|
# 确保可以导入上级目录的 core 包
|
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
from core.sp_trust_sharding import SentinelKeyEngine
|
|
from core.sp_vault_aes import SentinelVault
|
|
from core.sp_gateway_rsa import SentinelSystemProvider
|
|
|
|
class TestSentinelCore(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.key_engine = SentinelKeyEngine()
|
|
self.vault = SentinelVault()
|
|
self.sys_provider = SentinelSystemProvider()
|
|
|
|
def test_01_sharding_recovery(self):
|
|
"""测试 SSS 密钥分片与恢复 (3选2)"""
|
|
print("\n[Test] Running Sharding & Recovery...")
|
|
|
|
# 1. 生成
|
|
words, entropy = self.key_engine.generate_vault_keys()
|
|
self.assertEqual(len(words.split()), 12, "助记词应为12个单词")
|
|
|
|
# 2. 分片
|
|
shares = self.key_engine.split_to_shares(entropy)
|
|
self.assertEqual(len(shares), 3, "应生成3个分片")
|
|
|
|
# 3. 验证所有组合 (3选2)
|
|
# 组合 A+B
|
|
rec_ab = self.key_engine.recover_from_shares(shares[0], shares[1])
|
|
self.assertEqual(rec_ab, words, "分片 A+B 恢复失败")
|
|
|
|
# 组合 B+C
|
|
rec_bc = self.key_engine.recover_from_shares(shares[1], shares[2])
|
|
self.assertEqual(rec_bc, words, "分片 B+C 恢复失败")
|
|
|
|
# 组合 A+C
|
|
rec_ac = self.key_engine.recover_from_shares(shares[0], shares[2])
|
|
self.assertEqual(rec_ac, words, "分片 A+C 恢复失败")
|
|
|
|
def test_02_vault_encryption(self):
|
|
"""测试 AES 金库加密与解密"""
|
|
print("[Test] Running AES Vault...")
|
|
words = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
|
|
key = self.vault.derive_key(words)
|
|
data = "Sentinel Top Secret Data"
|
|
|
|
# 加密
|
|
encrypted = self.vault.encrypt_data(key, data)
|
|
self.assertNotEqual(encrypted, data.encode(), "密文不应与明文相同")
|
|
|
|
# 解密
|
|
decrypted = self.vault.decrypt_data(key, encrypted)
|
|
self.assertEqual(decrypted, data, "解密后数据应与原始数据一致")
|
|
|
|
# 错误密钥测试
|
|
wrong_key = self.vault.derive_key("zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo")
|
|
result = self.vault.decrypt_data(wrong_key, encrypted)
|
|
self.assertIn("解密失败", result, "使用错误密钥应返回失败信息")
|
|
|
|
def test_03_gateway_rsa(self):
|
|
"""测试 RSA 系统网关加壳流程"""
|
|
print("[Test] Running RSA Gateway...")
|
|
priv_pem, pub_pem = self.sys_provider.generate_system_keys()
|
|
payload = b"User Encrypted Blob Data"
|
|
|
|
# 加密
|
|
cipher = self.sys_provider.encrypt_with_system_public(pub_pem, payload)
|
|
self.assertNotEqual(cipher, payload)
|
|
|
|
# 解密
|
|
restored = self.sys_provider.decrypt_with_system_private(priv_pem, cipher)
|
|
self.assertEqual(restored, payload, "RSA 解密还原失败")
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main() |