来自标准输入的 X25519 公钥加密

问题描述

我想将从标准输入接收到的 C/C++ Linux 程序数据加密为 Curve25519 公钥(32 字节)。

cat file.bin | ./my-program 693c989d221e8367df764f23b97a348746a655126f0d0b037aaa8d9e3b73515e > file.bin.enc

由于无法直接使用 Cureve25519 公钥进行加密,我的想法是生成一个临时的 Curve25519 密钥并执行 ECDH 密钥生成。然后将使用此对称密钥执行 stdin 到 stdout 的加密。在这里我可以使用 AES-128-CBC。 我实际上更喜欢 XChaCha20poly1305。 由于数据不可用,我需要一个像通常的散列算法一样支持数据更新的 API。例如:

stream_init(&state,nonce,key);
stream_update(&state,plaintext,plaintext_len,ciphertext,&ciphertext_len); /* repeated calls*/
stream_final(&state,&ciphertext_len);

我查看了 libsodium、Crypto++、OpenSSL 和 GnuTLS 的 API/代码。但我找不到解决办法。还有一个问题是 nonce/IV 固定为 192 位(=12 字节),将输出限制为 ~256 GiB。

有谁知道是否有一个支持 XChaCha20poly1305,它只有 8 个字节的随机数和使用“更新”API 的任意输入长度?

(为了能够解密流,生成的公钥将在输出到 stdout 的开头)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)