糯米
This commit is contained in:
@@ -1 +1,4 @@
|
||||
.worktrees/
|
||||
master-secret.txt
|
||||
signing-private.pem
|
||||
signing-public.pem
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import base64
|
||||
import secrets
|
||||
from pathlib import Path
|
||||
|
||||
from Crypto.Cipher import AES
|
||||
from Crypto.Hash import SHA256
|
||||
from Crypto.Protocol.KDF import HKDF
|
||||
from Crypto.PublicKey import ECC
|
||||
from Crypto.Signature import eddsa
|
||||
|
||||
|
||||
def _derive_wrap_material(master_secret: bytes, kid: str, name: str, version: str) -> tuple[bytes, bytes]:
|
||||
wrap_key = HKDF(
|
||||
master=master_secret,
|
||||
key_len=32,
|
||||
salt=kid.encode("utf-8"),
|
||||
hashmod=SHA256,
|
||||
num_keys=1,
|
||||
context=f"secspider:{name}:{version}:wrap-key".encode("utf-8"),
|
||||
)
|
||||
wrap_nonce = HKDF(
|
||||
master=master_secret,
|
||||
key_len=12,
|
||||
salt=kid.encode("utf-8"),
|
||||
hashmod=SHA256,
|
||||
num_keys=1,
|
||||
context=f"secspider:{name}:{version}:wrap-nonce".encode("utf-8"),
|
||||
)
|
||||
return wrap_key, wrap_nonce
|
||||
|
||||
|
||||
def _signing_bytes(headers: dict[str, str], payload_b64: str) -> bytes:
|
||||
return "\n".join(
|
||||
[
|
||||
f"//@name:{headers['name']}",
|
||||
f"//@version:{headers['version']}",
|
||||
f"//@remark:{headers['remark']}",
|
||||
f"//@format:{headers['format']}",
|
||||
f"//@alg:{headers['alg']}",
|
||||
f"//@wrap:{headers['wrap']}",
|
||||
f"//@sign:{headers['sign']}",
|
||||
f"//@kid:{headers['kid']}",
|
||||
f"//@nonce:{headers['nonce']}",
|
||||
f"//@ek:{headers['ek']}",
|
||||
f"//@hash:{headers['hash']}",
|
||||
f"payload.base64:{payload_b64}",
|
||||
]
|
||||
).encode("utf-8")
|
||||
|
||||
|
||||
def build_secspider_package(
|
||||
*,
|
||||
source_text: str,
|
||||
name: str,
|
||||
version: str,
|
||||
remark: str,
|
||||
kid: str,
|
||||
signing_private_key,
|
||||
master_secret: bytes,
|
||||
) -> str:
|
||||
source_bytes = source_text.encode("utf-8")
|
||||
source_hash = SHA256.new(source_bytes).hexdigest()
|
||||
content_key = secrets.token_bytes(32)
|
||||
payload_nonce = secrets.token_bytes(12)
|
||||
wrap_key, wrap_nonce = _derive_wrap_material(master_secret, kid, name, version)
|
||||
|
||||
wrap_cipher = AES.new(wrap_key, AES.MODE_GCM, nonce=wrap_nonce)
|
||||
wrapped_key, wrapped_tag = wrap_cipher.encrypt_and_digest(content_key)
|
||||
|
||||
payload_cipher = AES.new(content_key, AES.MODE_GCM, nonce=payload_nonce)
|
||||
payload_ciphertext, payload_tag = payload_cipher.encrypt_and_digest(source_bytes)
|
||||
payload_b64 = base64.b64encode(payload_ciphertext + payload_tag).decode("ascii")
|
||||
|
||||
headers = {
|
||||
"name": name,
|
||||
"version": version,
|
||||
"remark": remark,
|
||||
"format": "secspider/1",
|
||||
"alg": "aes-256-gcm",
|
||||
"wrap": "hkdf-aes-keywrap",
|
||||
"sign": "ed25519",
|
||||
"kid": kid,
|
||||
"nonce": "base64:" + base64.b64encode(payload_nonce).decode("ascii"),
|
||||
"ek": "base64:" + base64.b64encode(wrapped_key + wrapped_tag).decode("ascii"),
|
||||
"hash": f"sha256:{source_hash}",
|
||||
}
|
||||
|
||||
signer = eddsa.new(signing_private_key, "rfc8032")
|
||||
headers["sig"] = "base64:" + base64.b64encode(signer.sign(_signing_bytes(headers, payload_b64))).decode("ascii")
|
||||
|
||||
return "\n".join(
|
||||
[
|
||||
"// ignore",
|
||||
f"//@name:{headers['name']}",
|
||||
f"//@version:{headers['version']}",
|
||||
f"//@remark:{headers['remark']}",
|
||||
f"//@format:{headers['format']}",
|
||||
f"//@alg:{headers['alg']}",
|
||||
f"//@wrap:{headers['wrap']}",
|
||||
f"//@sign:{headers['sign']}",
|
||||
f"//@kid:{headers['kid']}",
|
||||
f"//@nonce:{headers['nonce']}",
|
||||
f"//@ek:{headers['ek']}",
|
||||
f"//@hash:{headers['hash']}",
|
||||
f"//@sig:{headers['sig']}",
|
||||
"// ignore",
|
||||
f"payload.base64:{payload_b64}",
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
def generate_signing_keypair() -> tuple[str, str]:
|
||||
private_key = ECC.generate(curve="Ed25519")
|
||||
public_key = private_key.public_key()
|
||||
return private_key.export_key(format="PEM"), public_key.export_key(format="PEM")
|
||||
|
||||
|
||||
def load_signing_private_key(path: str | Path):
|
||||
return ECC.import_key(Path(path).read_text(encoding="utf-8"))
|
||||
|
||||
|
||||
def load_master_secret(path: str | Path) -> bytes:
|
||||
return Path(path).read_text(encoding="utf-8").strip().encode("utf-8")
|
||||
@@ -0,0 +1,65 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
|
||||
from base.secspider import (
|
||||
build_secspider_package,
|
||||
generate_signing_keypair,
|
||||
load_master_secret,
|
||||
load_signing_private_key,
|
||||
)
|
||||
|
||||
|
||||
def _cmd_genkeys(args) -> int:
|
||||
private_pem, public_pem = generate_signing_keypair()
|
||||
Path(args.private_key).write_text(private_pem, encoding="utf-8")
|
||||
Path(args.public_key).write_text(public_pem, encoding="utf-8")
|
||||
print(f"wrote {args.private_key}")
|
||||
print(f"wrote {args.public_key}")
|
||||
return 0
|
||||
|
||||
|
||||
def _cmd_pack(args) -> int:
|
||||
input_path = Path(args.input)
|
||||
output_path = Path(args.output) if args.output else Path(f"{(args.name or input_path.stem)}.txt")
|
||||
package_text = build_secspider_package(
|
||||
source_text=input_path.read_text(encoding="utf-8"),
|
||||
name=args.name or input_path.stem,
|
||||
version=args.version,
|
||||
remark=args.remark,
|
||||
kid=args.kid,
|
||||
signing_private_key=load_signing_private_key(args.private_key),
|
||||
master_secret=load_master_secret(args.master_secret_file),
|
||||
)
|
||||
output_path.write_text(package_text, encoding="utf-8")
|
||||
print(f"wrote {output_path}")
|
||||
return 0
|
||||
|
||||
|
||||
def main(argv: list[str] | None = None) -> int:
|
||||
parser = argparse.ArgumentParser(prog="secspider_tool")
|
||||
subparsers = parser.add_subparsers(dest="command", required=True)
|
||||
|
||||
genkeys = subparsers.add_parser("genkeys")
|
||||
genkeys.add_argument("--private-key", required=True)
|
||||
genkeys.add_argument("--public-key", required=True)
|
||||
genkeys.set_defaults(func=_cmd_genkeys)
|
||||
|
||||
pack = subparsers.add_parser("pack")
|
||||
pack.add_argument("--input", required=True)
|
||||
pack.add_argument("--output", default="")
|
||||
pack.add_argument("--name", default="")
|
||||
pack.add_argument("--version", default="1")
|
||||
pack.add_argument("--remark", default="")
|
||||
pack.add_argument("--kid", default="k2026_04")
|
||||
pack.add_argument("--private-key", default="signing-private.pem")
|
||||
pack.add_argument("--master-secret-file", default="master-secret.txt")
|
||||
pack.set_defaults(func=_cmd_pack)
|
||||
|
||||
args = parser.parse_args(argv)
|
||||
return args.func(args)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -0,0 +1,289 @@
|
||||
import base64
|
||||
import contextlib
|
||||
import io
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from Crypto.Cipher import AES
|
||||
from Crypto.Hash import SHA256
|
||||
from Crypto.Protocol.KDF import HKDF
|
||||
from Crypto.PublicKey import ECC
|
||||
from Crypto.Signature import eddsa
|
||||
|
||||
from base.secspider import build_secspider_package
|
||||
from secspider_tool import main as secspider_main
|
||||
|
||||
|
||||
class TestSecSpiderBuilder(unittest.TestCase):
|
||||
def test_build_package_emits_required_headers_and_payload(self):
|
||||
private_key = ECC.generate(curve="Ed25519")
|
||||
package_text = build_secspider_package(
|
||||
source_text="class Spider:\n pass\n",
|
||||
name="[直] omofun",
|
||||
version="1",
|
||||
remark="",
|
||||
kid="kid-1",
|
||||
signing_private_key=private_key,
|
||||
master_secret=b"0123456789abcdef0123456789abcdef",
|
||||
)
|
||||
|
||||
self.assertIn("//@name:[直] omofun", package_text)
|
||||
self.assertIn("//@version:1", package_text)
|
||||
self.assertIn("//@remark:", package_text)
|
||||
self.assertIn("//@format:secspider/1", package_text)
|
||||
self.assertIn("//@alg:aes-256-gcm", package_text)
|
||||
self.assertIn("//@wrap:hkdf-aes-keywrap", package_text)
|
||||
self.assertIn("//@sign:ed25519", package_text)
|
||||
self.assertIn("//@kid:kid-1", package_text)
|
||||
self.assertIn("//@nonce:base64:", package_text)
|
||||
self.assertIn("//@ek:base64:", package_text)
|
||||
self.assertIn("//@hash:sha256:", package_text)
|
||||
self.assertIn("//@sig:base64:", package_text)
|
||||
self.assertIn("payload.base64:", package_text)
|
||||
|
||||
def test_build_package_signature_verifies_over_headers_and_payload(self):
|
||||
private_key = ECC.generate(curve="Ed25519")
|
||||
package_text = build_secspider_package(
|
||||
source_text="class Spider:\n pass\n",
|
||||
name="fixture",
|
||||
version="3",
|
||||
remark="demo",
|
||||
kid="kid-sign",
|
||||
signing_private_key=private_key,
|
||||
master_secret=b"0123456789abcdef0123456789abcdef",
|
||||
)
|
||||
|
||||
headers = {}
|
||||
payload_b64 = ""
|
||||
for line in package_text.splitlines():
|
||||
if line.startswith("//@"):
|
||||
key, _, value = line[3:].partition(":")
|
||||
headers[key] = value
|
||||
elif line.startswith("payload.base64:"):
|
||||
payload_b64 = line.removeprefix("payload.base64:")
|
||||
|
||||
signing_bytes = "\n".join(
|
||||
[
|
||||
f"//@name:{headers['name']}",
|
||||
f"//@version:{headers['version']}",
|
||||
f"//@remark:{headers['remark']}",
|
||||
f"//@format:{headers['format']}",
|
||||
f"//@alg:{headers['alg']}",
|
||||
f"//@wrap:{headers['wrap']}",
|
||||
f"//@sign:{headers['sign']}",
|
||||
f"//@kid:{headers['kid']}",
|
||||
f"//@nonce:{headers['nonce']}",
|
||||
f"//@ek:{headers['ek']}",
|
||||
f"//@hash:{headers['hash']}",
|
||||
f"payload.base64:{payload_b64}",
|
||||
]
|
||||
).encode("utf-8")
|
||||
signature = base64.b64decode(headers["sig"].removeprefix("base64:"))
|
||||
|
||||
verifier = eddsa.new(private_key.public_key(), "rfc8032")
|
||||
verifier.verify(signing_bytes, signature)
|
||||
|
||||
def test_build_package_encrypts_source_and_wraps_content_key(self):
|
||||
private_key = ECC.generate(curve="Ed25519")
|
||||
master_secret = b"0123456789abcdef0123456789abcdef"
|
||||
source_text = "class Spider:\n value = 'plain'\n"
|
||||
package_text = build_secspider_package(
|
||||
source_text=source_text,
|
||||
name="fixture",
|
||||
version="5",
|
||||
remark="",
|
||||
kid="kid-wrap",
|
||||
signing_private_key=private_key,
|
||||
master_secret=master_secret,
|
||||
)
|
||||
|
||||
self.assertNotIn(source_text, package_text)
|
||||
headers = {}
|
||||
payload_b64 = ""
|
||||
for line in package_text.splitlines():
|
||||
if line.startswith("//@"):
|
||||
key, _, value = line[3:].partition(":")
|
||||
headers[key] = value
|
||||
elif line.startswith("payload.base64:"):
|
||||
payload_b64 = line.removeprefix("payload.base64:")
|
||||
|
||||
wrap_key = HKDF(
|
||||
master=master_secret,
|
||||
key_len=32,
|
||||
salt=headers["kid"].encode("utf-8"),
|
||||
hashmod=SHA256,
|
||||
num_keys=1,
|
||||
context=f"secspider:{headers['name']}:{headers['version']}:wrap-key".encode("utf-8"),
|
||||
)
|
||||
wrap_nonce = HKDF(
|
||||
master=master_secret,
|
||||
key_len=12,
|
||||
salt=headers["kid"].encode("utf-8"),
|
||||
hashmod=SHA256,
|
||||
num_keys=1,
|
||||
context=f"secspider:{headers['name']}:{headers['version']}:wrap-nonce".encode("utf-8"),
|
||||
)
|
||||
wrap_blob = base64.b64decode(headers["ek"].removeprefix("base64:"))
|
||||
wrap_cipher = AES.new(wrap_key, AES.MODE_GCM, nonce=wrap_nonce)
|
||||
content_key = wrap_cipher.decrypt_and_verify(wrap_blob[:-16], wrap_blob[-16:])
|
||||
|
||||
payload_blob = base64.b64decode(payload_b64)
|
||||
payload_nonce = base64.b64decode(headers["nonce"].removeprefix("base64:"))
|
||||
payload_cipher = AES.new(content_key, AES.MODE_GCM, nonce=payload_nonce)
|
||||
decrypted = payload_cipher.decrypt_and_verify(payload_blob[:-16], payload_blob[-16:]).decode("utf-8")
|
||||
|
||||
self.assertEqual(decrypted, source_text)
|
||||
|
||||
|
||||
class TestSecSpiderCli(unittest.TestCase):
|
||||
def test_genkeys_writes_private_and_public_key_files(self):
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
temp_path = Path(temp_dir)
|
||||
private_path = temp_path / "signing-private.pem"
|
||||
public_path = temp_path / "signing-public.pem"
|
||||
stdout = io.StringIO()
|
||||
|
||||
with contextlib.redirect_stdout(stdout):
|
||||
exit_code = secspider_main(
|
||||
[
|
||||
"genkeys",
|
||||
"--private-key",
|
||||
str(private_path),
|
||||
"--public-key",
|
||||
str(public_path),
|
||||
]
|
||||
)
|
||||
|
||||
self.assertEqual(exit_code, 0)
|
||||
self.assertTrue(private_path.is_file())
|
||||
self.assertTrue(public_path.is_file())
|
||||
self.assertIn("wrote", stdout.getvalue())
|
||||
|
||||
def test_pack_builds_secspider_file_from_source_and_key_files(self):
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
temp_path = Path(temp_dir)
|
||||
private_path = temp_path / "signing-private.pem"
|
||||
public_path = temp_path / "signing-public.pem"
|
||||
secret_path = temp_path / "master-secret.txt"
|
||||
source_path = temp_path / "fixture.py"
|
||||
output_path = temp_path / "fixture.sec.py"
|
||||
|
||||
secspider_main(
|
||||
[
|
||||
"genkeys",
|
||||
"--private-key",
|
||||
str(private_path),
|
||||
"--public-key",
|
||||
str(public_path),
|
||||
]
|
||||
)
|
||||
secret_path.write_text("0123456789abcdef0123456789abcdef", encoding="utf-8")
|
||||
source_path.write_text("class Spider:\n pass\n", encoding="utf-8")
|
||||
|
||||
exit_code = secspider_main(
|
||||
[
|
||||
"pack",
|
||||
"--input",
|
||||
str(source_path),
|
||||
"--output",
|
||||
str(output_path),
|
||||
"--name",
|
||||
"fixture",
|
||||
"--version",
|
||||
"9",
|
||||
"--remark",
|
||||
"",
|
||||
"--kid",
|
||||
"kid-cli",
|
||||
"--private-key",
|
||||
str(private_path),
|
||||
"--master-secret-file",
|
||||
str(secret_path),
|
||||
]
|
||||
)
|
||||
|
||||
self.assertEqual(exit_code, 0)
|
||||
package_text = output_path.read_text(encoding="utf-8")
|
||||
self.assertIn("//@name:fixture", package_text)
|
||||
self.assertIn("//@version:9", package_text)
|
||||
self.assertIn("//@kid:kid-cli", package_text)
|
||||
self.assertIn("payload.base64:", package_text)
|
||||
|
||||
def test_pack_uses_default_name_version_and_secret_file_paths(self):
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
temp_path = Path(temp_dir)
|
||||
source_path = temp_path / "红果短剧.py"
|
||||
output_path = temp_path / "红果短剧.sec.py"
|
||||
private_path = temp_path / "signing-private.pem"
|
||||
public_path = temp_path / "signing-public.pem"
|
||||
secret_path = temp_path / "master-secret.txt"
|
||||
|
||||
secspider_main(
|
||||
[
|
||||
"genkeys",
|
||||
"--private-key",
|
||||
str(private_path),
|
||||
"--public-key",
|
||||
str(public_path),
|
||||
]
|
||||
)
|
||||
secret_path.write_text("0123456789abcdef0123456789abcdef", encoding="utf-8")
|
||||
source_path.write_text("class Spider:\n pass\n", encoding="utf-8")
|
||||
|
||||
with contextlib.chdir(temp_path):
|
||||
exit_code = secspider_main(
|
||||
[
|
||||
"pack",
|
||||
"--input",
|
||||
str(source_path),
|
||||
"--output",
|
||||
str(output_path),
|
||||
]
|
||||
)
|
||||
|
||||
self.assertEqual(exit_code, 0)
|
||||
package_text = output_path.read_text(encoding="utf-8")
|
||||
self.assertIn("//@name:红果短剧", package_text)
|
||||
self.assertIn("//@version:1", package_text)
|
||||
self.assertIn("//@remark:", package_text)
|
||||
self.assertIn("//@kid:k2026_04", package_text)
|
||||
|
||||
def test_pack_uses_default_output_name_txt_suffix(self):
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
temp_path = Path(temp_dir)
|
||||
source_path = temp_path / "默认命名.py"
|
||||
private_path = temp_path / "signing-private.pem"
|
||||
public_path = temp_path / "signing-public.pem"
|
||||
secret_path = temp_path / "master-secret.txt"
|
||||
|
||||
secspider_main(
|
||||
[
|
||||
"genkeys",
|
||||
"--private-key",
|
||||
str(private_path),
|
||||
"--public-key",
|
||||
str(public_path),
|
||||
]
|
||||
)
|
||||
secret_path.write_text("0123456789abcdef0123456789abcdef", encoding="utf-8")
|
||||
source_path.write_text("class Spider:\n pass\n", encoding="utf-8")
|
||||
|
||||
with contextlib.chdir(temp_path):
|
||||
exit_code = secspider_main(
|
||||
[
|
||||
"pack",
|
||||
"--input",
|
||||
str(source_path),
|
||||
]
|
||||
)
|
||||
|
||||
self.assertEqual(exit_code, 0)
|
||||
output_path = temp_path / "默认命名.txt"
|
||||
self.assertTrue(output_path.is_file())
|
||||
package_text = output_path.read_text(encoding="utf-8")
|
||||
self.assertIn("//@name:默认命名", package_text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -0,0 +1,15 @@
|
||||
// ignore
|
||||
//@name:糯米
|
||||
//@version:1
|
||||
//@remark:
|
||||
//@format:secspider/1
|
||||
//@alg:aes-256-gcm
|
||||
//@wrap:hkdf-aes-keywrap
|
||||
//@sign:ed25519
|
||||
//@kid:k2026_04
|
||||
//@nonce:base64:hzBm7QdbnK+EqGUD
|
||||
//@ek:base64:O9iDm3xV3yddHCBtv8rd89/8Y97TQeI0pkLKmvy9wIU6wINH7dLsn9aGqd2/gLeW
|
||||
//@hash:sha256:7e2713aa38367b4f34efec0f9aa70282c472ac27691552b20f890ef52f0a1612
|
||||
//@sig:base64:fXPI0kmnDp3Qp6G0h7xj2bNHqe05Md9RUBAgJ16CLZcUT3Pz7iVfbzpZXEb0Uwyp4hIOnKG86keNOPwlntl/Dw==
|
||||
// ignore
|
||||
payload.base64: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
|
||||
Reference in New Issue
Block a user