clang: Mbed TLSとPSA (2)
2025/02/17
はじめに
Mbed TLS の PSA crypto API でハッシュ計算をする。
1回で計算
Mbed TLS も PSA crypto API も 1回だけハッシュ計算する関数がある。
PSA は引数にアルゴリズムを採るタイプだ。
Mbed TLS は SHA256 などのアルゴリズム名を含めた関数を使ったが、引数にアルゴリズムを採る mbedtls_md() もある。
内部では引数のアルゴリズムで分岐してそれぞれの関数を呼び出すようにしてるんじゃないかな(コードは見てない)。
だとしたら API名にアルゴリズムが付いている方がちょっとだけ負荷が軽いかもしれない。
ただ暗号計算できるくらいの CPU を使ってるなら誤差のようなものか。
updateで計算
setup(starts) - update - finish の順番で計算する関数もある。
何度も update があるならこちらを使うだろう。
psa_hash_operation_t
の変数は PSA_HASH_OPERATION_INIT
などで初期化するのを忘れないようにしよう。
エラーにはならなかったのだが valgrind
が psa_hash_setup()
で未初期化といってきたので、setup より前に初期化がいるタイプのようだ。
少々のデータだったら自分で連結して 1回だけ呼び出した方が楽なのだが、少々というのがどのくらいなものか。 RAM の方が制約が厳しい環境もあるので判断が難しいな。
Mbed TLS 以外の PSA crypto API
wolfSSL も APIはある のだが psa_crypto_init()
みたいなものではない。
サンプルコードのREADME には “Using MbedTLS PSA implementation” などとあったので、他の PSA ライブラリと一緒に使うということなのかもしれない。
Certifiedなプロダクト に出てくるのは IoTex と Oberon microsystems の 2つ。
IoTeX には図があるのだが、その中に Mbed TLS が出てきている。
うーん、なんだかよくわからないな。
Mbed TLS が PSA crypto API をサポートする前はラッピングして使っていたのかもしれない。
おわりに
libwally-core の Mbed TLS 版を PSA crypto API に置き換えようと意気込んでみたのだが、
Mbed TLS 以外で PSA crypto API に対応しているものが簡単に見つからない。
となると現状でもあまり困らないのだ。
SHA256 や SHA512 の置き換えもそんなに難しいものではなさそうだし、まだいいかなという気持ちになった。