hiro99ma blog

何か技術的なこと

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 などで初期化するのを忘れないようにしよう。 エラーにはならなかったのだが valgrindpsa_hash_setup() で未初期化といってきたので、setup より前に初期化がいるタイプのようだ。

少々のデータだったら自分で連結して 1回だけ呼び出した方が楽なのだが、少々というのがどのくらいなものか。 RAM の方が制約が厳しい環境もあるので判断が難しいな。

Mbed TLS 以外の PSA crypto API

wolfSSL も APIはある のだが psa_crypto_init() みたいなものではない。
サンプルコードのREADME には “Using MbedTLS PSA implementation” などとあったので、他の PSA ライブラリと一緒に使うということなのかもしれない。

Certifiedなプロダクト に出てくるのは IoTexOberon microsystems の 2つ。
IoTeX には図があるのだが、その中に Mbed TLS が出てきている。
うーん、なんだかよくわからないな。 Mbed TLS が PSA crypto API をサポートする前はラッピングして使っていたのかもしれない。

おわりに

libwally-core の Mbed TLS 版を PSA crypto API に置き換えようと意気込んでみたのだが、 Mbed TLS 以外で PSA crypto API に対応しているものが簡単に見つからない。
となると現状でもあまり困らないのだ。
SHA256SHA512 の置き換えもそんなに難しいものではなさそうだし、まだいいかなという気持ちになった。

< Top page