37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
"""
|
|
解包器模块 (unpacker)
|
|
模块: 服务端 / 解包器
|
|
输入: 完整密文文件
|
|
输出: 密文主体 + 加密参数
|
|
|
|
cobblestone (C2SP chunked-encryption) 密文流自带头部+分块结构,
|
|
解包退化为前置结构检查: 非空 + 头部长度合法。真正的完整性由 decrypt 块级认证保证。
|
|
"""
|
|
|
|
from pathlib import Path
|
|
|
|
from task_manager import TaskManager
|
|
|
|
# cobblestone 头部最小长度 (magic + 版本 + 随机 nonce 等)
|
|
MIN_HEADER = 32
|
|
|
|
|
|
class UnpackError(RuntimeError):
|
|
"""密文包结构异常"""
|
|
|
|
|
|
class Unpacker:
|
|
def __init__(self, tasks: TaskManager) -> None:
|
|
self.tasks = tasks
|
|
|
|
def unpack(self, transfer_id: str, merged_path: Path) -> tuple[Path, dict]:
|
|
"""验证密文包结构, 返回 (密文路径, 加密参数)"""
|
|
transfer = self.tasks.get(transfer_id)
|
|
if transfer is None:
|
|
raise UnpackError(f"任务不存在: {transfer_id}")
|
|
size = merged_path.stat().st_size
|
|
if size < MIN_HEADER:
|
|
raise UnpackError(f"密文包过短 ({size}B < {MIN_HEADER}B), 结构损坏")
|
|
enc_params = dict(transfer["enc_params"])
|
|
return merged_path, enc_params
|