「arc4」アルゴリズムを使用して、モジュールからの任意のデータ ストリームを暗号化しようとしています。しかし、私はそれにどのようにアプローチすればよいかについて少し無知です.実装は<crypto/arc4.c>
$find . -type f -name '*.[ch]' -exec grep 'EXPORT_SYMBOL' {} \; | grep
'rc4'
何も返しませんでした。だから私はへの外部インターフェースがないと思います
static void arc4_crypt(struct crypto_tfm *tfm, u8 *out, const u8 *in).
レジスタ関数は次のように定義されます。
static int __init arc4_init(void)
{
return crypto_register_alg(&arc4_alg);
}
の静的インスタンスがありstruct crypto_alg
ます。
これらのヒントから、このアルゴリズムにアクセスするには、より高いレベルのインターフェイスが必要であるという結論に達しました。
私の場合に関連すると思われる唯一の機能は次のとおりです。
EXPORT_SYMBOL_GPL(crypto_alloc_tfm);
から<crypto/api.c>
:
void *crypto_alloc_tfm(const char *alg_name,
const struct crypto_type *frontend, u32 type, u32 mask)
それvoid *
は私の最初の関心事です。
そしてまたから<crypt/api.c>
crypto_alloc_tfm() は、最初に、すでにロードされているアルゴリズムを見つけようとします。それが失敗し、カーネルが動的にロード可能なモジュールをサポートしている場合、同じ名前またはエイリアスのモジュールをロードしようとします。それが失敗した場合、ロードされた暗号マネージャーにクエリを送信して、その場でアルゴリズムを構築します。アルゴリズムで参照カウントが取得され、それが新しい変換に関連付けられます。
返された変換は非確定型です。ほとんどの人は、crypto_alloc_blkcipher などのより具体的な割り当て関数のいずれかを使用する必要があります。
しかし、arc4
アルゴリズムcrypto_alloc_*
を提供する特定のものは見つかりませんでした。
2 番目の懸念:
struct crypto_type
手でインスタンス化するのは恐ろしく見えます。
最後に、tfm
インスタンスを取得した場合、それを使用して実際の暗号化を行うにはどうすればよいですか?