私は小さなプロジェクトにIpsecパイプラインを実装しています。このプロジェクトでは、ネットワークからの着信パケットをIpヘッダー以降で暗号化することになっています(IPSECのトンネルモード)。
私の質問は、のDES_ncbc_encrypt()
apiをopenssl
使用してペイロード全体を一度に暗号化できるか、または一度に64ビットの入力で毎回上記のapiを呼び出すことになっていますか?
私は小さなプロジェクトにIpsecパイプラインを実装しています。このプロジェクトでは、ネットワークからの着信パケットをIpヘッダー以降で暗号化することになっています(IPSECのトンネルモード)。
私の質問は、のDES_ncbc_encrypt()
apiをopenssl
使用してペイロード全体を一度に暗号化できるか、または一度に64ビットの入力で毎回上記のapiを呼び出すことになっていますか?
ソース コードの forDES_ncbc_encrypt()
は、指定した長さから逆方向にループし、8 バイトのブロックを独自に暗号化します。1 回の呼び出しですべてを暗号化する必要があります。
OpenSSL の des の ncbc_enc.c から:
for (l-=8; l>=0; l-=8)
{
c2l(in,tin0);
c2l(in,tin1);
tin0^=tout0; tin[0]=tin0;
tin1^=tout1; tin[1]=tin1;
DES_encrypt1((DES_LONG *)tin,_schedule,DES_ENCRYPT);
tout0=tin[0]; l2c(tout0,out);
tout1=tin[1]; l2c(tout1,out);
}
if (l != -8)
{
c2ln(in,tin0,tin1,l+8);
tin0^=tout0; tin[0]=tin0;
tin1^=tout1; tin[1]=tin1;
DES_encrypt1((DES_LONG *)tin,_schedule,DES_ENCRYPT);
tout0=tin[0]; l2c(tout0,out);
tout1=tin[1]; l2c(tout1,out);
}
いくつかのコードを表示できますか? どのようなエラーが発生していますか?
OpenSSL の暗号化/復号化関数のほとんどは、より高いレベルの EVP ルーチンの使用を推奨しています - 試してみましたか? こちらの EVP ドキュメントを参照してください。