61 行
2.9 KiB
Swift
61 行
2.9 KiB
Swift
// swift-tools-version: 5.9
|
||
// KyberSDK — CRYSTALS-Kyber(ML-KEM)后量子密钥封装机制 Swift Package
|
||
//
|
||
// 包结构:
|
||
// CKyber — C 实现层,单 target 内编译 Kyber512 / 768 / 1024 三种变体
|
||
// KyberSDK — Swift 封装层,提供面向 Swift 的类型安全 API
|
||
//
|
||
// 多变体编译方案(".inc 翻译单元技巧"):
|
||
// kyber512/768/1024.c 各为独立翻译单元,每个文件先 #define KYBER_K,
|
||
// 再 #include internal/*.inc(原始 .c 文件的内容副本)。
|
||
// 由此,KYBER_NAMESPACE 宏在三个翻译单元中分别展开为不同符号名,
|
||
// 实现三种变体共存于同一静态库,链接器对公共符号(fips202)自动去重。
|
||
//
|
||
// 支持平台:iOS 14+ / macOS 11+
|
||
// 支持架构:arm64(真机)/ arm64-simulator(Apple Silicon 模拟器)/ x86_64-simulator
|
||
|
||
import PackageDescription
|
||
|
||
let package = Package(
|
||
name: "KyberSDK",
|
||
platforms: [
|
||
.iOS(.v14),
|
||
.macOS(.v11),
|
||
],
|
||
products: [
|
||
// 对外暴露 KyberSDK 库(包含 Swift 封装和 C 实现)
|
||
.library(name: "KyberSDK", targets: ["KyberSDK"]),
|
||
],
|
||
targets: [
|
||
// ── C 实现目标 ────────────────────────────────────────────────────
|
||
// internal/ 目录中的 .inc 文件不直接编译(由 kyber512/768/1024.c 包含),
|
||
// 需通过 exclude 将其排除出自动源码发现范围。
|
||
.target(
|
||
name: "CKyber",
|
||
path: "Sources/CKyber",
|
||
exclude: ["internal"], // .inc 文件不直接编译
|
||
publicHeadersPath: "include", // 对外暴露的头文件目录
|
||
cSettings: [
|
||
.headerSearchPath("include"), // 使 #include "xxx.h" 能找到 include/ 中的头文件
|
||
.headerSearchPath("."), // 使同级目录下的文件可相互引用
|
||
.unsafeFlags(["-O2", "-fomit-frame-pointer"]), // 编译优化
|
||
]
|
||
),
|
||
|
||
// ── Swift 封装目标 ────────────────────────────────────────────────
|
||
// 依赖 CKyber,通过 @_silgen_name / 直接调用 C 函数与底层交互
|
||
.target(
|
||
name: "KyberSDK",
|
||
dependencies: ["CKyber"],
|
||
path: "Sources/KyberSDK"
|
||
),
|
||
|
||
// ── 单元测试目标 ─────────────────────────────────────────────────
|
||
// 覆盖:三种变体 KEM 全流程、密钥尺寸验证、错误密钥测试、输入校验
|
||
.testTarget(
|
||
name: "KyberSDKTests",
|
||
dependencies: ["KyberSDK"],
|
||
path: "Tests/KyberSDKTests"
|
||
),
|
||
]
|
||
) |