kyber-sdk-ios/Sources/KyberSDK/KyberTypes.swift
2026-05-06 22:28:00 +08:00

148 行
4.9 KiB
Swift

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

import Foundation
// MARK: - KyberVariant
/**
* Kyber KEM
*
* CRYSTALS-KyberML-KEMNIST FIPS 203
* /
*
* | | KYBER_K | NIST | |
* |-------------|---------|----------|-----------|
* | `.kyber512` | 2 | Level 1 | ~AES-128 |
* | `.kyber768` | 3 | Level 3 | ~AES-192 |
* | `.kyber1024` | 4 | Level 5 | ~AES-256 |
*
* `.kyber768`
* /
*/
public enum KyberVariant: CaseIterable {
/// Kyber512NIST 1
case kyber512
/// Kyber768NIST 3
case kyber768
/// Kyber1024NIST 5
case kyber1024
///
public var publicKeyBytes: Int {
switch self {
case .kyber512: return 800
case .kyber768: return 1184
case .kyber1024: return 1568
}
}
/// H(pk)
public var secretKeyBytes: Int {
switch self {
case .kyber512: return 1632
case .kyber768: return 2400
case .kyber1024: return 3168
}
}
///
public var ciphertextBytes: Int {
switch self {
case .kyber512: return 768
case .kyber768: return 1088
case .kyber1024: return 1568
}
}
/// 32
public var sharedSecretBytes: Int { 32 }
///
public var displayName: String {
switch self {
case .kyber512: return "Kyber512NIST Level 1"
case .kyber768: return "Kyber768NIST Level 3"
case .kyber1024: return "Kyber1024NIST Level 5"
}
}
}
// MARK: - KyberKeyPair
/**
* Kyber `KyberKEM.generateKeyPair`
*
* - `publicKey`使
* - `secretKey`
*/
public struct KyberKeyPair {
///
public let publicKey: Data
/// 使 iOS Keychain
public let secretKey: Data
public init(publicKey: Data, secretKey: Data) {
self.publicKey = publicKey
self.secretKey = secretKey
}
}
// MARK: - KyberEncapsulationResult
/**
* Kyber `KyberKEM.encapsulate`
*
* /
* - `ciphertext`
* - `sharedSecret` 32
* AES-GCM / ChaCha20-Poly1305
*/
public struct KyberEncapsulationResult {
///
public let ciphertext: Data
/// 32
public let sharedSecret: Data
public init(ciphertext: Data, sharedSecret: Data) {
self.ciphertext = ciphertext
self.sharedSecret = sharedSecret
}
}
// MARK: - KyberError
/**
* Kyber SDK
*
* C
* `*Failed` C
*/
public enum KyberError: Error, LocalizedError {
/// C
case keyGenerationFailed(code: Int32)
/// C
case encapsulationFailed(code: Int32)
/// C
case decapsulationFailed(code: Int32)
///
case invalidPublicKeySize(expected: Int, got: Int)
///
case invalidSecretKeySize(expected: Int, got: Int)
///
case invalidCiphertextSize(expected: Int, got: Int)
public var errorDescription: String? {
switch self {
case .keyGenerationFailed(let c):
return "密钥生成失败(返回码:\(c)"
case .encapsulationFailed(let c):
return "封装失败(返回码:\(c)"
case .decapsulationFailed(let c):
return "解封装失败(返回码:\(c)"
case .invalidPublicKeySize(let e, let g):
return "公钥长度不匹配:期望 \(e) 字节,实际 \(g) 字节"
case .invalidSecretKeySize(let e, let g):
return "私钥长度不匹配:期望 \(e) 字节,实际 \(g) 字节"
case .invalidCiphertextSize(let e, let g):
return "密文长度不匹配:期望 \(e) 字节,实际 \(g) 字节"
}
}
}