porter/libsrc/porter/infra/crypto/crypto_linux.c
ファイル
porter/libsrc/porter/infra/crypto/crypto_linux.c
Linux 向け暗号化・復号モジュール (OpenSSL AES-256-GCM)。
OpenSSL の EVP インターフェースを使用して AES-256-GCM 暗号化・復号を実装します。
Windows 実装 (BCrypt) と同一の wire フォーマット ([暗号文][GCM タグ 16B]) を使用するため、 クロスプラットフォーム通信に対応します。
本ファイルは Linux ビルドでのみコンパイルされます (_WIN32 未定義時)。
作者
c-modernization-kit sample team
バージョン
1.0.0
日付
2026/03/12
インクルード元
crypto_linux.c のインクルード元
著作権
Copyright (C) CompanyName, Ltd. 2026. All rights reserved.
関数
potr_encrypt
int potr_encrypt ( uint8_t *dst, size_t *dst_len, const uint8_t *src, size_t src_len, const uint8_t *key, const uint8_t *nonce, const uint8_t *aad, size_t aad_len )
AES-256-GCM でデータを暗号化します。
引数
- dst [out] 暗号化後データを格納するバッファ。
内容: [暗号文: src_len バイト][GCM タグ: POTR_CRYPTO_TAG_SIZE バイト]
dst == src の in-place 暗号化も可能。
- dst_len [in,out] 入力: dst のバッファサイズ (>= src_len + POTR_CRYPTO_TAG_SIZE)。
出力: 書き込んだバイト数 (= src_len + POTR_CRYPTO_TAG_SIZE)。
- src [in] 平文データへのポインタ。
- src_len [in] 平文データのバイト数。
- key [in] AES-256 鍵 (POTR_CRYPTO_KEY_SIZE バイト)。
- nonce [in] ノンス (POTR_CRYPTO_NONCE_SIZE バイト)。
- aad [in] 追加認証データへのポインタ。NULL の場合は AAD なし。
- aad_len [in] AAD のバイト数。
戻り値
成功時は 0、失敗時は -1 を返します。
呼び出し元
potr_encrypt の呼び出し元
potr_decrypt
int potr_decrypt ( uint8_t *dst, size_t *dst_len, const uint8_t *src, size_t src_len, const uint8_t *key, const uint8_t *nonce, const uint8_t *aad, size_t aad_len )
AES-256-GCM でデータを復号し、認証タグを検証します。
引数
- dst [out] 復号後データを格納するバッファ。
- dst_len [in,out] 入力: dst のバッファサイズ (>= src_len - POTR_CRYPTO_TAG_SIZE)。
出力: 書き込んだバイト数 (= src_len - POTR_CRYPTO_TAG_SIZE)。
- src [in] 暗号化データへのポインタ。
内容: [暗号文: src_len - POTR_CRYPTO_TAG_SIZE バイト][GCM タグ: POTR_CRYPTO_TAG_SIZE バイト]
- src_len [in] 暗号化データのバイト数 (タグを含む)。>= POTR_CRYPTO_TAG_SIZE。
- key [in] AES-256 鍵 (POTR_CRYPTO_KEY_SIZE バイト)。
- nonce [in] ノンス (POTR_CRYPTO_NONCE_SIZE バイト)。
- aad [in] 追加認証データへのポインタ。NULL の場合は AAD なし。
- aad_len [in] AAD のバイト数。
戻り値
成功 (認証タグ検証 OK) 時は 0、失敗 (認証タグ不一致含む) 時は -1 を返します。
呼び出し元
potr_decrypt の呼び出し元
potr_passphrase_to_key
int potr_passphrase_to_key ( uint8_t *key, const uint8_t *passphrase, size_t passphrase_len )
任意のパスフレーズを SHA-256 ハッシュにより AES-256 鍵に変換します。
設定ファイルの encrypt_key に 64 文字 hex 以外の文字列が指定された場合に使用します。
入力バイト列の SHA-256 ダイジェストをそのまま鍵として使用します。
送受信の双方で同一のパスフレーズを指定すれば、同一の鍵が導出されます。
引数
- key [out] 出力鍵バッファ (POTR_CRYPTO_KEY_SIZE = 32 バイト)。
- passphrase [in] パスフレーズへのポインタ (任意のバイト列)。
- passphrase_len [in] パスフレーズの長さ (バイト)。0 の場合も有効。
戻り値
成功時は 0、失敗時は -1 を返します。
呼び出し元
potr_passphrase_to_key の呼び出し元