// 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" ), ] )