diff --git a/wolfSSH/Makefile b/wolfSSH/Makefile
index d077ace6..9f12b7ee 100644
--- a/wolfSSH/Makefile
+++ b/wolfSSH/Makefile
@@ -16,7 +16,10 @@ SOURCES = chapter01.md \
chapter11.md \
chapter12.md \
chapter13.md \
- chapter14.md
+ chapter14.md \
+ chapter15.md \
+ chapter16.md \
+ chapter17.md
ifeq ($(DOC_LANG),JA)
PDF = wolfSSH-Manual-jp.pdf
diff --git a/wolfSSH/header.txt b/wolfSSH/header.txt
index c966340c..11e09bda 100644
--- a/wolfSSH/header.txt
+++ b/wolfSSH/header.txt
@@ -8,7 +8,7 @@ header-includes:
# Fancy page headers
- \usepackage{fancyhdr}
- \pagestyle{fancy}
- - \fancyfoot[LO,RE]{COPYRIGHT \copyright 2024 wolfSSL Inc.}
+ - \fancyfoot[LO,RE]{COPYRIGHT \copyright 2026 wolfSSL Inc.}
# Wrap long syntax highlighting code blocks
- \usepackage{fvextra}
- \DefineVerbatimEnvironment{Highlighting}{Verbatim}{breaklines,commandchars=\\\{\}}
diff --git a/wolfSSH/mkdocs-ja.yml b/wolfSSH/mkdocs-ja.yml
index e5d3c006..8712d94b 100644
--- a/wolfSSH/mkdocs-ja.yml
+++ b/wolfSSH/mkdocs-ja.yml
@@ -17,7 +17,10 @@ nav:
- "11. サポートとコンサルティング": chapter11.md
- "12. wolfSSHのアップデート": chapter12.md
- "13. APIリファレンス": chapter13.md
- - "14. wolfSSL SFTP API リファレンス": chapter14.md
+ - "14. SFTP API リファレンス": chapter14.md
+ - "15. SCP API リファレンス": chapter15.md
+ - "16. その他のAPIリファレンス": chapter16.md
+ - "17. プリプロセッサ ガードマクロ": chapter17.md
theme:
name: null
custom_dir: ../mkdocs-material/material
diff --git a/wolfSSH/mkdocs.yml b/wolfSSH/mkdocs.yml
index c541b857..42d7748c 100644
--- a/wolfSSH/mkdocs.yml
+++ b/wolfSSH/mkdocs.yml
@@ -17,7 +17,10 @@ nav:
- "11. Support and Consulting": chapter11.md
- "12. wolfSSH Updates": chapter12.md
- "13. API Reference": chapter13.md
- - "14. wolfSSL SFTP API Reference": chapter14.md
+ - "14. SFTP API Reference": chapter14.md
+ - "15. SCP API Reference": chapter15.md
+ - "16. Additional API Reference": chapter16.md
+ - "17. Preprocessor Guard Macros": chapter17.md
theme:
name: null
custom_dir: ../mkdocs-material/material
diff --git a/wolfSSH/src-ja/chapter01.md b/wolfSSH/src-ja/chapter01.md
index ae5c48b4..4d0d76b7 100644
--- a/wolfSSH/src-ja/chapter01.md
+++ b/wolfSSH/src-ja/chapter01.md
@@ -1,49 +1,59 @@
# イントロダクション
+このマニュアルは組み込み用 wolfSSH ライブラリの技術ガイドとして書かれています。wolfSSH のビルド方法と使い始め方を説明し、ビルドオプション、機能、サポートなどの概要を提供します。
-このマニュアルは組み込み用wolfSSHライブラリの技術解説書としてお読みいただけるように書かれています。wolfSSHをビルドして起動することから始まり、ビルドオプション、機能、サポートなどの概要を提供します。
-
-wolfSSHはC言語で書かれたSSH(セキュアシェル)サーバー実装で、wolfSSLから利用可能なwolfCryptを使用します。さらに、マルチプラットフォームで使用できるようにゼロから構築されています。また、SSHv2仕様に準拠しています。
+wolfSSH は C 言語で書かれた SSH(セキュアシェル)サーバーおよびクライアントの実装で、wolfSSL からも利用可能な wolfCrypt ライブラリを使用します。さらに、wolfSSH はマルチプラットフォームで利用できるようにゼロから構築されています。この実装は SSH v2 仕様に基づいています。
## プロトコル概要
-SSHは2つの通信端点に多重化されたデータストリームを提供する一連の階層化されたプロトコルです。一般的には、サーバー上のシェルへの接続を保護するために利用されます。ですが、ファイルを安全にコピーしたり、Xディスプレイプロトコルをトンネリングするのにも利用されています。
+SSH は、2 つのピア間で多重化されたデータストリームを提供する階層化されたプロトコル群です。一般的には、サーバー上のシェルへの接続を保護するために利用されます。ただし、2 台のマシン間でファイルを安全にコピーしたり、X ディスプレイプロトコルをトンネリングしたりするためにもよく利用されます。
+
+## wolfSSH をお勧めする理由
+
+wolfSSH ライブラリは ANSI C で記述された軽量な SSHv2 サーバーおよびクライアントライブラリで、そのサイズの小ささ、速度、機能セットから、主に組み込み機器、RTOS、リソース制約のある環境をターゲットにしています。ロイヤリティフリーの価格設定と優れたクロスプラットフォームサポートにより、標準的な動作環境でも広く利用されています。wolfSSH は業界標準の SSH v2 をサポートしています。wolfSSH は wolfCrypt ライブラリによって支えられています。wolfCrypt 暗号ライブラリのあるバージョンは FIPS 140-3 認証(認証番号 #4718)および FIPS 140-2 認証(認証番号 #3389)を取得しています。追加情報については、wolfCrypt FIPS FAQ を参照するか、fips@wolfssl.com までお問い合わせください。
+
+### 機能
+
+- SSH v2.0(サーバーおよびクライアント)
+
+- 最小フットプリントサイズ 33kB
+
+- 実行時メモリ使用量 1.4KB〜2KB(設定可能な受信バッファは含まず)
+
+- 複数のハッシュ関数: SHA-1、SHA-2(SHA-256、SHA-384、SHA-512)
+
+- ブロック暗号および認証付き暗号: AES-CBC、AES-CTR、AES-GCM(128、192、256 ビット鍵)
-## wolfSSHをお勧めする理由
+- メッセージ認証: HMAC-SHA1、HMAC-SHA1-96、HMAC-SHA2-256、HMAC-SHA2-512
-wolfSSHはANSI Cで記述された軽量のSSHv2サーバーライブラリで、サイズが軽量でありスピード、機能セットに富んでいる点から、組み込み機器、リアルタイムOSおよびリソース制約のある環境をターゲットにしています。wolfSSHは業界標準のSSH v2をサポートし、さらに先進的なアルゴリズム(ChaCha20, Poly1305, NTRU とSHA-3)も提供しています。wolfSSHを支えているのはwolfCrypt暗号化ライブラリで、このライブラリはFIPS140-2認証(認証#2425)を受けています。より詳細はwolfCrypt FIPS FAQを参照されるかあるいはfacts@wolfssl.comまでお知らせください。
+- 暗号と MAC は接続の方向ごとに個別にネゴシエーション
+- 鍵交換オプション: DH(グループ 1、14、16 およびグループ交換)、ECDH(曲線 NISTP256、NISTP384、NISTP521)、Curve25519
-### 機能(特徴)
+- ポスト量子ハイブリッド鍵交換: ML-KEM-768 と Curve25519 または NIST P-256 の組み合わせ、ML-KEM-1024 と NIST P-384 の組み合わせ
+- 公開鍵認証オプション: RSA(ssh-rsa、rsa-sha2-256、rsa-sha2-512)、ECDSA(曲線 NISTP256、NISTP384、NISTP521)、Ed25519、およびポスト量子の ML-DSA-44、ML-DSA-65、ML-DSA-87(単独、または ECDSA、Ed25519、Ed448 とのコンポジット)。ホスト鍵とユーザー認証の両方に対応
-- SSH v2.0 (サーバー機能)
+- RSA も ECDSA も含まないビルド(Ed25519 のみのビルドなど)に対応
-- 最小フットプリント:33kB
+- SHA-1 および AES-CBC アルゴリズムはコンパイルされますが、デフォルトでは提示されません
-- 実行時メモリ消費量:1.4KB ~ 2KB (受信バッファは含まず)
+- Terrapin 攻撃(CVE-2023-48795)への対策である厳格な鍵交換(strict KEX)をデフォルトで有効化
-- ハッシュ関数: SHA-1, SHA-2 (SHA-256, SHA-384, SHA-512), BLAKE2b, Poly
+- データ量または送信パケット数をトリガーとする鍵の再交換
-- 暗号アルゴリズム:Block, Stream, and Authenticated Ciphers: AES (CBC, CTR, GCM, CCM), Camellia, ChaCha
+- ユーザー認証のサポート(パスワード、keyboard-interactive、公開鍵認証)
-- 公開鍵オプション: RSA, DH, EDH, NTRU
+- シンプルな API
-- ECDH と ECDSA で次の楕円曲線をサポート: NISTP256, NISTP384, NISTP, Curve25519, Ed
+- ホスト鍵およびユーザー認証向けの PEM および DER 形式の X.509 証明書サポート(RFC 6187)。ML-DSA 証明書を含みます
-- クライアント認証をサポート(RSA key, password)
+- wolfSSHd における OpenSSH 証明書によるユーザー認証
-- シンプルなAPI
+- TPM 2.0 に格納されたホスト鍵とユーザー鍵、および Windows 証明書ストアからのホスト鍵
-- PEM and DER certificate support
+- ハードウェア暗号サポート: Intel AES-NI サポート、Intel AVX1/2、RDRAND、RDSEED、Cavium NITROX サポート、STM32F2/F4 ハードウェア暗号サポート、Freescale CAU / mmCAU / SEC、Microchip PIC32MZ
-- ハードウエア暗号サポート:
- - Intel AES-NI support
- - Intel AVX1/2
- - RDRAND
- - RDSEED
- - Cavium NITROX
- - STM32F2/F4 ハードウエア暗号
- - Freescale CAU / mmCAU / SEC
- - Microchip PIC32MZ
+- SFTP、SCP、SSH-AGENT、ローカルおよびリモートポートフォワーディング(クライアントおよびサーバー)のサポート
+- SSH サーバーデーモン wolfSSHd と SSH クライアントアプリケーション wolfssh
diff --git a/wolfSSH/src-ja/chapter02.md b/wolfSSH/src-ja/chapter02.md
index 76774981..49b052e7 100644
--- a/wolfSSH/src-ja/chapter02.md
+++ b/wolfSSH/src-ja/chapter02.md
@@ -1,102 +1,129 @@
-# wolfSSHのビルド
+# wolfSSH のビルド
-wolfSSHはポータビリティを念頭において開発されているので多くのシステム上に移植するのは容易にできるはずです。ですが、もし移植上で問題がありましたら https://www.wolfssl.com/forums を参照されるか support@wolfssl.com へ質問をお寄せください。
+wolfSSH はポータビリティを念頭において開発されているので、多くのシステム上で概ね容易にビルドできるはずです。もしビルドで問題がありましたら、遠慮なくサポートフォーラム https://www.wolfssl.com/forums を通じてサポートをお求めいただくか、support@wolfssl.com へ直接ご連絡ください。
+この章では、Linux、un\*x 系(BSD、macOS)、および Windows 環境で wolfSSH をビルドする方法を説明し、非標準環境でのビルドに関するガイダンスも提供します。入門ガイドとサンプルは第 3 章に用意しています。
-この章ではwolfSSHを*nix システム(あるいはその派生システム)やWindows上でビルドする方法を説明します。また、上記以外のシステムにおいてのビルド方法のガイダンスも提供します。次章では「サンプルプログラムを使って始めてみよう」を用意しています。
-
-autoconf/automakeシステムを使ってビルドする際にはwolfSSHは単一のMakefileによってすべてのコンポーネントとサンプルプログラムをビルドできます。Makefileを繰り返し使用する場合に比べてシンプルで早いです。
+autotools システムを使ってビルドする際には、wolfSSH は単一の Makefile によってライブラリのすべての部分とサンプルをビルドします。これは Makefile を再帰的に使用する場合に比べてシンプルかつ高速です。
## ソースコードの入手
-最新バージョンのコードを入手する場合には次のGitHubサイトからダウンロードできます:
- [https://github.com/wolfSSL/wolfSSH](https://github.com/wolfSSL/wolfSSH)
+最新の最新版は、次の GitHub サイトからダウンロードできます: [https://github.com/wolfSSL/wolfssh](https://github.com/wolfSSL/wolfssh)。
- “Download ZIP” ボタンをクリックするかターミナルを開いて次のコマンドを実行してください:
-
+"Download ZIP" ボタンをクリックするか、ターミナルで次のコマンドを実行してください:
```
$ git clone https://github.com/wolfSSL/wolfssh.git
```
-
## wolfSSH が依存するモジュール
-wolfSSHはwolfCryptに依存しているので、wolfSSLのコンフィギュレーションが必要となっています。wolfSSLはここからダウンロードできます:
-https://github.com/wolfSSL/wolfssl
-
-最も簡潔なwolfSSHの構成のためのwolfSSLのコンフィギュレーションを行うにはwolfSSLのルートフォルダから以下のコマンドを実行します:
-
+wolfSSH は wolfCrypt に依存しているため、wolfSSL のコンフィギュレーションが必要です。wolfSSL はここからダウンロードできます: [https://github.com/wolfSSL/wolfssl](https://github.com/wolfSSL/wolfssl)。wolfSSH に必要な最も簡潔な wolfSSL の構成は、既定のビルドです。これは wolfSSL のルートフォルダから次のコマンドでビルドできます:
```
-$ ./autogen.sh (GitHubからクローンした場合にのみ実行が必要)
-$ ./configure --enable-ssh
+$ ./autogen.sh (GitHub からクローンした場合にのみ実行が必要)
+$ ./configure --enable-wolfssh
$ make check
$ sudo make install
```
+wolfSSH の鍵生成機能を利用するには、wolfSSL を keygen 付きでコンフィギュレーションする必要があります:
+```
+--enable-keygen
+```
+wolfSSL コードの大部分が不要な場合は、crypto only オプションで wolfSSL をコンフィギュレーションできます:
+```
+--enable-cryptonly
+```
-wolfSSHの鍵生成機能を利用する場合には `--enable-keygen` を追加してください。
-また、もしwolfSSLのコードが必要ない場合には `--enable-cryptonly` を追加してください。
-
-上記により、wolfSSHの実行に必要なwolfSSLライブラリがインストールされます。
+wolfSSH には `--enable-wolfssh`(`WOLFSSL_WOLFSSH` を定義します)付きでビルドした wolfSSL が必要です。このオプションなしでビルドされた wolfSSL に対して wolfSSH をビルドすると、`#error` で停止します。wolfSSH の一部の機能には、さらに次の wolfSSL オプションが必要です:
-## *nixシステム上でのwolfSSHのビルド
+- X.509 証明書(`--enable-certs`)は wolfSSL の証明書マネージャーを使用するため、wolfSSL は `--enable-cryptonly` ではなく TLS 付きでビルドする必要があります。OCSP による問い合わせを可能にするには `--enable-ocsp` を追加してください。
+- Curve25519 鍵交換には `--enable-curve25519` が必要です。
+- ML-KEM ハイブリッド鍵交換には `--enable-mlkem` が必要です。
+- ML-DSA のホスト鍵とユーザー認証には `--enable-mldsa` と wolfSSL 5.9.2 以降が必要です。
+- TPM サポート(`--enable-tpm`)には `--enable-wolftpm` 付きでビルドした wolfSSL と wolfTPM が必要です。
+- wolfssh クライアントアプリケーション(`--enable-sshclient`)には、スレッド対応の wolfSSL と wolfSSL の Base64 エンコーダー(`--enable-base64encode`、x86_64 でのみデフォルトで有効)が必要です。
-Linux, *BSD, OS X, Solaris *nix類似のシステム上でビルドを行う場合には、autoconfシステムを利用します。wolfSSHのビルドには以下のコマンドを実行します:
+## autotools でのビルド
+Linux、BSD、macOS、Solaris、その他の un\*x 系環境でビルドする場合は、autotools システムを使用します。wolfSSH をビルドするには次のコマンドを実行します:
```
-$ ./autogen.sh (GitHubからクローンした場合にのみ実行が必要)
+$ ./autogen.sh (GitHub からクローンした場合にのみ実行が必要)
$ ./configure
$ make
$ make install
```
-
-configureコマンドにはオプションを追加することができます。追加可能なオプションとその用途は以下のコマンドで参照することができます:
-
+configure コマンドにはビルドオプションを追加できます。利用可能な configure オプションとその用途の一覧は、次のコマンドで参照できます:
```
$ ./configure --help
```
-
-wolfSSHのビルドには以下を実行してください:
-
+wolfSSH をビルドするには次を実行します:
```
$ make
```
-
-wolfSSHのビルドが正常に終了したことを確認する為に、以下のコマンドを実行して、全てのテストがパスすることを確認してください:
-
+wolfSSH が正しくビルドされたことを確認するために、次のコマンドで全てのテストがパスしたかどうかを確認してください:
```
$ make check
```
-以下を実行してwolfSSHをインストールします:
-
+wolfSSH をインストールするには次を実行します:
```
$ make install
```
-インストールにはスーパーユーザー権限が必要なので、場合によっては以下の様に'sudo'コマンドを前置して実行する必要があるかもしれません:
-
+インストールにはスーパーユーザー権限が必要な場合があり、その場合は sudo を付けてインストールを実行してください:
```
$ sudo make install
```
-
-場合によっては、wolfssh/src以下のwolfSSHライブラリだけをビルドし、その他のアイテム(サンプルプログラムやテスト)を除外したいかもしれません。その場合にはwolfSSHのルートフォルダから以下のコマンドを実行してください:
-
+wolfssh/src/ にある wolfSSH ライブラリのみをビルドし、追加のアイテム(サンプルとテスト)はビルドしたくない場合は、wolfSSH のルートフォルダから次のコマンドを実行できます:
```
$ make src/libwolfssh.la
```
+## ビルドオプション
+
+`./configure` には次のオプションを指定できます。各機能オプションは、「wolfSSH プリプロセッサガードマクロ」の章でそのオプションに対応して記載されているプリプロセッサマクロも定義します。
+
+| オプション | デフォルト | 説明 |
+|-------------------------------|-----------|--------------------------------------------|
+| `--with-wolfssl=PATH` | /usr/local | wolfSSL のインストールプレフィックス。`PATH/lib` と `PATH/include` が存在している必要があります。 |
+| `--enable-debug` | 無効 | デバッグコードとログ出力を追加し、最適化を無効にします。 |
+| `--disable-inline` | 有効 | インライン関数を無効にします。 |
+| `--disable-examples` | 有効 | サンプルプログラムをビルドしません。 |
+| `--disable-server` | 有効 | サーバーのコードを除外します。`--disable-client` と同時には指定できません。 |
+| `--disable-client` | 有効 | クライアントのコードを除外します。`--disable-server` と同時には指定できません。 |
+| `--enable-keygen` | 無効 | 鍵生成 API。wolfSSL には `--enable-keygen` が必要です。 |
+| `--enable-keyboard-interactive` | 無効 | keyboard-interactive ユーザー認証。 |
+| `--enable-scp` | 無効 | SCP サポート。 |
+| `--enable-sftp` | 無効 | SFTP サポート。 |
+| `--disable-sftp-zeroize` | 有効 | SFTP のファイルデータバッファを解放前にゼロクリアしません。 |
+| `--enable-fwd` | 無効 | TCP/IP ポートフォワーディング。 |
+| `--disable-term` | 有効 | 疑似端末サポートを除外します。 |
+| `--enable-shell` | 無効 | echoserver でのシェルサポート。 |
+| `--enable-agent` | 無効 | ssh-agent サポート。 |
+| `--enable-certs` | 無効 | X.509 証明書サポート。 |
+| `--enable-ossh-certs` | 無効 | OpenSSH 証明書によるユーザー認証。 |
+| `--enable-windows-cert-store` | 無効 | Windows 証明書ストアから鍵と証明書を読み込みます。`--enable-certs` と mingw の Windows ホストが必要です。`crypt32` と `ncrypt` をリンクします。 |
+| `--enable-tpm` | 無効 | wolfTPM による TPM 2.0 サポート。 |
+| `--enable-smallstack` | 無効 | 大きなバッファをヒープから確保し、スタック使用量を削減します。 |
+| `--enable-none-cipher` | 無効 | 暗号化と完全性保護を無効にする安全でない "none" 暗号および MAC のネゴシエーションを許可します。 |
+| `--enable-sshd` | 無効 | wolfSSHd サーバーデーモンをビルドします。`--enable-shell` も有効にします。 |
+| `--with-pam=PATH` | なし | wolfSSHd 用の PAM ライブラリのディレクトリ。 |
+| `--enable-sshclient` | 無効 | wolfssh クライアントアプリケーションをビルドします。 |
+| `--enable-all` | 無効 | keygen、keyboard-interactive、scp、sftp、fwd、shell、agent、sshd、sshclient、certs を有効にします。 |
+| `--enable-distro` | 無効 | `--enable-all` に加えて、共有ライブラリとスタティックライブラリの両方をビルドします。 |
-## Windows上でのwolfSSHのビルド
+wolfssh クライアントアプリケーションはすべてのセッションの I/O をスレッド上で実行するため、スレッド対応の wolfSSL が必要です。シングルスレッドの wolfSSL に対して `--enable-sshclient` を指定すると configure エラーになりますが、`--enable-all` の場合は失敗せずにクライアントを除外します。
-Visual Studioプロジェクトファイルは以下で取得できます:
-https://github.com/wolfSSL/wolfssh/blob/master/ide/winvs/wolfssh.sln
+`--enable-all` は `--enable-ossh-certs`、`--enable-windows-cert-store`、`--enable-tpm`、`--enable-smallstack`、`--enable-none-cipher` を有効にしません。これらは明示的に追加してください。
+ビルドツリー内の `./apps/wolfssh-options` は、有効になっている各ビルドオプションの名前を 1 行に 1 つずつ出力します。テストスクリプトでの使用を想定したもので、インストールはされません。
-ソリューションファイル'wolfssh.sln'はwolfSSH,そのサンプルプログラムとテストプログラムをビルドするように構成されています。DebugビルドとReleaseビルドの構成をスタティックリンクライブラリとダイナミック(32/64ビット)ライブラリの両形式で提供しています。user_settings.hはwolfSSLのコンフィギュレーションで必要となります。
+## Windows 上でのビルド
+Visual Studio のプロジェクトファイルは *ide\\winvs* ディレクトリにあります。
-このプロジェクトファイルではwolfSSHとwolfSSLのソースフォルダ階層が隣同士に配置されていることを前提にしています。また、それらのルートフォルダにはバージョン番号が含まれていないフォルダ名となっていることを前提としています。つまり、次のようなフォルダ構成です:
+ソリューションファイル 'wolfssh.sln' により、wolfSSH とそのサンプルおよびテストプログラムをビルドできます。このソリューションは、スタティックおよびダイナミックの 32 ビットまたは 64 ビットライブラリの Debug ビルドと Release ビルドの両方を提供します。wolfSSL のビルドをコンフィギュレーションするには user_settings.h を使用してください。
+このプロジェクトは、wolfSSH と wolfSSL のソースディレクトリが隣り合わせにインストールされ、そのフォルダ名にバージョン番号が含まれていないことを前提としています:
```
Projects\
@@ -104,96 +131,74 @@ wolfssh\
wolfssl\
```
-`wolfssh\ide\winvs\user_settings.h`ファイルはwolfSSLに対する設定も既に含んだ適切な内容となっています。このファイルを忘れずに`wolfssh\ide\winvs`フォルダから`wolfssl\IDE\WIN`フォルダにコピーしてください。もし、一方の内容を変更した場合には、
-その内容を他方にもコピーして下さい。
-
-`WOLFCRYPT_ONLY`マクロ定義はwolfSSLコードをビルド対象から除外し、wolfCryptのアルゴリズム部分のみをビルドするの為に指定してあります。もし、wolfSSLコードもビルドする場合にはこの定義を削除してください。
-
+`wolfssh\ide\winvs\user_settings.h` ファイルには、wolfSSL を適切な設定でコンフィギュレーションするための設定が含まれています。このファイルは `wolfssh\ide\winvs` ディレクトリから `wolfssl\IDE\WIN` へコピーする必要があります。一方のコピーを変更した場合は、両方のコピーを変更しなければなりません。`WOLFCRYPT_ONLY` オプションは wolfSSL ファイルのビルドを無効にし、wolfCrypt アルゴリズムのみをビルドします。wolfSSL も残すには、このオプションを削除してください。X.509 証明書サポートには TLS 層が必要なため、このファイルの X.509 ブロックでは `WOLFSSH_CERTS` を定義するとともに `WOLFCRYPT_ONLY` を削除しています。
-### Windows上でのビルドに使用するユーザーマクロ定義
+各プロジェクトは、Windows 証明書ストアのサポート(`WOLFSSH_WINDOWS_CERT_STORE`)のために Windows の `crypt32.lib` および `ncrypt.lib` インポートライブラリとリンクします。これを使用するには、`user_settings.h` のコメントブロックの説明にしたがって、`WOLFSSH_CERTS` とともに `WOLFSSH_WINDOWS_CERT_STORE` を定義してください。
+### Windows 上でのビルドに使用するユーザーマクロ
+このソリューションでは、wolfSSL ライブラリとヘッダーの場所を示すためにユーザーマクロを使用します。すべてのパスは wolfssl64 ソリューションの既定のビルド出力先に設定されています。ユーザーマクロ wolfCryptDir は、ライブラリを検索するためのベースパスとして使用されます。初期値は `..\..\..\..\wolfssl` に設定されています。そして、例えば API テストプロジェクトの追加インクルードディレクトリの値は `$(wolfCryptDir)` に設定されています。
-ソリューションではwolfSSLライブラリとヘッダーファイルのロケーションを指定するためにユーザーマクロを利用します。wolfssl64ソリューションでは全てのパスは既定のビルド出力先に設定されます。ユーザーマクロ'wolfCryptDir'はライブラリを検索するためのベースパスとして使用します。初期値として、`..\..\..\..\wolfssl`に設定されています。その後、例えば追加のインクルードファイル検索パスが追加される場合には、`$(wolfCryptDir)`に対して追加を行います。
-
-wolfCryptDirパスはプロジェクトファイルからの相対位置で表せなければなりません。
-
-
+wolfCryptDir パスは、プロジェクトファイルからの相対パスでなければなりません。プロジェクトファイルはすべて 1 つ下のディレクトリにあります。
```
wolfssh/wolfssh.vcxproj
unit-test/unit-test.vcxproj
```
-
-そのほかのユーザーマクロは異なるビルドターゲットのためのディレクトリを表すために使用されます。例えば、 `wolfCryptDllRelease64` は次のフォルダを表します:
-
-
+その他のユーザーマクロは、異なるビルド向けの wolfSSL ライブラリが見つかるディレクトリです。したがって、ユーザーマクロ 'wolfCryptDllRelease64' は初期値として次のように設定されています:
```
-$(wolfCryptDir)\x64\DLL Release
+$(wolfCryptDir)\DLL Release\x64
```
-
-このパスはechoserverサンプルプログラムのデバッグ環境設定で64-bit DLLリリースビルド版の出力先を表現するのに次の様に使われます:
-
+この値は、echoserver の 64 ビット DLL Release ビルドのデバッグ環境で次のように設定して使用されます:
```
PATH=$(wolfCryptDllRelease64);%PATH%
```
+デバッガーから echoserver を実行すると、そのディレクトリで wolfSSL DLL が見つかります。
-echoserverプログラムをデバッガーを使って実行する際にはこの設定によってwolfSSL DLLがこのディレクトリから見つかります。
-
-
-## その他の環境上でのビルド
-
-公式にはサポートしていませんが、wolfSSHを非標準の環境でビルドしたいお客様、特に組み込み機器向け環境でのビルドをご希望の方々をできるだけお手伝いしようとしています。以下はその際に理解しておいていただきたい点です:
-
-1. ソースとヘッダーファイルはwolfSSHダウンロードパッケージの階層構造に存在する必要があります。
-2. いくつかのビルドシステムではwolfSSHヘッダーファイルの格納場所を明示的に指定することを求める場合があります。その格納場所は/wolfsshディレクトリなので通常はディレクトリをインクルードファイルパスに追加することで解決します。
-3. wolfSSHはコンフィギュレーションで指定されない限りリトルエンディアンをデフォルトにしています。ユーザーが使用している非標準環境ではconfigureコマンドを使用していない場合で、ビッグエンディアンシステムに指定する場合にはBIG_ENDIAN_ORDERマクロ定義が必要となります。
-4. ライブラリをビルドしてみて何か問題が生じた場合にはwolfSSLにお知らせください。サポートが必要な場合には、support@wolfssl.com 宛てにご連絡ください。
+## 非標準環境でのビルド
+公式にはサポートしていませんが、非標準環境、特に組み込みおよびクロスコンパイル環境で wolfSSH をビルドしたいユーザーをできるだけお手伝いしようとしています。以下は、その際に理解しておいていただきたい点です:
+1. ソースファイルとヘッダーファイルは、wolfSSH ダウンロードパッケージにある階層構造のまま維持する必要があります。
+2. 一部のビルドシステムでは、wolfSSH ヘッダーファイルの場所を明示的に知る必要があるため、それを指定しなければならない場合があります。それらは /wolfssh ディレクトリにあります。通常、 ディレクトリをインクルードパスに追加することでヘッダーの問題を解決できます。
+3. wolfSSH は、configure プロセスがビッグエンディアンを検出しない限り、リトルエンディアンシステムを既定とします。非標準環境でビルドするユーザーは configure プロセスを使用していないため、ビッグエンディアンシステムを使用する場合は BIG_ENDIAN_ORDER を定義する必要があります。
+4. ライブラリをビルドしてみて、何か問題が生じた場合はお知らせください。サポートが必要な場合は、support@wolfssl.com までご連絡ください。
## クロスコンパイル
+組み込みプラットフォームの多くのユーザーは、自身の環境向けにクロスコンパイルを行います。ライブラリをクロスコンパイルする最も簡単な方法は、configure システムを使用することです。configure システムは Makefile を生成し、それを使って wolfSSH をビルドできます。
-組み込み機器開発環境ではクロスコンパイルを行います。そのための簡単な方法はライブラリをコンフィギュアシステムを使ってクロスコンパイルを行うことです。コンフィギュアシステムはMakefileを一つ生成し、それを使ってwolfSSHをビルドします。
-
-クロスコンパイルを行う際には、次の様にコンフィギュアを行うホストを指定する必要があります:
-
+クロスコンパイルを行う際には、次のようにコンフィギュレーションするホストを指定する必要があります:
```
$ ./configure --host=arm-linux
```
-
-さらにコンパイラ、リンカー等も指定する必要があるでしょう:
-
+また、使用したいコンパイラやリンカーなどを指定する必要がある場合もあります:
```
-$ ./configure --host=arm-linux CC=arm-linux-gcc AR=arm-linux-ar RANLIB=arm-linux
+$ ./configure --host=arm-linux CC=arm-linux-gcc AR=arm-
+linux-ar
+RANLIB=arm-linux
```
-
-クロスコンパイル用にwolfSSHを正しくコンフィギュレーションできた後は、標準のautoconf作法にしたがってビルドとライブラリのインストールを行います:
+クロスコンパイル用に wolfSSH を正しくコンフィギュレーションできた後は、標準の autoconf の作法にしたがってライブラリのビルドとインストールを行えるはずです:
```
$ make
$ sudo make install
```
-
-ここでご紹介した以外のTipsをお持ちでしたらぜひ facts@wolfssl.comまで お知らせください。
+wolfSSH のクロスコンパイルに関する追加の Tips やフィードバックがありましたら、facts@wolfssl.com までお知らせください。
## カスタムディレクトリへのインストール
-wolfSSLをカスタムディレクトリへインストールする場合には次のようにしてください:
-
+wolfSSL のカスタムインストールディレクトリを設定するには、次のようにします:
```
-$ ./configure --prefix=`~`/wolfSSL
+$ ./configure --prefix=~/wolfSSL
$ make
$ make install
```
-
-上記コマンドによってライブラリを ”~/wolfSSL/lib” に、インクルードファイルを ”~/wolfssl/include” に配置するように指定します。wolfSSHをカスタムディレクトリに配置する場合には次の様にしてください:
-
-
+これにより、ライブラリは ~/wolfSSL/lib に、インクルードは ~/wolfSSL/include に配置されます。wolfSSH のカスタムインストールディレクトリを設定し、その wolfSSL のインストール先を参照させるには、次のようにします:
```
-$ ./configure --prefix=`~`/wolfssh --libdir=`~`/wolfssl/lib --includedir=`~`/wolfssl/include
+$ ./configure --prefix=~/wolfssh --with-wolfssl=~/wolfSSL
$ make
$ make install
```
+--with-wolfssl オプションには wolfSSL のインストール先プレフィックスを指定します。その配下に lib/ と include/ があることが前提です。wolfSSH に wolfSSL の場所を伝えるのはこのオプションです。--libdir および --includedir オプションは wolfSSH 自身のライブラリとヘッダーのインストール先を設定するものであり、wolfSSL の検索先には影響しません。
-上記パスがご自分の実際のディレクトリとマッチすることを確認して下さい。
+上記のパスが実際の場所と一致していることを確認してください。
diff --git a/wolfSSH/src-ja/chapter03.md b/wolfSSH/src-ja/chapter03.md
index f3516a65..b114118e 100644
--- a/wolfSSH/src-ja/chapter03.md
+++ b/wolfSSH/src-ja/chapter03.md
@@ -1,249 +1,506 @@
# 始めよう
-wolfSSHのダウンロードとビルドが終わったら、テストプログラムとサンプルプログラムが自動的に作成されているはずです。
-
+wolfSSHのダウンロードとビルドが終わったら、ライブラリの使い方を示す自動テストプログラムとサンプルプログラムが用意されています。
## テスト
### wolfSSHユニットテスト
-wolfSSHのユニットテストはAPIの動作を確認するためのものです。ポジティブ/ネガティブの両テストケースが実行されます。テストはマニュアルで実行することができますが、他の処理の一部(例えばmake check コマンド実行時)として実行される場合もあります。
+wolfSSHのユニットテストはAPIの動作を確認するためのものです。ポジティブ/ネガティブの両テストケースが実行されます。テストはマニュアルで実行することができますが、makeやmake checkコマンドなど他の自動化された処理の一部として実行される場合もあります。`make check`コマンドは、APIテスト(`tests/api.test`)、リグレッションテスト(`tests/regress.test`)、クライアント/サーバーテストスイート(`tests/testsuite.test`)、鍵交換テスト(`tests/kex.test`)も実行します。
-全てのサンプルプログラムとテストはwolfSSHのホームディレクトリから実行されなければなりません。実行時に必要な各種証明書と鍵をプログラムが見つけることができるようにするためです。
+全てのサンプルプログラムとテストはwolfSSHのホームディレクトリから実行されなければなりません。実行時に必要な各種証明書と鍵をテストツールが見つけることができるようにするためです。
ユニットテストをマニュアルで実行するには次のようにします:
-
```
$ ./tests/unit.test
```
-
あるいは
-
```
$ make check (autoconfが使われている場合)
```
### テストに関する注記事項
-レポジトリをクローンした後、テスト用の秘密鍵はユーザーにとってはリードオンリーになっていることを確認してください。そうなっていない場合はssh_clientサンプルプログラムは警告します。
-
+レポジトリをクローンした後、テスト用の秘密鍵はユーザーにとってリードオンリーになっていることを確認してください。そうなっていない場合はsshクライアントがそうするように警告します。
```
$ chmod 0600 ./keys/gretel-key-rsa.pem ./keys/hansel-key-rsa.pem \
./keys/gretel-key-ecc.pem ./keys/hansel-key-ecc.pem
```
-
サンプルプログラムechoserverに対しての認証はパスワードあるいは公開鍵を使って行うことができます。パスワードを使う場合は次のコマンドを使ってください:
-
-
```
-$ ssh_client -p 22222 USER@localhost
+$ ssh -p 22222 USER@localhost
```
-ここでUSERとしてのユーザーとそのパスワードとして次の2つのペアが使えます:
-
+ここで_USER_としてのユーザーとそのパスワードとして次の2つのペアが使えます:
```
jill:upthehill
jack:fetchapail
```
公開鍵を使った認証を行う場合には次のコマンドを使います:
-
```
-$ ssh_client -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
+$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
```
-ここで、USERの部分にはgretelかhanselが指定できて、TYPEにはrsaかeccを指定します。
-
-echoserverはそのwsUserAuthコールバック関数に偽のアカウント(jack, jill, hansel, とgretel)を用意してあります。後述するシェルサポートが有効になっている場合には、これらの偽アカウントは機能しません。これらのアカウントを使って認証を試みてもサーバーにはシステムのパスワードファイルにこれらのアカウントのおパスワードは存在していないので認証に失敗します。新たなユーザーとパスワードあるいは公開鍵リストをechoserverに追加することができます。追加されたアカウントでは、echoserverによって起動されたシェルにechoserverを起動したユーザー権限でログインすることができます。
+ここで、_USER_の部分にはgretelかhanselが指定でき、TYPEにはrsaかeccを指定します。echoserverはデフォルトではRSA鍵を受け付けます。代わりにECC鍵を受け付けるには、オプション`-e`を指定してください。
+echoserverはそのwsUserAuthコールバック関数に複数の偽のアカウント(jack, jill, hansel, とgretel)を用意してあります。後述するシェルサポートが有効になっている場合には、これらの偽アカウントは機能しません。これらのアカウントはシステムのパスワードファイルに存在しないためです。ユーザー認証は成功しますが、システム上にこれらのアカウントが存在しないためサーバー側でエラーになります。echoserverのパスワードリストあるいは公開鍵リストに自分自身のユーザー名を追加することができます。追加されたアカウントでは、echoserverによって起動されたシェルにechoserverを起動したユーザーの権限でログインすることができます。
## サンプルプログラム
### wolfSSH echoserver
-echoserverサンプルプログラムはwolfSSHのサンプルプログラム中で最も多くの処理をこなすプログラムです。用意されているアカウントを認証することを許された唯一のユーザーであり、入力された文字を繰り返し出力します。後の章で説明するシェルサポートが有効になっている場合には、ユーザーシェルを起動することができます。echoserverの実行にはマシン上での実際のユーザ名とクレデンシャルを検証する為の更新した認証コールバック関数を必要とします。
-
-ターミナルから次のコマンドを事項してください:
-
+echoserverサンプルプログラムはwolfSSHのサンプルプログラム中で最も多くの処理をこなすプログラムです。もともとは用意されたアカウントのいずれかで認証を行い、入力された文字を繰り返し出力するだけのものでした。後のセクションで説明するシェルサポートを有効にすると、ユーザーシェルを起動することができます。その場合、マシン上の実際のユーザー名と、そのクレデンシャルを検証するために更新されたユーザー認証コールバック関数が必要になります。echoserverはSCPおよびSFTP接続も扱うことができます。ターミナルから次を実行してください:
```
-$ ./examples/echoserver/echoserver -f
+ $ ./examples/echoserver/echoserver -f
```
- `-f` オプションはエコーバックだけを行うモードを指定します。
- 別のターミナルを開いて次のコマンドを実行してください:
+`-f` オプションはエコーバックだけを行うモードを有効にします。別のターミナルから次を実行してください:
```
-$ ssh_client jill@localhost -p 22222
+ $ ssh jill@localhost -p 22222
```
-パスワードの入力を求められたら"upthehill"と入力してください。サーバーは次のバナーを返信してくるはずです:
-
-
+パスワードの入力を求められたら"upthehill"と入力してください。サーバーは次のバナーをクライアントに送信します:
```
wolfSSH Example Echo Server
```
-ssh_clientにタイプした文字はサーバーからエコーバックされて表示されます。入力した文字が2度スクリーンにエコーバックされたとしたらそれはローカルのエコーバックが有効になっているからです。echoserverは正規のターミナルではないので、CR/LF 改行の変換が期待通りに機能しないかもしれません。
+クライアントにタイプした文字はサーバーからスクリーンにエコーバックされます。文字が2度エコーバックされたとしたら、それはクライアントのローカルエコーが有効になっているからです。echoserverは正規のターミナルとして振る舞ってはいないので、CR/LFの変換が期待通りに機能しないことがあります。
以下の制御文字はechoserverで特別な動作を引き起こします:
-- CTRL-C: コネクションを切断
-- CTRL-E: セッション状況をプリントアウト
-- CTRL-F: 新たな鍵交換をトリガー
-
-echoserverサンプルプログラムには以下のコマンドラインオプションが指定できます:
+- CTRL-C: コネクションを切断します。
+- CTRL-E: いくつかのセッション統計をプリントアウトします。
+- CTRL-F: 新たな鍵交換をトリガーします。
+echoserverサンプルプログラムには以下のコマンドラインオプションが指定できます。一部のオプションは、対応する機能が組み込まれている場合にのみ使用できます。
```
+ -? ヘルプを表示して終了する
-1 一回の接続後に終了する
-e クライアントからECC公開鍵を受け取る
- -E ECC秘密鍵を使う
- -f 入力をエコーする
- -p 待ち受けポート番号を指定する(デフォルトは22222)
+ -E ECC秘密鍵を先にロードする
+ -f 入力をエコーする(シェル対応ビルドのみ)
+ -A アプリケーションコールバックからチャネルを駆動する
+ -p 待ち受けポート番号を指定する(デフォルトは22222)
-N ノンブロッキングソケットを使う
-d SFTPコネクションのホームディレクトリを指定する
- -j 接続相手からの公開鍵を受け付ける為にロードする
+ -D SFTPコネクションをホームディレクトリから開始する
+ だけでなく、ホームディレクトリ内に制限する
+ -j 接続相手からのSSH公開鍵を受け付ける為にロードする
+ (ユーザーはコメントにあるものとみなす)
+ -I :
+ 接続相手からのSSH公開鍵を受け付ける為にロードする
+ -s デフォルトのhansel鍵を置き換えるTPM公開鍵ファイルを
+ ロードする
+ -G TPMからECC/RSAホスト鍵blobをロードする(秘密鍵は
+ TPM内に留まる)
+ -J :
+ 接続相手からのX.509 PEM証明書を受け付ける為にロードする
+ -K :
+ 接続相手からのX.509 DER証明書を受け付ける為にロードする
+ -P :
+ 接続相手から受け付けるパスワードを追加する
+ -i :
+ 接続相手からkeyboard-interactiveで受け付ける
+ パスワードを追加する
+ -a ルートCA証明書ファイルをロードする
+ -k 使用する鍵アルゴリズムのカンマ区切りリストを指定する
+ -x 使用する鍵交換アルゴリズムのカンマ区切りリストを
+ 指定する
+ -m 使用するMACアルゴリズムのカンマ区切りリストを指定する
+ -W Windows証明書ストア: "store:subject[:flags]"
+ -b ユーザー認証がブロックする場合をテストする
+ -H テスト用のハイウォーターコールバックを設定する
```
### wolfSSH Client
-このクライアントプログラムははSSHサーバーと接続を確立します。簡単モードでは"Hello, wolfSSH!"をサーバーに送信し、サーバーからの応答を表示して終了します。疑似ターミナルオプションではこのクライアントプログラムは実際のクライアントとして機能します。
-
-クライアントサンプルプログラムには以下のコマンドラインオプションが指定できます:
+このクライアントはSSHサーバーとの接続を確立します。最も単純なモードでは"Hello, wolfSSH!"という文字列をサーバーに送信し、その応答を表示して終了します。疑似ターミナルオプションを使うと、このクライアントは実際のクライアントとして機能します。
+クライアントサンプルプログラムには以下のコマンドラインオプションが指定できます。一部のオプションは、対応する機能が組み込まれている場合にのみ使用できます。
```
+ -? ヘルプを表示して終了する
-h 接続先ホストアドレス(デフォルト 127.0.0.1)
-p 接続先ポート(デフォルト 22222)
-u 認証の為のユーザー名(指定必須)
-P パスワード(省略した場合はプロンプトが表示される)
+ -K TPM鍵の認証パスワード
-e サンプルecc公開鍵を指定
-i ユーザーの秘密鍵ファイル名
-j ユーザーの公開鍵ファイル名
- -x 接続完了後、データ送受信することなく終了
+ -x 接続成功後、データの読み書きをせずに終了
-N ノンブロッキングソケットを使う
-t 疑似ターミナルを使用
- -c リモートコマンドとpipe stdin/stdout を使用する
+ -c リモートコマンドを実行し stdin/stdout をパイプする
+ -R 変換なしの生の出力(Windowsのみ)
-a SSH-AGENTの使用を試みる
+ -J 使用するDER証明書のファイル名
+ -A ホストを検証するためのDER CA証明書のファイル名
+ -X 接続相手と接続相手の証明書のIPチェックを無視する
+ -E 使用可能なすべてのアルゴリズムを一覧表示する
+ -k 鍵アルゴリズムのリストを指定する
+ -C 暗号化アルゴリズムのリストを指定する
+ -q デバッグ出力をオフにする
```
### wolfSSH portfwd
-portfwdサンプルプログラムはSSHサーバーと接続を確立し、ローカルポートフォワーディングのための待ち受けポートをリスンするかあるいはリスンしているリスナーに対してリモートポートフォワーディングを要求します。接続確立の後はプログラムは終了します。
+portfwdサンプルプログラムはSSHサーバーとの接続を確立し、ローカルポートフォワーディングのための待ち受けリスナーを設定するか、あるいはオプション`-r`を指定した場合はリモートポートフォワーディングのための待ち受けをサーバーに要求します。プログラムは接続が終了するまで動作し続けます。
portfwd サンプルプログラムには以下のコマンドラインオプションが指定できます:
```
+ -? ヘルプを表示して終了する
-h 接続先SSHサーバーアドレス(デフォルト 127.0.0.1)
-p 接続先SSHサーバーポート(デフォルト 22222)
-u ユーザー名(指定必須)
-P パスワード(省略した場合はプロンプトが表示される)
-F フォーワード元ホストアドレス(デフォルト 0.0.0.0)
- -f フォーワード元ホストポート(指定必須)
+ -f フォーワード元ホストポート(指定必須)。-rと共に0を
+ 指定すると、リスナーのポートを接続相手が選択する
-T フォーワード先ホストアドレス(デフォルト host)
-t フォーワード先ホストポート(指定必須)
+ -r リモート(リバース)フォワード: SSHサーバーに-F/-fで
+ 待ち受けさせ、接続をローカルの-T/-t宛てにトンネルで
+ 戻す
```
### wolfSSH scpclient
-scpclientとwolfscpはSSHサーバーと接続を確立し、指定されたファイルをローカルマシンにコピー、あるいはローカルマシンのファイルをサーバーにコピーします。
-wolfSSHのサンプルプログラムを使用する際は、絶対パスを使用する必要があり、ディレクトリは`/`で終わる必要があります。
+scpclient、すなわちwolfscpはSSHサーバーとの接続を確立し、指定されたファイルをサーバーへ、あるいはサーバーからローカルマシンへコピーします。wolfSSHのサンプルプログラムを使用する際は、絶対パスを使用する必要があり、ディレクトリは`/`で終わる必要があります。
scpclientサンプルプログラムには以下のコマンドラインオプションが指定できます:
-
```
+ -h ヘルプを表示して終了する
-H 接続先SSHサーバーアドレス(デフォルト 127.0.0.1)
-p 接続先SSHサーバーポート(デフォルト 22222)
-u ユーザー名(指定必須)
-P パスワード(省略した場合はプロンプトが表示される)
- -L : ローカルマシンのfromからサーバーのtoへコピーする
- -S : サーバーのfromからローカルマシンのtoへコピーする
+ -L : ローカルマシンからサーバーへコピーする
+ -S : サーバーからローカルマシンへコピーする
+ -i ユーザーの秘密鍵ファイル名
+ -j ユーザーの公開鍵ファイル名
+ -J 使用するDER証明書のファイル名
+ -A ホストを検証するためのDER CA証明書のファイル名
+ -X 接続相手と接続相手の証明書のIPチェックを無視する
```
-# wolfSSH sftpclient
-
-sftpclient, wolfsftpはSSHサーバーと接続を確立し、ディレクトリ移動、ファイル取得、ファイル配置、ディレクトリ追加・削除等を実行します。
-
-
+### wolfSSH sftpclient
-sftpclientサンプルプログラムには以下のコマンドラインオプションが指定できます:
+sftpclient、すなわちwolfsftpはSSHサーバーとの接続を確立し、ディレクトリ移動、ファイルの取得と配置、ディレクトリの作成と削除などを実行できるようにします。
+sftpclientサンプルプログラムには以下のコマンドラインオプションが指定できます。一部のオプションは、対応する機能が組み込まれている場合にのみ使用できます。
```
+ -? ヘルプを表示して終了する
-h 接続先SSHサーバーアドレス(デフォルト 127.0.0.1)
-p 接続先SSHサーバーポート(デフォルト 22222)
-u ユーザー名(指定必須)
-P パスワード(省略した場合はプロンプトが表示される)
- -d ローカルマシンのデフォルトのパスを設定
+ -d ローカルマシンのデフォルトのパスを設定する
-N ノンブロッキングソケットを使う
- -e ECC公開鍵を使ってユーザー認証を行う
-l ローカルファイル名
-r リモートファイル名
- -g ローカルファイルをリモートファイルとして送信
- -G リモートファイルをローカルファイルとして受信
+ -g ローカルファイルをリモートファイルとして送信する
+ -G リモートファイルをローカルファイルとして受信する
+ -i ユーザーの秘密鍵ファイル名
+ -j ユーザーの公開鍵ファイル名
+ -k 受け付けるサーバーホスト鍵アルゴリズムのカンマ区切り
+ リストを指定する
+ -W Windows証明書ストア: "store:subject[:flags]"
+ -J 使用するDER証明書のファイル名
+ -A ホストを検証するためのDER CA証明書のファイル名
+ -X 接続相手と接続相手の証明書のIPチェックを無視する
```
-### wolfSSHサーバー
+### wolfsshクライアントアプリケーション
-serverはプレースホルダーとして存在しています。
+wolfsshクライアントアプリケーションは`--enable-sshclient`を指定してビルドされ、サーバーに接続してターミナルを開くか、あるいは接続先の後に指定されたコマンドを実行します。ユーザー名はデフォルトで現在のユーザーとなり、認証には秘密鍵`$HOME/.ssh/id_ecdsa`を使用します。
+```
+ wolfssh [-a] [-E logfile] [-G] [-l login_name] [-p port] [-V]
+ destination [command]
+```
+オプションは次のとおりです:
+```
+ -a SSH-AGENTの使用を試みる(agent対応ビルドのみ)
+ -E logfile ログをstderrではなくこのファイルに追記し、ログ出力を
+ 有効にする
+ -G 使用される設定を出力する
+ -l login_name 接続先に含まれるログイン名を上書きする
+ -p port 接続先のポート番号を上書きする
+ -V バージョンを出力する
+```
-## SCP
+接続先は`[user@]hostname`または`ssh://[user@]hostname[:port]`のいずれかです。デフォルトのポートは22です。オプション`-N`は受け付けられなくなりました。
-wolfSSHはscpの為のサーバー側サポート(サーバーへのファイルコピーとサーバーからのファイルのコピーの両方)を含んでいます。単一ファイルのコピーとディレクトリ単位の再帰的コピーの両方をデフォルトの送信コールバックあるいは受信コールバックでサポートしています。
+### wolfSSHd
-wolfSSHをscpサポート機能を有効にしてコンパイルするには,`--enable-scp` ビルドオプションを指定するかあるいは`WOLFSSL_SCP`マクロ定義を指定してください:
+wolfSSHdは`--enable-sshd`を指定してビルドされるSSHサーバーデーモンで、OpenSSH形式の`sshd_config`ファイルを読み込み、ユーザーをローカルシステムにログインさせます。シェルセッションとexecセッション、およびビルド時に組み込まれていればSCPとSFTPをサポートします。
+wolfSSHdは、実行ユーザー(またはroot)が所有していないホスト鍵ファイルや、グループまたは全ユーザーから読み取り可能なホスト鍵ファイルを拒否します。そのため、wolfSSHdが使用できる鍵のコピーを渡してください。例えば次のようにします:
+```
+ $ sudo install -m 600 keys/gretel-key-ecc.pem /etc/ssh/wolfsshd_key.pem
+ $ sudo ./apps/wolfsshd/wolfsshd -D -h /etc/ssh/wolfsshd_key.pem -p 11111
+ $ ssh @localhost -p 11111
+```
+システムの`sshd_config`ファイルにwolfSSHdがサポートしていないディレクティブがあって停止する場合は、ファイルをコピーしてその行を削除し、そのコピーを`-f`で指定してください。
+
+wolfSSHdには以下のコマンドラインオプションが指定できます:
```
-$ ./configure --enable-scp
-$ make
+ -? ヘルプを表示して終了する
+ -f 使用する設定ファイル(デフォルトは
+ /etc/ssh/sshd_config)
+ -p 待ち受けポート番号
+ -d デバッグモードを有効にする
+ -D フォアグラウンドで実行する(デタッチしない)
+ -h 使用するホスト秘密鍵ファイル
+ -E ログファイルに追記する
+ -t テストモード: 設定を読み込み、待ち受けを行わずに
+ 終了する
```
-wolfSSHサンプルサーバープログラムは単一のscpリクエストを受け付けるように設定されていてwolfSSHライブラリをビルドする際にデフォルトでビルドされます。サンプルサーバーを起動するには以下を実行してください:
+wolfSSHdは次の設定ディレクティブを認識します:
+
+| ディレクティブ | 備考 |
+|--------------------------------|-----------------------------------------------|
+| `Port` | 待ち受けポート。デフォルトは22です。 |
+| `Protocol` | `2`のみ受け付けます。 |
+| `HostKey` | ホスト秘密鍵ファイル。`Match`ブロック内では使用できません。 |
+| `HostCertificate` | ホストX.509証明書ファイル。`Match`ブロック内では使用できません。 |
+| `PasswordAuthentication` | `yes`(デフォルト)または`no`。 |
+| `PubkeyAuthentication` | `yes`(デフォルト)または`no`。 |
+| `PermitEmptyPasswords` | `yes`または`no`(デフォルト)。 |
+| `PermitRootLogin` | `no`(デフォルト)、`yes`、`prohibit-password`(`without-password`とも記述可能)、`forced-commands-only`。UIDが0のすべてのアカウントに適用されます。 |
+| `AuthorizedKeysFile` | 認可済み鍵ファイル。デフォルトはユーザーのホームディレクトリ内の`.ssh/authorized_keys`です。相対パスはホームディレクトリからのパスとみなされます。`%u`はユーザー名に、`%h`はホームディレクトリに、`%%`はパーセント記号に展開されます。それ以外の`%`トークンはエラーになります。 |
+| `StrictModes` | `yes`(デフォルト)または`no`。 |
+| `TrustedUserCAKeys` | ユーザー証明書用のCAファイル。X.509 CA証明書、またはOpenSSH証明書用のOpenSSH CA公開鍵です。 |
+| `AuthorizedUPNDomains` | ユーザーのFPKI証明書のUPNレルムを制限します。 |
+| `LoginGraceTime` | 認証に許容される秒数。デフォルトは120です。 |
+| `UsePrivilegeSeparation` | `yes`、`no`、または`sandbox`。 |
+| `ChrootDirectory` | ユーザーのセッションをchrootするディレクトリ。 |
+| `ForceCommand` | クライアントが要求したコマンドの代わりに実行するコマンド。 |
+| `Banner` | 認証前にクライアントへ送信するファイル。 |
+| `PidFile` | デーモンのプロセスIDを書き込むファイル。 |
+| `Include` | 別の設定ファイルを読み込みます。 |
+| `Match` | `User`または`Group`に対する設定ブロックを開始します。 |
+| `wolfSSH_HostKeyStore`, `wolfSSH_HostKeyStoreSubject`, `wolfSSH_HostKeyStoreFlags` | Windows証明書ストア対応ビルドのみ。証明書ストアからホスト鍵と証明書を読み込みます。 |
+| `wolfSSH_TrustedUserCAStore`, `wolfSSH_WinUserStores`, `wolfSSH_WinUserPvPara`, `wolfSSH_WinUserDwFlags` | Windows証明書ストア対応ビルドのみ。Windows証明書ストアからユーザー証明書のCAを読み込みます。 |
+| `wolfSSH_TrustedSystemCAKeys` | `yes`または`no`。オペレーティングシステムのトラストストアをユーザー証明書のCAとして読み込みます。 |
+
+ディレクティブ`Subsystem`、`ChallengeResponseAuthentication`、`UsePAM`、`X11Forwarding`、`PrintMotd`、`AcceptEnv`、`UseDNS`はOpenSSHの設定ファイルとの互換性のために認識されますが、効果はありません。wolfSSHdはそれぞれについて警告をログに出力します。それ以外のディレクティブはエラーになります。ディレクティブとその値は空白で区切る必要があり、OpenSSHの`Keyword=value`形式は拒否されます。
+
+`Match`ブロックのキーには`User`または`Group`のみを指定できます。`Match User X Group Y`は両方が一致する必要があります。`wolfSSH_`で始まるストア関連のディレクティブと`wolfSSH_TrustedSystemCAKeys`はグローバルにのみ指定でき、`Match`ブロック内では拒否されます。`TrustedUserCAKeys`は`Match`ブロック内でも設定できます。
+
+`StrictModes yes`の場合、認可済み鍵ファイルはシンボリックリンクではない通常ファイルで、ユーザーまたはrootが所有し、パス中にグループまたは全ユーザーが書き込み可能な要素を含んではなりません。`StrictModes no`で緩和されるのは認可済み鍵ファイルのチェックのみです。ホスト鍵ファイルとCAファイルは常にチェックされます。これらはデーモンの実行ユーザーまたはrootが所有している必要があり、ホスト秘密鍵はグループまたは全ユーザーから読み取り可能であってはなりません。
-$ ./examples/server/server
+`PermitRootLogin prohibit-password`はrootのパスワードおよびkeyboard-interactiveによるログインを拒否し、公開鍵によるログインを許可します。`forced-commands-only`はさらに、rootの公開鍵ログインに`ForceCommand`を必要とします。認可済み鍵ファイルの`command=`オプションは強制されません。
-標準scpコマンド群はクライアント側で利用されます。以下はその使用例です。ここで、`scp`は使用しているsshクライアントを表します。
+X.509ユーザー証明書(`--enable-certs`)の場合、CAは`TrustedUserCAKeys`で設定します。証明書は、wolfSSLがFPKIをサポートしている場合はそのUPNによって、そうでない場合はサブジェクトCNの大文字小文字を区別しない一致によって、要求されたアカウントに結び付けられます。FPKIがない場合、Windows以外のシステムでは設定で`AuthorizedKeysFile`も指定する必要があり、証明書はユーザーの認可済み鍵ファイルと照合されます。CAのみに依存するログインは失敗します。FPKIがある場合、`AuthorizedUPNDomains`でUPNレルムを制限できます。
-単一ファイルをサーバーに送信する場合で既定のユーザー"jill"を使うとすると:
+OpenSSHユーザー証明書(`--enable-ossh-certs`)の場合、署名するCAの公開鍵を`TrustedUserCAKeys`に列挙します。証明書のプリンシパルには要求されたユーザーが含まれている必要があり、証明書が有効期間内である必要があります。また、`source-address`制限がある場合はクライアントと一致する必要があります。証明書の`force-command`は要求されたコマンドを上書きします。OpenSSH証明書によるログインはWindowsではサポートされていません。
+
+wolfSSHdのセッションはumask 022(`WOLFSSHD_DEFAULT_UMASK`)で実行されます。
+
+## SCP
+
+wolfSSHはscpの為のサーバー側サポートを含んでおり、サーバーへのファイルコピーとサーバーからのファイルコピーの両方をサポートしています。単一ファイルのコピーとディレクトリ単位の再帰的コピーの両方が、デフォルトの送信・受信コールバックでサポートされています。
+
+wolfSSHをscpサポート付きでコンパイルするには、`--enable-scp` ビルドオプションを指定するか、あるいは`WOLFSSH_SCP`を定義してください:
```
-$ scp -P 22222 jill@127.0.0.1:
+ $ ./configure --enable-scp
+ $ make
```
-同じ単一ファイルをサーバーに送信する場合で、今度はタイムスタンプを使いバーバスモードを使うとすると:
+
+wolfSSHのサンプルechoserverは、wolfSSHがSCPサポート付きでビルドされている場合にscpリクエストを受け付けます。サンプルサーバーを起動するには次を実行してください:
+
+ $ ./examples/echoserver/echoserver
+
+クライアント側では標準のscpコマンドが使用できます。以下はその使用例です。ここで`scp`は使用しているsshクライアントを表します。
+
+既定のサンプルユーザー"jill"を使って単一ファイルをサーバーに送信するには:
+
+ $ scp -P 22222 jill@127.0.0.1:
+
+同じ単一ファイルをサーバーに送信するが、今度はタイムスタンプ付きでバーバスモードを使うには:
+
+ $ scp -v -p -P 22222 jill@127.0.0.1:
+
+あるディレクトリを再帰的にサーバーへコピーするには:
+
+ $ scp -P 22222 -r jill@127.0.0.1:
+
+単一ファイルをサーバーからローカルクライアントへコピーするには:
+
+ $ scp -P 22222 jill@127.0.0.1:
+
+あるディレクトリをサーバーからローカルクライアントへ再帰的にコピーするには:
+
+ $ scp -P 22222 -r jill@127.0.0.1:
+
+## SFTP
+
+wolfSSHはSFTPバージョン3のサーバー側およびクライアント側サポートを提供します。これにより、ファイルシステムを管理するための暗号化された接続を設定することができます。
+
+wolfSSHをSFTPサポート付きでコンパイルするには、`--enable-sftp` ビルドオプションを指定するか、あるいは`WOLFSSH_SFTP`を定義してください:
```
-$ scp -v -p -P 22222 jill@127.0.0.1:
+ $ ./configure --enable-sftp
+ $ make
```
-あるディレクトリを再帰的にサーバーに送信する場合には:
+作成されるSFTPクライアントはexamples/sftpclient/ディレクトリに配置され、サーバーはwolfSSHと同じechoserverを使って実行されます。
```
-$ scp -P 22222 -r jill@127.0.0.1:
+ src/wolfssh$ ./examples/sftpclient/wolfsftp
```
-単一ファイルをサーバーからローカルマシンにコピーするには:
+サポートされているコマンドの完全な一覧は、接続後に"help"と入力することで確認できます。
```
-$ scp -P 22222 jill@127.0.0.1:
-```
+ wolfSSH sftp> help
-サーバーのあるディレクトリを再帰的に受信する場合には:
+ Commands :
+ cd change directory
+ chmod change mode
+ creat create file with given permissions
+ get pulls file(s) from server
+ lcd change local directory
+ lls list local directory
+ ls list current directory
+ mkdir creates new directory on server
+ put push file(s) to server
+ pwd list current path
+ quit exit
+ rename renames remote file
+ reget resume pulling file
+ reput resume pushing file
+ interrupt get/put cmd
+```
+別のシステムに接続する例は次のようになります:
```
-$ scp -P 22222 -r jill@127.0.0.1:
+ src/wolfssh$ ./examples/sftpclient/wolfsftp -p 22 -u user -h 192.168.1.111
```
## シェルサポート
-wolfSSHのechoserverサンプルプログラムはログインを試みるユーザーの為にシェルを起動することができます。この機能はLinuxとmacOSでのみテスト済みです。echoserver.cファイルはユーザー認証コールバック内にユーザーのクレデンシャルを保持するように変更が必要です。あるいはユーザー認証コールバックは提供されたパスワードを検証するように変更する必要があります。
-
-wolfSSHをシェルサポート機能付きでビルドする場合には--enable-shellオプションを指定するかあるいはWOLFSSH_SHELLマクロ定義を指定します:
+wolfSSHのサンプルechoserverは、ログインを試みるユーザーの為にシェルをforkできるようになりました。この機能は現在のところLinuxとmacOSでのみテストされています。echoserver.cファイルは、ユーザー認証コールバック内にユーザーのクレデンシャルを保持するように変更するか、あるいは提供されたパスワードを検証するようにユーザー認証コールバックを変更する必要があります。
+wolfSSHをシェルサポート付きでコンパイルするには、--enable-shellビルドオプションを指定するか、あるいはWOLFSSH_SHELLを定義してください:
```
$ ./configure --enable-shell
$ make
```
-デフォルトでechoserverはシェルを実行しようと試みます。エコーバックの機能をテストしたい場合にはコマンドラインオプションで-fを指定してください:
+試すには、現在のユーザーのパスワードを指定してechoserverを起動し、疑似ターミナルを使用するサンプルクライアントで接続します。ここで``は現在ログインしているユーザーの名前です:
+```
+$ ./examples/echoserver/echoserver -P :junk
+$ ./examples/client/client -t -u -P junk
+```
+デフォルトでechoserverはシェルを起動しようとします。エコーテストの動作を使うには、echoserverにコマンドラインオプション-fを指定してください:
```
$ ./examples/echoserver/echoserver -f
```
+
+## Post-Quantum
+
+wolfSSHは、ML-KEM(旧称Kyber)によるポスト量子鍵交換と、ML-DSA(旧称Dilithium)によるポスト量子署名をサポートしています。
+
+* **ML-KEM**: ハイブリッド鍵交換`mlkem768x25519-sha256`(ML-KEM-768とCurve25519)、`mlkem768nistp256-sha256`(ML-KEM-768とP-256上のECDH)、`mlkem1024nistp384-sha384`(ML-KEM-1024とP-384上のECDH)。利用可能な場合、これらは従来の鍵交換よりも優先して提示されます。
+* **ML-DSA**: ML-DSA-44、ML-DSA-65、ML-DSA-87のパラメータセット(`ssh-mldsa-44`、`ssh-mldsa-65`、`ssh-mldsa-87`)をサーバーホスト鍵とクライアント公開鍵認証の両方でサポートし、ML-DSAとECDSA、Ed25519、Ed448とのコンポジットもサポートします。証明書サポート付きでビルドした場合は、ML-DSA X.509証明書(`x509v3-ssh-mldsa-44`、`x509v3-ssh-mldsa-65`、`x509v3-ssh-mldsa-87`)もサポートされます。
+
+これらのアルゴリズムはwolfCryptによって提供され、liboqsは使用しません。これらをサポートするようにwolfSSLをビルドしてインストールしてください。ML-DSAにはwolfSSL 5.9.2以降が必要です。例えば次のようにします:
+
+```
+ $ ./configure --enable-wolfssh --enable-mlkem --enable-mldsa
+```
+
+その後、通常どおりwolfSSHをコンフィギュレーションしてビルドします:
+
+```
+ $ ./configure
+ $ make all
+```
+
+wolfSSHのクライアントとサーバーは、ML-KEMハイブリッド鍵交換を使うように自動的にネゴシエートします。
+
+```
+ $ ./examples/echoserver/echoserver -f
+
+ $ ./examples/client/client -u jill -P upthehill
+```
+
+クライアント側では、次のような出力が表示されます:
+
+```
+Server said: Hello, wolfSSH!
+```
+
+これらの鍵交換をサポートする他のSSHクライアント(`mlkem768x25519-sha256`に対するOpenSSHなど)もechoserverに接続できます。
+
+
+## Certificate Support
+
+wolfSSHはユーザーを認証する際に、単なる公開鍵の代わりにX.509証明書を受け付けることができます。
+
+wolfSSHをX.509サポート付きでコンパイルするには、`--enable-certs`ビルドオプションを指定するか、あるいは`WOLFSSH_CERTS`を定義してください:
+
+```
+ $ ./configure --enable-certs CPPFLAGS=-DWOLFSSH_NO_FPKI
+ $ make
+```
+
+この例では、同梱の"fred"の証明書が必要なFPKI拡張を持っていないため、FPKIチェックを無効にしています。`WOLFSSH_NO_FPKI`が定義されていない場合、この証明書は拒否されます。
+
+FPKIの有無にかかわらず、接続相手の証明書にはRFC 6187のセクション2.2が適用されます。KeyUsage拡張はdigitalSignatureを示している必要があり、ExtendedKeyUsage拡張はanyExtendedKeyUsageか、検証対象の役割に対応する用途(ユーザー証明書の場合はid-kp-secureShellClientまたはclientAuth、ホスト証明書の場合はid-kp-secureShellServerまたはserverAuth)を指定している必要があります。これらの拡張を持たない証明書は受け付けられます。一致しない場合は`WS_CERT_KEY_USAGE_E`で失敗します。
+
+ユーザーの証明書を検証するためのCAルート証明書を提供するには、echoserverにコマンドラインオプション`-a`を指定してください:
+
+```
+ $ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem
+```
+
+echoserverとクライアントには"fred"という名前の偽のユーザーが用意されており、その証明書が認証に使用されます。
+
+サンプル証明書fred-cert.derを使ったechoserver/client接続の例は次のようになります:
+
+```
+ $ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem -K fred:./keys/fred-cert.der
+
+ $ ./examples/client/client -u fred -J ./keys/fred-cert.der -i ./keys/fred-key.der
+```
+
+## OpenSSH証明書サポート
+
+wolfSSHは、公開鍵によるユーザー認証でOpenSSHユーザー証明書(`*-cert-v01@openssh.com`)を受け付けることができます。wolfSSHをOpenSSH証明書サポート付きでコンパイルするには、`--enable-ossh-certs`ビルドオプションを指定するか、あるいは`WOLFSSH_OSSH_CERTS`を定義してください。証明書のCA鍵、プリンシパル、有効期間、およびforce-commandとsource-addressオプションはユーザー認証コールバックに渡され、コールバックはCAが信頼できることを確認する必要があります。wolfSSHdは`TrustedUserCAKeys`に列挙されたCA鍵を使用します。
+
+## Windows証明書ストア
+
+Windowsでは、ホスト鍵とユーザー鍵をファイルの代わりにWindows証明書ストアから取得できます。これには証明書サポートが必要です。`--enable-windows-cert-store`ビルドオプション(mingwホストのみ)を指定するか、`WOLFSSH_WINDOWS_CERT_STORE`を定義して有効にしてください。RSAのストア証明書は`x509v3-ssh-rsa`として提示され、RFC 6187ではこれをSHA-1で署名するため、`WOLFSSH_NO_SHA1_SOFT_DISABLE`と、`WC_SIG_MIN_HASH_TYPE=WC_HASH_TYPE_SHA`付きでビルドしたwolfSSLも必要です。ECDSAのストア鍵にはどちらも不要です。
+
+echoserverとSFTPクライアントは`-W store:subject[:flags]`オプションを受け付けます。このオプションでは、ストア、証明書のサブジェクトCN、および任意でストアの場所を指定します。ストアの場所はCURRENT_USER(デフォルト)、LOCAL_MACHINE、USERS、CURRENT_SERVICE、SERVICES、CURRENT_USER_GROUP_POLICY、LOCAL_MACHINE_GROUP_POLICY、LOCAL_MACHINE_ENTERPRISEのいずれかで、それぞれ`CERT_SYSTEM_STORE_`プレフィックス付きの形式や数値でも指定できます。`-W`は証明書とその秘密鍵の両方を提供します。SFTPクライアントでは`-i`、`-j`、`-J`と組み合わせることはできません。
+
+```
+ $ ./examples/echoserver/echoserver -W "My:wolfSSH-Server:LOCAL_MACHINE" -a ./keys/ca-cert-ecc.pem
+
+ $ ./examples/sftpclient/wolfsftp -u testuser -W "My:testuser:CURRENT_USER" -A ./keys/ca-cert-ecc.der -X
+```
+
+## TPMホスト鍵
+
+`--enable-tpm`を指定すると、サーバーはECDSAまたはRSAのホスト鍵をTPM 2.0内に保持できるため、ホスト秘密鍵がメモリ上に置かれることはありません。鍵は`wolfSSH_CTX_UseTpmHostKey()`で登録され、交換ハッシュはTPMによって署名されます。`wolfSSH_CTX_UseTpmHostKey()`の後に`wolfSSH_CTX_UseCert_buffer()`を呼び出すことで、X.509ホスト証明書をTPM鍵と組み合わせることができます。echoserverはオプション`-G`でTPMホスト鍵blobをロードします:
+
+```
+ $ ./examples/echoserver/echoserver -G ../wolfTPM/hostkey.bin
+```
+
+サンプル`examples/tpmcertserver/tpmcertserver`と`tpmcertclient`は、TPMホスト鍵と自己署名X.509ホスト証明書の組み合わせを示しています。
+
+## 厳格な鍵交換
+
+wolfSSHは、Terrapin攻撃(CVE-2023-48795)への対策である厳格な鍵交換(strict KEX)を実装しています。これは最初のKEXINITで提示され、接続相手も提示した場合には常に使用されるため、通常の場合は設定が不要です。strict KEXが有効な場合、wolfSSHは接続相手のSSH_MSG_NEWKEYSが到着するまで鍵交換メッセージとSSH_MSG_DISCONNECT以外は何も受け付けず、SSH_MSG_NEWKEYSのたびにパケットシーケンス番号をリセットします。順序外で到着したメッセージは接続を終了させます。
+
+strict KEXを正しく扱えない接続相手と相互運用する必要があるアプリケーションは、`wolfSSH_CTX_SetStrictKex(ctx, 0)`で以降のセッションに対してこれを無効にできます。`wolfSSH_GetStrictKexNegotiated()`は、セッションがこれを使用しているかどうかを報告します。
diff --git a/wolfSSH/src-ja/chapter04.md b/wolfSSH/src-ja/chapter04.md
index f1126d16..2def0580 100644
--- a/wolfSSH/src-ja/chapter04.md
+++ b/wolfSSH/src-ja/chapter04.md
@@ -27,3 +27,17 @@ wolfSFTPライブラリヘッダファイルもwolfsshディレクトリに含
すべてのメインソースファイルは、ルートディレクトリにある **src** ディレクトリにありま
す。
+
+**wolfssh** ディレクトリにある他のヘッダーは、オプション機能を宣言しています。SCP用の **wolfssh/wolfscp.h**、ssh-agentサポート用の **wolfssh/agent.h**、X.509証明書用の **wolfssh/certman.h**、鍵生成用の **wolfssh/keygen.h** です。
+
+## アルゴリズムのネゴシエーション
+
+鍵交換の際、クライアントとサーバーはそれぞれアルゴリズムのリストを提示し、クライアントのリストの中でサーバーもサポートしている最初のアルゴリズムが使用されます。このリストは `wolfSSH_CTX_SetAlgoList*()` および `wolfSSH_SetAlgoList*()` 関数で変更できます。これらの関数は入力を検証し、未知のアルゴリズムを含むリストに対しては `WS_INVALID_ALGO_ID` を返します。暗号とMACは接続の方向ごとに個別にネゴシエーションされるため、2つの方向で異なるものが使用される場合があります。
+
+SHA-1を使用するアルゴリズムとAES-CBC暗号はコンパイルされますが、デフォルトでは提示されません。これらはアルゴリズムリストに追加し直すことができるほか、`WOLFSSH_NO_SHA1_SOFT_DISABLE` または `WOLFSSH_NO_AES_CBC_SOFT_DISABLE` を指定してビルドすることでデフォルトで提示されるようにもできます。"none" 暗号とMACは、`--enable-none-cipher` を指定したビルドでのみネゴシエーションできます。
+
+wolfSSHは厳格な鍵交換(Terrapin攻撃への対策)を実装しており、両方のピアが提示した場合に使用されます。これはデフォルトで有効になっており、`wolfSSH_CTX_SetStrictKex()` で無効にできます。
+
+## 鍵の再交換
+
+現在の鍵で送受信したバイト数がハイウォーターマーク(`wolfSSH_SetHighwater()`、デフォルトは `DEFAULT_HIGHWATER_MARK`)に達するか、送受信したパケット数がパケット数のハイウォーターマーク(`wolfSSH_SetMsgHighwater()`、デフォルトは `WOLFSSH_DEFAULT_MSG_HIGHWATER_MARK`)に達すると、wolfSSHはハイウォーターコールバックを呼び出します。デフォルトのコールバックは新しい鍵交換を開始します。別のコールバックは `wolfSSH_SetHighwaterCb()` で設定できます。アプリケーションは `wolfSSH_TriggerKeyExchange()` で鍵交換を開始することもできます。`wolfSSH_RekeyPending()` は鍵交換が進行中かどうかを報告します。
diff --git a/wolfSSH/src-ja/chapter05.md b/wolfSSH/src-ja/chapter05.md
index 93bd5bc4..77f2adfc 100644
--- a/wolfSSH/src-ja/chapter05.md
+++ b/wolfSSH/src-ja/chapter05.md
@@ -9,15 +9,14 @@ wolfSSH は、ユーザ認証メッセージで提供されたユーザ名、パ
ルバック関数は適切な検索を実行して応答を返します。ユーザはそのためのコールバック
を提供する必要があります。
-コールバック関数は失敗を示すエラーコードあるいは成功のいずれかを返さなければなりません。ライブラリは全ての失敗をロギング目的を除いて同一に扱います。すなわち、ユーザー認証失敗メッセージを再試行するクライアントに返信します。
+コールバック関数は失敗を示すエラーコードあるいは成功のいずれかを返さなければなりません。ライブラリは全ての失敗をロギング目的を除いて同一に扱います。すなわち、ユーザー認証失敗メッセージを再試行するクライアントに返信します。例外は `WOLFSSH_USERAUTH_REJECTED` で、これは強制的な拒否を意味します。サーバーは失敗メッセージを送信した後、セッションを終了します。また、サーバーは一定回数(デフォルトは 6 回)認証に失敗したクライアントを切断します。`wolfSSH_CTX_SetMaxAuthAttempts()` を参照してください。
-パスワード検索を行う場合には平文のパスワードがコールバック関数に渡されます。ユーザー名とパスワードは一致するか検査され成功を返します。成功時にはSSHハンドシェークはただちに続行されます。現時点ではパスワードの変更はサポートされません。
+`WOLFSSH_USERAUTH_SUCCESS` の値は 0 で、`WS_SUCCESS` と同じであることに注意してください。デフォルトで 0 を返すコールバックや、ヘルパー関数からの `WS_SUCCESS` をそのまま返すコールバックは、クライアントを認証してしまいます。コールバックが明示的に処理しない認証タイプやコードパスでは `WOLFSSH_USERAUTH_FAILURE` を返してください。
+
+パスワード検索を行う場合には平文のパスワードがコールバック関数に渡されます。ユーザー名とパスワードは一致するか検査され成功を返します。成功時にはSSHハンドシェークはただちに続行されます。パスワードの変更はサポートされません。パスワード変更の要求は、コールバックを呼び出すことなく拒否されます。
公開鍵検索では、クライアントからの公開鍵blob(バイナリデータ) がコールバック関数に渡されます。
-公開鍵はサーバーの有効なクライアント公開鍵のリストと照合されます。提供された公開
-鍵がそのユーザーの既知の公開鍵と一致する場合。 wolfSSH ライブラリは
-RFC4252§7 に記述されたプロセスに従ってユーザー認証署名の実際の検証を実行しま
-す。
+コールバックは、その公開鍵をそのユーザーに対するサーバーの有効な公開鍵のリストと照合する必要があります。チェックしていない鍵に対して成功を返すと、クライアントが提示するあらゆる鍵を許可することになります。wolfSSH ライブラリは RFC 4252 セクション 7 に記述されたプロセスに従ってユーザー認証署名の実際の検証を実行します。2048 ビット(`WOLFSSH_RSA_MIN_KEY_BITS`)未満の RSA 鍵は拒否されます。
一般に公開鍵の場合、サーバーは ssh-keygen ユーティリティによって生成されたユーザ
ーの公開鍵を保存するか、または公開鍵のフィンガープリントを保存します。ユーザーに
@@ -29,30 +28,18 @@ ID の署名とユーザー認証要求メッセージを提供します。サ
ユーザ認証コールバック関数プロトタイプは次の通りです:
```
-int UserAuthCb(byte authType , const WS_UserAuthData* authData , void* ctx );
+int UserAuthCb(byte authType, WS_UserAuthData* authData, void* ctx);
```
この関数プロトタイプのタイプは:
```
WS_CallbackUserAuth
```
-パラメータ `authType` は:
-
-```
-WOLFSSH_USERAUTH_PASSWORD
-```
-
-か、あるいは
-
-```
-WOLFSSH_USERAUTH_PUBLICKEY
-```
-
-です。
+パラメータ `authType` は、次のセクションに示す認証タイプ定数のいずれかです。
パラメータ authData は認証データへのポインタです。
-WS_UserAuthData の詳細は5.4を参照してください。
+WS_UserAuthData の詳細は5.4を参照してください。
パラメータ **ctx** はアプリケーション定義のコンテキストです。 wolfSSH はコンテキスト
内のデータについては何の知識も持たず何も操作しません。コールバック関数へのコンテキストポイ
@@ -64,9 +51,14 @@ WS_UserAuthData の詳細は5.4を参照してください。
```
WOLFSSH_USERAUTH_PASSWORD
+WOLFSSH_USERAUTH_KEYBOARD
+WOLFSSH_USERAUTH_KEYBOARD_SETUP
WOLFSSH_USERAUTH_PUBLICKEY
+WOLFSSH_USERAUTH_NONE
```
+`WOLFSSH_USERAUTH_KEYBOARD_SETUP` は、クライアントに送信する keyboard-interactive のプロンプトをコールバックに要求します。`WOLFSSH_USERAUTH_NONE` は `WOLFSSH_ALLOW_USERAUTH_NONE` を指定したビルドでのみ使用されます。
+
## コールバック関数の戻り値定数
以下は、コールバック関数がライブラリに返すリターンコードです。 失敗コードはコー
@@ -79,34 +71,47 @@ invalid username
invalid password
invalid public key
```
-
-ライブラリはクライアントに成功または失敗のみを示し、下記の特定の失敗タイプはロギングに
-のみ使用されます。
+サーバーはクライアントに _成功_ または _失敗_ を示し、特定の失敗タイプはロギングに
+のみ使用されます。コールバックがライブラリに返せる特別な成功と失敗の応答として
+_partial-success_(部分的成功)があります。これは、その認証タイプは成功したが、完
+全に認証するには別の認証タイプがまだ必要であることを意味します。サーバーは partial-success
+フラグをセットしたユーザー認証失敗メッセージをクライアントに送信します。
```
WOLFSSH_USERAUTH_SUCCESS
WOLFSSH_USERAUTH_FAILURE
+WOLFSSH_USERAUTH_INVALID_AUTHTYPE
WOLFSSH_USERAUTH_INVALID_USER
WOLFSSH_USERAUTH_INVALID_PASSWORD
+WOLFSSH_USERAUTH_REJECTED
WOLFSSH_USERAUTH_INVALID_PUBLICKEY
+WOLFSSH_USERAUTH_PARTIAL_SUCCESS
+WOLFSSH_USERAUTH_SUCCESS_ANOTHER
+WOLFSSH_USERAUTH_WOULD_BLOCK
```
+`WOLFSSH_USERAUTH_SUCCESS_ANOTHER` は、keyboard-interactive のラウンドが成功し、さらに別のラウンドを要求することを示します。`WOLFSSH_USERAUTH_WOULD_BLOCK` は、同じリクエストで後からコールバックを再度呼び出すようライブラリに要求します。`WOLFSSH_USERAUTH_REJECTED` はセッションを終了させます。
+
## コールバック関数のデータタイプ
クライアントデータは、`WS_UserAuthData` という構造体でコールバック関数に渡され
-ます。 メッセージ内のデータへのポインタが含まれています。 このフィールドには共通フィールドとUNIONフィールドをメンバに持っています。メソッド固有のフィールドは、ユーザー認証データ内のUNIONフィールドにあります。
-
+ます。 メッセージ内のデータへのポインタが含まれています。 この構造体には共通フィールドを持ちます。メソッド固有のフィールドは、ユーザー認証データ内の構造体の union にあります。
```
typedef struct WS_UserAuthData {
- byte authType ;
- byte* username ;
- word32 usernameSz ;
- byte* serviceName ;
- word32 serviceNameSz ; n
+ byte type;
+ const byte* username;
+ word32 usernameSz;
+ const byte* serviceName;
+ word32 serviceNameSz;
+ const byte* authName;
+ word32 authNameSz;
union {
- WS_UserAuthData_Password password ;
- WS_UserAuthData_PublicKey publicKey ;
+ WS_UserAuthData_Password password;
+ WS_UserAuthData_PublicKey publicKey;
+#ifdef WOLFSSH_KEYBOARD_INTERACTIVE
+ WS_UserAuthData_Keyboard keyboard;
+#endif
} sf;
} WS_UserAuthData;
```
@@ -115,21 +120,68 @@ typedef struct WS_UserAuthData {
username および usernameSz パラメータは、クライアントによって提供されるユーザ名とオクテット単位のサイズです。
-password フィールドと passwordSz フィールドは、クライアントのパスワードとそのオクテット単位のサイズです。
-
-クライアントから提供された場合は設定されますが、パラメータ hasNewPassword、newPassword、および newPasswordSz は使用されません。 現時点でクライアントにパスワードを変更するように指示するメカニズムはありません。
+`password` フィールドと `passwordSz` フィールドは、クライアントのパスワードとそのオクテット単位のサイズです。
+フィールド `hasNewPassword`、`newPassword`、`newPasswordSz` は将来の使用のために用意されています。新しいパスワードを含むリクエストは、コールバックを呼び出すことなく拒否されます。
```
typedef struct WS_UserAuthData_Password {
- uint8_t* password ;
- uint32_t passwordSz ;
- uint8_t hasNewPasword ;
- uint8_t* newPassword ;
- uint32_t newPasswordSz ;
+ const byte* password;
+ word32 passwordSz;
+ /* The following are present for future use. */
+ byte hasNewPassword;
+ const byte* newPassword;
+ word32 newPasswordSz;
} WS_UserAuthData_Password;
```
+### Keyboard-Interactive
+
+Keyboard-Interactive モードでは、サーバーからクライアントへ任意の数のプロンプトと
+レスポンスをやり取りできます。情報を格納する構造体は次の通りです:
+
+```c
+typedef struct WS_UserAuthData_Keyboard {
+ word32 promptCount;
+ word32 responseCount;
+ word32 promptNameSz;
+ word32 promptInstructionSz;
+ word32 promptLanguageSz;
+ byte* promptName;
+ byte* promptInstruction;
+ byte* promptLanguage;
+ word32* promptLengths;
+ word32* responseLengths;
+ byte* promptEcho;
+ byte** responses;
+ byte** prompts;
+} WS_UserAuthData_Keyboard;
+```
+
+クライアント側では、認証中に `promptName` と `promptInstruction` が認証に関する情
+報をユーザーに示します。 `promptLanguage` フィールドは API の非推奨部分であり、無
+視されます。
+
+`promptCount` はプロンプトがいくつあるかを示します。 `prompts` はプロンプトの配列
+を保持し、`promptLengths` は `prompts` 内の各プロンプトの長さを保持する配列です。
+`promptEcho` は、各プロンプトのレスポンスをユーザーが入力する際にエコー表示するか
+どうかを示すブール値の配列です。
+
+逆に、`responseCount` は与えられるレスポンスの数を設定します。 `responses` と
+`responseLengths` はプロンプトに対するレスポンスデータを保持します。
+
+サーバーは、`authType` に `WOLFSSH_USERAUTH_KEYBOARD_SETUP` を指定してユーザー認証
+コールバックを呼び出すことでプロンプトを取得します。コールバックは `promptCount`、
+`prompts`、`promptLengths`、`promptEcho` を設定し、`WOLFSSH_USERAUTH_SUCCESS` を返す
+必要があります。その他の `prompt*` 項目はオプションです。指定できるプロンプトは最大
+`WOLFSSH_MAX_PROMPTS`(64)個です。セットアップの呼び出しから
+`WOLFSSH_USERAUTH_REJECTED` を返すとセッションが終了し、それ以外の失敗を返すとその
+認証試行が失敗します。
+
+サーバーは、後続のリクエスト/レスポンスのラウンドを実行するために、
+`WS_CallbackUserAuth` コールバックから `WOLFSSH_USERAUTH_SUCCESS_ANOTHER` を返す必
+要があります。
+
### 公開鍵
wolfSSH は複数の公開鍵アルゴリズムをサポートします。 publicKeyType メンバは、使用されているアルゴリズム名を指します。
@@ -148,12 +200,34 @@ hasSignature フィールドが設定され、signature フィールドがクラ
```
typedef struct WS_UserAuthData_PublicKey {
- byte* publicKeyType;
+ const byte* dataToSign;
+ const byte* publicKeyType;
word32 publicKeyTypeSz;
- byte* publicKey;
+ const byte* publicKey;
word32 publicKeySz;
+ const byte* privateKey;
+ word32 privateKeySz;
byte hasSignature;
- byte* signature;
+ const byte* signature;
word32 signatureSz;
+ byte isCert:1;
+ word32 dataToSignSz;
+#ifdef WOLFSSH_OSSH_CERTS
+ byte isOsshCert:1;
+ const byte* caKey;
+ word32 caKeySz;
+ const byte* principals;
+ word32 principalsSz;
+ word64 validAfter;
+ word64 validBefore;
+ const byte* forceCommand;
+ word32 forceCommandSz;
+ const byte* sourceAddress;
+ word32 sourceAddressSz;
+#endif
} WS_UserAuthData_PublicKey;
```
+
+`isCert` フィールドは、クライアントが X.509 証明書を提示した場合に設定され、その場合 `publicKey` は証明書を保持します。ライブラリは `wolfSSH_CTX_AddRootCert_buffer()` でロードされたルート証明書に対してその証明書を検証済みです。`WOLFSSH_OSSH_CERTS` を指定したビルドでは、クライアントが OpenSSH 証明書を提示した場合に `isOsshCert` フィールドが設定されます。ライブラリは証明書の署名を検証してフィールドを解析しますが、コールバックは `caKey` が信頼できる CA 鍵であることを確認する必要があります。また、`principals`(名前のリスト)、有効期間(エポックからの秒数で表す `validAfter` と `validBefore`)、および `forceCommand` と `sourceAddress`(カンマ区切りの CIDR リスト)オプションも確認すべきです。これらは存在しない場合は NULL になります。
+
+`privateKey` と `privateKeySz` フィールドは、クライアントのユーザー認証コールバックが自身の鍵を提供するために使用します。
diff --git a/wolfSSH/src-ja/chapter06.md b/wolfSSH/src-ja/chapter06.md
index 7670286d..b253a94e 100644
--- a/wolfSSH/src-ja/chapter06.md
+++ b/wolfSSH/src-ja/chapter06.md
@@ -2,68 +2,74 @@
以下の関数を使って、ユーザー認証コールバック関数の設定を行います。
-
## ユーザ認証コールバック関数の設定
```
-void wolfSSH_SetUserAuth(WOLFSSH_CTX* ctx , WS_CallbackUserAuthcb);
+void wolfSSH_SetUserAuth(WOLFSSH_CTX* ctx , WS_CallbackUserAuth
+cb );
```
+コールバック関数は、wolfSSH セッションオブジェクトを作成するために使用される WOLFSSH_CTX オブジェクトに設定されます。この CTX を使用するすべてのセッションは同じコールバック関数を使用します。このコンテキストは、コールバック関数のコンテキストと混同しないでください。
-コールバック関数は、wolfSSH セッションオブジェクトを作成するために使用される
-WOLFSSH_CTX オブジェクトに設定されます。 この CTX を使用するすべてのセッション
-は同じコールバック関数を使用します。 このコンテキストは、コールバック関数のコン
-テキストと混同しないでください。
+## ユーザ認証コールバックコンテキストデータの設定
+```
+void wolfSSH_SetUserAuthCtx(WOLFSSH* ssh , void* ctx );
+```
+それぞれの wolfSSH セッションはそれ自身のユーザ認証コンテキストデータを持っているか、あるいはいくつかを共有することもできます。wolfSSH ライブラリはこのコンテキストデータの内容について何も感知しません。データの作成、解放、および必要に応じた排他制御の提供は、アプリケーションの責任です。コールバックはライブラリからこのコンテキストデータを受け取ります。
-## ユーザ認証コールバックコンテクストデータの設定
+## ユーザ認証コールバックコンテキストデータの取得
```
-void wolfSSH_SetUserAuthCtx(WOLFSSH* ssh , void* ctx);
+void* wolfSSH_GetUserAuthCtx(WOLFSSH* ssh );
```
-それぞれの wolfSSH セッションはそれ自身のユーザ認証コンテキストデータを持ってい
-るか、あるいはいくつかを共有することもできます。 wolfSSH ライブラリはこのコンテ
-キストデータの内容について何も感知しません。 データの作成、解放、および必要に応
-じた排他制御の提供は、アプリケーションの責任です。 コールバックはライブラリから
-このコンテキストデータを受け取ります。
+提供された wolfSSH セッションに保存されたユーザ認証コンテキストデータへのポインターを返します。これはセッションを作成するために使用される wolfSSH のコンテキストデータと混同しないよう注意してください。
-## ユーザ認証コールバックコンテクストデータの取得
+## Keyboard-Interactive プロンプトの設定
+
+Keyboard-Interactive のプロンプト専用のコールバックはありません。前章で説明したとおり、サーバーは `authType` に `WOLFSSH_USERAUTH_KEYBOARD_SETUP` を指定してユーザ認証コールバックを呼び出し、クライアントに送信するプロンプトを取得します。Keyboard-Interactive 認証には `--enable-keyboard-interactive`(`WOLFSSH_KEYBOARD_INTERACTIVE`)を指定したビルドが必要です。
+
+## 許可する認証タイプのコールバック関数の設定
```
-void* wolfSSH_GetUserAuthCtx(WOLFSSH* ssh);
+void wolfSSH_SetUserAuthTypes(WOLFSSH_CTX* ctx, WS_CallbackUserAuthTypes cb);
```
-提供された wolfSSH セッションに保存されたユーザ認証コンテキストデータへのポイン
-タを返します。 これはセッションを作成するために使用される wolfSSH のコンテキスト
-データと混同しないよう注意してください。
-## Echoserver サンプルプログラムのユーザ認証
+このオプションのコールバックは、サーバーが継続可能な認証タイプとしてクライアントに提示する認証タイプのセットを、`WOLFSSH_USERAUTH_*` タイプ定数のビットマスクとして返します。このコールバックがない場合、サーバーはパスワード、公開鍵、および組み込まれている場合は keyboard-interactive を提示します。
-サンプルの echoserver は、パスワードと公開鍵を使用してサンプルユーザーとの認証コ
-ールバックを実装しています。 コールバックの例と wsUserAuth は、wolfSSH コンテキ
-ストに設定されています:
+## ユーザ認証結果コールバック関数の設定
+```
+void wolfSSH_SetUserAuthResult(WOLFSSH_CTX* ctx, WS_CallbackUserAuthResult cb);
+void wolfSSH_SetUserAuthResultCtx(WOLFSSH* ssh, void* userAuthResultCtx);
+```
+
+このオプションのコールバックには、ライブラリによる公開鍵ユーザ認証署名のチェック結果が通知されます。成功が通知された際に `WS_SUCCESS` 以外の値を返すと、その認証試行は失敗になります。
+## 最大認証試行回数の設定
```
-wolfSSH_SetUserAuth(ctx, wsUserAuth);
+int wolfSSH_CTX_SetMaxAuthAttempts(WOLFSSH_CTX* ctx, int value);
+int wolfSSH_SetMaxAuthAttempts(WOLFSSH* ssh, int value);
```
-パスワードファイルの例(passwd.txt)は、コロンで区切られたユーザー名とパスワー
-ドの単純なリストです。 このファイル内に存在するデフォルトは次のとおりです:
+サーバーは、ユーザ認証にこの回数失敗したクライアントを切断します。デフォルトは `DEFAULT_MAX_AUTH_ATTEMPTS`(6)です。0 以下の値を指定するとデフォルトに戻ります。
+
+## Echoserver サンプルプログラムのユーザ認証
+
+サンプルの echoserver は、パスワードと公開鍵を使用してサンプルユーザーとの認証コールバックを実装しています。コールバックの例である wsUserAuth は、wolfSSH コンテキストに設定されています:
+```
+wolfSSH_SetUserAuth(ctx, wsUserAuth);
+```
+パスワードファイルの例(passwd.txt)は、それぞれコロンで区切られたユーザー名とパスワードの単純なリストです。このファイル内に存在するデフォルトは次のとおりです。
```
jill:upthehill
jack:fetchapail
```
-
-公開鍵ファイルは、ssh-keygen を実行して得た公開鍵出力を 2 つ連結したものです。
-
+公開鍵ファイルは、ssh-keygen を 2 回実行して得た公開鍵出力を連結したものです。
```
ssh-rsa AAAAB3NzaC1yc...d+JI8wrAhfE4x hansel
ssh-rsa AAAAB3NzaC1yc...UoGCPIKuqcFMf gretel
```
+すべてのユーザー認証データは、ユーザー名と、パスワードまたは公開鍵 blob の SHA-256 ハッシュのペアをリンクリスト形式で格納されています。
-すべてのユーザー認証データは、ユーザー名と、パスワードまたは公開鍵blob のSHA-256 ハッシュのペアをリンクリスト形式で格納されています。
-
-設定ファイル内の公開鍵blob は Base64エンコードされており、ハッシュ前にデコードされます。 ユーザ名 - ハッシュペアのリストへのポインタは新しい wolfSSH セッションに保存されます。
-
+設定ファイル内の公開鍵 blob は Base64 エンコードされており、ハッシュ前にデコードされます。ユーザ名 - ハッシュペアのリストへのポインターは新しい wolfSSH セッションに保存されます:
```
wolfSSH_SetUserAuthCtx(ssh, &pwMapList);
```
-
-コールバック関数は、最初に authType が公開鍵かパスワードかを調べ、そうでない場合は一般ユーザー認証失敗エラーコードを返します。次に、authData を介して渡された公開鍵またはパスワードをハッシュします。ユーザー名をリスト中から検索し見つけられない場合は無効ユーザーエラーコードを返します。ユーザー名が見つかった場合には、渡された公開鍵またはパスワードの計算ハッシュとペアに格納されているハッシュを比較します。一致した場合、関数は成功を返します。それ以外の場合、無効なパスワードまたは公開鍵
-のエラーコードを返します。
+コールバック関数は、最初に authType が公開鍵かパスワードかを調べ、そうでない場合は一般ユーザー認証失敗エラーコードを返します。次に、authData を介して渡された公開鍵またはパスワードをハッシュします。ユーザー名をリスト中から検索し、見つけられない場合は無効ユーザーエラーコードを返します。ユーザー名が見つかった場合には、渡された公開鍵またはパスワードの計算ハッシュとペアに格納されているハッシュを比較します。一致した場合、関数は成功を返します。それ以外の場合、無効なパスワードまたは公開鍵のエラーコードを返します。
diff --git a/wolfSSH/src-ja/chapter07.md b/wolfSSH/src-ja/chapter07.md
index f35e3864..b8b55665 100644
--- a/wolfSSH/src-ja/chapter07.md
+++ b/wolfSSH/src-ja/chapter07.md
@@ -4,49 +4,45 @@
wolfSSLは既にwolfSSHの使用のためにビルドが済んでいると仮定しています。wolfSSLのビルド方法については2章を参照してください。
-SFTPサポート機能を有効にしてwolfSSHをビルドする場合には、autotoolsを使ったビルドのビルドでは--enable-sftpオプションを指定します。autotoolsを使わない場合にはWOLFSSH_SFTPマクロ定義を指定します。コマンドラインは次のようになります:
-
-
+SFTPサポート機能を有効にしてwolfSSHをビルドする場合には、autotoolsを使ったビルドでは--enable-sftpオプションを指定します。autotoolsを使わない場合にはWOLFSSH_SFTPマクロ定義を指定します。コマンドラインは次のようになります:
```
-$ ./configure --enable-sftp && make
+./configure --enable-sftp && make
```
-
-リード・ライトをハンドリングするためのバッファサイズはデフォルトで1024バイトです。この値はアプリケーションがより少ないリソース消費に抑えたい場合やより大きなバッファが必要な場合には変更することができます。サイズ変更は`WOLFSSH_MAX_SFTP_RW`マクロを定義して行います。設定例は:
+リード・ライトをハンドリングするためのバッファサイズはデフォルトで32768バイトです。この値はアプリケーションがより少ないリソース消費に抑えたい場合やより大きなバッファが必要な場合には変更することができます。デフォルトサイズの変更は、コンパイル時に`WOLFSSH_MAX_SFTP_RW`マクロを定義して行います。設定例は次のとおりです:
```
-$ ./configure --enable-sftp C_EXTRA_FLAGS="WOLFSSH_MAX_SFTP_RW=2048"
+./configure --enable-sftp CPPFLAGS="-DWOLFSSH_MAX_SFTP_RW=2048"
```
+サーバーは各セッションに対して、最大`WOLFSSH_MAX_SFTP_HANDLES`(64)個のファイルハンドルおよびディレクトリハンドルのオープンを許可します。ファイルデータバッファは解放前にゼロクリアされます。configureオプション`--disable-sftp-zeroize`(`WOLFSSH_NO_SFTP_BUFFER_ZERO`)を指定するとこれを無効にできます。
+
## wolfSSH SFTP アプリケーションの使用
-SFTPサーバーとクライアントアプリケーションはwoflSSHにバンドルされています。両アプリケーションともautotoolsを使ってwolfSSHライブラリをSFTPサポートを有効にしてビルドする際に同時にビルドされて生成されます。クライアントアプリケーションはwolfsftp/clientフォルダに存在しておりwolfsftpと呼ばれます。
+SFTPサーバーとクライアントアプリケーションはwolfSSHにバンドルされています。両アプリケーションともautotoolsを使ってwolfSSHライブラリをSFTPサポートを有効にしてビルドする際に同時にビルドされて生成されます。サーバーアプリケーションはexamples/echoserverフォルダに存在しておりechoserverと呼ばれます。クライアントアプリケーションはexamples/sftpclientフォルダに存在しておりwolfsftpと呼ばれます。
サーバーの起動例を示します。起動するとSFTPクライアントからの接続を待ち受けます:
-
```
-$ ./examples/echoserver/echoserver
+./examples/echoserver/echoserver
```
-
-ここで、コマンドはルートwolfSSHディレクトリから実行します。サーバーはSSHとSFTPコマンドの両方を処理することができます。
+ここで、コマンドはルートwolfSSHディレクトリから実行します。サーバーはSSHとSFTPの両方の接続を処理することができます。
一方、クライアントを起動するには特定のユーザー名を与えて起動します:
-
```
-$ ./wolfsftp/client/wolfsftp -u
+$ ./examples/sftpclient/wolfsftp -u
```
+テストを実行するためのデフォルトの"username:password"は"jack:fetchapail" または "jill:upthehill"です。デフォルトのポートは22222です。
-デフォルトの“username:password”は“jack:fetchapail” または “jill:upthehill”を与えます。デフォルトのポートは22222です。
-
-サポートしているコマンドの全リストは接続後に、"help"と入力すると得られます。
-
-
+サポートしているコマンドの全リストは、接続後に"help"と入力すると得られます。
```
wolfSSH sftp> help
Commands :
cd change directory
chmod change mode
+ creat create file with given permissions
get pulls file(s) from server
+ lcd change local directory
+ lls list local directory
ls list current directory
mkdir creates new directory on server
put push file(s) to server
@@ -58,9 +54,23 @@ Commands :
interrupt get/put cmd
```
-他のシステムへの接続例は:
-
+他のシステムへの接続例は次のとおりです:
```
src/wolfssh$ ./examples/sftpclient/wolfsftp -p 22 -u user -h 192.168.1.111
```
+## SFTPサーバーの開始ディレクトリと制限
+
+SFTPサーバーのセッションには、互いに独立した2つのパス設定があります:
+
+- 開始パスは、セッションが開始するディレクトリで、相対パスはこのディレクトリを基準に解決されます。これはアクセスの許可も拒否も行いません。`wolfSSH_SFTP_SetDefaultPath()`で設定します。
+- 制限ルートは、セッションのアクセスが制限されるディレクトリです。このディレクトリの外側に解決されるパスへのリクエストは`WS_PERMISSIONS`で失敗します。ルートが設定されていないか、ルートが"/"の場合、セッションは制限されません。`wolfSSH_SFTP_SetConfinePath()`で設定します。
+
+開始パスを設定してもセッションは制限されません。2つを分けておくことで、サーバーは制限ルートの深い階層でセッションを開始したり、開始位置を変えずにセッションを制限したり、あるいはどちらも行わずにオペレーティングシステムにアクセスを制限させたりできます(wolfSSHdは、認証されたユーザーとしてセッションを実行することで最後の方法をとっています)。
+
+パスは字句的に解決されるため、シンボリックリンクがルート内に留まることを証明できません。そのため、制限されたセッションでは、ルート配下のすべてのシンボリックリンクを拒否します。これにはルート内を指すリンクも含まれます。シンボリックリンクを含まないツリーを提供するか、あるいは`WOLFSSH_NO_SYMLINK_CHECK`を指定してビルドし、このチェックとそれによる保護を外してください。ルート自体はチェックされないため、ルートはサーバーが管理し、パス中にシンボリックリンクを含まないディレクトリにすべきです。チェックは操作がパスを使用する前に行われるため、同じユーザーとして実行されているプロセスがその間にパスの要素をリンクに差し替えることは依然として可能です。悪意のあるユーザーが存在しうるマルチユーザー環境では、オペレーティングシステムのjailも併用してください。
+
+サンプルのechoserverは、オプション`-d`で開始パスを設定し、オプション`-D`を指定するとセッションをそのパスに制限します:
+```
+./examples/echoserver/echoserver -d /srv/sftp -D
+```
diff --git a/wolfSSH/src-ja/chapter08.md b/wolfSSH/src-ja/chapter08.md
index 4b2a019d..e04e0950 100644
--- a/wolfSSH/src-ja/chapter08.md
+++ b/wolfSSH/src-ja/chapter08.md
@@ -38,3 +38,20 @@ src/wolfssl$ ./examples/client/client -p 12345
上記実行により、wolfSSLクライアントとサーバーサンプルプログラム間でportfwdサンプルプログラムと同様のポートフォワーディングを行います。
+portfwdサンプルプログラムは、オプション`-r`を指定してリモート(リバース)フォワーディングを設定することもできます。この場合、SSHサーバーに`-F`/`-f`のアドレスとポートで待ち受けるよう要求し、サーバーはそこに対して行われた各接続をportfwdへトンネルで戻し、portfwdはそれをローカルの`-T`/`-t`宛てに接続します。`-r`を指定した場合、`-f`のポートに0を指定するとサーバーがポートを選択します。
+
+```
+src/wolfssl$ ./examples/server/server
+src/wolfssh$ ./examples/portfwd/portfwd -p 22 -u -r \
+ -f 12345 -t 11111
+src/wolfssl$ ./examples/client/client -p 12345
+```
+
+## ポートフォワーディングAPI
+
+アプリケーションは、`wolfSSH_CTX_SetFwdCb()`で設定するフォワーディングコールバックと、`wolfSSH_SetFwdCbCtx()`で設定するそのコンテキストによってフォワーディングを制御します。コールバックはすべてのフォワーディングチャネルについて参照されます。受信した"direct-tcpip"または"forwarded-tcpip"チャネルのオープンは、フォワーディングコールバックが設定されていて、その`WOLFSSH_FWD_LOCAL_SETUP`呼び出しが成功しない限り拒否されます。成功した各`WOLFSSH_FWD_LOCAL_SETUP`には後で1回の`WOLFSSH_FWD_LOCAL_CLEANUP`が対応するため、コールバックはその状態を二重に解放してはなりません。サーバーでは、クライアントからの"tcpip-forward"リクエストによって`WOLFSSH_FWD_REMOTE_SETUP`でフォワーディングコールバックが呼び出されます。ポート0に対するリクエストの場合、コールバックは`WS_FWD_SUCCESS`ではなく割り当てたポートを返します。
+
+クライアントは`wolfSSH_FwdRemoteSetup()`でリモートフォワーディングを設定します。この関数は、サーバーにアドレスとポートで待ち受け、そこに対して行われた接続を"forwarded-tcpip"チャネルとして返送するよう要求します。停止するには`wolfSSH_FwdRemoteCancel()`を使用します。クライアントは、`wolfSSH_FwdRemoteSetup()`で登録したフォワードと一致しない"forwarded-tcpip"チャネルのオープンを拒否するため、何も登録していないクライアントはすべて拒否します。登録したバインドアドレスが""、"*"、"0.0.0.0"、またはIPv6の任意アドレスの場合はポートのみで照合され、それ以外のアドレスはサーバーが報告するアドレスと等しくなければなりません。アドレスを異なる表記で報告するサーバーに対しては、`wolfSSH_SetFwdRemoteMatch()`で照合をポートのみに緩和する(`WOLFSSH_FWD_MATCH_PORT`)か、照合を無効にする(`WOLFSSH_FWD_MATCH_OFF`)ことができます。クライアントは、自身に送られた"tcpip-forward"および"cancel-tcpip-forward"リクエストを拒否します。
+
+宣言されていたものの定義されていなかった関数`wolfSSH_CTX_SetFwdEnable()`および`wolfSSH_SetFwdEnable()`は削除されました。フォワーディングは、`WOLFSSH_FWD`を指定してビルドし、フォワーディングコールバックを設定することで有効になります。
+
diff --git a/wolfSSH/src-ja/chapter09.md b/wolfSSH/src-ja/chapter09.md
index 99c7aafd..110116b9 100644
--- a/wolfSSH/src-ja/chapter09.md
+++ b/wolfSSH/src-ja/chapter09.md
@@ -1,3 +1,12 @@
# メモと制限事項
-実装ファイル属性の一部は考慮されておらず、デフォルトの属性またはモード値が使用されます。特に`wolfSSH_SFTP_Open`では、ファイルからタイムスタンプを取得し、すべての拡張ファイル属性を取得します。
+- SFTPはプロトコルバージョン3で実装されています。拡張ファイル属性は扱われず、送信も適用もされません。SFTPの`SETSTAT`または`FSETSTAT`リクエストは、含まれる属性を適用するか、`SSH_FX_OP_UNSUPPORTED`で応答されます。
+- パスワード変更リクエストはサポートされておらず、拒否されます。
+- 圧縮はサポートされていません。"none"のみが提示されます。
+- wolfSSHは`chacha20-poly1305@openssh.com`暗号も`*-etm@openssh.com` MACも提示しません。
+- SHA-1を使用するアルゴリズムとAES-CBCはコンパイルされますが、デフォルトでは提示されません。
+- "none"暗号とMACは、`--enable-none-cipher`(`WOLFSSH_ALLOW_NONE_CIPHER`)を指定したビルドでのみネゴシエーションできます。
+- RSAのユーザー認証鍵は2048ビット(`WOLFSSH_RSA_MIN_KEY_BITS`)以上でなければなりません。
+- DHグループ交換は2048ビット(`WOLFSSH_DEFAULT_GEXDH_MIN`)以上のグループを使用するため、1024ビットのグループしか提示しないサーバーとは失敗します。
+- アプリケーションは、接続相手が送信するstderr(拡張)データを読み取る必要があります。読み取られないデータはチャネルウィンドウを埋め、チャネルを停止させます。
+- wolfSSHdは、ディレクティブ`Subsystem`、`ChallengeResponseAuthentication`、`UsePAM`、`X11Forwarding`、`PrintMotd`、`AcceptEnv`、`UseDNS`を認識しますが、実装はしていません。認可済み鍵ファイルの`command=`オプションは強制されず、WindowsでのOpenSSH証明書によるログインはサポートされていません。
diff --git a/wolfSSH/src-ja/chapter11.md b/wolfSSH/src-ja/chapter11.md
index 6594e27c..f7e6f019 100644
--- a/wolfSSH/src-ja/chapter11.md
+++ b/wolfSSH/src-ja/chapter11.md
@@ -2,49 +2,52 @@
## サポートを得るには
-一般的な製品サポートのために、wolfSSL(旧Cyassl)は、wolfSSL製品ファミリーのオンラインフォーラムを維持しています。フォーラムに投稿するか、弊社までご連絡ください。
-
-
-**wolfssl(yassl)フォーラム:** https://www.wolfssl.com/forumshoremail
-**サポート:** support@wolfssl.com
+一般的な製品サポートのために、wolfSSLは、wolfSSL製品ファミリーのオンラインフォーラムを維持しています。ご質問がありましたら、フォーラムに投稿するか、wolfSSLまで直接ご連絡ください。
+- wolfSSLフォーラム: [https://www.wolfssl.com/forums](https://www.wolfssl.com/forums)
+- メールサポート: support@wolfssl.com
wolfSSL製品、ライセンスに関する質問、または一般的なコメントに関する情報については、**facts@wolfssl.com** 宛にメールしてください。
-
### バグレポートと障害のサポート
-バグレポートを提出したり、問題についてお尋ねになる場合は、次の情報もあわせてお知らせください:
-
-1. wolfSSLバージョン番号
-
-2. オペレーティングシステムバージョン
-
-3. コンパイラバージョン
-
-4. 表示されている正確なエラー番号
-
-5. 障害の再現方法
+バグレポートを提出したり、問題についてお尋ねになる場合は、次の情報もあわせてお知らせください:
+1. wolfSSHおよびwolfSSLのバージョン番号
+2. オペレーティングシステムバージョン
+3. コンパイラバージョン
+4. 表示されている正確なエラー
+5. 障害を再現または再試行する方法の説明
上記の情報が提供いただけると障害解決に向けて最善を尽くすことができますが、情報のご提供がなければ、問題の原因を特定することは非常に困難となります。wolfSSLはお寄せいただいたフィードバックを大切にし、できるだけ早くご回答することを最優先事項にします。
## コンサルティング
-wolfSSLは、機能の追加、移植、競争力のあるアップグレードプログラム、およびデザインコンサルティングを提供します。
+wolfSSLは、機能の追加、移植、競争力のあるアップグレードプログラム(Competitive Upgrade Program)、およびデザインコンサルティングを含む、オンサイトおよびオフサイトの両方のコンサルティングを提供します。
詳細は info@wolfssl.jp 宛にお問い合わせください。
-
### 機能追加と移植
現時点で、ご要望いただいているのに弊社製品で提供されていない機能を、契約または共同開発ベースで追加することができます。また、当社の製品を新しいホスト言語または新しい操作環境に移植するサービスも提供しています。
詳細は info@wolfssl.jp 宛にお問い合わせください。
+### 競争力のあるアップグレードプログラム(Competitive Upgrade Program)
+
+古くなった、あるいは高価なSSL/TLSライブラリから、低コストかつコードベースへの影響を最小限に抑えて wolfSSL への移行をお手伝いします。
+
+プログラム概要:
+
+1. 現在、wolfSSLの商用競合製品を使用している必要があります。
+2. 古いSSLライブラリをwolfSSLに置き換えるために、最大1週間のオンサイトコンサルティングを受けられます。旅費は含まれません。
+3. 通常、お客様のコードでの置き換えと初期テストを行うには、最大1週間が適切な期間です。置き換えに関する追加のコンサルティングも必要に応じてご利用いただけます。
+4. お客様の製品に同梱するための標準的なwolfSSLのロイヤリティフリーライセンスを受けられます。
+
+このプログラムの目的は、現在組み込みSSL実装に多くの費用をかけているユーザーが、容易にwolfSSLへ移行できるようにすることです。詳しくお知りになりたい場合は、facts@wolfssl.com 宛にお問い合わせください。
+
### デザインコンサルティング
アプリケーションまたはフレームワークをSSL/TLSで保護する必要があるが、安全なシステムの最適な設計がどのように構造化されるべきかについて不確かな場合は、お手伝いできます!
-wolfSSLを使用して、SSL/TLSセキュリティをデバイスにビルドするためのデザインコンサルティングを提供しています。
-
+wolfSSLを使用して、SSL/TLSセキュリティをデバイスにビルドするためのデザインコンサルティングを提供しています。当社のコンサルタントは、以下のサービスを提供できます:
diff --git a/wolfSSH/src-ja/chapter12.md b/wolfSSH/src-ja/chapter12.md
index 9d63fce1..8bd75f6c 100644
--- a/wolfSSH/src-ja/chapter12.md
+++ b/wolfSSH/src-ja/chapter12.md
@@ -2,10 +2,14 @@
## 製品のリリース情報
+現在のリリースは2026年10月6日にリリースされたwolfSSH v1.6.0です。各リリースの変更点は、wolfSSHソース内のChangeLog.mdファイルとGitHubのリリースページに記載されています。
+
更新情報をTwitterに定期的に投稿しています。追加のリリース情報については、GitHubでプロジェクトを追跡したり、Facebookでフォローしたり、毎日のブログをフォローしたりできます。
GitHubでのwolfSSH [https://www.github.com/wolfssl/wolfssh](https://www.github.com/wolfssl/wolfssh)
+wolfSSHのリリース [https://github.com/wolfSSL/wolfssh/releases](https://github.com/wolfSSL/wolfssh/releases)
+
TwitterでのwolfSSL [http://twitter.com/wolfSSL](http://twitter.com/wolfSSL)
FacebookでのwolfSSL [http://www.facebook.com/wolfSSL](http://www.facebook.com/wolfSSL)
diff --git a/wolfSSH/src-ja/chapter13.md b/wolfSSH/src-ja/chapter13.md
index 1d5b63c1..8418231a 100644
--- a/wolfSSH/src-ja/chapter13.md
+++ b/wolfSSH/src-ja/chapter13.md
@@ -1,128 +1,187 @@
-# APIリファレンス
+# API リファレンス
-このセクションでは、wolfSSH Libraryの公開APIについて説明します。
+このセクションでは、wolfSSH ライブラリの公開アプリケーションプログラムインターフェイスについて説明します。
## エラーコード
+
### WS_ErrorCodes (enum)
-以下の戻り値は、wolfssh/wolfssh/error.hで定義されていて、発生する可能性のあるさまざまなタイプのエラーを表します。
-
-- WS_SUCCESS (0): 関数は成功
-- WS_FATAL_ERROR (-1): 一般的な失敗
-- WS_BAD_ARGUMENT (-2): 引数が範囲外
-- WS_MEMORY_E (-3): メモリ確保に失敗
-- WS_BUFFER_E (-4): 入/出力バッファのサイズエラー
-- WS_PARSE_E (-5): 一般的な解析エラー
-- WS_NOT_COMPILED (-6): 機能が組み込まれていない
-- WS_OVERFLOW_E (-7): 継続するとオーバーフローする可能性あり
-- WS_BAD_USAGE (-8): 使用方法が間違っている
-- WS_SOCKET_ERROR_E (-9): ソケットで発生したエラー
-- WS_WANT_READ (-10): IOコールバックで読み込みがブロック(再度リードせよ)
-- WS_WANT_WRITE (-11): IOコールバックで書き込みがブロック(再度ライトせよ)
-- WS_RECV_OVERFLOW_E (-12): 受信バッファがオーバーフローした
-- WS_VERSION_E (-13): 相手が異なるSSHバージョンを使っている
-- WS_SEND_OOB_READ_E (-14): 帯域外データを読み出そうとした
-- WS_INPUT_CASE_E (-15): プロセス入力状態不正あるいはプログラミングエラー
-- WS_BAD_FILETYPE_E (-16): ファイルタイプ不正
-- WS_UNIMPLEMENTED_E (-17): 機能が未実装
-- WS_RSA_E (-18): RSAバッファーエラー
-- WS_BAD_FILE_E (-19): ファイル不正
-- WS_INVALID_ALGO_ID (-20): 無効なアルゴリズムID
-- WS_DECRYPT_E (-21): 復号エラー
-- WS_ENCRYPT_E (-22): 暗号化エラー
-- WS_VERIFY_MAC_E (-23): mac検証エラー
-- WS_CREATE_MAC_E (-24): mac作成エラー
-- WS_RESOURCE_E (-25): 新たなチャネル作成にリソース不足
-- WS_INVALID_CHANTYPE (-26): 無効なチャネルタイプ
-- WS_INVALID_CHANID(-27): ピアが無効なチャネルIDを要求した
-- WS_INVALID_USERNAME(-28): 無効なユーザー名
-- WS_CRYPTO_FAILED(-29): 暗号アクションが失敗
-- WS_INVALID_STATE_E(-30): 無効な状態
-- WC_EOF(-31): ファイルの終了
-- WS_INVALID_PRIME_CURVE(-32): 無効なECCプライムカーブ
-- WS_ECC_E(-33): ECDSAバッファーエラー
-- WS_CHANOPEN_FAILED(-34): ピアがチャネルオープン失敗を返した
-- WS_REKEYING(-35): ピアとリキーイング
-- WS_CHANNEL_CLOSED(-36): チャネルがクローンした
+
+以下の API 応答コードは wolfssh/error.h で定義されており、発生し得るさまざまな種類のエラーを表す。`WS_SUCCESS` は 0 であり、すべてのエラーコードは負の値である。`WS_FATAL_ERROR` は `WS_ERROR` の非推奨エイリアスであり、`WS_LAST_E` は常に最後に定義されたエラーコード(v1.6.0 時点では `WS_CERT_KEY_USAGE_E`)を指す。値 -1059 は未割り当てである。
+
+- WS_SUCCESS (0): 関数成功
+- WS_ERROR (-1001): 一般的な関数失敗
+- WS_FATAL_ERROR (-1001): WS_ERROR の非推奨エイリアス
+- WS_BAD_ARGUMENT (-1002): 不正な関数引数
+- WS_MEMORY_E (-1003): メモリ割り当て失敗
+- WS_BUFFER_E (-1004): 入出力バッファサイズエラー
+- WS_PARSE_E (-1005): 一般的な解析エラー
+- WS_NOT_COMPILED (-1006): 機能がコンパイルに含まれていない
+- WS_OVERFLOW_E (-1007): 続行するとオーバーフローする
+- WS_BAD_USAGE (-1008): 不正な使用例
+- WS_SOCKET_ERROR_E (-1009): ソケットエラー
+- WS_WANT_READ (-1010): ノンブロッキング読み込みがブロックする、再度呼び出すこと
+- WS_WANT_WRITE (-1011): ノンブロッキング書き込みがブロックする、再度呼び出すこと
+- WS_RECV_OVERFLOW_E (-1012): 受信バッファオーバーフロー
+- WS_VERSION_E (-1013): ピアが誤ったバージョンの SSH を使用している
+- WS_SEND_OOB_READ_E (-1014): バッファの範囲外読み込みを試みた
+- WS_INPUT_CASE_E (-1015): 不正な処理入力状態、プログラミングエラー
+- WS_BAD_FILETYPE_E (-1016): 不正なファイルタイプ
+- WS_UNIMPLEMENTED_E (-1017): 機能が実装されていない
+- WS_RSA_E (-1018): RSA バッファエラー
+- WS_BAD_FILE_E (-1019): 不正なファイル
+- WS_INVALID_ALGO_ID (-1020): 無効なアルゴリズム ID
+- WS_DECRYPT_E (-1021): 復号エラー
+- WS_ENCRYPT_E (-1022): 暗号化エラー
+- WS_VERIFY_MAC_E (-1023): MAC 検証エラー
+- WS_CREATE_MAC_E (-1024): MAC 生成エラー
+- WS_RESOURCE_E (-1025): 新しいチャネルのためのリソース不足
+- WS_INVALID_CHANTYPE (-1026): 無効なチャネルタイプ
+- WS_INVALID_CHANID (-1027): ピアが無効なチャネル ID を要求した
+- WS_INVALID_USERNAME (-1028): 無効なユーザー名
+- WS_CRYPTO_FAILED (-1029): 暗号処理が失敗した
+- WS_INVALID_STATE_E (-1030): 無効な状態
+- WS_EOF (-1031): ファイルの終端
+- WS_INVALID_PRIME_CURVE (-1032): ECC における無効な素数曲線
+- WS_ECC_E (-1033): ECDSA バッファエラー
+- WS_CHANOPEN_FAILED (-1034): ピアがチャネルオープン失敗を返した
+- WS_REKEYING (-1035): ステータス: 再鍵交換が進行中
+- WS_CHANNEL_CLOSED (-1036): ステータス: チャネルがクローズされた
+- WS_INVALID_PATH_E (-1037): 無効なパス
+- WS_SCP_CMD_E (-1038): SCP コマンドエラー
+- WS_SCP_BAD_MSG_E (-1039): SCP 不正メッセージ
+- WS_SCP_PATH_LEN_E (-1040): SCP パスが長すぎる
+- WS_SCP_TIMESTAMP_E (-1041): SCP タイムスタンプエラー
+- WS_SCP_DIR_STACK_EMPTY_E (-1042): SCP ディレクトリスタックが空
+- WS_SCP_CONTINUE (-1043): ステータス: SCP 継続
+- WS_SCP_ABORT (-1044): ステータス: SCP 中断
+- WS_SCP_ENTER_DIR (-1045): ステータス: SCP ディレクトリに入る
+- WS_SCP_EXIT_DIR (-1046): ステータス: SCP ディレクトリから出る
+- WS_SCP_EXIT_DIR_FINAL (-1047): ステータス: SCP 最終ディレクトリから出る
+- WS_SCP_COMPLETE (-1048): ステータス: SCP 転送完了
+- WS_SCP_INIT (-1049): ステータス: SCP 転送が検証された
+- WS_MATCH_KEX_ALGO_E (-1050): ピアと KEX アルゴリズムが一致しない
+- WS_MATCH_KEY_ALGO_E (-1051): ピアと鍵アルゴリズムが一致しない
+- WS_MATCH_ENC_ALGO_E (-1052): ピアと暗号化アルゴリズムが一致しない
+- WS_MATCH_MAC_ALGO_E (-1053): ピアと MAC アルゴリズムが一致しない
+- WS_PERMISSIONS (-1054): 権限エラー
+- WS_SFTP_COMPLETE (-1055): ステータス: SFTP 接続確立
+- WS_NEXT_ERROR (-1056): 次の値/状態の取得がエラー
+- WS_CHAN_RXD (-1057): ステータス: チャネルデータを受信した
+- WS_INVALID_EXTDATA (-1058): 無効なチャネル拡張データタイプ
+- WS_SFTP_BAD_REQ_ID (-1060): SFTP 不正リクエスト ID
+- WS_SFTP_BAD_REQ_TYPE (-1061): SFTP 不正リクエストタイプ
+- WS_SFTP_STATUS_NOT_OK (-1062): SFTP ステータスが OK ではない
+- WS_SFTP_FILE_DNE (-1063): SFTP ファイルが存在しない
+- WS_SIZE_ONLY (-1064): 必要なバッファのサイズのみ取得している
+- WS_CLOSE_FILE_E (-1065): ローカルファイルをクローズできない
+- WS_PUBKEY_REJECTED_E (-1066): サーバーの公開鍵が拒否された
+- WS_EXTDATA (-1067): 読み取り可能な拡張データがある
+- WS_USER_AUTH_E (-1068): ユーザー認証エラー
+- WS_SSH_NULL_E (-1069): SSH オブジェクトが NULL だった
+- WS_SSH_CTX_NULL_E (-1070): SSH_CTX オブジェクトが NULL だった
+- WS_CHANNEL_NOT_CONF (-1071): チャネルオープンが確認されていない
+- WS_CHANGE_AUTH_E (-1072): 認証タイプの変更が試みられた
+- WS_WINDOW_FULL (-1073): チャネルウィンドウが満杯
+- WS_MISSING_CALLBACK (-1074): コールバックが不足している
+- WS_DH_SIZE_E (-1075): DH 素数が想定より大きい
+- WS_PUBKEY_SIG_MIN_E (-1076): 署名が小さすぎる
+- WS_AGENT_NULL_E (-1077): エージェントオブジェクトが NULL だった
+- WS_AGENT_NO_KEY_E (-1078): エージェントが要求された鍵を保持していない
+- WS_AGENT_CXN_FAIL (-1079): エージェントに接続できなかった
+- WS_SFTP_BAD_HEADER (-1080): SFTP 不正ヘッダー
+- WS_CERT_NO_SIGNER_E (-1081): 署名者証明書が利用できない
+- WS_CERT_EXPIRED_E (-1082): 証明書が期限切れ
+- WS_CERT_REVOKED_E (-1083): ユーザー証明書が失効していると報告された
+- WS_CERT_SIG_CONFIRM_E (-1084): ルート証明書の署名検証失敗
+- WS_CERT_OTHER_E (-1085): その他の証明書に関する問題
+- WS_CERT_PROFILE_E (-1086): 証明書がプロファイル要件を満たしていない
+- WS_CERT_KEY_SIZE_E (-1087): 鍵サイズエラー
+- WS_CTX_KEY_COUNT_E (-1088): 秘密鍵の追加が多すぎる
+- WS_MATCH_UA_KEY_ID_E (-1089): ユーザー認証鍵の照合失敗
+- WS_KEY_AUTH_MAGIC_E (-1090): OpenSSH 鍵の認証マジックチェック失敗
+- WS_KEY_CHECK_VAL_E (-1091): OpenSSH 鍵のチェック値失敗
+- WS_KEY_FORMAT_E (-1092): OpenSSH 鍵形式失敗
+- WS_SFTP_NOT_FILE_E (-1093): 通常のファイルではない
+- WS_MSGID_NOT_ALLOWED_E (-1094): プロトコルのこの時点では許可されないメッセージ ID
+- WS_ED25519_E (-1095): Ed25519 失敗
+- WS_AUTH_PENDING (-1096): ユーザー認証がまだ保留中
+- WS_KDF_E (-1097): KDF エラー
+- WS_DISCONNECT (-1098): ピアが切断を送信した
+- WS_MLDSA_E (-1099): ML-DSA 失敗
+- WS_ED448_E (-1100): Ed448 失敗
+- WS_CERT_KEY_USAGE_E (-1101): 証明書の KeyUsage または ExtendedKeyUsage が SSH での使用を許可していない
### WS_IOerrors (enum)
-以下は、ライブラリがユーザー提供のI/Oコールバックから受け取ることを期待しているリターンコードです。それ以外の場合、ライブラリは、I/Oアクションから読み取られたバイト数を期待しています。
+これらは、ユーザー提供の I/O コールバックからライブラリが受け取ることを想定している戻りコードである。それ以外の場合、ライブラリは I/O 動作によって読み書きされたバイト数を期待する。
+
- WS_CBIO_ERR_GENERAL (-1): 一般的な予期しないエラー
-- WS_CBIO_ERR_WANT_READ (-2): ソケットの読み取りブロック(再度リードせよ)
-- WS_CBIO_ERR_WANT_WRITE (-2): ソケットの書き込みブロック(再度ライトせよ)
-- WS_CBIO_ERR_CONN_RST (-3): コネクションがリセットされた
-- WS_CBIO_ERR_ISR (-4): 割り込み発生
-- WS_CBIO_ERR_CONN_CLOSE (-5): コネクションがクローンした
+- WS_CBIO_ERR_WANT_READ (-2): ソケットの読み込みがブロックする、再度呼び出すこと
+- WS_CBIO_ERR_WANT_WRITE (-2): ソケットの書き込みがブロックする、再度呼び出すこと
+- WS_CBIO_ERR_CONN_RST (-3): 接続がリセットされた
+- WS_CBIO_ERR_ISR (-4): 割り込み
+- WS_CBIO_ERR_CONN_CLOSE (-5): 接続がクローズされた、または EPIPE
- WS_CBIO_ERR_TIMEOUT (-6): ソケットタイムアウト
-## 初期化 /シャットダウン
+## 初期化 / シャットダウン
### wolfSSH_Init()
+```c
+#include
-
-**用法**
+int wolfSSH_Init(void);
+```
**説明**
-wolfSSHライブラリを初期化します。アプリケーションごとに1回、ライブラリへの他の呼び出しの前に呼び出される必要があります。
-
-**戻り値**
-
-WS_SUCCESS
-
-WS_CRYPTO_FAILED
+使用に先立って wolfSSH ライブラリを初期化する。ライブラリへの他のいかなる呼び出しよりも前に、アプリケーションごとに一度だけ呼び出す必要がある。
**引数**
なし
-```
-#include
-int wolfSSH_Init(void);
-```
-**関連項目**
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_CRYPTO_FAILED`
-wolfSSH_Cleanup()
+**関連項目**
+- `wolfSSH_Cleanup()`
### wolfSSH_Cleanup()
+```c
+#include
-
-**用法**
+int wolfSSH_Cleanup(void);
+```
**説明**
-wolfSSHライブラリをクリーンアップします。アプリケーションの終了前に呼び出す必要があります。本関数呼び出し後は、ライブラリAPIの呼び出しはできません。
-
-**戻り値**
-
-**WS_SUCCESS**
-
-**WS_CRYPTO_FAILED**
+使用を終えた際に wolfSSH ライブラリをクリーンアップする。アプリケーションの終了前に呼び出すべきである。呼び出した後は、それ以上ライブラリを呼び出してはならない。
**引数**
なし
+**戻り値**
-```
-#include
-int wolfSSH_Cleanup(void);
-```
+- `WS_SUCCESS`
+- `WS_CRYPTO_FAILED`
**関連項目**
-wolfSSH_Init()
+- `wolfSSH_Init()`
## デバッグ出力関数
@@ -130,61 +189,51 @@ wolfSSH_Init()
### wolfSSH_Debugging_ON()
+```c
+#include
-
-**用法**
+void wolfSSH_Debugging_ON(void);
+```
**説明**
-実行中にデバッグロギングを有効にします。ビルド時にデバッグが無効になっている場合、何もしません。
+実行時のデバッグログ出力を有効にする。ビルド時にデバッグが無効化されている場合は何も行わない。
-
-**戻り値**
+**引数**
なし
-**引数**
+**戻り値**
なし
-```
-#include
-void wolfSSH_Debugging_ON(void);
-```
-
**関連項目**
-wolfSSH_Debugging_OFF()
-
+- `wolfSSH_Debugging_OFF()`
### wolfSSH_Debugging_OFF()
+```c
+#include
-
-**用法**
+void wolfSSH_Debugging_OFF(void);
+```
**説明**
-実行時にデバッグロギングを無効にします。ビルド時にデバッグが無効になっている場合、何もしません。
-
-
-**戻り値**
-
-なし
+実行時のデバッグログ出力を無効にする。ビルド時にデバッグが無効化されている場合は何も行わない。
**引数**
なし
+**戻り値**
-```
-#include
-void wolfSSH_Debugging_OFF(void);
-```
+なし
**関連項目**
-wolfSSH_Debugging_ON()
+- `wolfSSH_Debugging_ON()`
## コンテキスト関数
@@ -192,1394 +241,4858 @@ wolfSSH_Debugging_ON()
### wolfSSH_CTX_new()
+```c
+#include
-
-**用法**
+WOLFSSH_CTX* wolfSSH_CTX_new(byte side, void* heap);
+```
**説明**
-wolfSSHコンテキストオブジェクトを作成します。このオブジェクトはwolfSSHセッションオブジェクトのファクトリとして使用されます。
-
-**戻り値**
-
-**WOLFSSH_CTX** – 割り当てられたWOLFSSH_CTXオブジェクトへのポインターあるいはNULL
+wolfSSH コンテキストオブジェクトを作成する。このオブジェクトは設定した上で、wolfSSH セッションオブジェクトのファクトリとして使用できる。
**引数**
-**side** – クライアントサイド(実装なし)またはサーバーサイドを示します
+- `side` - エンドポイントの役割: `WOLFSSH_ENDPOINT_SERVER` または `WOLFSSH_ENDPOINT_CLIENT`
+- `heap` - メモリ割り当てに使用するヒープへのポインター、または `NULL`
-**heap** – メモリ割り当てに使用するヒープへのポインター
+**戻り値**
-```
-#include
-WOLFSSH_CTX* wolfSSH_CTX_new(byte side , void* heap );
-```
+- `WOLFSSH_CTX*` - 新しく割り当てられたコンテキストオブジェクトへのポインター
+- `NULL` - 失敗時
**関連項目**
-wolfSSH_CTX_free()
-
+- `wolfSSH_CTX_free()`
### wolfSSH_CTX_free()
+```c
+#include
-
-**用法**
+void wolfSSH_CTX_free(WOLFSSH_CTX* ctx);
+```
**説明**
-WOLFSSH_CTXオブジェクトを解放します
-
-**戻り値**
-
-なし
+wolfSSH コンテキストオブジェクトを解放する。
**引数**
-**ctx** – WOLFSSH_CTXオブジェクト
+- `ctx` - 解放する wolfSSH コンテキスト
-```
-#include
-void wolfSSH_CTX_free(WOLFSSH_CTX* ctx );
-```
+**戻り値**
+
+なし
**関連項目**
-wolfSSH_CTX_new()
+- `wolfSSH_CTX_new()`
### wolfSSH_CTX_SetBanner()
+```c
+#include
-**用法**
+int wolfSSH_CTX_SetBanner(WOLFSSH_CTX* ctx, const char* newBanner);
+```
**説明**
-バナーメッセージをセットします
+認証前にピアへ提示されるバナーメッセージを設定する。
-**戻り値**
+**引数**
-WS_BAD_ARGUMENT
+- `ctx` - wolfSSH コンテキストへのポインター
+- `newBanner` - バナーメッセージのテキスト
-WS_SUCCESS
+**戻り値**
-**引数**
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
-**ssh** - wolfSSHオブジェクト
+**関連項目**
-**newBanner** - バナーメッセージ文字列
+- `wolfSSH_CTX_UsePrivateKey_buffer()`
-```
+### wolfSSH_CTX_UsePrivateKey_buffer()
+
+```c
#include
-int wolfSSH_CTX_SetBanner(WOLFSSH_CTX* ctx , const char* newBanner );
+
+int wolfSSH_CTX_UsePrivateKey_buffer(WOLFSSH_CTX* ctx,
+ const byte* in, word32 inSz, int format);
```
-### wolfSSH_CTX_UsePrivateKey_buffer()
+**説明**
+ファイルではなくバッファから秘密鍵を SSH コンテキストに読み込む。鍵は `in` 引数によって渡され、サイズは `inSz` である。`format` 引数はバッファのエンコーディングを指定する: `WOLFSSH_FORMAT_ASN1` または `WOLFSSH_FORMAT_PEM`(PEM は現時点では未実装)。
-**用法**
+**引数**
-**説明**
-この関数は、秘密鍵バッファをSSHコンテキストにロードします。ファイルの代わりにバッファーを入力として呼び出されます。バッファは、**insz** の **in** 引数によって提供されます。
+- `ctx` - wolfSSH コンテキストへのポインター
+- `in` - 読み込む秘密鍵を含むバッファ
+- `inSz` - 入力バッファのサイズ
+- `format` - 入力バッファ内の秘密鍵の形式
-**引数**
+**戻り値**
-**format** バッファのタイプを指定します:**wolfssh_format_asn1** または **wolfssl_format_pem** (現時点では未実装)。
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_BAD_FILETYPE_E`
+- `WS_UNIMPLEMENTED_E`
+- `WS_MEMORY_E`
+- `WS_RSA_E`
+- `WS_BAD_FILE_E`
+**関連項目**
-**戻り値**
+- `wolfSSH_CTX_UseCert_buffer()`
-**WS_SUCCESS**
+### wolfSSH_CTX_UseCert_buffer()
-**WS_BAD_ARGUMENT** – 少なくとも一つの引数が不正
+**利用可能性**
-**WS_BAD_FILETYPE_E** – フォーマットが不正
+`WOLFSSH_CERTS` が必要。
-**WS_UNIMPLEMENTED_E** – PEMフォーマットは未対応
+```c
+#include
-**WS_MEMORY_E** – メモリ確保エラー
+int wolfSSH_CTX_UseCert_buffer(WOLFSSH_CTX* ctx,
+ const byte* cert, word32 certSz, int format);
+```
-**WS_RSA_E** – RSA鍵をデコードできない
+**説明**
-**WS_BAD_FILE_E** – バッファを解析できない
+証明書ベースのホスト認証のために、サーバーの X.509 証明書をバッファからコンテキストに読み込む。`format` は `WOLFSSH_FORMAT_ASN1` または `WOLFSSH_FORMAT_PEM` である。バッファにはリーフ証明書を格納すること。PEM バッファに複数の証明書が含まれている場合は、最初の 1 つだけが読み込まれる。"TRUSTED CERTIFICATE" 形式の PEM はルート CA 用であり、ここでは受け付けない。
**引数**
-**ctx** – wolfSSH_CTXオブジェクトへのポインター
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cert` - 証明書を含むバッファ
+- `certSz` - 証明書バッファのサイズ
+- `format` - 証明書のエンコーディング
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_MEMORY_E`
+
+**関連項目**
-**in** – 秘密鍵を含むバッファへのポインター
+- `wolfSSH_CTX_AddRootCert_buffer()`
-**inSz** – 入力バッファのサイズ
+### wolfSSH_CTX_AddRootCert_buffer()
-**format** – 秘密鍵のフォーマット
+**利用可能性**
-```
+`WOLFSSH_CERTS` が必要。
+
+```c
#include
-int wolfSSH_CTX_UsePrivateKey_buffer(WOLFSSH_CTX* ctx , const byte* in , word32 inSz , int format);
+
+int wolfSSH_CTX_AddRootCert_buffer(WOLFSSH_CTX* ctx,
+ const byte* cert, word32 certSz, int format);
```
-**関連項目**
+**説明**
-wolfSSH_UseCert_buffer()
+ピアから提示された証明書を検証するために使用する、信頼されたルート CA 証明書をコンテキストに追加する。`format` は `WOLFSSH_FORMAT_ASN1` または `WOLFSSH_FORMAT_PEM` である。PEM バッファはバンドルでもよく、含まれるすべての証明書が、通常の形式でも "TRUSTED CERTIFICATE" 形式(後者は wolfSSL 5.8.0 以降が必要)でも読み込まれる。読み込みに失敗したブロックはスキップされ、CA を 1 つも読み込めなかった場合にのみ呼び出しは失敗する。
-wolfSSH_UseCaCert_buffer()
+**引数**
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cert` - ルート証明書を含むバッファ
+- `certSz` - 証明書バッファのサイズ
+- `format` - 証明書のエンコーディング
-## SSH セッション関数
+**戻り値**
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_MEMORY_E`
-### wolfSSH_new()
+**関連項目**
+- `wolfSSH_CTX_UseCert_buffer()`
+- `wolfSSH_CTX_AddRootCert_file()`
+### wolfSSH_CTX_UseCert_file()
-**用法**
+**利用可能性**
-**説明**
+`WOLFSSH_CERTS` とファイルシステムのサポートが必要(`NO_FILESYSTEM` または `WOLFSSH_USER_FILESYSTEM` では利用できない)。
-wolfSSHセッションオブジェクトを確保し、与えられたwolfSSH_CTXオブジェクトを使って初期化します。
+```c
+#include
-**戻り値**
+int wolfSSH_CTX_UseCert_file(WOLFSSH_CTX* ctx, const char* name);
+```
+
+**説明**
-**WOLFSSH*** – WOLFSSHオブジェクトへのポインターあるいはNULL
+サーバーの X.509 証明書をファイル `name` からコンテキストに読み込む。wolfSSH_CTX_UseCert_buffer() のファイル版である。ファイルが PEM か DER かは内容から判定される。OpenSSH 証明書の行はここでは受け付けない。
**引数**
-**ctx** – wolfSSHセッションの初期化に使用されるwolfSSHコンテキスト
+- `ctx` - wolfSSH コンテキストへのポインター
+- `name` - 証明書ファイルへのパス
+**戻り値**
-```
-#include
-WOLFSSH* wolfSSH_new(WOLFSSH_CTX* ctx );
-```
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT` - `ctx` または `name` が NULL
+- `WS_BAD_FILE_E` - ファイルを開けない、読み込めない、空である、または `WOLFSSH_MAX_FILE_SIZE` より大きい
+- `WS_BAD_FILETYPE_E` - 内容が PEM または DER の X.509 証明書ではない
+- `WS_MEMORY_E`
+- 証明書のデコードによるその他のエラー
**関連項目**
-wolfSSH_free()
-
-### wolfSSH_free()
+- `wolfSSH_CTX_UseCert_buffer()`
+- `wolfSSH_CTX_AddRootCert_file()`
+### wolfSSH_CTX_AddRootCert_file()
+**利用可能性**
-**用法**
+`WOLFSSH_CERTS` とファイルシステムのサポートが必要(`NO_FILESYSTEM` または `WOLFSSH_USER_FILESYSTEM` では利用できない)。
-**説明**
+```c
+#include
-wolfSSHオブジェクトを解放します
+int wolfSSH_CTX_AddRootCert_file(WOLFSSH_CTX* ctx, const char* name);
+```
-**戻り値**
+**説明**
-なし
+ファイル `name` に含まれる信頼されたルート CA 証明書をコンテキストに追加する。wolfSSH_CTX_AddRootCert_buffer() のファイル版である。ファイルが PEM か DER かは内容から判定される。PEM バンドルの場合は、含まれるすべての CA が読み込まれる。
**引数**
-**ssh** – 解放するWOLFSSHオブジェクトへのポインター
+- `ctx` - wolfSSH コンテキストへのポインター
+- `name` - CA 証明書ファイルへのパス
-```
-#include
-void wolfSSH_free(WOLFSSH* ssh );
-```
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT` - `ctx` または `name` が NULL
+- `WS_BAD_FILE_E` - ファイルを開けない、読み込めない、空である、または `WOLFSSH_MAX_FILE_SIZE` より大きい
+- `WS_BAD_FILETYPE_E` - 内容が PEM または DER の X.509 証明書ではない
+- `WS_MEMORY_E`
+- 証明書のデコードによるその他のエラー
**関連項目**
-wolfSSH_new()
+- `wolfSSH_CTX_AddRootCert_buffer()`
+- `wolfSSH_CTX_UseCert_file()`
+### wolfSSH_CTX_UsePrivateKey_fromStore()
-### wolfSSH_set_fd()
+**利用可能性**
+`WOLFSSH_CERTS` と `WOLFSSH_WINDOWS_CERT_STORE` が必要(Windows のみ)。
+```c
+#include
-**用法**
+int wolfSSH_CTX_UsePrivateKey_fromStore(WOLFSSH_CTX* ctx,
+ const wchar_t* storeName, word32 dwFlags,
+ const wchar_t* subjectName);
+```
**説明**
-与えられたファイルディスクリプタをsshオブジェクトに関連付けます。ファイルディスクリプタはネットワークI/Oに使用され、I/Oコールバック関数に渡されます。
-
-**戻り値**
+Windows システム証明書ストア内の証明書とその秘密鍵を、サーバーのホスト鍵として使用する。証明書はコモンネーム `subjectName` によって検索される。`subjectName` には "CN=" 接頭辞を付けてもよく、大文字と小文字を区別せずに完全一致する必要がある。ストア `storeName`(例: L"My")は読み取り専用で開かれる。`dwFlags` はストアの場所を選択するもので、`CERT_SYSTEM_STORE_CURRENT_USER` などの `CERT_SYSTEM_STORE_*` 場所ビットのみを含めなければならない。`CERT_STORE_DELETE_FLAG` などの制御フラグは拒否される。
-WS_SUCCESS
+鍵はその素の鍵タイプ(`ssh-rsa` または `ecdsa-sha2-nistp*`)で登録され、ビルドがサポートしていれば、対応する RFC 6187 の `x509v3-*` タイプでも登録される。これにより、証明書アルゴリズムをネゴシエートしたピアにストアの証明書そのものを送信できる。秘密鍵はストア内にとどまり、署名は CNG を通じて行われる。
-WS_BAD_ARGUMENT – 引数の少なくともひとつが不正
+有効期間内で、かつ秘密鍵にアクセス可能で署名に使用できる証明書のみが選択される。期限切れまたはまだ有効でない証明書しか一致しない場合、呼び出しは `WS_CERT_EXPIRED_E` で失敗する。代わりにそれらのいずれかを選択させるには `WOLFSSH_CERT_STORE_ALLOW_EXPIRED` を定義する。ストアの鍵は、同じアルゴリズムに対してすでに読み込まれているファイルベースまたは TPM ベースのホスト鍵やホスト証明書と、読み込み順にかかわらず混在させることはできない。以前に読み込んだストアの鍵を置き換えることは許可される。いずれかの失敗が発生した場合、コンテキストは変更されない。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `ctx` - wolfSSH コンテキストへのポインター
+- `storeName` - システム証明書ストアの名前
+- `dwFlags` - ストアの場所(`CERT_SYSTEM_STORE_*` の値)
+- `subjectName` - 使用する証明書のコモンネーム
-**fd** – セッションで使用されるソケットディスクリプター
+**戻り値**
-```
-#include
-int wolfSSH_set_fd(WOLFSSH* ssh , int fd );
-```
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT` - NULL 引数、不正な `dwFlags`、サポートされていない鍵タイプ、または鍵構成の混在
+- `WS_BAD_FILE_E` - ストアを開けない
+- `WS_CRYPTO_FAILED` - 一致する証明書はあるが、アクセス可能かつ署名用に登録された秘密鍵を持つものがない
+- `WS_CERT_EXPIRED_E` - 有効期間外の証明書しか一致しない
+- `WS_CTX_KEY_COUNT_E` - 空いている鍵スロットが 2 つない
+- `WS_MEMORY_E`
+- `WS_FATAL_ERROR` - 一致する証明書がない
**関連項目**
-wolfSSH_get_fd()
-
-### wolfSSH_get_fd()
-
+- `wolfSSH_CTX_GetCertStoreCert()`
+- `wolfSSH_CTX_UsePrivateKey_buffer()`
+### wolfSSH_CTX_GetCertStoreCert()
-**用法**
+**利用可能性**
-**説明**
-
-SSHコネクションの入出力機能で使用されるファイルディスクリプタ( **fd** )を返します。一般的にはソケットファイルディスクリプタを返します。
+`WOLFSSH_CERTS` と `WOLFSSH_WINDOWS_CERT_STORE` が必要(Windows のみ)。
+```c
+#include
-**戻り値**
+int wolfSSH_CTX_GetCertStoreCert(WOLFSSH_CTX* ctx,
+ const byte** cert, word32* certSz, const char** algoName);
+```
-**int** – ファイルディスクリプタ
+**説明**
-**WS_BAD_ARGUEMENT**
+wolfSSH_CTX_UsePrivateKey_fromStore() で読み込んだホスト鍵に結び付けられた証明書を報告する。アプリケーションはこれを証明書によるユーザー認証に提示できる。`cert` と `certSz` には DER 証明書が返される。この証明書はコンテキストが所有し、コンテキストが解放されるか鍵スロットが置き換えられるまで有効である。`algoName` には静的な `x509v3-*` アルゴリズム名が返される。出力ポインターはいずれも NULL にしてその出力を省略できる。複数のストア資格情報が読み込まれている場合は、読み込み順で最初の `x509v3-*` スロットが返される。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cert` - DER 証明書へのポインターの出力先
+- `certSz` - 証明書サイズの出力先
+- `algoName` - SSH アルゴリズム名の出力先
+**戻り値**
-```
-#include
-int wolfSSH_get_fd(const WOLFSSH* ssh );
-```
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT` - `ctx` が NULL
+- `WS_FATAL_ERROR` - 証明書ストアに基づく `x509v3-*` 鍵スロットが存在しない
**関連項目**
-wolfSSH_set_fd()
+- `wolfSSH_CTX_UsePrivateKey_fromStore()`
-## ハイウォーターマーク機能
+## SSH セッション関数
-### wolfSSH_SetHighwater()
+### wolfSSH_new()
+```c
+#include
-**用法**
+WOLFSSH* wolfSSH_new(WOLFSSH_CTX* ctx);
+```
**説明**
-SSHセッションで使用するハイウォーターマークをセットします。
+提供された wolfSSH コンテキストで初期化された wolfSSH セッションオブジェクトを作成する。
-**戻り値**
+**引数**
+
+- `ctx` - セッションの初期化に使用する wolfSSH コンテキスト
-WS_SUCCESS
+**戻り値**
-WS_BAD_ARGUMENT
+- `WOLFSSH*` - 新しく割り当てられたセッションオブジェクトへのポインター
+- `NULL` - 失敗時
-**引数**
+**関連項目**
-**ssh** - WOLFSSHオブジェクトへのポインター
+- `wolfSSH_free()`
-**highwater** - ハイウォーターマークを示すデータ
+### wolfSSH_free()
-```
+```c
#include
-int wolfSSH_SetHighwater(WOLFSSH* ssh , word32 highwater );
-```
-### wolfSSH_GetHighwater()
+void wolfSSH_free(WOLFSSH* ssh);
+```
+**説明**
-**用法**
+wolfSSH セッションオブジェクトを解放する。
-**説明**
+**引数**
-ハイウォーターマークを返します。
+- `ssh` - 解放するセッション
**戻り値**
-**word32** - ハイウォーターマーク
-
-**引数**
+なし
-**ssh** - WOLFSSHオブジェクトへのポインター
+**関連項目**
-```
-#include
-word32 wolfSSH_GetHighwater(WOLFSSH* ssh );
-```
+- `wolfSSH_new()`
-### wolfSSH_SetHighwaterCb()
+### wolfSSH_worker()
+```c
+#include
-**用法**
+int wolfSSH_worker(WOLFSSH* ssh, word32* channelId);
+```
**説明**
-SSHセッションにハイウォーターマークとハイウォーターコールバック関数を設定します。
+SSH 接続を処理する。保留中の受信データを受け取り、保留中の送信パケットをフラッシュする。これは実行中のセッションに対する主要なドライバー呼び出しである。`WS_SUCCESS` 以外にも、呼び出し側がエラーとして扱ってはならない致命的でないステータスをいくつか返す。
+- `WS_CHAN_RXD` - チャネルデータが到着した。wolfSSH_stream_read() または wolfSSH_ChannelIdRead() で読み取る
+- `WS_EXTDATA` - 拡張(stderr)データが到着した。wolfSSH_ChannelIdReadExt()(最初のチャネルの場合は wolfSSH_extended_data_read())で読み出す
+- `WS_EOF` - ピアがチャネルをハーフクローズした。ピアはこれ以上データを送信しないが、チャネルは送信用にまだ開いている。これは到着時に一度だけ報告される。見逃してはならないアプリケーションは、wolfSSH_ChannelGetEof() を確認するか、チャネル EOF コールバックを登録すること。ライブラリは自ら EOF を返さない。プロトコルが必要とする場合は、wolfSSH_ChannelSendEof() で応答すること。
+- `WS_CHANNEL_CLOSED` - ピアがチャネルをクローズし、そのチャネルは破棄された
+- `WS_WANT_READ`、`WS_WANT_WRITE`、`WS_REKEYING` - 一時的な状態。再度呼び出すこと
-**戻り値**
+イベントは wolfSSH_get_error() からではなく、戻り値から取得すること。戻り値は何が到着したかを示し、wolfSSH_get_error() はトランスポートが何をしたかを示す。どの呼び出しにおいても両者は独立しており、戻り値がイベントを示している一方で、wolfSSH_get_error() がまだ完了していない書き込みや失敗した書き込みを報告することがある。`WS_WANT_READ` しか許容しない呼び出し側は、キューに入った書き込みが `WS_WANT_WRITE` を報告するため、稼働中のセッションを切断してしまう。それ以外のコードはエラーであり、戻り値そのものとして返されるか、`WS_FATAL_ERROR` として返されてその原因が wolfSSH_get_error() に入る。ピアの切断の場合は `WS_DISCONNECT` であり、ほとんどのセッションはこれで終了する。セッションが切断された後は、以降のすべての呼び出しが `WS_FATAL_ERROR` を返し、`WS_DISCONNECT` が保持される。
-なし
+書き込みがまだ残っているかを確認するには wolfSSH_OutputPending() を、鍵交換が進行中かを確認するには wolfSSH_RekeyPending() を呼び出す。
+
+`WS_CHAN_RXD`、`WS_EXTDATA`、`WS_EOF`、`WS_SUCCESS`、および `WS_SUCCESS` または `WS_CHAN_RXD` に代わって返された `WS_REKEYING` の場合は、`channelId` が NULL でなければ、そのイベントが属するチャネルの ID が書き込まれる。`WS_CHANNEL_CLOSED` を含むその他のすべてのステータスでは変更されない。その場合は wolfSSH_GetLastRxId() を使用すること。
**引数**
-**ctx** – wolfSSHコンテキスト
+- `ssh` - wolfSSH セッションへのポインター
+- `channelId` - イベントが属するチャネルの ID の出力先(任意、NULL でもよい)
-**highwater** - ハイウォーターマーク
+**戻り値**
-**cb** - ハイウォーターコールバック関数
+- `WS_SUCCESS`
+- `WS_CHAN_RXD`
+- `WS_EXTDATA`
+- `WS_EOF`
+- `WS_CHANNEL_CLOSED`
+- `WS_REKEYING`
+- `WS_WANT_READ`
+- `WS_WANT_WRITE`
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR` - 原因は wolfSSH_get_error() で確認する
+**関連項目**
-```
-#include
-void wolfSSH_SetHighwaterCb(WOLFSSH_CTX* ctx , word32 highwater ,
-WS_CallbackHighwater cb );
-```
+- `wolfSSH_GetLastRxId()`
+- `wolfSSH_OutputPending()`
+- `wolfSSH_RekeyPending()`
-### wolfSSH_SetHighwaterCtx()
+### wolfSSH_GetLastRxId()
+```c
+#include
-**用法**
+int wolfSSH_GetLastRxId(WOLFSSH* ssh, word32* channelId);
+```
**説明**
-ハイウォーターコールバック関数に渡されるコンテキストを設定します。
+最も直近にデータを受信したチャネルの ID を `channelId` に書き込む。
+
+**引数**
+- `ssh` - wolfSSH セッションへのポインター
+- `channelId` - 最後に受信したチャネル ID の出力先
**戻り値**
-なし
+- `WS_SUCCESS`
+- `WS_ERROR`
-**引数**
+**関連項目**
-**ssh** - WOLFSSHオブジェクトへのポインター
+- `wolfSSH_worker()`
-**ctx** - ハイウォーターコールバック関数に渡されるコンテキスト
+### wolfSSH_OutputPending()
-```
+```c
#include
-void wolfSSH_SetHighwaterCtx(WOLFSSH* ssh, void* ctx);
-```
-### wolfSSH_GetHighwaterCtx()
+int wolfSSH_OutputPending(const WOLFSSH* ssh);
+```
+**説明**
-**用法**
+短い(ノンブロッキングの)送信で送り残された出力が、セッションのキューにまだ残っているかを報告する。ステータスコードとは異なり、成功を含むどの戻りの後でも正しい答えを返す。キューに入ったデータをフラッシュするには、wolfSSH_worker()(またはそのデータをキューに入れた呼び出し)を再度呼び出す。
-**説明**
+**引数**
-SSHセッションにセットされたハイウォーターマークを返します。
+- `ssh` - wolfSSH セッションへのポインター
**戻り値**
-**void*** - ハイウォーターマーク
+- 0 以外 - 書き込みがまだ残っている
+- 0 - キューに何もない、または `ssh` が NULL
-**NULL** - WOLFSSHオブジェクトにハイウォーターマークがセットされていない場合
+**関連項目**
-**引数**
+- `wolfSSH_worker()`
+- `wolfSSH_RekeyPending()`
-**ssh** - WOLFSSHオブジェクトへのポインター
+### wolfSSH_RekeyPending()
-```
+```c
#include
-void wolfSSH_GetHighwaterCtx(WOLFSSH* ssh );
+
+int wolfSSH_RekeyPending(const WOLFSSH* ssh);
```
-## エラーチェック
+**説明**
+最初の鍵交換を含め、鍵交換が進行中かどうかを報告する。フラグは双方から SSH_MSG_NEWKEYS を交換した場合にのみクリアされるため、鍵交換が失敗した後もセットされたままになる。サービスループの終了判定には、この呼び出しではなく wolfSSH_worker() の結果を使用すること。
+**引数**
-### wolfSSH_get_error()
+- `ssh` - wolfSSH セッションへのポインター
+**戻り値**
+
+- 0 以外 - 鍵交換が進行中である
+- 0 - 鍵交換は進行中でない、または `ssh` が NULL
+**関連項目**
-**用法**
+- `wolfSSH_worker()`
+- `wolfSSH_OutputPending()`
+- `wolfSSH_TriggerKeyExchange()`
-**説明**
+### wolfSSH_set_fd()
-wolfSSHセッションオブジェクトにセットされたエラーコードを返します。
+```c
+#include
-**戻り値**
+int wolfSSH_set_fd(WOLFSSH* ssh, WS_SOCKET_T fd);
+```
-WS_ErrorCodes (enum)
+**説明**
+
+指定されたファイルディスクリプタをセッションに割り当てる。セッションは、デフォルトの I/O コールバックにおいて、このディスクリプタをネットワーク I/O に使用する。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `ssh` - ディスクリプタを設定するセッション
+- `fd` - セッションが使用するソケットのファイルディスクリプタ
-```
-#include
-int wolfSSH_get_error(const WOLFSSH* ssh );
-```
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
**関連項目**
-wolfSSH_get_error_name()
+- `wolfSSH_get_fd()`
+### wolfSSH_get_fd()
-### wolfSSH_get_error_name()
+```c
+#include
+WS_SOCKET_T wolfSSH_get_fd(const WOLFSSH* ssh);
+```
+**説明**
-**用法**
+SSH 接続の入出力に使用されているファイルディスクリプタを返す。通常はソケットのファイルディスクリプタである。
-**説明**
+**引数**
-wolfSSHセッションオブジェクトにセットされたエラーの名前を返します。
+- `ssh` - wolfSSH セッションへのポインター
**戻り値**
-**const char*** – エラー名文字列
+- 成功時はセッションのソケットファイルディスクリプタ
+- `ssh` が NULL の場合は -1(Windows では `INVALID_SOCKET`)。これは新しいセッションのディスクリプタが初期化される無効なソケット値と同じである。
-**引数**
+**関連項目**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `wolfSSH_set_fd()`
+### wolfSSH_SetFilesystemHandle()
-```
+```c
#include
-const char* wolfSSH_get_error_name(const WOLFSSH* ssh );
+
+int wolfSSH_SetFilesystemHandle(WOLFSSH* ssh, void* handle);
```
-**関連項目**
+**説明**
-wolfSSH_get_error()
+ユーザーが提供するファイルシステムハンドルをセッションに関連付ける。独自のファイルシステム層を提供する移植環境では、セッションに対するファイル操作を行う際にこのハンドルを使用する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `handle` - セッションに関連付ける不透明なファイルシステムハンドル
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+**関連項目**
+
+- `wolfSSH_GetFilesystemHandle()`
+
+### wolfSSH_GetFilesystemHandle()
+
+```c
+#include
+
+void* wolfSSH_GetFilesystemHandle(WOLFSSH* ssh);
+```
+
+**説明**
+
+wolfSSH_SetFilesystemHandle() によって以前にセッションへ関連付けられたファイルシステムハンドルを返す。設定されていない場合は NULL を返す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- セッションに関連付けられたファイルシステムハンドル
+- `NULL` - `ssh` が NULL の場合、またはハンドルが設定されていない場合
+
+**関連項目**
+
+- `wolfSSH_SetFilesystemHandle()`
+
+## データ最高水位関数
+
+
+
+### wolfSSH_SetHighwater()
+
+
+```c
+#include
+
+int wolfSSH_SetHighwater(WOLFSSH* ssh, word32 level);
+```
+
+**説明**
+
+セッションのデータハイウォーターマークをバイト単位で設定する。転送されたデータ量がこのレベルに達すると、ハイウォーターコールバックが呼び出される(通常はリキーをトリガーするため)。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `level` - ハイウォーターマーク(バイト単位)
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+**関連項目**
+
+- `wolfSSH_GetHighwater()`
+
+### wolfSSH_GetHighwater()
+
+
+```c
+#include
+
+word32 wolfSSH_GetHighwater(WOLFSSH* ssh);
+```
+
+**説明**
+
+セッションの現在のデータハイウォーターマークをバイト単位で返す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- データハイウォーターマーク(バイト単位)
+
+**関連項目**
+
+- `wolfSSH_SetHighwater()`
+
+### wolfSSH_SetHighwaterCb()
+
+
+```c
+#include
+
+void wolfSSH_SetHighwaterCb(WOLFSSH_CTX* ctx, word32 level,
+ WS_CallbackHighwater cb);
+```
+
+**説明**
+
+コンテキストレベルで、デフォルトのデータハイウォーターマークと、セッションがそれに到達したときに呼び出されるコールバックを設定する。このコンテキストから作成されたセッションは、これらのデフォルト値を継承する。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `level` - デフォルトのデータハイウォーターマーク(バイト単位)
+- `cb` - ハイウォーターコールバック関数
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_SetHighwaterCtx()`
+
+### wolfSSH_SetHighwaterCtx()
+
+
+```c
+#include
+
+void wolfSSH_SetHighwaterCtx(WOLFSSH* ssh, void* ctx);
+```
+
+**説明**
+
+セッションのハイウォーターコールバックが呼び出される際に渡される、ユーザーコンテキストポインターを設定する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `ctx` - ハイウォーターコールバックに渡すユーザーコンテキストポインター
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_GetHighwaterCtx()`
+
+### wolfSSH_GetHighwaterCtx()
+
+
+```c
+#include
+
+void* wolfSSH_GetHighwaterCtx(WOLFSSH* ssh);
+```
+
+**説明**
+
+wolfSSH_SetHighwaterCtx() によって以前に設定された、ハイウォーターコールバックに渡されるユーザーコンテキストポインターを返す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- ハイウォーターのユーザーコンテキストポインター
+- `NULL` - `ssh` が無効な場合、またはコンテキストが設定されていない場合
+
+**関連項目**
+
+- `wolfSSH_SetHighwaterCtx()`
+
+### wolfSSH_CTX_SetMsgHighwater()
+
+```c
+#include
+
+void wolfSSH_CTX_SetMsgHighwater(WOLFSSH_CTX* ctx, word32 level);
+```
+
+**説明**
+
+コンテキストレベルで、デフォルトのパケット数ハイウォーターマーク(RFC 4344, Section 3.1)を設定する。セッションで送受信されたパケット数がこのレベルに達すると、リキーがトリガーされる。このコンテキストから作成されたセッションは、このデフォルト値を継承する。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `level` - パケット数ハイウォーターマーク
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_SetMsgHighwater()`
+
+### wolfSSH_SetMsgHighwater()
+
+```c
+#include
+
+void wolfSSH_SetMsgHighwater(WOLFSSH* ssh, word32 level);
+```
+
+**説明**
+
+単一のセッションに対して、パケット数ハイウォーターマーク(RFC 4344, Section 3.1)を設定する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `level` - パケット数ハイウォーターマーク
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_GetMsgHighwater()`
+
+### wolfSSH_GetMsgHighwater()
+
+```c
+#include
+
+word32 wolfSSH_GetMsgHighwater(WOLFSSH* ssh);
+```
+
+**説明**
+
+セッションの現在のパケット数ハイウォーターマークを返す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- パケット数ハイウォーターマーク
+
+**関連項目**
+
+- `wolfSSH_SetMsgHighwater()`
+
+## エラーチェック
+
+
+
+### wolfSSH_get_error()
+
+
+
+```c
+#include
+
+int wolfSSH_get_error(const WOLFSSH* ssh);
+```
+
+**説明**
+
+wolfSSH セッションオブジェクトに設定された最後のエラーを返します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- `WS_ErrorCodes` の値(エラーコードを参照)
+
+**関連項目**
+
+- `wolfSSH_get_error_name()`
+
+### wolfSSH_get_error_name()
+
+
+
+```c
+#include
+
+const char* wolfSSH_get_error_name(const WOLFSSH* ssh);
+```
+
+**説明**
+
+wolfSSH セッションオブジェクトに設定された最後のエラーの名前文字列を返します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- エラー名文字列へのポインター
+
+**関連項目**
+
+- `wolfSSH_get_error()`
### wolfSSH_ErrorToName()
-**用法**
+```c
+#include
+
+const char* wolfSSH_ErrorToName(int err);
+```
+
+**説明**
+
+指定した wolfSSH エラーコードの名前文字列を返します。
+
+**引数**
+
+- `err` - エラーコードの値(`WS_ErrorCodes` の値)
+
+**戻り値**
+
+- エラー名文字列へのポインター
+
+**関連項目**
+
+- `wolfSSH_get_error_name()`
+
+## I/O コールバック
+
+
+
+### wolfSSH_SetIORecv()
+
+
+```c
+#include
+
+void wolfSSH_SetIORecv(WOLFSSH_CTX* ctx, WS_CallbackIORecv cb);
+```
+
+**説明**
+
+wolfSSH が入力データを読み取る際に使用する受信コールバックを登録します。コールバックのシグネチャは `WS_CallbackIORecv` 型で示されます。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - コンテキストの受信コールバックとして登録する関数
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_SetIOSend()`
+
+### wolfSSH_SetIOSend()
+
+
+```c
+#include
+
+void wolfSSH_SetIOSend(WOLFSSH_CTX* ctx, WS_CallbackIOSend cb);
+```
+
+**説明**
+
+wolfSSH が出力データを書き込む際に使用する送信コールバックを登録します。コールバックのシグネチャは `WS_CallbackIOSend` 型で示されます。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - コンテキストの送信コールバックとして登録する関数
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_SetIORecv()`
+
+### wolfSSH_SetIOReadCtx()
+
+
+```c
+#include
+
+void wolfSSH_SetIOReadCtx(WOLFSSH* ssh, void* ctx);
+```
+
+**説明**
+
+セッションの受信(I/O 読み取り)コールバックに渡されるコンテキストを登録します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `ctx` - セッションの受信コールバックに登録するコンテキスト
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_GetIOReadCtx()`
+
+### wolfSSH_SetIOWriteCtx()
+
+
+```c
+#include
+
+void wolfSSH_SetIOWriteCtx(WOLFSSH* ssh, void* ctx);
+```
+
+**説明**
+
+セッションの送信(I/O 書き込み)コールバックに渡されるコンテキストを登録します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `ctx` - セッションの送信コールバックに登録するコンテキスト
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_GetIOWriteCtx()`
+
+### wolfSSH_GetIOReadCtx()
+
+
+```c
+#include
+
+void* wolfSSH_GetIOReadCtx(WOLFSSH* ssh);
+```
+
+**説明**
+
+セッションの受信(I/O 読み取り)コールバックに以前登録されたコンテキストを返します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- 登録された読み取りコンテキストへのポインター。登録されていない場合は `NULL`
+
+**関連項目**
+
+- `wolfSSH_SetIOReadCtx()`
+
+### wolfSSH_GetIOWriteCtx()
+
+
+```c
+#include
+
+void* wolfSSH_GetIOWriteCtx(WOLFSSH* ssh);
+```
+
+**説明**
+
+セッションの送信(I/O 書き込み)コールバックに以前登録されたコンテキストを返します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- 登録された書き込みコンテキストへのポインター。登録されていない場合は `NULL`
+
+**関連項目**
+
+- `wolfSSH_SetIOWriteCtx()`
+
+## ユーザー認証
+
+
+
+### wolfSSH_SetUserAuth()
+
+
+```c
+#include
+
+void wolfSSH_SetUserAuth(WOLFSSH_CTX* ctx, WS_CallbackUserAuth cb);
+```
+
+**説明**
+
+wolfSSH コンテキストにユーザー認証コールバックを登録します。このコールバックは、サーバー上でハンドシェイク中にクライアントを認証するかどうかを判断するために呼び出されます。
+
+コールバックは、認証を肯定する判断の場合にのみ `WOLFSSH_USERAUTH_SUCCESS` を返します。`WOLFSSH_USERAUTH_PARTIAL_SUCCESS` は複数方式の認証のうち 1 つの要素が通過したことを、`WOLFSSH_USERAUTH_SUCCESS_ANOTHER` は keyboard-interactive の 1 ラウンドが通過したことを報告して次のラウンドを要求し、`WOLFSSH_USERAUTH_WOULD_BLOCK` は要求の再試行を求めます。`WOLFSSH_USERAUTH_REJECTED` は強い拒否であり、サーバーは USERAUTH_FAILURE で応答した後にセッションを終了します。その他の値は通常の失敗として扱われます。
+
+注意: `WOLFSSH_USERAUTH_SUCCESS` の値は `WS_SUCCESS` と同じ 0 です。単なる `return 0;`、ヘルパーから転送された `WS_SUCCESS`、あるいはデフォルトで 0 にフォールスルーするコードは、何の警告もなくクライアントを認証してしまいます。コールバックが明示的に処理しない認証タイプやコードパスでは、`WOLFSSH_USERAUTH_FAILURE` を返してください。`WOLFSSH_USERAUTH_PUBLICKEY` の場合、コールバックは提示された公開鍵をユーザーの認可済み鍵と照合する必要があります。ライブラリが検証するのは署名であり、鍵が認可されているかどうかではありません。
+
+完全な認証に至らない要求はすべて、セッションの認証失敗回数の上限に加算されます(wolfSSH_CTX_SetMaxAuthAttempts() を参照)。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - ユーザー認証コールバック関数
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_SetUserAuthCtx()`
+- `wolfSSH_CTX_SetMaxAuthAttempts()`
+
+### wolfSSH_SetUserAuthCtx()
+
+
+```c
+#include
+
+void wolfSSH_SetUserAuthCtx(WOLFSSH* ssh, void* userAuthCtx);
+```
+
+**説明**
+
+ユーザー認証コールバックに渡されるユーザーコンテキストポインターを設定します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `userAuthCtx` - 認証コールバックに渡すユーザーコンテキストポインター
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_GetUserAuthCtx()`
+
+### wolfSSH_GetUserAuthCtx()
+
+
+```c
+#include
+
+void* wolfSSH_GetUserAuthCtx(WOLFSSH* ssh);
+```
+
+**説明**
+
+wolfSSH_SetUserAuthCtx() によって以前設定されたユーザーコンテキストポインターを返します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- ユーザー認証コンテキストポインター
+- `NULL` - `ssh` が NULL の場合
+
+**関連項目**
+
+- `wolfSSH_SetUserAuthCtx()`
+
+### wolfSSH_SetUserAuthTypes()
+
+```c
+#include
+
+void wolfSSH_SetUserAuthTypes(WOLFSSH_CTX* ctx, WS_CallbackUserAuthTypes cb);
+```
+
+**説明**
+
+サーバーが提供するユーザー認証タイプを報告するコールバックを登録します。このコールバックは `WOLFSSH_USERAUTH_*` の値(例えば `WOLFSSH_USERAUTH_PASSWORD` や `WOLFSSH_USERAUTH_PUBLICKEY`)のビットマスクを返します。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - ユーザー認証タイプコールバック
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_SetUserAuth()`
+
+### wolfSSH_SetUserAuthResult()
+
+```c
+#include
+
+void wolfSSH_SetUserAuthResult(WOLFSSH_CTX* ctx, WS_CallbackUserAuthResult cb);
+```
+
+**説明**
+
+ユーザー認証試行の結果とともに呼び出されるコールバックを登録します。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - ユーザー認証結果コールバック
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_SetUserAuthResultCtx()`
+
+### wolfSSH_SetUserAuthResultCtx()
+
+```c
+#include
+
+void wolfSSH_SetUserAuthResultCtx(WOLFSSH* ssh, void* userAuthResultCtx);
+```
+
+**説明**
+
+ユーザー認証結果コールバックに渡されるユーザーコンテキストポインターを設定します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `userAuthResultCtx` - 結果コールバックに渡すユーザーコンテキストポインター
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_GetUserAuthResultCtx()`
+
+### wolfSSH_GetUserAuthResultCtx()
+
+```c
+#include
+
+void* wolfSSH_GetUserAuthResultCtx(WOLFSSH* ssh);
+```
+
+**説明**
+
+wolfSSH_SetUserAuthResultCtx() によって以前設定されたユーザーコンテキストポインターを返します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- ユーザー認証結果コンテキストポインター
+- `NULL` - `ssh` が NULL の場合
+
+**関連項目**
+
+- `wolfSSH_SetUserAuthResultCtx()`
+
+### wolfSSH_CTX_SetPublicKeyCheck()
+
+```c
+#include
+
+void wolfSSH_CTX_SetPublicKeyCheck(WOLFSSH_CTX* ctx,
+ WS_CallbackPublicKeyCheck cb);
+```
+
+**説明**
+
+クライアント側で、ハンドシェイクを続行する前にサーバーの公開鍵(ホスト鍵)を確認するために使用されるコールバックを登録します。これは中間者攻撃に対するクライアントの唯一の防御です。コールバックは、鍵を受け入れる場合は 0 を、拒否して鍵交換を失敗させる場合は 0 以外を返します。
+
+注意: 0 が受け入れを意味するため、デフォルトで `return 0;` するスタブはあらゆるサーバーホスト鍵を受け入れ、中間者攻撃に対する保護を無効にしてしまいます。コールバックは、known-hosts リストなどの信頼ストアと鍵を照合する必要があります。コールバックが登録されていない場合、ホスト鍵は拒否されます(`WS_PUBKEY_REJECTED_E`)。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - 公開鍵確認コールバック
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_SetPublicKeyCheckCtx()`
+
+### wolfSSH_SetPublicKeyCheckCtx()
+
+```c
+#include
+
+void wolfSSH_SetPublicKeyCheckCtx(WOLFSSH* ssh, void* publicKeyCheckCtx);
+```
+
+**説明**
+
+公開鍵確認コールバックに渡されるユーザーコンテキストポインターを設定します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `publicKeyCheckCtx` - コールバックに渡すユーザーコンテキストポインター
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_GetPublicKeyCheckCtx()`
+
+### wolfSSH_GetPublicKeyCheckCtx()
+
+```c
+#include
+
+void* wolfSSH_GetPublicKeyCheckCtx(WOLFSSH* ssh);
+```
+
+**説明**
+
+wolfSSH_SetPublicKeyCheckCtx() によって以前設定されたユーザーコンテキストポインターを返します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- 公開鍵確認コンテキストポインター
+- `NULL` - `ssh` が NULL の場合
+
+**関連項目**
+
+- `wolfSSH_SetPublicKeyCheckCtx()`
+
+### wolfSSH_CTX_SetMaxAuthAttempts()
+
+```c
+#include
+
+int wolfSSH_CTX_SetMaxAuthAttempts(WOLFSSH_CTX* ctx, int value);
+```
+
+**説明**
+
+このコンテキストから作成されるセッションについて、接続ごとのユーザー認証失敗回数のサーバー側上限を設定します。デフォルトは `DEFAULT_MAX_AUTH_ATTEMPTS`(6)で、OpenSSH の `MaxAuthTries` のデフォルトと同じ値です。上限に達すると、サーバーは SSH_MSG_DISCONNECT を送信して接続を切断します。`value` が 0 以下の場合は組み込みのデフォルトに戻ります。「無制限」の設定はありません。完全な認証に至らない要求は、部分的な成功も含めてすべて加算されます。加算されないのは、クライアントが方式リストを知るために最初に送る "none" 要求だけです。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `value` - 認証失敗回数の上限、またはデフォルトを使う場合は 0 以下
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT` - `ctx` が NULL
+
+**関連項目**
+
+- `wolfSSH_CTX_GetMaxAuthAttempts()`
+- `wolfSSH_SetMaxAuthAttempts()`
+
+### wolfSSH_CTX_GetMaxAuthAttempts()
+
+```c
+#include
+
+int wolfSSH_CTX_GetMaxAuthAttempts(WOLFSSH_CTX* ctx);
+```
+
+**説明**
+
+コンテキストのユーザー認証失敗回数の上限を返します。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+
+**戻り値**
+
+- 現在の上限値
+- `WS_BAD_ARGUMENT` - `ctx` が NULL
+
+**関連項目**
+
+- `wolfSSH_CTX_SetMaxAuthAttempts()`
+
+### wolfSSH_SetMaxAuthAttempts()
+
+```c
+#include
+
+int wolfSSH_SetMaxAuthAttempts(WOLFSSH* ssh, int value);
+```
+
+**説明**
+
+セッションがコンテキストから継承したユーザー認証失敗回数の上限を、そのセッションについてのみ上書きします。`value` の意味は wolfSSH_CTX_SetMaxAuthAttempts() と同じです。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `value` - 認証失敗回数の上限、またはデフォルトを使う場合は 0 以下
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT` - `ssh` が NULL
+
+**関連項目**
+
+- `wolfSSH_GetMaxAuthAttempts()`
+- `wolfSSH_CTX_SetMaxAuthAttempts()`
+
+### wolfSSH_GetMaxAuthAttempts()
+
+```c
+#include
+
+int wolfSSH_GetMaxAuthAttempts(WOLFSSH* ssh);
+```
+
+**説明**
+
+セッションのユーザー認証失敗回数の上限を返します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- 現在の上限値
+- `WS_BAD_ARGUMENT` - `ssh` が NULL
+
+**関連項目**
+
+- `wolfSSH_SetMaxAuthAttempts()`
+
+## ユーザー名の設定
+
+
+
+### wolfSSH_SetUsername()
+
+
+```c
+#include
+
+int wolfSSH_SetUsername(WOLFSSH* ssh, const char* username);
+```
+
+**説明**
+
+SSH 接続に使用するユーザー名を NULL 終端の文字列として設定します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `username` - SSH 接続に使用するユーザー名
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_MEMORY_E`
+
+**関連項目**
+
+- `wolfSSH_GetUsername()`
+
+### wolfSSH_SetUsernameRaw()
+
+```c
+#include
+
+int wolfSSH_SetUsernameRaw(WOLFSSH* ssh, const byte* username,
+ word32 usernameSz);
+```
+
+**説明**
+
+SSH 接続に使用するユーザー名を、NULL 終端の文字列ではなくバッファと長さから設定します。ユーザー名が NULL 終端でない場合や任意のバイト列を含む場合に有用です。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `username` - ユーザー名を含むバッファ
+- `usernameSz` - ユーザー名バッファの長さ
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_MEMORY_E`
+
+**関連項目**
+
+- `wolfSSH_SetUsername()`
+
+### wolfSSH_GetUsername()
+
+```c
+#include
+
+char* wolfSSH_GetUsername(WOLFSSH* ssh);
+```
+
+**説明**
+
+セッションに関連付けられたユーザー名を返します。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- セッションのユーザー名文字列へのポインター
+- `NULL` - `ssh` が NULL の場合、またはユーザー名が設定されていない場合
+
+**関連項目**
+
+- `wolfSSH_SetUsername()`
+
+## 接続関数
+
+### wolfSSH_accept()
+
+
+
+```c
+#include
+
+int wolfSSH_accept(WOLFSSH* ssh);
+```
+
+**説明**
+
+サーバー側で呼び出す。SSH クライアントが SSH ハンドシェイクを開始するのを待ち、それを完了させる。
+
+wolfSSH_accept() はブロッキング I/O・ノンブロッキング I/O のいずれとも併用できる。基盤となる I/O がノンブロッキングの場合、wolfSSH_accept() はハンドシェイクをまだ満たせない時点で戻り、続けて wolfSSH_get_error() を呼び出すと `WS_WANT_READ` または `WS_WANT_WRITE` が得られる。呼び出し側はデータが利用可能になった時点で再度呼び出すことで、wolfSSH は中断した箇所から処理を再開する。
+
+基盤となる I/O がブロッキングの場合、wolfSSH_accept() はハンドシェイクが完了するかエラーが発生するまで戻らない。
+
+デフォルトでは、wolfSSH_accept() は最初のチャネルが開かれてセッションが確立されるまで処理を進める。wolfSSH_CTX_SetAppChannels() または wolfSSH_SetAppChannels() でアプリケーション駆動のチャネルを有効にしている場合は、ユーザーが認証された時点で `WS_SUCCESS` を返し、以降はアプリケーションが wolfSSH_worker() とチャネルコールバックを使ってセッションを駆動する。デフォルトモードでは、SCP コマンドが許可されると wolfSSH_accept() は `WS_SCP_INIT` を返し、"sftp" サブシステム要求が許可されると wolfSSH_SFTP_accept() に処理を引き渡す。
+
+セッションが切断された後(切断を送信または受信した後)は、この呼び出しは `WS_FATAL_ERROR` を返し、wolfSSH_get_error() は `WS_DISCONNECT` を報告する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SCP_INIT` - SCP 転送が要求された(`WOLFSSH_SCP` ビルドの場合)
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR`
+
+**関連項目**
+
+- `wolfSSH_connect()`
+- `wolfSSH_stream_read()`
+- `wolfSSH_CTX_SetAppChannels()`
+
+### wolfSSH_connect()
+
+
+```c
+#include
+
+int wolfSSH_connect(WOLFSSH* ssh);
+```
+
+**説明**
+
+クライアント側で呼び出す。サーバーとの SSH ハンドシェイクを開始する。この呼び出しの前に、基盤となる通信チャネルがセットアップ済みである必要がある。
+
+wolfSSH_connect() はブロッキング I/O・ノンブロッキング I/O のいずれとも併用できる。基盤となる I/O がノンブロッキングの場合、wolfSSH_connect() はハンドシェイクをまだ満たせない時点で戻り、続けて wolfSSH_get_error() を呼び出すと `WS_WANT_READ` または `WS_WANT_WRITE` が得られる。呼び出し側は I/O が準備できた時点で再度呼び出すことで、wolfSSH は中断した箇所から処理を再開する。
+
+基盤となる I/O がブロッキングの場合、wolfSSH_connect() はハンドシェイクが完了するかエラーが発生するまで戻らない。
+
+セッションが切断された後(切断を送信または受信した後)は、この呼び出しは `WS_FATAL_ERROR` を返し、wolfSSH_get_error() は `WS_DISCONNECT` を報告する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR`
+
+**関連項目**
+
+- `wolfSSH_accept()`
+
+### wolfSSH_shutdown()
+
+
+```c
+#include
+
+int wolfSSH_shutdown(WOLFSSH* ssh);
+```
+
+**説明**
+
+セッションのチャネルリストにある最初のチャネルを終了させる。SSH_MSG_CHANNEL_EOF、終了ステータス、SSH_MSG_CHANNEL_CLOSE を送信した後、ピアからのクローズ応答を読み取る。SSH_MSG_DISCONNECT は送信しない。それには wolfSSH_SendDisconnect() を使用する。
+
+wolfSSH_shutdown() は、終了させるチャネルの有無にかかわらず、短いノンブロッキング送信によってキューに残されたもの(拒否された認証の USERAUTH_FAILURE や、こちら側自身の切断など)もフラッシュする。このフラッシュも短く終わることがあるため、`WS_WANT_WRITE` はチャネル終了のメッセージではなくこのフラッシュによるものである場合がある。いずれの場合も、別の結果が報告されるまで wolfSSH_shutdown() を再度呼び出すこと。ピアが切断した後は新たに何も送信されない。キューに残っているこちら側自身の切断だけが送出され、wolfSSH_get_error() は `WS_DISCONNECT` を報告する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_CHANNEL_CLOSED` - チャネルリストが空になった
+- `WS_WANT_WRITE` - 出力がまだキューに残っている。再度呼び出すこと
+- `WS_WANT_READ`
+- `WS_BAD_ARGUMENT` - `ssh` が NULL、または終了させるチャネルがない
+- 送信または受信の処理によるその他の負のエラーコード
+
+**関連項目**
+
+- `wolfSSH_SendDisconnect()`
+- `wolfSSH_ChannelExit()`
+- `wolfSSH_OutputPending()`
+
+### wolfSSH_stream_read()
+
+
+
+```c
+#include
+
+int wolfSSH_stream_read(WOLFSSH* ssh, byte* buf, word32 bufSz);
+```
+
+**説明**
+
+セッションのチャネルリストにある最初のチャネルから、復号化済みデータを最大 `bufSz` バイト読み取る。読み取られたバイトは内部バッファから取り除かれ、その分がチャネルウィンドウに加算される。
+
+wolfSSH_stream_read() はブロッキング I/O・ノンブロッキング I/O のいずれとも併用できる。基盤となる I/O がノンブロッキングで読み取りを満たせない場合、この呼び出しは負の値を返し、wolfSSH_get_error() を呼び出すと `WS_WANT_READ` または `WS_WANT_WRITE` が得られる。呼び出し側はデータが利用可能になった時点で再度呼び出す。基盤となる I/O がブロッキングの場合、データが利用可能になるかエラーが発生するまで戻らない。リキーが進行中の場合、この呼び出しは失敗し、wolfSSH_get_error() は `WS_REKEYING` を返す。wolfSSH_worker() を呼び出してそれを完了させる。
+
+読み取りが成功すると、ピアにウィンドウ調整が送信される。ノンブロッキングソケットではこの送信が短く終わることがある。その場合もバイト数は返されるが、ウィンドウ調整がキューに入っていることを示すために wolfSSH_get_error() は `WS_WANT_WRITE` のままになる。ウィンドウ調整は次の送信または次の wolfSSH_worker() 呼び出しで送出される。
+
+この呼び出しは最初のチャネルのみを扱う。それ以外のチャネルに通常データまたは拡張データが到着すると、この呼び出しは `WS_ERROR` で失敗する。それらのチャネルは wolfSSH_ChannelIdRead() と wolfSSH_ChannelIdReadExt() で読み取ること。最初のチャネルに拡張(stderr)データが到着すると、この呼び出しは `WS_EXTDATA` を返す。wolfSSH_extended_data_read() が 0 を返すまで読み出すこと。ピアからの EOF は、バッファ済みのデータがすべて読み取られた後にのみ報告される。切断後も、切断前に到着したデータは読み取ることができる。バッファが空になると、この呼び出しは失敗し、wolfSSH_get_error() は `WS_DISCONNECT` を返す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `buf` - データを格納するバッファ
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 より大きい値 - 成功時に読み取ったバイト数
+- `WS_BAD_ARGUMENT`
+- `WS_EXTDATA` - 最初のチャネルで拡張データが待機している
+- `WS_EOF` - ピアがチャネルで EOF を送信した
+- `WS_ERROR` - 別のチャネルにデータが到着した、またはピアが EOF を送信した(wolfSSH_get_error() は `WS_EOF` を報告する)
+- `WS_BUFFER_E`
+- `WS_FATAL_ERROR` - wolfSSH_get_error() を確認する。`WS_REKEYING`、`WS_DISCONNECT`、`WS_WANT_READ`、`WS_WANT_WRITE`、またはその他のエラーが報告される
+
+**関連項目**
+
+- `wolfSSH_stream_send()`
+- `wolfSSH_extended_data_read()`
+- `wolfSSH_ChannelIdRead()`
+- `wolfSSH_accept()`
+
+### wolfSSH_stream_send()
+
+
+
+```c
+#include
+
+int wolfSSH_stream_send(WOLFSSH* ssh, byte* buf, word32 bufSz);
+```
+
+**説明**
+
+`buf` から `bufSz` バイトを SSH ストリームデータバッファに書き込む。
+
+wolfSSH_stream_send() はブロッキング I/O・ノンブロッキング I/O のいずれとも併用できる。基盤となる I/O がノンブロッキングで保留中のデータすべてを送信できない場合、wolfSSH_get_error() を呼び出すと `WS_WANT_READ` または `WS_WANT_WRITE` が得られ、呼び出し側はソケットが送信可能になった時点で再度呼び出す。基盤となる I/O がブロッキングの場合、データの送信が完了するかエラーが発生するまで戻らない。エラーが want-read/want-write でない場合(例えば `WS_REKEYING`)は、内部の SSH 処理が完了するまで wolfSSH_worker() を呼び出す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `buf` - 送信するバッファ
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 より大きい値 - 成功時に書き込んだバイト数
+- `WS_BAD_ARGUMENT`
+- `WS_EOF` - こちら側がすでにチャネルで EOF を送信している
+- `WS_WINDOW_FULL` - ピアのチャネルウィンドウがいっぱいである
+- `WS_FATAL_ERROR` - wolfSSH_get_error() を確認する。鍵交換中であれば `WS_REKEYING` が、セッションが切断された後であれば `WS_DISCONNECT` が報告される
+
+**関連項目**
+
+- `wolfSSH_stream_read()`
+- `wolfSSH_stream_send_eof()`
+- `wolfSSH_accept()`
+
+
+### wolfSSH_stream_send_eof()
+
+```c
+#include
+
+int wolfSSH_stream_send_eof(WOLFSSH* ssh);
+```
+
+**説明**
+
+SSH_MSG_CHANNEL_EOF を送信して、セッションのチャネルリストにある最初のチャネルをハーフクローズする。wolfSSH_ChannelSendEof() が指定したチャネルに対して行うのと同じ処理である。以降、そのチャネルでのデータ送信は `WS_EOF` で失敗する。読み取りは、ピアが自身の EOF を送信するかチャネルをクローズするまで引き続き可能である。2 回目の呼び出しで 2 つ目の EOF が送出されることはない。原因を保持したうえで `WS_FATAL_ERROR` を返す wolfSSH_stream_send() とは異なり、この呼び出しは鍵交換中であれば `WS_REKEYING` そのものを返す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT` - `ssh` が NULL、またはチャネルがない
+- `WS_CHANNEL_NOT_CONF` - ピアがまだチャネルのオープンを確認していない
+- `WS_REKEYING` - 鍵交換が進行中である。完了後に再試行すること
+- `WS_FATAL_ERROR` - セッションが切断された(wolfSSH_get_error() は `WS_DISCONNECT` を報告する)
+- `WS_WANT_WRITE` などの送信処理のステータス
+
+**関連項目**
+
+- `wolfSSH_ChannelSendEof()`
+- `wolfSSH_stream_send()`
+- `wolfSSH_ChannelGetEof()`
+
+### wolfSSH_stream_exit()
+
+
+```c
+#include
+
+int wolfSSH_stream_exit(WOLFSSH* ssh, int status);
+```
+
+**説明**
+
+SSH ストリームを終了し、指定した終了ステータスをピアに送信してチャネルを閉じる。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `status` - ピアに報告する終了ステータス
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT` - `ssh` が NULL、またはチャネルがない
+- `WS_FATAL_ERROR` - セッションが切断された(wolfSSH_get_error() は `WS_DISCONNECT` を報告する)
+
+**関連項目**
+
+- `wolfSSH_stream_send()`
+
+### wolfSSH_TriggerKeyExchange()
+
+
+```c
+#include
+
+int wolfSSH_TriggerKeyExchange(WOLFSSH* ssh);
+```
+
+**説明**
+
+SSH_MSG_KEXINIT を準備・送信することで、鍵交換(リキー)プロセスを開始する。開始に成功した場合、セッションのエラー状態は変更されない。失敗した場合にのみ、そのコードが wolfSSH_get_error() 用に記録される。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR` - セッションが切断された(wolfSSH_get_error() は `WS_DISCONNECT` を報告する)
+- KEXINIT の送信によるその他の負のエラーコード(`WS_WANT_WRITE` を含む)
+
+**関連項目**
+
+- `wolfSSH_worker()`
+- `wolfSSH_RekeyPending()`
+
+### wolfSSH_stream_peek()
+
+```c
+#include
+
+int wolfSSH_stream_peek(WOLFSSH* ssh, byte* buf, word32 bufSz);
+```
+
+**説明**
+
+内部バッファから取り除くことなく、最初のチャネルの保留中の復号化済みデータを最大 `bufSz` バイトまで `buf` にコピーする。その後 wolfSSH_stream_read() を呼び出すと同じデータが返される。`buf` が NULL の場合は、利用可能なバイト数(上限は `bufSz`)のみが返される。ピアからの EOF は、バッファ済みのデータがすべて読み取られた後にのみ報告される。切断後も、バッファ済みのデータは覗き見できる。バッファが空になると、この呼び出しは失敗し、wolfSSH_get_error() は `WS_DISCONNECT` を返す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `buf` - 覗き見したデータを格納するバッファ、または NULL
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 以上の値 - コピーされたバイト数(`buf` が NULL の場合は利用可能なバイト数)
+- `WS_BAD_ARGUMENT` - `ssh` が NULL、またはチャネルがない
+- `WS_REKEYING` - 鍵交換が進行中である
+- `WS_ERROR` - バッファが空で、ピアが EOF を送信した(wolfSSH_get_error() は `WS_EOF` を報告する)
+- `WS_FATAL_ERROR` - バッファが空で、セッションが切断された(wolfSSH_get_error() は `WS_DISCONNECT` を報告する)
+
+**関連項目**
+
+- `wolfSSH_stream_read()`
+- `wolfSSH_ChannelIdPeek()`
+
+### wolfSSH_extended_data_send()
+
+```c
+#include
+
+int wolfSSH_extended_data_send(WOLFSSH* ssh, byte* buf, word32 bufSz);
+```
+
+**説明**
+
+セッションのチャネルリストにある最初のチャネルで、`bufSz` バイトを拡張チャネルデータ(stderr データ型)として送信する。別のチャネルで送信するには wolfSSH_ChannelIdSendExt() を使用する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `buf` - 送信するバッファ
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 より大きい値 - 成功時に送信したバイト数
+- `WS_BAD_ARGUMENT`
+- `WS_EOF` - こちら側がすでにチャネルで EOF を送信している
+- `WS_REKEYING` - 鍵交換が進行中である
+- `WS_WINDOW_FULL` - ピアのチャネルウィンドウがいっぱいである
+- `WS_FATAL_ERROR` - セッションが切断された(wolfSSH_get_error() は `WS_DISCONNECT` を報告する)
+
+**関連項目**
+
+- `wolfSSH_extended_data_read()`
+
+### wolfSSH_extended_data_read()
+
+```c
+#include
+
+int wolfSSH_extended_data_read(WOLFSSH* ssh, byte* out, word32 outSz);
+```
+
+**説明**
+
+セッションのチャネルリストにある最初のチャネルから、バッファ済みの拡張データ(stderr)を最大 `outSz` バイトまで `out` に読み取る。これは wolfSSH_stream_read() の stderr 版であり、同じチャネルを読み取る。
+
+アプリケーションは stderr を読み出さなければならない。stderr は通常データとチャネルの受信ウィンドウを共有しており(RFC 4254 セクション 5.2)、ウィンドウはデータが読み取られた分だけ補充されるため、読み取られない stderr はいずれチャネルを停止させる。wolfSSH_stream_read() が `WS_EXTDATA` を返した後、この関数が 0 を返すまで呼び出すこと。その他のチャネルには wolfSSH_ChannelIdReadExt() を使用する。wolfSSH_worker() は `WS_EXTDATA` を返す際に、拡張データが到着したチャネルを示す。
+
+読み出しによってピアにウィンドウ調整が送信される。ノンブロッキングソケットではこの送信が短く終わることがある。その場合もバイト数は返されるが、フラッシュが必要であることを示すために wolfSSH_get_error() は `WS_WANT_WRITE` のままになる。読み取りしか行わないアプリケーションは、その後 wolfSSH_worker() でフラッシュしなければならない。そうしないと、ピアのウィンドウは補充されない。バッファはチャネルに属しているため、チャネルが削除された時点で読み取られていないデータはチャネルとともに破棄される。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `out` - データを格納するバッファ
+- `outSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 以上の値 - 読み取ったバイト数
+- `WS_BAD_ARGUMENT` - `ssh` または `out` が NULL、`outSz` が 0、またはチャネルがない
+- `WS_INVALID_STATE_E`
+
+**関連項目**
+
+- `wolfSSH_extended_data_send()`
+- `wolfSSH_ChannelIdReadExt()`
+- `wolfSSH_ChannelReadExt()`
+
+### wolfSSH_SendIgnore()
+
+```c
+#include
+
+int wolfSSH_SendIgnore(WOLFSSH* ssh, const byte* buf, word32 bufSz);
+```
+
+**説明**
+
+SSH_MSG_IGNORE メッセージをピアに送信する。ピアはその内容を破棄する。キープアライブやトラフィック解析対策として使用できる。引数 `buf` と `bufSz` は現在使用されておらず、メッセージには常に 128 バイトのゼロが含まれる。
+
+厳格な鍵交換(strict KEX)を提示している場合、最初の鍵交換が完了する前に IGNORE を送信すると、strict KEX を使うピアは接続を終了してしまう。そのため、それまでの間この呼び出しは `WS_INVALID_STATE_E` で拒否される。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `buf` - ペイロード(現在は未使用)
+- `bufSz` - ペイロードのサイズ(現在は未使用)
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_INVALID_STATE_E` - strict KEX を提示しており、最初の鍵交換がまだ完了していない
+- `WS_FATAL_ERROR` - セッションが切断された(wolfSSH_get_error() は `WS_DISCONNECT` を報告する)
+
+### wolfSSH_SendDisconnect()
+
+```c
+#include
+
+int wolfSSH_SendDisconnect(WOLFSSH* ssh, word32 reason);
+```
+
+**説明**
+
+指定した理由コード(`WS_DisconnectReasonCodes` の値を参照)を伴う SSH_MSG_DISCONNECT メッセージをピアに送信する。
+
+切断は、送信したものでも受信したものでも、セッションを終了させる(RFC 4253 セクション 11.1)。以降、wolfSSH_shutdown()、各送信呼び出し、wolfSSH_accept()、wolfSSH_connect()、wolfSSH_worker() は `WS_DISCONNECT` を報告し、切断以外の受信メッセージは破棄され、チャネルコールバックは呼び出されなくなる。切断前に到着したチャネルデータは引き続き読み取ることができる。
+
+1 回の切断でセッションは終了するため、2 回目の呼び出しは `WS_DISCONNECT` で失敗する。例外は、短いノンブロッキング送信によってこちら側自身の切断がキューに残された場合で、それがキューに残っている間は、再度呼び出すとフラッシュが再試行される。wolfSSH_shutdown() もこれを再試行する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `reason` - 切断理由コード
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_WANT_WRITE` - メッセージがキューに入った。再度呼び出してフラッシュすること
+- `WS_FATAL_ERROR` - セッションはすでに切断されている(wolfSSH_get_error() は `WS_DISCONNECT` を報告する)
+
+**関連項目**
+
+- `wolfSSH_shutdown()`
+
+### wolfSSH_global_request()
+
+```c
+#include
+
+int wolfSSH_global_request(WOLFSSH* ssh, const unsigned char* data,
+ word32 dataSz, int reply);
+```
+
+**説明**
+
+`data` をリクエスト名として、グローバルリクエスト(SSH_MSG_GLOBAL_REQUEST)をピアに送信する。`reply` が 1 の場合、ピアに成功または失敗の応答を要求する。RFC 4254 セクション 7.1 で want-reply ブール値の後に置かれるリクエスト固有のデータはこの呼び出しでは運べないため、それを必要とするリクエストには wolfSSH_FwdRemoteSetup() などの専用の呼び出しがある。応答にはリクエスト ID が含まれないため、`WOLFSSH_FWD` ビルドでは、`reply` を設定して送信したリクエストは wolfSSH_FwdRemoteSetup() が使用するのと同じ送信順のキューに並ぶ。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `data` - リクエスト名
+- `dataSz` - リクエスト名のサイズ
+- `reply` - ピアからの応答を要求する場合は 1、それ以外は 0
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT` - `ssh` または `data` が NULL、または `reply` が 0 でも 1 でもない
+- `WS_FATAL_ERROR` - セッションが切断された(wolfSSH_get_error() は `WS_DISCONNECT` を報告する)
+- 送信処理によるその他の負のエラーコード
+
+### wolfSSH_ChannelIdRead()
+
+```c
+#include
+
+int wolfSSH_ChannelIdRead(WOLFSSH* ssh, word32 channelId,
+ byte* buf, word32 bufSz);
+```
+
+**説明**
+
+`channelId` で識別されるチャネルから、バッファ済みのデータを最大 `bufSz` バイトまで読み取る。wolfSSH_ChannelRead() と同じ規約に従い、すでにバッファにあるデータを読み出し、バッファが空の場合は 0 を返す。トランスポートから受信することも、EOF を報告することもない。wolfSSH_ChannelRead() とは異なり、鍵交換中も読み取りを行う。さらにデータを受信するには wolfSSH_worker() を呼び出す。
+
+読み取りによってチャネルウィンドウが加算され、ピアにウィンドウ調整が送信される。ウィンドウ調整を送出できない場合でもバイト数は返される。呼び出し後に wolfSSH_get_error() を確認し、`WS_WANT_WRITE` であればウィンドウ調整がキューに入っていることを意味する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `channelId` - 読み取り対象のチャネル
+- `buf` - データを格納するバッファ
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 以上の値 - 読み取ったバイト数
+- `WS_BAD_ARGUMENT`
+- `WS_INVALID_CHANID` - その ID を持つチャネルがない
+- `WS_INVALID_STATE_E`
+
+**関連項目**
+
+- `wolfSSH_ChannelIdSend()`
+- `wolfSSH_ChannelIdPeek()`
+- `wolfSSH_ChannelIdReadExt()`
+
+### wolfSSH_ChannelIdPeek()
+
+```c
+#include
+
+int wolfSSH_ChannelIdPeek(WOLFSSH* ssh, word32 channelId,
+ byte* buf, word32 bufSz);
+```
+
+**説明**
+
+`channelId` で識別されるチャネルから、バッファ済みのデータを消費することなく最大 `bufSz` バイトまで `buf` にコピーする。wolfSSH_stream_peek() と同じ規約に従うが、鍵交換中も覗き見を行う点が異なる。`buf` が NULL の場合は、利用可能なバイト数(上限は `bufSz`)のみが返される。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `channelId` - 覗き見するチャネル
+- `buf` - 覗き見したデータを格納するバッファ、または NULL
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 以上の値 - コピーされたバイト数(`buf` が NULL の場合は利用可能なバイト数)
+- `WS_BAD_ARGUMENT` - `ssh` が NULL
+- `WS_INVALID_CHANID` - その ID を持つチャネルがない
+- `WS_ERROR` - バッファが空で、ピアが EOF を送信した(wolfSSH_get_error() は `WS_EOF` を報告する)
+- `WS_FATAL_ERROR` - バッファが空で、セッションが切断された(wolfSSH_get_error() は `WS_DISCONNECT` を報告する)
+
+**関連項目**
+
+- `wolfSSH_ChannelIdRead()`
+- `wolfSSH_stream_peek()`
+
+### wolfSSH_ChannelIdSend()
+
+```c
+#include
+
+int wolfSSH_ChannelIdSend(WOLFSSH* ssh, word32 channelId,
+ byte* buf, word32 bufSz);
+```
+
+**説明**
+
+`channelId` で識別されるチャネル上で `bufSz` バイトを送信する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `channelId` - 送信対象のチャネル
+- `buf` - 送信するバッファ
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 より大きい値 - 成功時に送信したバイト数
+- `WS_BAD_ARGUMENT`
+- `WS_INVALID_CHANID` - その ID を持つチャネルがない
+- `WS_CHANNEL_NOT_CONF` - ピアがまだチャネルのオープンを確認していない
+- `WS_EOF` - こちら側がすでにチャネルで EOF を送信している
+- `WS_REKEYING` - 鍵交換が進行中である
+- `WS_WINDOW_FULL` - ピアのチャネルウィンドウがいっぱいである
+- `WS_FATAL_ERROR` - セッションが切断された(wolfSSH_get_error() は `WS_DISCONNECT` を報告する)
+
+**関連項目**
+
+- `wolfSSH_ChannelIdRead()`
+- `wolfSSH_ChannelIdSendExt()`
+
+### wolfSSH_ChannelIdReadExt()
+
+```c
+#include
+
+int wolfSSH_ChannelIdReadExt(WOLFSSH* ssh, word32 channelId,
+ byte* buf, word32 bufSz);
+```
+
+**説明**
+
+`channelId` で識別されるチャネルから、バッファ済みの拡張データ(stderr)を最大 `bufSz` バイトまで読み取る。wolfSSH_extended_data_read() と同じ読み出しの規約に従うが、チャネルリストの最初のチャネルではなく、指定したチャネルを読み取る。stderr は通常データとチャネルの受信ウィンドウを共有しているため、各チャネルの stderr を読み出さなければならない。wolfSSH_worker() は `WS_EXTDATA` を返す際にそのチャネルを示す。ウィンドウ調整を送出できない場合でもバイト数は返され、その場合 wolfSSH_get_error() は `WS_WANT_WRITE` などのウィンドウ調整のステータスを報告する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `channelId` - 読み取り対象のチャネル
+- `buf` - データを格納するバッファ
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 以上の値 - 読み取ったバイト数
+- `WS_BAD_ARGUMENT` - `ssh` または `buf` が NULL、または `bufSz` が 0
+- `WS_INVALID_CHANID` - その ID を持つチャネルがない
+- `WS_INVALID_STATE_E`
+
+**関連項目**
+
+- `wolfSSH_ChannelIdSendExt()`
+- `wolfSSH_extended_data_read()`
+- `wolfSSH_ChannelReadExt()`
+
+### wolfSSH_ChannelIdSendExt()
+
+```c
+#include
+
+int wolfSSH_ChannelIdSendExt(WOLFSSH* ssh, word32 channelId,
+ byte* buf, word32 bufSz);
+```
+
+**説明**
+
+`channelId` で識別されるチャネル上で、`bufSz` バイトを拡張データ(stderr データ型)として送信する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `channelId` - 送信対象のチャネル
+- `buf` - 送信するバッファ
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 より大きい値 - 成功時に送信したバイト数
+- `WS_BAD_ARGUMENT`
+- `WS_INVALID_CHANID` - その ID を持つチャネルがない
+- `WS_CHANNEL_NOT_CONF` - ピアがまだチャネルのオープンを確認していない
+- `WS_EOF` - こちら側がすでにチャネルで EOF を送信している
+- `WS_REKEYING` - 鍵交換が進行中である
+- `WS_WINDOW_FULL` - ピアのチャネルウィンドウがいっぱいである
+- `WS_FATAL_ERROR` - セッションが切断された(wolfSSH_get_error() は `WS_DISCONNECT` を報告する)
+
+**関連項目**
+
+- `wolfSSH_ChannelIdReadExt()`
+- `wolfSSH_extended_data_send()`
+- `wolfSSH_ChannelSendExt()`
+
+### wolfSSH_CTX_SetSshProtoIdStr()
+
+```c
+#include
+
+int wolfSSH_CTX_SetSshProtoIdStr(WOLFSSH_CTX* ctx, const char* protoIdStr);
+```
+
+**説明**
+
+接続開始時のバージョン交換でピアに送信される SSH プロトコル識別文字列を上書きする。文字列は検証され、次の条件をすべて満たさない場合は `WS_BAD_ARGUMENT` で拒否される(その場合、コンテキストは変更されない)。
+
+- "SSH-2.0-" で始まる
+- 長さが、"SSH-2.0-" 接頭辞と末尾の CR LF を含めて 11 から 255 バイトである
+- CR LF (`"\r\n"`) で終わる
+- 本体には印字可能な US-ASCII(0x20 から 0x7e)のみを含む。したがって、CR や LF を途中に含めることはできない
+- 本体の先頭が空白でない(RFC 4253 セクション 4.2 では本体を softwareversion とそれに続く任意のコメントとして解釈するため、先頭に空白があると softwareversion が空になる。本体の途中にある空白はコメントの開始となる)
+
+文字列はコピーされずに参照として保持されるため、コンテキストの存続期間中は有効かつ変更されない状態を保つ必要がある。検証は設定時にのみ行われる。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `protoIdStr` - 送信するプロトコル識別文字列(末尾の CR LF を含む)
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+### wolfSSH_CTX_SetWindowPacketSize()
+
+```c
+#include
+
+int wolfSSH_CTX_SetWindowPacketSize(WOLFSSH_CTX* ctx,
+ word32 windowSz, word32 maxPacketSz);
+```
+
+**説明**
+
+このコンテキストから作成されるセッションに対する、デフォルトのチャネルウィンドウサイズと最大パケットサイズを設定する。`windowSz` が 0 の場合はデフォルト(`DEFAULT_WINDOW_SZ`、128 KB)が選択され、ウィンドウは 256 KB(`WINDOW_SZ_UPPER_BOUND`)を超えてはならない。`maxPacketSz` が 0 の場合はデフォルト(`DEFAULT_MAX_PACKET_SZ`、32768)が選択され、パケットサイズは `MAX_PACKET_SZ` からチャネルデータパケットのオーバーヘッドを差し引いた値を超えてはならない。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `windowSz` - チャネルウィンドウサイズ(バイト単位)、またはデフォルトを使う場合は 0
+- `maxPacketSz` - 最大パケットサイズ(バイト単位)、またはデフォルトを使う場合は 0
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT` - `ctx` が NULL、またはサイズが上限を超えている
+
+## チャネルコールバック
+
+wolfSSH ライブラリへのインターフェースは単一の int 値を返す。ピアがチャネルを開くといった非同期な情報の状態を伝えるには、このインターフェースでは不十分である。wolfSSH は、チャネルの状態変化を呼び出し元アプリケーションに通知するためにコールバック関数を使用する。
+
+以下の SSHv2 プロトコルメッセージの受信に対応するコールバック関数が存在する。
+
+* SSH_MSG_CHANNEL_OPEN
+* SSH_MSG_CHANNEL_OPEN_CONFIRMATION
+* SSH_MSG_CHANNEL_OPEN_FAILURE
+* SSH_MSG_CHANNEL_REQUEST
+ - "shell"
+ - "subsystem"
+ - "exec"
+ - 任意のリクエストタイプ(wolfSSH_CTX_SetChannelReqAnyCb() で設定する
+ リクエストポリシーコールバックを通じて)
+* SSH_MSG_CHANNEL_EOF
+* SSH_MSG_CHANNEL_CLOSE
+
+### コールバック関数のプロトタイプ
+
+チャネルコールバック関数はいずれも、**WOLFSSH_CHANNEL** オブジェクトへのポインター _channel_ と、アプリケーションが定義したデータ構造へのポインター _ctx_ を引数に取る。チャネルに関するプロパティは API 関数を使って取得できる。
+
+```
+typedef int (*WS_CallbackChannelOpen)(WOLFSSH_CHANNEL* channel, void* ctx);
+typedef int (*WS_CallbackChannelReq)(WOLFSSH_CHANNEL* channel, void* ctx);
+typedef int (*WS_CallbackChannelEof)(WOLFSSH_CHANNEL* channel, void* ctx);
+typedef int (*WS_CallbackChannelClose)(WOLFSSH_CHANNEL* channel, void* ctx);
+```
+
+リクエストポリシーコールバックは独自のプロトタイプを持ち、リクエストタイプとそのタイプ固有のデータも受け取り、`WS_ReqCbResult` の値のいずれかを返す。グローバルリクエストポリシーコールバック(wolfSSH_CTX_SetGlobalReqAnyCb() を参照)も同じ結果値を使用する。
+
+```
+typedef enum WS_ReqCbResult {
+ WOLFSSH_REQ_UNHANDLED = 0,
+ WOLFSSH_REQ_ACCEPT,
+ WOLFSSH_REQ_REJECT
+} WS_ReqCbResult;
+
+typedef int (*WS_CallbackChannelReqAny)(WOLFSSH_CHANNEL* channel,
+ const byte* type, word32 typeSz, const byte* data, word32 dataSz,
+ int wantReply, void* ctx);
+```
+
+ここでは 0 が `WOLFSSH_REQ_UNHANDLED` であることに注意すること。shell、subsystem、exec のリクエストコールバックでは、戻り値 0 は受け入れと解釈される。このファミリーのコールバックは、`WS_SUCCESS` ではなく、3 つの `WS_ReqCbResult` 値のいずれかを返す。
+
+### wolfSSH_CTX_SetChannelOpenCb()
+
+```c
+#include
+
+int wolfSSH_CTX_SetChannelOpenCb(WOLFSSH_CTX* ctx,
+ WS_CallbackChannelOpen cb);
+```
+
+**説明**
+
+ピアからチャネルオープン(SSH_MSG_CHANNEL_OPEN)メッセージを受信した際に呼び出されるコールバックを設定する。これはピアによるチャネルオープンに対するポリシーコールバックである。コールバックが登録されていない場合、ピアからのチャネルオープンはデフォルトですべて受け入れられる。ただし、フォワーディングのチャネルタイプは、フォワーディングコールバックがなければ拒否される(wolfSSH_CTX_SetFwdCb() を参照)。クライアントは、サーバーからの "session" チャネルオープンを、このコールバックより先に無条件で拒否する。チャネルのポリシーを適用するにはコールバックを登録する。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - チャネルオープンコールバック
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_CTX_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_SetChannelOpenCtx()`
+
+
+### wolfSSH_CTX_SetChannelOpenRespCb()
+
+```c
+#include
+
+int wolfSSH_CTX_SetChannelOpenRespCb(WOLFSSH_CTX* ctx,
+ WS_CallbackChannelOpen confCb, WS_CallbackChannelOpen failCb);
+```
+
+**説明**
+
+ピアからチャネルオープン確認(SSH_MSG_CHANNEL_OPEN_CONFIRMATION)またはチャネルオープン失敗(SSH_MSG_CHANNEL_OPEN_FAILURE)メッセージを受信した際に呼び出されるコールバックを設定する。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `confCb` - チャネルオープン確認のコールバック
+- `failCb` - チャネルオープン失敗のコールバック
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_CTX_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_CTX_SetChannelOpenCb()`
+
+
+### wolfSSH_CTX_SetChannelReqShellCb()
+
+```c
+#include
+
+int wolfSSH_CTX_SetChannelReqShellCb(WOLFSSH_CTX* ctx,
+ WS_CallbackChannelReq cb);
+```
+
+**説明**
+
+ピアから _shell_ に対するチャネルリクエスト(SSH_MSG_CHANNEL_REQUEST)メッセージを受信した際に呼び出されるコールバックを設定する。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - チャネルリクエストコールバック
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_CTX_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_CTX_SetChannelReqExecCb()`
+
+
+### wolfSSH_CTX_SetChannelReqSubsysCb()
+
+```c
+#include
+
+int wolfSSH_CTX_SetChannelReqSubsysCb(WOLFSSH_CTX* ctx,
+ WS_CallbackChannelReq cb);
+```
+
+**説明**
+
+ピアから _subsystem_ に対するチャネルリクエスト(SSH_MSG_CHANNEL_REQUEST)メッセージを受信した際に呼び出されるコールバックを設定する。サブシステムの一般的な例としては SFTP がある。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - チャネルリクエストコールバック
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_CTX_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_CTX_SetChannelReqShellCb()`
+
+
+### wolfSSH_CTX_SetChannelReqExecCb()
+
+```c
+#include
+
+int wolfSSH_CTX_SetChannelReqExecCb(WOLFSSH_CTX* ctx,
+ WS_CallbackChannelReq cb);
+```
+
+**説明**
+
+ピアから _exec_ するコマンドに対するチャネルリクエスト(SSH_MSG_CHANNEL_REQUEST)メッセージを受信した際に呼び出されるコールバックを設定する。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - チャネルリクエストコールバック
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_CTX_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_CTX_SetChannelReqShellCb()`
+
+
+### wolfSSH_CTX_SetChannelReqAnyCb()
+
+```c
+#include
+
+int wolfSSH_CTX_SetChannelReqAnyCb(WOLFSSH_CTX* ctx,
+ WS_CallbackChannelReqAny cb);
+```
+
+**説明**
+
+ピアからのすべてのチャネルリクエスト(SSH_MSG_CHANNEL_REQUEST)に対して、shell、exec、subsystem の各コールバックや組み込みの処理よりも先に参照されるポリシーコールバックを設定する。専用のコールバックを持たないリクエスト(env、pty-req、window-change、exit-status、auth-agent-req、またはライブラリが認識しないタイプ)も、これによりポリシーに基づいて許可または拒否できる。
+
+`type` は到着したままのリクエスト名で長さは `typeSz` バイト、`data` はリクエストのタイプ固有の部分で長さは `dataSz` バイトであり、コールバックが解析する。どちらも NUL 終端されておらず、名前には任意のバイトが含まれ得るため、文字列関数ではなく `typeSz` バイトで照合すること。`wantReply` はピアが要求した値である。コールバックは、wolfSSH_SetChannelReqCtx() で設定したチャネルリクエストコンテキストを共有する。
+
+コールバックは `WS_ReqCbResult` を返す。`WOLFSSH_REQ_UNHANDLED`(0 であり、コールバックがない場合の応答でもある)は、リクエストを他のコールバックと組み込みの処理に委ねる。`WOLFSSH_REQ_ACCEPT` と `WOLFSSH_REQ_REJECT` はリクエストの扱いを確定させ、shell、exec、subsystem の各コールバックは参照されない。ライブラリは、認識できるリクエストについては必要な情報を引き続き解析・記録する。そのため、受け入れられた session リクエストはチャネルのセッションタイプを設定し、受け入れられた pty-req のモードは保持される。タイプに適合しないリクエストは、コールバックの結果にかかわらず拒否される。ライブラリが認識しないタイプは、`WOLFSSH_REQ_ACCEPT` の場合は CHANNEL_SUCCESS で応答され、それ以外の場合は拒否される。
+
+コールバックは、渡されたチャネルを wolfSSH_ChannelFree() で解放してもよい。その場合リクエストはそこで終了し、応答を求めるリクエストは `WS_INVALID_CHANID` で失敗する。`type` と `data` はセッションの入力バッファ内を指しており、呼び出しの間のみ有効であるため、いずれかを保持するコールバックはコピーしなければならない。コールバックは、このセッションに対してライブラリの受信側(wolfSSH_worker()、wolfSSH_stream_read()、wolfSSH_accept()、または SFTP の呼び出し)を再入してはならない。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - チャネルリクエストポリシーコールバック
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_CTX_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_SetChannelReqCtx()`
+- `wolfSSH_CTX_SetChannelReqShellCb()`
+- `wolfSSH_CTX_SetGlobalReqAnyCb()`
+
+
+### wolfSSH_CTX_SetAppChannels()
+
+```c
+#include
+
+int wolfSSH_CTX_SetAppChannels(WOLFSSH_CTX* ctx, byte enable);
+```
+
+**説明**
+
+このコンテキストから作成されるセッションについて、サーバー側でのアプリケーション駆動のチャネル処理を有効または無効にする。デフォルトでは無効である。
+
+無効の場合、wolfSSH_accept() は最初のチャネルが開かれてセッションが確立されるまでセッションのステートマシンを進め、コールバックが登録されていない shell、exec、subsystem のリクエストは受け入れられる。
+
+有効の場合、wolfSSH_accept() はユーザーが認証された時点で `WS_SUCCESS` を返し、以降はアプリケーションがすべてのチャネルを管理し、wolfSSH_worker() とチャネルコールバックを使ってセッションを駆動する。このとき、コールバックが登録されていない shell、exec、subsystem のリクエストは拒否される。このモードでは wolfSSH_accept() は組み込みの SCP エントリーポイントに到達しないため、`WS_SCP_INIT` を返さない。wolfSSH_SFTP_accept() は引き続き機能するが、"sftp" サブシステムリクエストがサブシステムコールバックによって許可されたセッションチャネル上に限られる。それより前に呼び出すと `WS_INVALID_STATE_E` を返す。
+
+これは wolfSSH_new() の前にコンテキストに設定するか、最初の wolfSSH_accept() 呼び出しの前に wolfSSH_SetAppChannels() でセッションに設定する。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `enable` - アプリケーション駆動のチャネルを有効にする場合は 0 以外、無効にする場合は 0
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_CTX_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_SetAppChannels()`
+- `wolfSSH_accept()`
+- `wolfSSH_ChannelGetSessionGranted()`
+
+
+### wolfSSH_SetAppChannels()
+
+```c
+#include
+
+int wolfSSH_SetAppChannels(WOLFSSH* ssh, byte enable);
+```
+
+**説明**
+
+1 つのセッションについて、コンテキストから継承した設定を上書きして、アプリケーション駆動のチャネル処理を有効または無効にする。wolfSSH_CTX_SetAppChannels() を参照。最初の wolfSSH_accept() 呼び出しの前に設定すること。後から有効にしても以降のチャネルリクエストには適用されるが、すでにユーザー認証を通過したセッションでは、wolfSSH_accept() が戻る位置を変えることはできない。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `enable` - アプリケーション駆動のチャネルを有効にする場合は 0 以外、無効にする場合は 0
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_CTX_SetAppChannels()`
+
+### wolfSSH_CTX_SetChannelEofCb()
+
+```c
+#include
+
+int wolfSSH_CTX_SetChannelEofCb(WOLFSSH_CTX* ctx,
+ WS_CallbackChannelEof cb);
+```
+
+**説明**
+
+ピアからチャネル EOF(SSH_MSG_CHANNEL_EOF)メッセージを受信した際に呼び出されるコールバックを設定する。これはピアがこのチャネル上でこれ以上データを送信しないことを示す。チャネルは送信用に開いたままである。ライブラリは受信した EOF に対して自ら EOF を返すことはない。応答するかどうかはアプリケーションが判断し、応答する場合は wolfSSH_ChannelSendEof() または wolfSSH_stream_send_eof() を使用する。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - チャネル EOF コールバック
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_CTX_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_CTX_SetChannelCloseCb()`
+
+
+### wolfSSH_CTX_SetChannelCloseCb()
+
+```c
+#include
+
+int wolfSSH_CTX_SetChannelCloseCb(WOLFSSH_CTX* ctx,
+ WS_CallbackChannelClose cb);
+```
+
+**説明**
+
+ピアからチャネルクローズ(SSH_MSG_CHANNEL_CLOSE)メッセージを受信した際に呼び出されるコールバックを設定する。これはピアがこのチャネルを終了させたいことを示す。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - チャネルクローズコールバック
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_CTX_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_CTX_SetChannelEofCb()`
+
+
+### wolfSSH_SetChannelOpenCtx()
+
+```c
+#include
+
+int wolfSSH_SetChannelOpenCtx(WOLFSSH* ssh, void* ctx);
+```
+
+**説明**
+
+チャネルオープン、チャネルオープン確認、およびチャネルオープン失敗の各コールバックに渡されるユーザーコンテキストを設定する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `ctx` - チャネルオープンコールバックに渡すユーザーコンテキスト
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_GetChannelOpenCtx()`
+
+
+### wolfSSH_SetChannelReqCtx()
+
+```c
+#include
+
+int wolfSSH_SetChannelReqCtx(WOLFSSH* ssh, void* ctx);
+```
+
+**説明**
+
+チャネルリクエスト(shell/exec/subsystem)コールバックに渡されるユーザーコンテキストを設定する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `ctx` - チャネルリクエストコールバックに渡すユーザーコンテキスト
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_GetChannelReqCtx()`
+
+
+### wolfSSH_SetChannelEofCtx()
+
+```c
+#include
+
+int wolfSSH_SetChannelEofCtx(WOLFSSH* ssh, void* ctx);
+```
+
+**説明**
+
+チャネル EOF コールバックに渡されるユーザーコンテキストを設定する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `ctx` - チャネル EOF コールバックに渡すユーザーコンテキスト
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_GetChannelEofCtx()`
+
+
+### wolfSSH_SetChannelCloseCtx()
+
+```c
+#include
+
+int wolfSSH_SetChannelCloseCtx(WOLFSSH* ssh, void* ctx);
+```
+
+**説明**
+
+チャネルクローズコールバックに渡されるユーザーコンテキストを設定する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `ctx` - チャネルクローズコールバックに渡すユーザーコンテキスト
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_GetChannelCloseCtx()`
+
+
+### wolfSSH_GetChannelOpenCtx()
+
+```c
+#include
+
+void* wolfSSH_GetChannelOpenCtx(WOLFSSH* ssh);
+```
+
+**説明**
+
+wolfSSH_SetChannelOpenCtx() によって以前に設定された、チャネルオープンコールバック用のユーザーコンテキストを返す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- チャネルオープンコンテキストへのポインター。設定されていない場合は `NULL`
+
+**関連項目**
+
+- `wolfSSH_SetChannelOpenCtx()`
+
+
+### wolfSSH_GetChannelReqCtx()
+
+```c
+#include
+
+void* wolfSSH_GetChannelReqCtx(WOLFSSH* ssh);
+```
+
+**説明**
+
+wolfSSH_SetChannelReqCtx() によって以前に設定された、チャネルリクエストコールバック用のユーザーコンテキストを返す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- チャネルリクエストコンテキストへのポインター。設定されていない場合は `NULL`
+
+**関連項目**
+
+- `wolfSSH_SetChannelReqCtx()`
+
+
+### wolfSSH_GetChannelEofCtx()
+
+```c
+#include
+
+void* wolfSSH_GetChannelEofCtx(WOLFSSH* ssh);
+```
+
+**説明**
+
+wolfSSH_SetChannelEofCtx() によって以前に設定された、チャネル EOF コールバック用のユーザーコンテキストを返す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- チャネル EOF コンテキストへのポインター。設定されていない場合は `NULL`
+
+**関連項目**
+
+- `wolfSSH_SetChannelEofCtx()`
+
+
+### wolfSSH_GetChannelCloseCtx()
+
+```c
+#include
+
+void* wolfSSH_GetChannelCloseCtx(WOLFSSH* ssh);
+```
+
+**説明**
+
+wolfSSH_SetChannelCloseCtx() によって以前に設定された、チャネルクローズコールバック用のユーザーコンテキストを返す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- チャネルクローズコンテキストへのポインター。設定されていない場合は `NULL`
+
+**関連項目**
+
+- `wolfSSH_SetChannelCloseCtx()`
+
+
+## チャネル関数
+
+これらの関数は、SSH セッション上で多重化される個々のチャネルを表す `WOLFSSH_CHANNEL` オブジェクトに対して直接操作を行う。
+
+### wolfSSH_ChannelGetSessionType()
+
+```c
+#include
+
+WS_SessionType wolfSSH_ChannelGetSessionType(const WOLFSSH_CHANNEL* channel);
+```
+
+**説明**
+
+指定したチャネルの `WS_SessionType`(shell、exec、subsystem、terminal、または unknown)を返す。
+
+**引数**
+
+- `channel` - チャネルへのポインター
+
+**戻り値**
+
+- チャネルの `WS_SessionType`
+
+**関連項目**
+
+- `wolfSSH_ChannelGetSessionCommand()`
+
+
+### wolfSSH_ChannelGetSessionCommand()
+
+```c
+#include
+
+const char* wolfSSH_ChannelGetSessionCommand(const WOLFSSH_CHANNEL* channel);
+```
+
+**説明**
+
+指定したチャネル上でピアが実行を要求したコマンド("exec" リクエストの場合)、またはサブシステム名("subsystem" リクエストの場合)を返す。記録された長さを得るには wolfSSH_ChannelGetSessionCommandSz() を使用する。
+
+**引数**
+
+- `channel` - チャネルへのポインター
+
+**戻り値**
+
+- コマンド文字列へのポインター。存在しない場合は `NULL`
+
+**関連項目**
+
+- `wolfSSH_ChannelGetSessionType()`
+- `wolfSSH_ChannelGetSessionCommandSz()`
+
+### wolfSSH_ChannelGetSessionCommandSz()
+
+```c
+#include
+
+word32 wolfSSH_ChannelGetSessionCommandSz(const WOLFSSH_CHANNEL* channel);
+```
+
+**説明**
+
+wolfSSH_ChannelGetSessionCommand() が返すコマンドまたはサブシステム名の、記録された長さ(バイト単位)を返す。ピアが指定したコマンドには NUL バイトが含まれている可能性があるため、その違いが重要な場合は、この長さと文字列長を比較すること。
+
+**引数**
+
+- `channel` - チャネルへのポインター
+
+**戻り値**
+
+- セッションコマンドの長さ。存在しない場合、または `channel` が NULL の場合は 0
+
+**関連項目**
+
+- `wolfSSH_ChannelGetSessionCommand()`
+
+### wolfSSH_ChannelGetSessionGranted()
+
+```c
+#include
+
+int wolfSSH_ChannelGetSessionGranted(const WOLFSSH_CHANNEL* channel);
+```
+
+**説明**
+
+チャネル上の shell、exec、subsystem のいずれかのリクエストに CHANNEL_SUCCESS で応答済みかどうかを報告する。セッションリクエストのコールバックからは、応答中のリクエストについてはこのフラグはまだクリアされて見えるため、そこでフラグがセットされていれば、それ以前のリクエストが許可されたことを意味する。
+
+**引数**
+
+- `channel` - チャネルへのポインター
+
+**戻り値**
+
+- 1 - チャネル上のセッションリクエストが許可済み
+- 0 - 許可されたものはない
+- `WS_BAD_ARGUMENT` - `channel` が NULL
+
+**関連項目**
+
+- `wolfSSH_ChannelGetSessionType()`
+- `wolfSSH_CTX_SetAppChannels()`
+- `wolfSSH_ChannelCommandIsScp()`
+
+### wolfSSH_ChannelFree()
+
+```c
+#include