假设我使用 openssl 创建了一个 x25519 密钥对,它将输出一个 64 字节的私钥和相应的 44 字节 Base64 编码的公钥,看起来像
-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VuBCIEIMBF8S7zUco4bRrMiIuyTcSYU/rAVlNtE8SMYWphUatw
-----END PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VuAyEAE0eiiP0PKjy9AVM/0z2ZIZn453WSJNemrQ58HAXDaX0=
-----END PUBLIC KEY-----
Swift CryptoKit 只接受 32 字节的私钥和公钥初始化。
如果我理解正确的话,64 字节的私钥是种子,前 32 字节是实际的私钥。
尽管如此,对公钥使用相同的原则还是行不通(这并不奇怪)
现在的问题是:如何将公钥转换为 Swift CryptoKit 所需的 32 字节?
这是使用 base64 解码公钥的前 32 个字节的非功能示例
let base64PublicKey = Data(base64Encoded: "MCowBQYDK2VuAyEAE0eiiP0PKjy9AVM/0z2ZIZn453WSJNemrQ58HAXDaX0=")!.dropLast(12)
let publicKey = try! Curve25519.KeyAgreement.PublicKey(rawRepresentation: rawPublicKey)