一度にいくつかのデータを (解読) する必要があります。ターゲット データ バイトの最初と最後に追加のパディング バイトを追加する必要がある場合があります。struct scatterlist
ブロック暗号の暗号化メソッドの定義でわかるように、組み込みの crypto API はオブジェクトに対して機能します。
int (*encrypt)(struct blkcipher_desc *desc, struct scatterlist *dst,
struct scatterlist *src, unsigned int nbytes);
今、暗号化操作のために私が従っている手順:
- データ バッファbufを取得します(長さL )
- 左パディングと右パディングのバイトを計算します ( rpadとlpad )
- 全体を暗号化する ( lpadとbufとrpad )
- 結果のパディング バイトを取り除く
最も単純で効率の悪い解決策は、L + rpad + lpadバイトを割り当て、バッファの内容をこの新しい領域に適切にコピーすることです。しかし、API はこれらのscatterlist
オブジェクトを使用するため、この純粋なリソースの浪費を回避する方法があるかどうか疑問に思っていました。
チェーンに関する LWN の記事をいくつか読みましたscatterlist
が、ヘッダー ファイルをざっと見ただけで心配になります。全体を手動で設定する必要があるようです。これはかなり悪い習慣です ...
scatterlist
API を適切に使用する方法についての手がかりはありますか? 理想的には、私は次のことをしたいと思います:
- 入力と出力の両方のパディング バイトにバッファを割り当てます。
- 「有用な」暗号化されたバイトのみを格納する「ペイロード」バッファを割り当てます
scatterlist
パディング バッファーとターゲット バッファーを含むオブジェクトを作成します。- 全体を暗号化し、結果を出力パディング バッファ + 出力「ペイロード」バッファに格納します
- 入力および出力パディング バッファを破棄する
- 暗号化された「ペイロード」バッファをユーザーに返します