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/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..c8c0bc66 100644
--- a/wolfSSH/src-ja/chapter01.md
+++ b/wolfSSH/src-ja/chapter01.md
@@ -1,49 +1,41 @@
# イントロダクション
+このマニュアルは組み込み用 wolfSSH ライブラリの技術ガイドとして書かれています。wolfSSH のビルド方法と使い始め方を説明し、ビルドオプション、機能、サポートなどの概要を提供します。
-このマニュアルは組み込み用wolfSSHライブラリの技術解説書としてお読みいただけるように書かれています。wolfSSHをビルドして起動することから始まり、ビルドオプション、機能、サポートなどの概要を提供します。
-
-wolfSSHはC言語で書かれたSSH(セキュアシェル)サーバー実装で、wolfSSLから利用可能なwolfCryptを使用します。さらに、マルチプラットフォームで使用できるようにゼロから構築されています。また、SSHv2仕様に準拠しています。
+wolfSSH は C 言語で書かれた SSH(セキュアシェル)サーバーの実装で、wolfSSL からも利用可能な wolfCrypt ライブラリを使用します。さらに、wolfSSH はマルチプラットフォームで利用できるようにゼロから構築されています。この実装は SSH v2 仕様に基づいています。
## プロトコル概要
-SSHは2つの通信端点に多重化されたデータストリームを提供する一連の階層化されたプロトコルです。一般的には、サーバー上のシェルへの接続を保護するために利用されます。ですが、ファイルを安全にコピーしたり、Xディスプレイプロトコルをトンネリングするのにも利用されています。
-
-## wolfSSHをお勧めする理由
+SSH は、2 つのピア間で多重化されたデータストリームを提供する階層化されたプロトコル群です。一般的には、サーバー上のシェルへの接続を保護するために利用されます。ただし、2 台のマシン間でファイルを安全にコピーしたり、X ディスプレイプロトコルをトンネリングしたりするためにもよく利用されます。
-wolfSSHはANSI Cで記述された軽量のSSHv2サーバーライブラリで、サイズが軽量でありスピード、機能セットに富んでいる点から、組み込み機器、リアルタイムOSおよびリソース制約のある環境をターゲットにしています。wolfSSHは業界標準のSSH v2をサポートし、さらに先進的なアルゴリズム(ChaCha20, Poly1305, NTRU とSHA-3)も提供しています。wolfSSHを支えているのはwolfCrypt暗号化ライブラリで、このライブラリはFIPS140-2認証(認証#2425)を受けています。より詳細はwolfCrypt FIPS FAQを参照されるかあるいはfacts@wolfssl.comまでお知らせください。
+## 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(サーバーおよびクライアント)
-- SSH v2.0 (サーバー機能)
+- 最小フットプリントサイズ 33kB
-- 最小フットプリント:33kB
+- 実行時メモリ使用量 1.4KB〜2KB(設定可能な受信バッファは含まず)
-- 実行時メモリ消費量:1.4KB ~ 2KB (受信バッファは含まず)
+- 複数のハッシュ関数: SHA-1、SHA-2(SHA-256、SHA-384、SHA-512)
-- ハッシュ関数: SHA-1, SHA-2 (SHA-256, SHA-384, SHA-512), BLAKE2b, Poly
+- ブロック暗号および認証付き暗号: AES-CBC、AES-CTR、AES-GCM
-- 暗号アルゴリズム:Block, Stream, and Authenticated Ciphers: AES (CBC, CTR, GCM, CCM), Camellia, ChaCha
+- 鍵交換オプション: DHE および ECDHE(曲線 NISTP256、NISTP384、NISTP521)
-- 公開鍵オプション: RSA, DH, EDH, NTRU
+- 公開鍵認証オプション: RSA および ECDSA(曲線 NISTP256、NISTP384、NISTP521)
-- ECDH と ECDSA で次の楕円曲線をサポート: NISTP256, NISTP384, NISTP, Curve25519, Ed
+- ユーザー認証のサポート(パスワード、keyboard-interactive、公開鍵認証)
-- クライアント認証をサポート(RSA key, password)
+- シンプルな API
-- シンプルなAPI
+- PEM および DER 形式の X.509 証明書サポート
-- 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
+- Hybrid ECDH-P256 Kyber-Level1 によるポスト量子ハイブリッド鍵交換
+- SFTP、SCP、SSH-AGENT、ローカルおよびリモートポートフォワーディングのサポート
diff --git a/wolfSSH/src-ja/chapter02.md b/wolfSSH/src-ja/chapter02.md
index 76774981..1797979d 100644
--- a/wolfSSH/src-ja/chapter02.md
+++ b/wolfSSH/src-ja/chapter02.md
@@ -1,102 +1,81 @@
-# 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ライブラリがインストールされます。
-
-## *nixシステム上でのwolfSSHのビルド
-
-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
```
+## Windows 上でのビルド
-## Windows上でのwolfSSHのビルド
-
-Visual Studioプロジェクトファイルは以下で取得できます:
-https://github.com/wolfSSL/wolfssh/blob/master/ide/winvs/wolfssh.sln
-
+Visual Studio のプロジェクトファイルは *ide\\winvs* ディレクトリにあります。
-ソリューションファイル'wolfssh.sln'はwolfSSH,そのサンプルプログラムとテストプログラムをビルドするように構成されています。DebugビルドとReleaseビルドの構成をスタティックリンクライブラリとダイナミック(32/64ビット)ライブラリの両形式で提供しています。user_settings.hはwolfSSLのコンフィギュレーションで必要となります。
-
-
-このプロジェクトファイルではwolfSSHとwolfSSLのソースフォルダ階層が隣同士に配置されていることを前提にしています。また、それらのルートフォルダにはバージョン番号が含まれていないフォルダ名となっていることを前提としています。つまり、次のようなフォルダ構成です:
+ソリューションファイル 'wolfssh.sln' により、wolfSSH とそのサンプルおよびテストプログラムをビルドできます。このソリューションは、スタティックおよびダイナミックの 32 ビットまたは 64 ビットライブラリの Debug ビルドと Release ビルドの両方を提供します。wolfSSL のビルドをコンフィギュレーションするには user_settings.h を使用してください。
+このプロジェクトは、wolfSSH と wolfSSL のソースディレクトリが隣り合わせにインストールされ、そのフォルダ名にバージョン番号が含まれていないことを前提としています:
```
Projects\
@@ -104,96 +83,70 @@ 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 も残すには、このオプションを削除してください。
+### Windows 上でのビルドに使用するユーザーマクロ
-### Windows上でのビルドに使用するユーザーマクロ定義
-
-
-
-ソリューションではwolfSSLライブラリとヘッダーファイルのロケーションを指定するためにユーザーマクロを利用します。wolfssl64ソリューションでは全てのパスは既定のビルド出力先に設定されます。ユーザーマクロ'wolfCryptDir'はライブラリを検索するためのベースパスとして使用します。初期値として、`..\..\..\..\wolfssl`に設定されています。その後、例えば追加のインクルードファイル検索パスが追加される場合には、`$(wolfCryptDir)`に対して追加を行います。
-
-wolfCryptDirパスはプロジェクトファイルからの相対位置で表せなければなりません。
-
+このソリューションでは、wolfSSL ライブラリとヘッダーの場所を示すためにユーザーマクロを使用します。すべてのパスは wolfssl64 ソリューションの既定のビルド出力先に設定されています。ユーザーマクロ wolfCryptDir は、ライブラリを検索するためのベースパスとして使用されます。初期値は `..\..\..\..\wolfssl` に設定されています。そして、例えば API テストプロジェクトの追加インクルードディレクトリの値は `$(wolfCryptDir)` に設定されています。
+wolfCryptDir パスは、プロジェクトファイルからの相対パスでなければなりません。プロジェクトファイルはすべて 1 つ下のディレクトリにあります。
```
wolfssh/wolfssh.vcxproj
unit-test/unit-test.vcxproj
```
-
-そのほかのユーザーマクロは異なるビルドターゲットのためのディレクトリを表すために使用されます。例えば、 `wolfCryptDllRelease64` は次のフォルダを表します:
-
-
+その他のユーザーマクロは、異なるビルド向けの wolfSSL ライブラリが見つかるディレクトリです。したがって、ユーザーマクロ 'wolfCryptDllRelease64' は初期値として次のように設定されています:
```
$(wolfCryptDir)\x64\DLL Release
```
-
-このパスは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 --libdir=~/wolfssl/lib --includedir=~/wolfssl/include
$ make
$ make install
```
-
-上記パスがご自分の実際のディレクトリとマッチすることを確認して下さい。
+上記のパスが実際の場所と一致していることを確認してください。
diff --git a/wolfSSH/src-ja/chapter03.md b/wolfSSH/src-ja/chapter03.md
index f3516a65..a7883ee4 100644
--- a/wolfSSH/src-ja/chapter03.md
+++ b/wolfSSH/src-ja/chapter03.md
@@ -1,104 +1,86 @@
# 始めよう
-wolfSSHのダウンロードとビルドが終わったら、テストプログラムとサンプルプログラムが自動的に作成されているはずです。
-
+wolfSSHのダウンロードとビルドが終わったら、ライブラリの使い方を示す自動テストプログラムとサンプルプログラムが用意されています。
## テスト
### wolfSSHユニットテスト
-wolfSSHのユニットテストはAPIの動作を確認するためのものです。ポジティブ/ネガティブの両テストケースが実行されます。テストはマニュアルで実行することができますが、他の処理の一部(例えばmake check コマンド実行時)として実行される場合もあります。
+wolfSSHのユニットテストはAPIの動作を確認するためのものです。ポジティブ/ネガティブの両テストケースが実行されます。テストはマニュアルで実行することができますが、makeやmake checkコマンドなど他の自動化された処理の一部として実行される場合もあります。
-全てのサンプルプログラムとテストはwolfSSHのホームディレクトリから実行されなければなりません。実行時に必要な各種証明書と鍵をプログラムが見つけることができるようにするためです。
+全てのサンプルプログラムとテストはwolfSSHのホームディレクトリから実行されなければなりません。実行時に必要な各種証明書と鍵をテストツールが見つけることができるようにするためです。
ユニットテストをマニュアルで実行するには次のようにします:
-
```
$ ./tests/unit.test
```
-
あるいは
-
```
$ make check (autoconfが使われている場合)
```
### テストに関する注記事項
-レポジトリをクローンした後、テスト用の秘密鍵はユーザーにとってはリードオンリーになっていることを確認してください。そうなっていない場合はssh_clientサンプルプログラムは警告します。
-
+レポジトリをクローンした後、テスト用の秘密鍵はユーザーにとってリードオンリーになっていることを確認してください。そうなっていない場合はssh_clientがそうするように警告します。
```
$ 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はその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: 新たな鍵交換をトリガー
+- CTRL-C: コネクションを切断します。
+- CTRL-E: いくつかのセッション統計をプリントアウトします。
+- CTRL-F: 新たな鍵交換をトリガーします。
echoserverサンプルプログラムには以下のコマンドラインオプションが指定できます:
-
```
-1 一回の接続後に終了する
-e クライアントからECC公開鍵を受け取る
-E ECC秘密鍵を使う
-f 入力をエコーする
- -p 待ち受けポート番号を指定する(デフォルトは22222)
+ -p 待ち受けポート番号を指定する(デフォルトは22222)
-N ノンブロッキングソケットを使う
-d SFTPコネクションのホームディレクトリを指定する
-j 接続相手からの公開鍵を受け付ける為にロードする
@@ -106,10 +88,9 @@ echoserverサンプルプログラムには以下のコマンドラインオプ
### wolfSSH Client
-このクライアントプログラムははSSHサーバーと接続を確立します。簡単モードでは"Hello, wolfSSH!"をサーバーに送信し、サーバーからの応答を表示して終了します。疑似ターミナルオプションではこのクライアントプログラムは実際のクライアントとして機能します。
+このクライアントはSSHサーバーとの接続を確立します。最も単純なモードでは"Hello, wolfSSH!"という文字列をサーバーに送信し、その応答を表示して終了します。疑似ターミナルオプションを使うと、このクライアントは実際のクライアントとして機能します。
クライアントサンプルプログラムには以下のコマンドラインオプションが指定できます:
-
```
-h 接続先ホストアドレス(デフォルト 127.0.0.1)
-p 接続先ポート(デフォルト 22222)
@@ -118,16 +99,16 @@ echoserverサンプルプログラムには以下のコマンドラインオプ
-e サンプルecc公開鍵を指定
-i ユーザーの秘密鍵ファイル名
-j ユーザーの公開鍵ファイル名
- -x 接続完了後、データ送受信することなく終了
+ -x 接続成功後、データの読み書きをせずに終了
-N ノンブロッキングソケットを使う
-t 疑似ターミナルを使用
- -c リモートコマンドとpipe stdin/stdout を使用する
+ -c リモートコマンドを実行し stdin/stdout をパイプする
-a SSH-AGENTの使用を試みる
```
### wolfSSH portfwd
-portfwdサンプルプログラムはSSHサーバーと接続を確立し、ローカルポートフォワーディングのための待ち受けポートをリスンするかあるいはリスンしているリスナーに対してリモートポートフォワーディングを要求します。接続確立の後はプログラムは終了します。
+portfwdサンプルプログラムはSSHサーバーとの接続を確立し、ローカルポートフォワーディングのための待ち受けリスナーを設定するか、あるいはリモートポートフォワーディングのためのリスナーを要求します。接続確立の後、プログラムは終了します。
portfwd サンプルプログラムには以下のコマンドラインオプションが指定できます:
```
@@ -143,107 +124,227 @@ portfwd サンプルプログラムには以下のコマンドラインオプシ
### wolfSSH scpclient
-scpclientとwolfscpはSSHサーバーと接続を確立し、指定されたファイルをローカルマシンにコピー、あるいはローカルマシンのファイルをサーバーにコピーします。
-wolfSSHのサンプルプログラムを使用する際は、絶対パスを使用する必要があり、ディレクトリは`/`で終わる必要があります。
+scpclient、すなわちwolfscpはSSHサーバーとの接続を確立し、指定されたファイルをサーバーへ、あるいはサーバーからローカルマシンへコピーします。wolfSSHのサンプルプログラムを使用する際は、絶対パスを使用する必要があり、ディレクトリは`/`で終わる必要があります。
scpclientサンプルプログラムには以下のコマンドラインオプションが指定できます:
-
```
-H 接続先SSHサーバーアドレス(デフォルト 127.0.0.1)
-p 接続先SSHサーバーポート(デフォルト 22222)
-u ユーザー名(指定必須)
-P パスワード(省略した場合はプロンプトが表示される)
- -L : ローカルマシンのfromからサーバーのtoへコピーする
- -S : サーバーのfromからローカルマシンのtoへコピーする
+ -L : ローカルマシンからサーバーへコピーする
+ -S : サーバーからローカルマシンへコピーする
```
-# wolfSSH sftpclient
-
-sftpclient, wolfsftpはSSHサーバーと接続を確立し、ディレクトリ移動、ファイル取得、ファイル配置、ディレクトリ追加・削除等を実行します。
-
+### wolfSSH sftpclient
+sftpclient、すなわちwolfsftpはSSHサーバーとの接続を確立し、ディレクトリ移動、ファイルの取得と配置、ディレクトリの作成と削除などを実行できるようにします。
sftpclientサンプルプログラムには以下のコマンドラインオプションが指定できます:
-
```
-h 接続先SSHサーバーアドレス(デフォルト 127.0.0.1)
-p 接続先SSHサーバーポート(デフォルト 22222)
-u ユーザー名(指定必須)
-P パスワード(省略した場合はプロンプトが表示される)
- -d ローカルマシンのデフォルトのパスを設定
+ -d ローカルマシンのデフォルトのパスを設定する
-N ノンブロッキングソケットを使う
- -e ECC公開鍵を使ってユーザー認証を行う
+ -e ECCユーザー認証を使う
-l ローカルファイル名
-r リモートファイル名
- -g ローカルファイルをリモートファイルとして送信
- -G リモートファイルをローカルファイルとして受信
+ -g ローカルファイルをリモートファイルとして送信する
+ -G リモートファイルをローカルファイルとして受信する
```
### wolfSSHサーバー
-serverはプレースホルダーとして存在しています。
+このツールはプレースホルダーです。
## SCP
-wolfSSHはscpの為のサーバー側サポート(サーバーへのファイルコピーとサーバーからのファイルのコピーの両方)を含んでいます。単一ファイルのコピーとディレクトリ単位の再帰的コピーの両方をデフォルトの送信コールバックあるいは受信コールバックでサポートしています。
+wolfSSHはscpの為のサーバー側サポートを含んでおり、サーバーへのファイルコピーとサーバーからのファイルコピーの両方をサポートしています。単一ファイルのコピーとディレクトリ単位の再帰的コピーの両方が、デフォルトの送信・受信コールバックでサポートされています。
-wolfSSHをscpサポート機能を有効にしてコンパイルするには,`--enable-scp` ビルドオプションを指定するかあるいは`WOLFSSL_SCP`マクロ定義を指定してください:
+wolfSSHをscpサポート付きでコンパイルするには、`--enable-scp` ビルドオプションを指定するか、あるいは`WOLFSSL_SCP`を定義してください:
+```
+ $ ./configure --enable-scp
+ $ make
+```
+
+
+wolfSSLサンプルサーバープログラムは単一のscpリクエストを受け付けるように設定されており、wolfSSHライブラリのコンパイル時にデフォルトでコンパイルされます。サンプルサーバーを起動するには次を実行してください:
+
+ $ ./examples/server/server
+
+クライアント側では標準の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`を定義してください:
+
+```
+ $ ./configure --enable-sftp
+ $ make
```
-$ ./configure --enable-scp
+
+APIの完全な使用方法と実装の詳細については、wolfSSHユーザーマニュアルを参照してください。
+
+作成されるSFTPクライアントはexamples/sftpclient/ディレクトリに配置され、サーバーはwolfSSHと同じechoserverを使って実行されます。
+
+```
+ src/wolfssh$ ./examples/sftpclient/wolfsftp
+```
+
+サポートされているコマンドの完全な一覧は、接続後に"help"と入力することで確認できます。
+
+```
+ wolfSSH sftp> help
+
+ Commands :
+ cd change directory
+ chmod change mode
+ get pulls file(s) from server
+ 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
+```
+別のシステムに接続する例は次のようになります:
+
+```
+ src/wolfssh$ ./examples/sftpclient/wolfsftp -p 22 -u user -h 192.168.1.111
+```
+
+## シェルサポート
+
+wolfSSHのサンプルechoserverは、ログインを試みるユーザーの為にシェルをforkできるようになりました。この機能は現在のところLinuxとmacOSでのみテストされています。echoserver.cファイルは、ユーザー認証コールバック内にユーザーのクレデンシャルを保持するように変更するか、あるいは提供されたパスワードを検証するようにユーザー認証コールバックを変更する必要があります。
+
+wolfSSHをシェルサポート付きでコンパイルするには、--enable-shellビルドオプションを指定するか、あるいはWOLFSSH_SHELLを定義してください:
+```
+$ ./configure --enable-shell
$ make
```
-wolfSSHサンプルサーバープログラムは単一のscpリクエストを受け付けるように設定されていてwolfSSHライブラリをビルドする際にデフォルトでビルドされます。サンプルサーバーを起動するには以下を実行してください:
+デフォルトでechoserverはシェルを起動しようとします。エコーテストの動作を使うには、echoserverにコマンドラインオプション-fを指定してください:
+```
+$ ./examples/echoserver/echoserver -f
+```
+
+## Post-Quantum
-$ ./examples/server/server
+wolfSSHはポスト量子アルゴリズムのKyberをサポートするようになりました。これはNIST提出のLevel 1パラメータセットを使用し、wolfSSHとの統合を通じてliboqsによって実装されています。これはP-256 ECC曲線上のECDHEとハイブリッド化されています。
-標準scpコマンド群はクライアント側で利用されます。以下はその使用例です。ここで、`scp`は使用しているsshクライアントを表します。
+liboqsを使用できるようにするためには、システム上でliboqsをビルドしインストールしておく必要があります。liboqsの0.7.0リリースをサポートしています。次のリンクからダウンロードできます:
-単一ファイルをサーバーに送信する場合で既定のユーザー"jill"を使うとすると:
```
-$ scp -P 22222 jill@127.0.0.1:
+ https://github.com/open-quantum-safe/liboqs/archive/refs/tags/0.7.0.tar.gz
```
-同じ単一ファイルをサーバーに送信する場合で、今度はタイムスタンプを使いバーバスモードを使うとすると:
+展開後、次の手順で十分です:
```
-$ scp -v -p -P 22222 jill@127.0.0.1:
+ $ cd liboqs-0.7.0
+ $ mkdir build
+ $ cd build
+ $ cmake -DOQS_USE_OPENSSL=0 ..
+ $ make all
+ $ sudo make install
```
-あるディレクトリを再帰的にサーバーに送信する場合には:
+
+wolfSSHでP-256 ECC曲線上のECDHEとハイブリッド化されたKyber Level1のサポートを有効にするには、configure時に`--with-liboqs`ビルドオプションを使用してください:
```
-$ scp -P 22222 -r jill@127.0.0.1:
+ $ ./configure --with-liboqs
```
-単一ファイルをサーバーからローカルマシンにコピーするには:
+この機能が有効になっていると、wolfSSHのクライアントとサーバーはP-256 ECC曲線上のECDHEとハイブリッド化されたKyber Level1を使うように自動的にネゴシエートします。
```
-$ scp -P 22222 jill@127.0.0.1:
+ $ ./examples/echoserver/echoserver -f
+
+ $ ./examples/client/client -u jill -P upthehill
```
-サーバーのあるディレクトリを再帰的に受信する場合には:
+クライアント側では、次のような出力が表示されます:
```
-$ scp -P 22222 -r jill@127.0.0.1:
+Server said: Hello, wolfSSH!
```
-## シェルサポート
+OpenQuantumSafeのOpenSSHフォークとの相互運用性を確認したい場合は、echoserverを実行している間にそのフォークをビルドして実行できます。次のリンクからリリースをダウンロードしてください:
-wolfSSHのechoserverサンプルプログラムはログインを試みるユーザーの為にシェルを起動することができます。この機能はLinuxとmacOSでのみテスト済みです。echoserver.cファイルはユーザー認証コールバック内にユーザーのクレデンシャルを保持するように変更が必要です。あるいはユーザー認証コールバックは提供されたパスワードを検証するように変更する必要があります。
+```
+ https://github.com/open-quantum-safe/openssh/archive/refs/tags/OQS-OpenSSH-snapshot-2021-08.tar.gz
+```
-wolfSSHをシェルサポート機能付きでビルドする場合には--enable-shellオプションを指定するかあるいはWOLFSSH_SHELLマクロ定義を指定します:
+ビルドと実行には次の手順で十分です:
```
-$ ./configure --enable-shell
-$ make
+ $ tar xmvf openssh-OQS-OpenSSH-snapshot-2021-08.tar.gz
+ $ cd openssh-OQS-OpenSSH-snapshot-2021-08/
+ $ ./configure --with-liboqs-dir=/usr/local
+ $ make all
+ $ ./ssh -o"KexAlgorithms +ecdh-nistp256-kyber-512-sha256" \
+ -o"PubkeyAcceptedAlgorithms +ssh-rsa" \
+ -o"HostkeyAlgorithms +ssh-rsa" \
+ jill@localhost -p 22222
```
-デフォルトでechoserverはシェルを実行しようと試みます。エコーバックの機能をテストしたい場合にはコマンドラインオプションで-fを指定してください:
+注記: プロンプトが表示されたら、パスワード"upthehill"を入力してください。
+
+1行のテキストを入力してEnterを押すと、その行がエコーバックされます。接続を終了するにはCTRL-Cを使用してください。
+
+
+## Certificate Support
+
+wolfSSHはユーザーを認証する際に、単なる公開鍵の代わりにX.509証明書を受け付けることができます。
+
+wolfSSHをX.509サポート付きでコンパイルするには、`--enable-certs`ビルドオプションを指定するか、あるいは`WOLFSSH_CERTS`を定義してください:
```
-$ ./examples/echoserver/echoserver -f
+ $ ./configure --enable-certs
+ $ make
+```
+
+ユーザーの証明書を検証するためのCAルート証明書を提供するには、echoserverにコマンドラインオプション`-a`を指定してください:
+
+```
+ $ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem
+```
+
+echoserverとクライアントには"john"という名前の偽のユーザーが用意されており、その証明書が認証に使用されます。
+
+サンプル証明書john-cert.derを使ったechoserver/client接続の例は次のようになります:
+
+```
+ $ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem -K john:./keys/john-cert.der
+
+ $ ./examples/client/client -u john -J ./keys/john-cert.der -i ./keys/john-key.der
```
diff --git a/wolfSSH/src-ja/chapter05.md b/wolfSSH/src-ja/chapter05.md
index 93bd5bc4..af47c18a 100644
--- a/wolfSSH/src-ja/chapter05.md
+++ b/wolfSSH/src-ja/chapter05.md
@@ -29,7 +29,8 @@ ID の署名とユーザー認証要求メッセージを提供します。サ
ユーザ認証コールバック関数プロトタイプは次の通りです:
```
-int UserAuthCb(byte authType , const WS_UserAuthData* authData , void* ctx );
+int UserAuthCb(byte authType , const WS_UserAuthData*
+authData , void* ctx );
```
この関数プロトタイプのタイプは:
@@ -52,7 +53,7 @@ WOLFSSH_USERAUTH_PUBLICKEY
パラメータ authData は認証データへのポインタです。
-WS_UserAuthData の詳細は5.4を参照してください。
+WS_UserAuthData の詳細は5.4を参照してください。
パラメータ **ctx** はアプリケーション定義のコンテキストです。 wolfSSH はコンテキスト
内のデータについては何の知識も持たず何も操作しません。コールバック関数へのコンテキストポイ
@@ -64,6 +65,7 @@ WS_UserAuthData の詳細は5.4を参照してください。
```
WOLFSSH_USERAUTH_PASSWORD
+WOLFSSH_USERAUTH_KEYBOARD
WOLFSSH_USERAUTH_PUBLICKEY
```
@@ -79,9 +81,11 @@ invalid username
invalid password
invalid public key
```
-
-ライブラリはクライアントに成功または失敗のみを示し、下記の特定の失敗タイプはロギングに
-のみ使用されます。
+サーバーはクライアントに _成功_ または _失敗_ を示し、特定の失敗タイプはロギングに
+のみ使用されます。コールバックがライブラリに返せる特別な成功と失敗の応答として
+_partial-success_(部分的成功)があります。これは、その認証タイプは成功したが、完
+全に認証するには別の認証タイプがまだ必要であることを意味します。サーバーは partial-success
+フラグをセットしたユーザー認証失敗メッセージをクライアントに送信します。
```
WOLFSSH_USERAUTH_SUCCESS
@@ -89,13 +93,14 @@ WOLFSSH_USERAUTH_FAILURE
WOLFSSH_USERAUTH_INVALID_USER
WOLFSSH_USERAUTH_INVALID_PASSWORD
WOLFSSH_USERAUTH_INVALID_PUBLICKEY
+WOLFSSH_USERAUTH_PARTIAL_SUCCESS
+WOLFSSH_USERAUTH_SUCCESS_ANOTHER
```
## コールバック関数のデータタイプ
クライアントデータは、`WS_UserAuthData` という構造体でコールバック関数に渡され
-ます。 メッセージ内のデータへのポインタが含まれています。 このフィールドには共通フィールドとUNIONフィールドをメンバに持っています。メソッド固有のフィールドは、ユーザー認証データ内のUNIONフィールドにあります。
-
+ます。 メッセージ内のデータへのポインタが含まれています。 この構造体には共通フィールドを持ちます。メソッド固有のフィールドは、ユーザー認証データ内の構造体の union にあります。
```
typedef struct WS_UserAuthData {
@@ -103,10 +108,11 @@ typedef struct WS_UserAuthData {
byte* username ;
word32 usernameSz ;
byte* serviceName ;
- word32 serviceNameSz ; n
+ word32 serviceNameSz ;
union {
WS_UserAuthData_Password password ;
WS_UserAuthData_PublicKey publicKey ;
+ WS_UserAuthData_Keyboard keyboard ;
} sf;
} WS_UserAuthData;
```
@@ -119,7 +125,6 @@ password フィールドと passwordSz フィールドは、クライアント
クライアントから提供された場合は設定されますが、パラメータ hasNewPassword、newPassword、および newPasswordSz は使用されません。 現時点でクライアントにパスワードを変更するように指示するメカニズムはありません。
-
```
typedef struct WS_UserAuthData_Password {
uint8_t* password ;
@@ -130,6 +135,50 @@ typedef struct WS_UserAuthData_Password {
} 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` はプロンプトに対するレスポンスデータを保持します。
+
+サーバーは `wolfSSH_SetKeyboardAuthPrompts()` コールバックを使用してプロンプトを設
+定できます。 `WS_CallbackKeyboardAuthPrompts` コールバックは `promptCount`、
+`prompts`、`promptLengths`、`promptEcho` を設定する必要があります。 その他の
+`prompt*` 項目はオプションです。
+
+サーバーは、後続のリクエスト/レスポンスのラウンドを実行するために、
+`WS_CallbackUserAuth` コールバックから `WOLFSSH_USERAUTH_SUCCESS_ANOTHER` を返す必
+要があります。
+
### 公開鍵
wolfSSH は複数の公開鍵アルゴリズムをサポートします。 publicKeyType メンバは、使用されているアルゴリズム名を指します。
diff --git a/wolfSSH/src-ja/chapter06.md b/wolfSSH/src-ja/chapter06.md
index 7670286d..a3b01a33 100644
--- a/wolfSSH/src-ja/chapter06.md
+++ b/wolfSSH/src-ja/chapter06.md
@@ -2,68 +2,56 @@
以下の関数を使って、ユーザー認証コールバック関数の設定を行います。
-
## ユーザ認証コールバック関数の設定
```
-void wolfSSH_SetUserAuth(WOLFSSH_CTX* ctx , WS_CallbackUserAuthcb);
+void wolfSSH_SetUserAuth(WOLFSSH_CTX* ctx , WS_CallbackUserAuth
+cb );
```
+コールバック関数は、wolfSSH セッションオブジェクトを作成するために使用される wolfSSL 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 のコンテキストデータと混同しないよう注意してください。
-## ユーザ認証コールバックコンテクストデータの取得
+## キーボード認証プロンプトコールバック関数の設定
```
-void* wolfSSH_GetUserAuthCtx(WOLFSSH* ssh);
+void wolfSSH_SetKeyboardAuthPrompts(WOLFSSH_CTX* ctx, WS_CallbackKeyboardAuthPrompts cb);
```
-提供された wolfSSH セッションに保存されたユーザ認証コンテキストデータへのポイン
-タを返します。 これはセッションを作成するために使用される wolfSSH のコンテキスト
-データと混同しないよう注意してください。
-## Echoserver サンプルプログラムのユーザ認証
+サーバーは、クライアントが Keyboard-Interactive モードで認証できるように、クライアントに提示するプロンプトを指定する必要があります。このコールバックにより、サーバーはクライアントに送信するプロンプトを設定できます。
+
+これが設定されていない場合、明示的に有効化しようとしても、サーバー上で Keyboard-Interactive モードは無効になります。
-サンプルの echoserver は、パスワードと公開鍵を使用してサンプルユーザーとの認証コ
-ールバックを実装しています。 コールバックの例と wsUserAuth は、wolfSSH コンテキ
-ストに設定されています:
+## Echoserver サンプルプログラムのユーザ認証
+サンプルの echoserver は、パスワードと公開鍵を使用してサンプルユーザーとの認証コールバックを実装しています。コールバックの例である wsUserAuth は、wolfSSH コンテキストに設定されています:
```
wolfSSH_SetUserAuth(ctx, wsUserAuth);
```
-
-パスワードファイルの例(passwd.txt)は、コロンで区切られたユーザー名とパスワー
-ドの単純なリストです。 このファイル内に存在するデフォルトは次のとおりです:
+パスワードファイルの例(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..d961ae9e 100644
--- a/wolfSSH/src-ja/chapter07.md
+++ b/wolfSSH/src-ja/chapter07.md
@@ -4,42 +4,34 @@
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`マクロを定義して行います。設定例は:
+リード・ライトをハンドリングするためのバッファサイズはデフォルトで1024バイトです。この値はアプリケーションがより少ないリソース消費に抑えたい場合やより大きなバッファが必要な場合には変更することができます。デフォルトサイズの変更は、コンパイル時に`WOLFSSH_MAX_SFTP_RW`マクロを定義して行います。設定例は次のとおりです:
```
-$ ./configure --enable-sftp C_EXTRA_FLAGS="WOLFSSH_MAX_SFTP_RW=2048"
+./configure --enable-sftp
+C_EXTRA_FLAGS=’WOLFSSH_MAX_SFTP_RW=2048
```
## wolfSSH SFTP アプリケーションの使用
-SFTPサーバーとクライアントアプリケーションはwoflSSHにバンドルされています。両アプリケーションともautotoolsを使ってwolfSSHライブラリをSFTPサポートを有効にしてビルドする際に同時にビルドされて生成されます。クライアントアプリケーションはwolfsftp/clientフォルダに存在しておりwolfsftpと呼ばれます。
+SFTPサーバーとクライアントアプリケーションはwolfSSHにバンドルされています。両アプリケーションともautotoolsを使ってwolfSSHライブラリをSFTPサポートを有効にしてビルドする際に同時にビルドされて生成されます。サーバーアプリケーションはexamples/echoserverフォルダに存在しておりechoserverと呼ばれます。クライアントアプリケーションはwolfsftp/clientフォルダに存在しておりwolfsftpと呼ばれます。
サーバーの起動例を示します。起動するとSFTPクライアントからの接続を待ち受けます:
-
```
-$ ./examples/echoserver/echoserver
+./examples/echoserver/echoserver
```
-
-ここで、コマンドはルートwolfSSHディレクトリから実行します。サーバーはSSHとSFTPコマンドの両方を処理することができます。
+ここで、コマンドはルートwolfSSHディレクトリから実行します。サーバーはSSHとSFTPの両方の接続を処理することができます。
一方、クライアントを起動するには特定のユーザー名を与えて起動します:
-
```
$ ./wolfsftp/client/wolfsftp -u
```
+テストを実行するためのデフォルトの“username:password”は“jack:fetchapail” または “jill:upthehill”です。デフォルトのポートは22222です。
-デフォルトの“username:password”は“jack:fetchapail” または “jill:upthehill”を与えます。デフォルトのポートは22222です。
-
-サポートしているコマンドの全リストは接続後に、"help"と入力すると得られます。
-
-
+サポートしているコマンドの全リストは、接続後に"help"と入力すると得られます。
```
wolfSSH sftp> help
@@ -58,9 +50,7 @@ Commands :
interrupt get/put cmd
```
-他のシステムへの接続例は:
-
+他のシステムへの接続例は次のとおりです:
```
src/wolfssh$ ./examples/sftpclient/wolfsftp -p 22 -u user -h 192.168.1.111
```
-
diff --git a/wolfSSH/src-ja/chapter09.md b/wolfSSH/src-ja/chapter09.md
index 99c7aafd..986b093c 100644
--- a/wolfSSH/src-ja/chapter09.md
+++ b/wolfSSH/src-ja/chapter09.md
@@ -1,3 +1,3 @@
# メモと制限事項
-実装ファイル属性の一部は考慮されておらず、デフォルトの属性またはモード値が使用されます。特に`wolfSSH_SFTP_Open`では、ファイルからタイムスタンプを取得し、すべての拡張ファイル属性を取得します。
+実装の一部では、ファイル属性が考慮されず、デフォルトの属性またはモード値が使用されます。具体的には、`wolfSSH_SFTP_Open`、ファイルからのタイムスタンプの取得、およびすべての拡張ファイル属性において、属性は考慮されません。
diff --git a/wolfSSH/src-ja/chapter11.md b/wolfSSH/src-ja/chapter11.md
index 6594e27c..bf6ea8a8 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. 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/chapter13.md b/wolfSSH/src-ja/chapter13.md
index 1d5b63c1..94e93449 100644
--- a/wolfSSH/src-ja/chapter13.md
+++ b/wolfSSH/src-ja/chapter13.md
@@ -1,128 +1,184 @@
-# 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` は常に最後に定義されたエラーコードを指す。
+
+- 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): ユーザー認証前は許可されないメッセージ
+- WS_ED25519_E (-1095): Ed25519 失敗
+- WS_AUTH_PENDING (-1096): ユーザー認証がまだ保留中
+- WS_KDF_E (-1097): KDF エラー
+- WS_DISCONNECT (-1098): ピアが切断を送信した
### 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 +186,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 +238,3657 @@ 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` である。
**引数**
-**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` である。
-wolfSSH_UseCaCert_buffer()
+**引数**
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cert` - ルート証明書を含むバッファ
+- `certSz` - 証明書バッファのサイズ
+- `format` - 証明書のエンコーディング
-## SSH セッション関数
+**戻り値**
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_MEMORY_E`
-### wolfSSH_new()
+**関連項目**
+
+- `wolfSSH_CTX_UseCert_buffer()`
+## SSH セッション関数
-**用法**
-**説明**
+### wolfSSH_new()
-wolfSSHセッションオブジェクトを確保し、与えられたwolfSSH_CTXオブジェクトを使って初期化します。
+```c
+#include
-**戻り値**
+WOLFSSH* wolfSSH_new(WOLFSSH_CTX* ctx);
+```
-**WOLFSSH*** – WOLFSSHオブジェクトへのポインターあるいはNULL
+**説明**
+
+提供された wolfSSH コンテキストで初期化された wolfSSH セッションオブジェクトを作成する。
**引数**
-**ctx** – wolfSSHセッションの初期化に使用されるwolfSSHコンテキスト
+- `ctx` - セッションの初期化に使用する wolfSSH コンテキスト
+**戻り値**
-```
-#include
-WOLFSSH* wolfSSH_new(WOLFSSH_CTX* ctx );
-```
+- `WOLFSSH*` - 新しく割り当てられたセッションオブジェクトへのポインター
+- `NULL` - 失敗時
**関連項目**
-wolfSSH_free()
+- `wolfSSH_free()`
### wolfSSH_free()
+```c
+#include
-
-**用法**
+void wolfSSH_free(WOLFSSH* ssh);
+```
**説明**
-wolfSSHオブジェクトを解放します
+wolfSSH セッションオブジェクトを解放する。
+
+**引数**
+
+- `ssh` - 解放するセッション
**戻り値**
なし
-**引数**
+**関連項目**
-**ssh** – 解放するWOLFSSHオブジェクトへのポインター
+- `wolfSSH_new()`
-```
+### wolfSSH_worker()
+
+```c
#include
-void wolfSSH_free(WOLFSSH* ssh );
+
+int wolfSSH_worker(WOLFSSH* ssh, word32* channelId);
```
-**関連項目**
+**説明**
-wolfSSH_new()
+SSH 接続を処理する。保留中の受信データを受け取り、保留中の送信パケットをフラッシュする。これは実行中のセッションに対する主要なドライバー呼び出しである。成功時、`channelId` が NULL でなければ、最も直近にデータを受信したチャネルの ID がそこに書き込まれる。
+**引数**
-### wolfSSH_set_fd()
+- `ssh` - wolfSSH セッションへのポインター
+- `channelId` - 最後にデータを受信したチャネル ID の出力先(任意、NULL でもよい)
+
+**戻り値**
+- `WS_SUCCESS`
+- `WS_CHAN_RXD`
+- `WS_REKEYING`
+- `WS_WANT_READ`
+- `WS_WANT_WRITE`
+- `WS_BAD_ARGUMENT`
+**関連項目**
-**用法**
+- `wolfSSH_GetLastRxId()`
-**説明**
+### wolfSSH_GetLastRxId()
-与えられたファイルディスクリプタをsshオブジェクトに関連付けます。ファイルディスクリプタはネットワークI/Oに使用され、I/Oコールバック関数に渡されます。
+```c
+#include
-**戻り値**
+int wolfSSH_GetLastRxId(WOLFSSH* ssh, word32* channelId);
+```
-WS_SUCCESS
+**説明**
-WS_BAD_ARGUMENT – 引数の少なくともひとつが不正
+最も直近にデータを受信したチャネルの ID を `channelId` に書き込む。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `ssh` - wolfSSH セッションへのポインター
+- `channelId` - 最後に受信したチャネル ID の出力先
-**fd** – セッションで使用されるソケットディスクリプター
+**戻り値**
-```
-#include
-int wolfSSH_set_fd(WOLFSSH* ssh , int fd );
-```
+- `WS_SUCCESS`
+- `WS_ERROR`
**関連項目**
-wolfSSH_get_fd()
-
-### wolfSSH_get_fd()
+- `wolfSSH_worker()`
+### wolfSSH_set_fd()
+```c
+#include
-**用法**
+int wolfSSH_set_fd(WOLFSSH* ssh, WS_SOCKET_T fd);
+```
**説明**
-SSHコネクションの入出力機能で使用されるファイルディスクリプタ( **fd** )を返します。一般的にはソケットファイルディスクリプタを返します。
+指定されたファイルディスクリプタをセッションに割り当てる。セッションは、デフォルトの I/O コールバックにおいて、このディスクリプタをネットワーク I/O に使用する。
+
+**引数**
+- `ssh` - ディスクリプタを設定するセッション
+- `fd` - セッションが使用するソケットのファイルディスクリプタ
**戻り値**
-**int** – ファイルディスクリプタ
-
-**WS_BAD_ARGUEMENT**
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
-**引数**
+**関連項目**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `wolfSSH_get_fd()`
+### wolfSSH_get_fd()
-```
+```c
#include
-int wolfSSH_get_fd(const WOLFSSH* ssh );
+
+WS_SOCKET_T wolfSSH_get_fd(const WOLFSSH* ssh);
```
-**関連項目**
+**説明**
-wolfSSH_set_fd()
+SSH 接続の入出力に使用されているファイルディスクリプタを返す。通常はソケットのファイルディスクリプタである。
-## ハイウォーターマーク機能
+**引数**
+- `ssh` - wolfSSH セッションへのポインター
+**戻り値**
-### wolfSSH_SetHighwater()
+- 成功時はセッションのソケットファイルディスクリプタ
+- `ssh` が NULL の場合は `WS_BAD_ARGUMENT`(Windows では `INVALID_SOCKET`)
+**関連項目**
-**用法**
+- `wolfSSH_set_fd()`
-**説明**
+### wolfSSH_SetFilesystemHandle()
-SSHセッションで使用するハイウォーターマークをセットします。
+```c
+#include
-**戻り値**
+int wolfSSH_SetFilesystemHandle(WOLFSSH* ssh, void* handle);
+```
-WS_SUCCESS
+**説明**
-WS_BAD_ARGUMENT
+ユーザーが提供するファイルシステムハンドルをセッションに関連付ける。独自のファイルシステム層を提供する移植環境では、セッションに対するファイル操作を行う際にこのハンドルを使用する。
**引数**
-**ssh** - WOLFSSHオブジェクトへのポインター
+- `ssh` - wolfSSH セッションへのポインター
+- `handle` - セッションに関連付ける不透明なファイルシステムハンドル
-**highwater** - ハイウォーターマークを示すデータ
+**戻り値**
-```
-#include
-int wolfSSH_SetHighwater(WOLFSSH* ssh , word32 highwater );
-```
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
-### wolfSSH_GetHighwater()
+**関連項目**
+- `wolfSSH_GetFilesystemHandle()`
-**用法**
+### wolfSSH_GetFilesystemHandle()
+
+```c
+#include
+
+void* wolfSSH_GetFilesystemHandle(WOLFSSH* ssh);
+```
**説明**
-ハイウォーターマークを返します。
+wolfSSH_SetFilesystemHandle() によって以前にセッションへ関連付けられたファイルシステムハンドルを返す。設定されていない場合は NULL を返す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
**戻り値**
-**word32** - ハイウォーターマーク
+- セッションに関連付けられたファイルシステムハンドル
+- `NULL` - `ssh` が NULL の場合、またはハンドルが設定されていない場合
-**引数**
+**関連項目**
-**ssh** - WOLFSSHオブジェクトへのポインター
+- `wolfSSH_SetFilesystemHandle()`
-```
-#include
-word32 wolfSSH_GetHighwater(WOLFSSH* ssh );
-```
+## データ最高水位関数
-### wolfSSH_SetHighwaterCb()
-**用法**
+### wolfSSH_SetHighwater()
-**説明**
-SSHセッションにハイウォーターマークとハイウォーターコールバック関数を設定します。
+```c
+#include
+int wolfSSH_SetHighwater(WOLFSSH* ssh, word32 level);
+```
-**戻り値**
+**説明**
-なし
+セッションのデータハイウォーターマークをバイト単位で設定する。転送されたデータ量がこのレベルに達すると、ハイウォーターコールバックが呼び出される(通常はリキーをトリガーするため)。
**引数**
-**ctx** – wolfSSHコンテキスト
+- `ssh` - wolfSSH セッションへのポインター
+- `level` - ハイウォーターマーク(バイト単位)
-**highwater** - ハイウォーターマーク
+**戻り値**
-**cb** - ハイウォーターコールバック関数
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+**関連項目**
-```
-#include
-void wolfSSH_SetHighwaterCb(WOLFSSH_CTX* ctx , word32 highwater ,
-WS_CallbackHighwater cb );
-```
+- `wolfSSH_GetHighwater()`
+
+### wolfSSH_GetHighwater()
-### wolfSSH_SetHighwaterCtx()
+```c
+#include
-**用法**
+word32 wolfSSH_GetHighwater(WOLFSSH* ssh);
+```
**説明**
-ハイウォーターコールバック関数に渡されるコンテキストを設定します。
+セッションの現在のデータハイウォーターマークをバイト単位で返す。
+
+**引数**
+- `ssh` - wolfSSH セッションへのポインター
**戻り値**
-なし
+- データハイウォーターマーク(バイト単位)
-**引数**
+**関連項目**
+
+- `wolfSSH_SetHighwater()`
-**ssh** - WOLFSSHオブジェクトへのポインター
+### wolfSSH_SetHighwaterCb()
-**ctx** - ハイウォーターコールバック関数に渡されるコンテキスト
-```
+```c
#include
-void wolfSSH_SetHighwaterCtx(WOLFSSH* ssh, void* ctx);
-```
-### wolfSSH_GetHighwaterCtx()
+void wolfSSH_SetHighwaterCb(WOLFSSH_CTX* ctx, word32 level,
+ WS_CallbackHighwater cb);
+```
+**説明**
-**用法**
+コンテキストレベルで、デフォルトのデータハイウォーターマークと、セッションがそれに到達したときに呼び出されるコールバックを設定する。このコンテキストから作成されたセッションは、これらのデフォルト値を継承する。
-**説明**
+**引数**
-SSHセッションにセットされたハイウォーターマークを返します。
+- `ctx` - wolfSSH コンテキストへのポインター
+- `level` - デフォルトのデータハイウォーターマーク(バイト単位)
+- `cb` - ハイウォーターコールバック関数
**戻り値**
-**void*** - ハイウォーターマーク
+なし
-**NULL** - WOLFSSHオブジェクトにハイウォーターマークがセットされていない場合
+**関連項目**
-**引数**
+- `wolfSSH_SetHighwaterCtx()`
-**ssh** - WOLFSSHオブジェクトへのポインター
+### wolfSSH_SetHighwaterCtx()
-```
+
+```c
#include
-void wolfSSH_GetHighwaterCtx(WOLFSSH* ssh );
+
+void wolfSSH_SetHighwaterCtx(WOLFSSH* ssh, void* ctx);
```
-## エラーチェック
+**説明**
+セッションのハイウォーターコールバックが呼び出される際に渡される、ユーザーコンテキストポインターを設定する。
+**引数**
-### wolfSSH_get_error()
+- `ssh` - wolfSSH セッションへのポインター
+- `ctx` - ハイウォーターコールバックに渡すユーザーコンテキストポインター
+**戻り値**
+なし
-**用法**
+**関連項目**
-**説明**
+- `wolfSSH_GetHighwaterCtx()`
-wolfSSHセッションオブジェクトにセットされたエラーコードを返します。
+### wolfSSH_GetHighwaterCtx()
-**戻り値**
-WS_ErrorCodes (enum)
+```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 コンテキストにユーザー認証コールバックを登録します。このコールバックはハンドシェイク中にピアを認証するために呼び出されます。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - ユーザー認証コールバック関数
+
+**戻り値**
+
+なし
+
+**関連項目**
+
+- `wolfSSH_SetUserAuthCtx()`
+
+### 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);
+```
+
+**説明**
+
+クライアント側で、ハンドシェイクを続行する前にサーバーの公開鍵(ホスト鍵)を確認するために使用されるコールバックを登録します。アプリケーションはこのコールバックから鍵を受け入れるか拒否するかを判断できます。
+
+**引数**
+
+- `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_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() はハンドシェイクが完了するかエラーが発生するまで戻らない。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR`
+
+**関連項目**
+
+- `wolfSSH_connect()`
+- `wolfSSH_stream_read()`
+
+### 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() はハンドシェイクが完了するかエラーが発生するまで戻らない。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR`
+
+**関連項目**
+
+- `wolfSSH_accept()`
+
+### wolfSSH_shutdown()
+
+
+```c
+#include
+
+int wolfSSH_shutdown(WOLFSSH* ssh);
+```
+
+**説明**
+
+SSH セッションを閉じて切断し、ピアに切断メッセージを送信する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+**関連項目**
+
+- `wolfSSH_connect()`
+- `wolfSSH_accept()`
+
+### 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 がブロッキングの場合、データが利用可能になるかエラーが発生するまで戻らない。リキー(`WS_REKEYING`)が進行中の場合は、wolfSSH_worker() を呼び出してそれを完了させる。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `buf` - データを格納するバッファ
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 より大きい値 - 成功時に読み取ったバイト数
+- 0 - 接続がシャットダウンされた
+- `WS_BAD_ARGUMENT`
+- `WS_EOF`
+- `WS_FATAL_ERROR`
+- `WS_REKEYING`
+
+**関連項目**
+
+- `wolfSSH_stream_send()`
+- `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 より大きい値 - 成功時に書き込んだバイト数
+- 0 - 接続がシャットダウンされた
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR`
+- `WS_REKEYING`
+
+**関連項目**
+
+- `wolfSSH_stream_read()`
+- `wolfSSH_accept()`
+
+
+### wolfSSH_stream_exit()
+
+
+```c
+#include
+
+int wolfSSH_stream_exit(WOLFSSH* ssh, int status);
+```
+
+**説明**
+
+SSH ストリームを終了し、指定した終了ステータスをピアに送信してチャネルを閉じる。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `status` - ピアに報告する終了ステータス
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+**関連項目**
+
+- `wolfSSH_stream_send()`
+
+### wolfSSH_TriggerKeyExchange()
+
+
+```c
+#include
+
+int wolfSSH_TriggerKeyExchange(WOLFSSH* ssh);
+```
+
+**説明**
+
+初期ハンドシェイクパケットを準備・送信することで、鍵交換(リキー)プロセスを開始する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+**関連項目**
+
+- `wolfSSH_worker()`
+
+### wolfSSH_stream_peek()
+
+```c
+#include
+
+int wolfSSH_stream_peek(WOLFSSH* ssh, byte* buf, word32 bufSz);
+```
+
+**説明**
+
+内部バッファから取り除くことなく、保留中の復号化済みストリームデータを最大 `bufSz` バイトまで `buf` にコピーする。その後 wolfSSH_stream_read() を呼び出すと同じデータが返される。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `buf` - 覗き見したデータを格納するバッファ
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 以上の値 - コピーされたバイト数
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR`
+
+**関連項目**
+
+- `wolfSSH_stream_read()`
+
+### wolfSSH_extended_data_send()
+
+```c
+#include
+
+int wolfSSH_extended_data_send(WOLFSSH* ssh, byte* buf, word32 bufSz);
+```
+
+**説明**
+
+`bufSz` バイトを拡張チャネルデータ(通常は stderr データ型)として送信する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `buf` - 送信するバッファ
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 より大きい値 - 成功時に送信したバイト数
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR`
+
+**関連項目**
+
+- `wolfSSH_extended_data_read()`
+
+### wolfSSH_extended_data_read()
+
+```c
+#include
+
+int wolfSSH_extended_data_read(WOLFSSH* ssh, byte* out, word32 outSz);
+```
+
+**説明**
+
+受信した拡張チャネルデータ(通常は stderr)を最大 `outSz` バイトまで `out` に読み取る。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `out` - データを格納するバッファ
+- `outSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 以上の値 - 読み取ったバイト数
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR`
+
+**関連項目**
+
+- `wolfSSH_extended_data_send()`
+
+### wolfSSH_SendIgnore()
+
+```c
+#include
+
+int wolfSSH_SendIgnore(WOLFSSH* ssh, const byte* buf, word32 bufSz);
+```
+
+**説明**
+
+指定したペイロードを含む SSH_MSG_IGNORE メッセージを送信する。ピアはその内容を破棄する。キープアライブやトラフィック解析対策として使用できる。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `buf` - メッセージに含めるペイロード
+- `bufSz` - ペイロードのサイズ
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+### wolfSSH_SendDisconnect()
+
+```c
+#include
+
+int wolfSSH_SendDisconnect(WOLFSSH* ssh, word32 reason);
+```
+
+**説明**
+
+指定した理由コード(`WS_DisconnectReasonCodes` の値を参照)を伴う SSH_MSG_DISCONNECT メッセージをピアに送信する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `reason` - 切断理由コード
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+**関連項目**
+
+- `wolfSSH_shutdown()`
+
+### wolfSSH_global_request()
+
+```c
+#include
+
+int wolfSSH_global_request(WOLFSSH* ssh, const unsigned char* data,
+ word32 dataSz, int reply);
+```
+
+**説明**
+
+指定したデータを含むグローバルリクエストをピアに送信する。`reply` が非ゼロの場合、ピアに成功または失敗の応答を要求する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `data` - リクエストのペイロード
+- `dataSz` - ペイロードのサイズ
+- `reply` - ピアからの応答を要求する場合は非ゼロ
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR`
+
+### wolfSSH_ChannelIdRead()
+
+```c
+#include
+
+int wolfSSH_ChannelIdRead(WOLFSSH* ssh, word32 channelId,
+ byte* buf, word32 bufSz);
+```
+
+**説明**
+
+`channelId` で識別されるチャネルから受信したデータを最大 `bufSz` バイトまで読み取る。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `channelId` - 読み取り対象のチャネル
+- `buf` - データを格納するバッファ
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 以上の値 - 読み取ったバイト数
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR`
+
+**関連項目**
+
+- `wolfSSH_ChannelIdSend()`
+
+### 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_FATAL_ERROR`
+
+**関連項目**
+
+- `wolfSSH_ChannelIdRead()`
+
+### wolfSSH_CTX_SetSshProtoIdStr()
+
+```c
+#include
+
+int wolfSSH_CTX_SetSshProtoIdStr(WOLFSSH_CTX* ctx, const char* protoIdStr);
+```
+
+**説明**
+
+接続開始時のバージョン交換でピアに送信される SSH プロトコル識別文字列を上書きする。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `protoIdStr` - 送信するプロトコル識別文字列
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+### wolfSSH_CTX_SetWindowPacketSize()
+
+```c
+#include
+
+int wolfSSH_CTX_SetWindowPacketSize(WOLFSSH_CTX* ctx,
+ word32 windowSz, word32 maxPacketSz);
+```
+
+**説明**
+
+このコンテキストから作成されるセッションに対する、デフォルトのチャネルウィンドウサイズと最大パケットサイズを設定する。
+
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `windowSz` - チャネルウィンドウサイズ(バイト単位)
+- `maxPacketSz` - 最大パケットサイズ(バイト単位)
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+## チャネルコールバック
+
+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"
+* 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);
+```
+
+### wolfSSH_CTX_SetChannelOpenCb()
+
+```c
+#include
+
+int wolfSSH_CTX_SetChannelOpenCb(WOLFSSH_CTX* ctx,
+ WS_CallbackChannelOpen cb);
+```
+
+**説明**
+
+ピアからチャネルオープン(SSH_MSG_CHANNEL_OPEN)メッセージを受信した際に呼び出されるコールバックを設定する。
+
+**引数**
+
+- `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)メッセージを受信した際に呼び出されるコールバックを設定する。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - チャネルリクエストコールバック
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_SSH_CTX_NULL_E`
+
+**関連項目**
+
+- `wolfSSH_CTX_SetChannelReqShellCb()`
+
+
+### wolfSSH_CTX_SetChannelEofCb()
+
+```c
+#include
+
+int wolfSSH_CTX_SetChannelEofCb(WOLFSSH_CTX* ctx,
+ WS_CallbackChannelEof cb);
+```
+
+**説明**
+
+ピアからチャネル EOF(SSH_MSG_CHANNEL_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" リクエストの場合)を返す。
+
+**引数**
+
+- `channel` - チャネルへのポインター
+
+**戻り値**
+
+- コマンド文字列へのポインター。存在しない場合は `NULL`
+
+**関連項目**
+
+- `wolfSSH_ChannelGetSessionType()`
+
+### wolfSSH_ChannelFree()
+
+```c
+#include
+
+int wolfSSH_ChannelFree(WOLFSSH_CHANNEL* channel);
+```
+
+**説明**
+
+チャネルオブジェクトを解放し、そのセッションから削除する。
+
+**引数**
+
+- `channel` - 解放するチャネルへのポインター
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+### wolfSSH_ChannelGetId()
+
+```c
+#include
+
+int wolfSSH_ChannelGetId(WOLFSSH_CHANNEL* channel, word32* id, byte peer);
+```
+
+**説明**
+
+指定したチャネルの数値チャネル ID を取得する。`peer` に `WS_CHANNEL_ID_SELF` を指定すると自分側の ID、`WS_CHANNEL_ID_PEER` を指定するとピア側の ID が取得される。
+
+**引数**
+
+- `channel` - チャネルへのポインター
+- `id` - チャネル ID の出力先
+- `peer` - `WS_CHANNEL_ID_SELF` または `WS_CHANNEL_ID_PEER`
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+**関連項目**
+
+- `wolfSSH_ChannelFind()`
-```
+### wolfSSH_ChannelFind()
+
+```c
#include
-int wolfSSH_get_error(const WOLFSSH* ssh );
+
+WOLFSSH_CHANNEL* wolfSSH_ChannelFind(WOLFSSH* ssh, word32 id, byte peer);
```
-**関連項目**
+**説明**
+
+指定した ID に一致するセッション上のチャネルを検索する。`peer` に `WS_CHANNEL_ID_SELF` を指定すると自分側の ID に、`WS_CHANNEL_ID_PEER` を指定するとピア側の ID に一致するものが検索される。
-wolfSSH_get_error_name()
+**引数**
+- `ssh` - wolfSSH セッションへのポインター
+- `id` - 検索するチャネル ID
+- `peer` - `WS_CHANNEL_ID_SELF` または `WS_CHANNEL_ID_PEER`
-### wolfSSH_get_error_name()
+**戻り値**
+
+- 一致したチャネルへのポインター。見つからない場合は `NULL`
+**関連項目**
+
+- `wolfSSH_ChannelNext()`
+
+### wolfSSH_ChannelNext()
+```c
+#include
-**用法**
+WOLFSSH_CHANNEL* wolfSSH_ChannelNext(WOLFSSH* ssh, WOLFSSH_CHANNEL* channel);
+```
**説明**
-wolfSSHセッションオブジェクトにセットされたエラーの名前を返します。
+セッション上のチャネルを反復処理する。`channel` に `NULL` を渡すと最初のチャネルが取得され、あるチャネルを渡すとその次のチャネルが取得される。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `channel` - 現在のチャネル。反復を開始する場合は `NULL`
**戻り値**
-**const char*** – エラー名文字列
+- 次のチャネルへのポインター。リストの末尾に達した場合は `NULL`
-**引数**
+**関連項目**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `wolfSSH_ChannelFind()`
+### wolfSSH_ChannelRead()
-```
+```c
#include
-const char* wolfSSH_get_error_name(const WOLFSSH* ssh );
+
+int wolfSSH_ChannelRead(WOLFSSH_CHANNEL* channel, byte* buf, word32 bufSz);
```
+**説明**
+
+指定したチャネルから受信済みデータを最大 `bufSz` バイト読み込む。
+
+**引数**
+
+- `channel` - チャネルへのポインター
+- `buf` - データを格納するバッファ
+- `bufSz` - バッファのサイズ
+
+**戻り値**
+
+- 0 以上 - 読み込まれたバイト数
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR`
+
**関連項目**
-wolfSSH_get_error()
+- `wolfSSH_ChannelSend()`
-### wolfSSH_ErrorToName()
+### wolfSSH_ChannelSend()
+```c
+#include
-**用法**
+int wolfSSH_ChannelSend(WOLFSSH_CHANNEL* channel, const byte* buf,
+ word32 bufSz);
+```
**説明**
-引数で指定されたエラーコードに対応するエラーの名前を返します。
+指定したチャネル上で `bufSz` バイトを送信する。
+
+**引数**
+- `channel` - チャネルへのポインター
+- `buf` - 送信するバッファ
+- `bufSz` - バッファのサイズ
**戻り値**
-**const char*** – エラー名文字列
+- 0 より大きい値 - 成功時に送信されたバイト数
+- `WS_BAD_ARGUMENT`
+- `WS_FATAL_ERROR`
-**引数**
+**関連項目**
-**err** - エラーコード
+- `wolfSSH_ChannelRead()`
-```
+### wolfSSH_ChannelExit()
+
+```c
#include
-const char* wolfSSH_ErrorToName(int err );
+
+int wolfSSH_ChannelExit(WOLFSSH_CHANNEL* channel);
```
-## I/O コールバック関数
+**説明**
+指定したチャネルを閉じ、EOF メッセージとクローズメッセージをピアへ送信する。
+**引数**
-### wolfSSH_SetIORecv()
+- `channel` - チャネルへのポインター
+**戻り値**
-**用法**
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
-**説明**
+### wolfSSH_ChannelGetEof()
-入力データを受信する為の受信コールバック関数を登録します。
+```c
+#include
+int wolfSSH_ChannelGetEof(WOLFSSH_CHANNEL* channel);
+```
-**戻り値**
+**説明**
-なし
+指定したチャネル上でピアが EOF を送信済みかどうかを報告する。
**引数**
-**ctx** – wolfSSHコンテキスト
+- `channel` - チャネルへのポインター
+
+**戻り値**
-**cb** – wolfSSHコンテキストに関連つけられる、受信コールバック関数
+- 1 - チャネルが EOF を受信済み
+- 0 - チャネルが EOF を受信していない
-```
+### wolfSSH_ChannelGetType()
+
+```c
#include
-void wolfSSH_SetIORecv(WOLFSSH_CTX* ctx , WS_CallbackIORecv cb );
+
+const char* wolfSSH_ChannelGetType(const WOLFSSH_CHANNEL* channel);
```
-### wolfSSH_SetIOSend()
+**説明**
+指定したチャネルのチャネルタイプ文字列(例: "session")を返す。
-**用法**
+**引数**
+
+- `channel` - チャネルへのポインター
+
+**戻り値**
+
+- チャネルタイプ文字列へのポインター。存在しない場合は `NULL`
+
+### wolfSSH_ChannelIsPty()
+
+```c
+#include
+
+int wolfSSH_ChannelIsPty(const WOLFSSH_CHANNEL* channel);
+```
**説明**
-送信データを送信するための送信コールバック関数を登録します。
+指定したチャネルに疑似端末(PTY)が関連付けられているかどうかを報告する。
+
+**引数**
+
+- `channel` - チャネルへのポインター
**戻り値**
-なし
+- 1 - チャネルに PTY がある
+- 0 - チャネルに PTY がない
-**引数**
-**ctx** – wolfSSHコンテキスト
+## テスト関数
-**cb** – wolfSSHコンテキストに関連つけられる、送信コールバック関数。
-```
-#include
-void wolfSSH_SetIOSend(WOLFSSH_CTX* ctx , WS_CallbackIOSend cb );
-```
+### wolfSSH_GetStats()
-### wolfSSH_SetIOReadCtx()
+```c
+#include
-**用法**
+void wolfSSH_GetStats(WOLFSSH* ssh, word32* txCount, word32* rxCount,
+ word32* seq, word32* peerSeq);
+```
**説明**
-受信コールバック関数に渡されるコンテキストを設定します
+セッションの転送統計情報を、指定した出力先ポインターに書き込む。
+
+**引数**
+- `ssh` - wolfSSH セッションへのポインター
+- `txCount` - セッションで送信された総バイト数の出力先
+- `rxCount` - セッションで受信された総バイト数の出力先
+- `seq` - 送信パケットのシーケンス番号の出力先
+- `peerSeq` - ピアのパケットシーケンス番号の出力先
**戻り値**
なし
-**引数**
+### wolfSSH_KDF()
-**ssh** – WOLFSSHオブジェクトへのポインター
-**ctx** – コンテキストへのポインター。受信コールバック関数に渡される
+```c
+#include
+int wolfSSH_KDF(byte hashId, byte keyId, byte* key, word32 keySz,
+ const byte* k, word32 kSz, const byte* h, word32 hSz,
+ const byte* sessionId, word32 sessionIdSz);
```
-#include
-void wolfSSH_SetIOReadCtx(WOLFSSH* ssh , void* ctx );
+
+**説明**
+
+SSH 鍵導出関数を実行する。この関数は、鍵材料の元となる `k`(ディフィー・ヘルマン共有秘密)と `h`(鍵交換時に生成される交換ハッシュ)から対称鍵を導出する。生成される鍵の種類は `keyId` によって選択される。この関数は主に、テストスイートが鍵導出に対して既知の解答によるテストを実行できるように公開されている。
+
+`keyId` の値は以下の通り。
+
+```
+A - initial IV, client to server
+B - initial IV, server to client
+C - encryption key, client to server
+D - encryption key, server to client
+E - integrity key, client to server
+F - integrity key, server to client
```
-### wolfSSH_SetIOWriteCtx()
+**引数**
+
+- `hashId` - 鍵材料の導出に使用するハッシュタイプ(例: `WC_HASH_TYPE_SHA` や `WC_HASH_TYPE_SHA256`)
+- `keyId` - どの鍵を導出するか(上記の A〜F)
+- `key` - 導出された鍵の出力バッファ
+- `keySz` - 出力鍵バッファのサイズ
+- `k` - ディフィー・ヘルマン共有秘密
+- `kSz` - `k` のサイズ
+- `h` - 交換ハッシュ
+- `hSz` - `h` のサイズ
+- `sessionId` - セッション識別子
+- `sessionIdSz` - セッション識別子のサイズ
+
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_CRYPTO_FAILED`
+### wolfSSH_ShowSizes()
-**用法**
+```c
+#include
+
+void wolfSSH_ShowSizes(void);
+```
**説明**
-送信コールバック関数に渡されるコンテキストを設定します
+wolfSSH の内部データ構造体のサイズを表示する。これは診断用の補助機能であり、リソースに制約のあるターゲットでのメモリ使用量の調整に役立つ。
+
+**引数**
+
+なし
**戻り値**
なし
-**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
+## セッション関数
-**ctx** – コンテキストへのポインター。送信コールバック関数に渡される
-```
-#include
-void wolfSSH_SetIOWriteCtx(WOLFSSH* ssh , void* ctx );
-```
-### wolfSSH_GetIOReadCtx()
+### wolfSSH_GetSessionType()
+
+```c
+#include
-**用法**
+WS_SessionType wolfSSH_GetSessionType(const WOLFSSH* ssh);
+```
**説明**
-WOLFSSHオブジェクトのioReadCtxメンバーを返します。
+セッションのチャネルにおけるセッションタイプを返す。`WOLFSSH_SESSION_UNKNOWN`、`WOLFSSH_SESSION_SHELL`、`WOLFSSH_SESSION_EXEC`、`WOLFSSH_SESSION_SUBSYSTEM`、`WOLFSSH_SESSION_TERMINAL` のいずれか。
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
**戻り値**
-**void*** - WOLFSSHオブジェクトのioReadCtxメンバーへのポインター
+- セッションの `WS_SessionType`
-**引数**
+**関連項目**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `wolfSSH_GetSessionCommand()`
-```
-#include
-void* wolfSSH_GetIOReadCtx(WOLFSSH* ssh );
-```
+### wolfSSH_GetSessionCommand()
-### wolfSSH_GetIOWriteCtx()
+```c
+#include
-**用法**
+const char* wolfSSH_GetSessionCommand(const WOLFSSH* ssh);
+```
**説明**
-WOLFSSHオブジェクトのioWriteCtxメンバーを返します。
+このセッションについてピアが実行を要求したコマンド("exec" リクエストの場合)を返す。
+
+**引数**
+- `ssh` - wolfSSH セッションへのポインター
**戻り値**
-**void*** – WOLFSSHオブジェクトのioWriteCtxメンバーへのポインター
+- コマンド文字列へのポインター、存在しない場合は `NULL`
-**引数**
+**関連項目**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `wolfSSH_GetSessionType()`
-```
+### wolfSSH_SetChannelType()
+
+```c
#include
-void* wolfSSH_GetIOWriteCtx(WOLFSSH* ssh);
+
+int wolfSSH_SetChannelType(WOLFSSH* ssh, byte type, byte* name,
+ word32 nameSz);
```
-## ユーザー認証
+**説明**
+
+セッションのチャネルに対して、チャネルリクエストタイプ(shell、exec、subsystem など)と、それに関連付ける任意の名前を設定する。
+**引数**
+- `ssh` - wolfSSH セッションへのポインター
+- `type` - チャネルリクエストタイプ
+- `name` - タイプに関連付ける任意の名前(例えば subsystem 名)
+- `nameSz` - `name` の長さ
-### wolfSSH_SetUserAuth()
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+### wolfSSH_ChangeTerminalSize()
+
+```c
+#include
-**用法**
+int wolfSSH_ChangeTerminalSize(WOLFSSH* ssh, word32 columns,
+ word32 rows, word32 widthPixels, word32 heightPixels);
+```
**説明**
+ターミナル(ウィンドウ)サイズが変更されたことをピアに通知し、新しい寸法を送信する。
-現在のWOLFSSL_CTXオブジェクトに対してユーザー認証コールバック関数を登録します。
+**引数**
+- `ssh` - wolfSSH セッションへのポインター
+- `columns` - 新しい幅(文字カラム数)
+- `rows` - 新しい高さ(文字行数)
+- `widthPixels` - 新しい幅(ピクセル数)
+- `heightPixels` - 新しい高さ(ピクセル数)
**戻り値**
-なし
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
-**引数**
+**関連項目**
-**ctx** – WOLFSSH_CTXオブジェクトへのポインター
+- `wolfSSH_SetTerminalResizeCb()`
-**cb** – ユーザー認証コールバック関数
+### wolfSSH_SetTerminalResizeCb()
-```
+```c
#include
-void wolfSSH_SetUserAuth(WOLFSSH_CTX* ctx, WS_CallbackUserAuth cb)
-```
-### wolfSSH_SetUserAuthCtx()
+void wolfSSH_SetTerminalResizeCb(WOLFSSH* ssh, WS_CallbackTerminalSize cb);
+```
+**説明**
-**用法**
+ピアがターミナルサイズの変更を報告した際に呼び出されるコールバックを登録する。
-**説明**
+**引数**
-ユーザー認証コールバック関数に渡されるコンテキストを登録します。
+- `ssh` - wolfSSH セッションへのポインター
+- `cb` - ターミナルリサイズコールバック
**戻り値**
なし
-**引数**
+**関連項目**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `wolfSSH_SetTerminalResizeCtx()`
-**userAuthCtx** – ユーザー認証コールバック関数へ渡すコンテキスト
+### wolfSSH_SetTerminalResizeCtx()
-```
+```c
#include
-void wolfSSH_SetUserAuthCtx(WOLFSSH* ssh , void* userAuthCtx)
+
+void wolfSSH_SetTerminalResizeCtx(WOLFSSH* ssh, void* usrCtx);
```
-### wolfSSH_GetUserAuthCtx()
+**説明**
+
+ターミナルリサイズコールバックに渡すユーザーコンテキストポインターを設定する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `usrCtx` - コールバックに渡すユーザーコンテキストポインター
+
+**戻り値**
+なし
+
+### wolfSSH_GetExitStatus()
+
+```c
+#include
-**用法**
+int wolfSSH_GetExitStatus(WOLFSSH* ssh);
+```
**説明**
-ユーザー認証コールバック関数に渡されるコンテキストを返します。
+セッションのコマンドについてピアが報告した終了ステータスを返す。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
**戻り値**
-**void*** – ユーザー認証コールバック関数へ渡すコンテキスト
+- ピアが報告した終了ステータス
-**NULL** – ssh引数がNULLの場合
+**関連項目**
-**引数**
+- `wolfSSH_SetExitStatus()`
-**ssh** – pointer to WOLFSSH object
+### wolfSSH_SetExitStatus()
-```
+```c
#include
-void* wolfSSH_GetUserAuthCtx(WOLFSSH* ssh )
+
+int wolfSSH_SetExitStatus(WOLFSSH* ssh, word32 exitStatus);
```
-## ユーザー名設定機能
+**説明**
+
+セッションのコマンドについてピアに報告する終了ステータスを設定する。
+**引数**
+- `ssh` - wolfSSH セッションへのポインター
+- `exitStatus` - 報告する終了ステータス
-### wolfSSH_SetUsername()
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+**関連項目**
+- `wolfSSH_GetExitStatus()`
-**用法**
+### wolfSSH_DoModes()
+
+```c
+#include
+
+int wolfSSH_DoModes(const byte* modes, word32 modesSz, int fd);
+```
**説明**
-SSHコネクションに必要なユーザー名を設定します。
+`modes` に含まれる SSH エンコード済みのターミナルモードを、ファイルディスクリプタ `fd` が参照するターミナルに適用する。
+
+**引数**
+
+- `modes` - SSH エンコード済みターミナルモードのバッファ
+- `modesSz` - modes バッファの長さ
+- `fd` - 設定対象ターミナルのファイルディスクリプタ
**戻り値**
-WS_BAD_ARGUMENT
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+### wolfSSH_ConvertConsole()
-WS_SUCCESS
+**利用可能性**
-WS_MEMORY_E
+Windows ビルド(`USE_WINDOWS_API`)でのみ利用可能。
+
+```c
+#include
+
+int wolfSSH_ConvertConsole(WOLFSSH* ssh, WOLFSSH_HANDLE handle,
+ byte* buf, word32 bufSz);
+```
+
+**説明**
+
+Windows コンソールハンドルから読み取ったコンソールデータを処理し、SSH ストリーム用に変換する。
**引数**
-**ssh** - WOLFSSHオブジェクトへのポインター
+- `ssh` - wolfSSH セッションへのポインター
+- `handle` - Windows コンソールハンドル
+- `buf` - 変換対象のコンソールデータバッファ
+- `bufSz` - バッファの長さ
+
+**戻り値**
-**username** - ユーザー名文字列
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
-```
+### wolfSSH_SetKeyingCompletionCb()
+
+```c
#include
-int wolfSSH_setUsername(WOLFSSH* ssh , const char* username);
+
+void wolfSSH_SetKeyingCompletionCb(WOLFSSH_CTX* ctx,
+ WS_CallbackKeyingCompletion cb);
```
-## 接続機能
+**説明**
-### wolfSSH_accept()
+鍵交換(初回またはリキー)が完了した際に呼び出されるコールバックを登録する。
+
+**引数**
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - キーイング完了コールバック
+**戻り値**
-**用法**
+なし
-**説明**
+**関連項目**
-wolfssh_acceptはサーバー側で呼び出され、SSHクライアントがSSHハンドシェイクを開始するのを待ちます。
+- `wolfSSH_SetKeyingCompletionCbCtx()`
-wolfssl_accept()は、ブロッキングI/OノンブロッキングI/Oの両方で機能します。使用しているI/Oが非ブロッキングである場合、wolfSSH_accept()は、ハンドシェークが完了できなかった場合は即戻ります。この場合、wolfssh_get_error()を呼び出すと、**WS_WANT_READ** または**WS_WANT_WRITE**のいずれかが返されます。
+### wolfSSH_SetKeyingCompletionCbCtx()
+```c
+#include
+
+void wolfSSH_SetKeyingCompletionCbCtx(WOLFSSH* ssh, void* ctx);
+```
-この場合呼び出し元は、読み取るべきデータを受信してwolfSSHが中断されたところからピックアップできるように、wolfSSH_acceptへの呼び出しを繰り返す必要があります。非ブロッキングソケットを使用する場合、何も実行する必要はありませんが、select()を使用して必要な条件を確認できます。
+**説明**
+キーイング完了コールバックに渡すユーザーコンテキストポインターを設定する。
-使用しているI/Oがブロッキングの場合、wolfSSH_accept()は、ハンドシェークが終了したか、エラーが発生した場合にのみ戻ります。
+**引数**
+- `ssh` - wolfSSH セッションへのポインター
+- `ctx` - コールバックに渡すユーザーコンテキストポインター
**戻り値**
-**WS_SUCCESS** - 成功
+なし
+
+### wolfSSH_RealPath()
+
+```c
+#include
+
+int wolfSSH_RealPath(const char* defaultPath, char* in,
+ char* out, word32 outSz);
+```
-**WS_BAD_ARGUMENT** - 引数がNULL
+**説明**
-**WS_FATAL_ERROR** – エラーが発生した。wolfSSH_get_error()を呼び出して詳細を取得すべき
+`defaultPath` を基準として、パス `in` を解決し、正規化された絶対パスを `out` に書き込む。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `defaultPath` - 相対パスの `in` を解決する際の基準パス
+- `in` - 解決対象のパス
+- `out` - 解決されたパスを書き込むバッファ
+- `outSz` - 出力バッファのサイズ
-```
+**戻り値**
+
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+
+## ポートフォワーディング関数
+
+
+
+本セクションのすべての関数は、wolfSSH がポートフォワーディングサポート(`WOLFSSH_FWD`、`./configure --enable-fwd`)付きでビルドされていることを必要とする。
+
+### wolfSSH_ChannelFwdNewLocal()
+
+```c
#include
-int wolfSSH_accept(WOLFSSH* ssh);
+
+WOLFSSH_CHANNEL* wolfSSH_ChannelFwdNewLocal(WOLFSSH* ssh,
+ const char* host, word32 hostPort,
+ const char* origin, word32 originPort);
```
-**関連項目**
+**説明**
-wolfSSH_stream_read()
+セッション上にローカル TCP/IP フォワーディングチャネルを設定する。セッションが接続および認証されると、接続は `hostPort` ポートの `host` へフォワードされ、送信元アドレス `origin` とポート `originPort` がタグ付けされる。
+**引数**
-### wolfSSH_connect()
+- `ssh` - wolfSSH セッションへのポインター
+- `host` - 転送先ホストアドレス
+- `hostPort` - 転送先ポート
+- `origin` - 送信元接続アドレス
+- `originPort` - 送信元接続ポート
+**戻り値**
+
+- 新しいチャネルへのポインター、エラー時は `NULL`
+
+**関連項目**
+
+- `wolfSSH_ChannelFwdNewRemote()`
+
+### wolfSSH_ChannelFwdNewRemote()
+
+```c
+#include
-**用法**
+WOLFSSH_CHANNEL* wolfSSH_ChannelFwdNewRemote(WOLFSSH* ssh,
+ const char* host, word32 hostPort,
+ const char* origin, word32 originPort);
+```
**説明**
-この関数はクライアント側で呼び出されSSHハンドシェークをサーバーに対して開始します。
-この関数が呼び出される時点では下層の通信チャネルは接続が完了している必要があります。
+セッション上にリモート TCP/IP フォワーディングチャネルを設定し、ピアに対して `hostPort` ポートの `host` へ接続をフォワードするよう要求する。
+
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `host` - 転送先ホストアドレス
+- `hostPort` - 転送先ポート
+- `origin` - 送信元接続アドレス
+- `originPort` - 送信元接続ポート
-wolfSSH_connect()関数はブロッキングとノンブロッキングI/Oの両方で動作できます。ノンブロッキングI/Oの場合にはハンドシェークが完了できなかった場合は即戻ります。この場合、wolfssh_get_error()を呼び出すと、**WS_WANT_READ** または**WS_WANT_WRITE**のいずれかが返されます。
+**戻り値**
-この場合呼び出し元は、読み取るべきデータを受信してwolfSSHが中断されたところからピックアップできるように、wolfSSH_connectへの呼び出しを繰り返す必要があります。非ブロッキングソケットを使用する場合、何も実行する必要はありませんが、select()を使用して必要な条件を確認できます。
+- 新しいチャネルへのポインター、エラー時は `NULL`
+**関連項目**
-使用しているI/Oがブロッキングの場合、wolfSSH_accept()は、ハンドシェークが終了したか、エラーが発生した場合にのみ戻ります。
+- `wolfSSH_ChannelFwdNewLocal()`
+### wolfSSH_CTX_SetFwdCb()
-**戻り値**
-**WS_SUCCESS** - 接続に成功
+```c
+#include
-**WS_BAD_ARGUMENT** - 引数がNULL
+int wolfSSH_CTX_SetFwdCb(WOLFSSH_CTX* ctx,
+ WS_CallbackFwd fwdCb, WS_CallbackFwdIO fwdIoCb);
+```
-**WS_FATAL_ERROR** - エラーが発生した。wolfSSH_get_error()を呼び出して詳細を取得すべき
+**説明**
+コンテキストに対して、ポートフォワーディングのセットアップ/クリーンアップコールバック(`fwdCb`)とフォワーディング I/O コールバック(`fwdIoCb`)を登録する。
**引数**
-**ssh** - WOLFSSHオブジェクトへのポインター
+- `ctx` - wolfSSH コンテキストへのポインター
+- `fwdCb` - フォワーディングのセットアップ/クリーンアップコールバック
+- `fwdIoCb` - フォワーディング I/O コールバック
-```
-#include
-int wolfSSH_connect(WOLFSSH* ssh);
-```
+**戻り値**
-### wolfSSH_shutdown()
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+**関連項目**
-**用法**
+- `wolfSSH_SetFwdCbCtx()`
-**説明**
+### wolfSSH_SetFwdCbCtx()
-SSHチャネルの接続を終了してクローズします
+```c
+#include
-**戻り値**
+int wolfSSH_SetFwdCbCtx(WOLFSSH* ssh, void* ctx);
+```
-**WS_BAD_ARGUMENT** - 引数がNULL
+**説明**
-**WS_SUCCES** - 正常にシャットダウンが成功した
+ポートフォワーディングコールバックに渡すユーザーコンテキストポインターを設定する。
**引数**
-**ssh** - WOLFSSHオブジェクトへのポインター
+- `ssh` - wolfSSH セッションへのポインター
+- `ctx` - フォワーディングコールバックに渡すユーザーコンテキストポインター
-```
-#include
-int wolfSSH_shutdown(WOLFSSH* ssh);
-```
+**戻り値**
-### wolfSSH_stream_read()
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+### wolfSSH_ChannelFwdNew()
+```c
+#include
-**用法**
+WOLFSSH_CHANNEL* wolfSSH_ChannelFwdNew(WOLFSSH* ssh,
+ const char* host, word32 hostPort,
+ const char* origin, word32 originPort);
+```
**説明**
-wolfSSH_stream_read()は内部のバッファから復号済みデータを**bufSz**で指定されたバイト数まで読みだします。読み込まれたデータはバッファから取り除かれます。
-
-wolfSSH_stream_read()はブロッキングとノンブロッキングI/Oの両方で動作できます。ノンブロッキングI/Oの場合にはハンドシェークが完了できなかった場合は即戻ります。この場合、wolfssh_get_error()を呼び出すと、**WS_WANT_READ** または**WS_WANT_WRITE**のいずれかが返されます。
+非推奨。`wolfSSH_ChannelFwdNewLocal()` を使用すること。この関数は後方互換性のために維持されており、内部でそちらへ処理を転送する。
-この場合呼び出し元は、読み取るべきデータを受信してwolfSSHが中断されたところからピックアップできるように、wolfSSH_stream_read()の呼び出しを繰り返す必要があります。非ブロッキングI/Oが使用されている場合、何も実行する必要はありませんが、select()を使用して必要な条件を確認できます。
+**引数**
-ブロッキングI/Oが使用されている場合は、wolfSSH_stream_read()は、データがIsAbaibleまたはエラーが発生した場合にのみ戻ります。
+- `ssh` - wolfSSH セッションへのポインター
+- `host` - 転送先ホストアドレス
+- `hostPort` - 転送先ポート
+- `origin` - 送信元接続アドレス
+- `originPort` - 送信元接続ポート
**戻り値**
-**>0** – 読み取りに成功したバイト数
+- 新しいチャネルへのポインター、エラー時は `NULL`
+
+**関連項目**
+
+- `wolfSSH_ChannelFwdNewLocal()`
-**0** – クリーンコネクションシャットダウンかソケットエラー
+### wolfSSH_ChannelSetFwdFd()
-**WS_BAD_ARGUMENT** – 引数の一つがNULL
+```c
+#include
-**WS_EOF** – ストリームの終端に到達
+int wolfSSH_ChannelSetFwdFd(WOLFSSH_CHANNEL* channel, int fwdFd);
+```
-**WS_FATAL_ERROR** – エラーが発生。**wolfSSH_get_error()** を呼び出して詳細を取得すべき
+**説明**
-**WS_REKEYING** - リキーイング処理中。 wolfSSH_worker()を呼び出して完了させること
+非推奨。フォワーディングチャネルにフォワーディング用ファイルディスクリプタを関連付ける。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `channel` - フォワーディングチャネルへのポインター
+- `fwdFd` - フォワーディング用ファイルディスクリプタ
-**buf** – wolfSSH_stream_read()が読みだしたデータを格納するバッファへのポインター
+**戻り値**
-**bufSz** – バッファサイズ
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+### wolfSSH_ChannelGetFwdFd()
-```
+```c
#include
-int wolfSSH_stream_read(WOLFSSH* ssh, byte* buf, word32 bufSz);
+
+int wolfSSH_ChannelGetFwdFd(const WOLFSSH_CHANNEL* channel);
```
-**関連項目**
+**説明**
-wolfSSH_accept()
+非推奨。フォワーディングチャネルに関連付けられたフォワーディング用ファイルディスクリプタを返す。
-wolfSSH_stream_send()
+**引数**
+- `channel` - フォワーディングチャネルへのポインター
-### wolfSSH_stream_send()
+**戻り値**
+- フォワーディング用ファイルディスクリプタ、または負のエラーコード
-**用法**
+## 鍵ロード関数
-**説明**
-wolfSSH_stream_send()はバッファで与えたデータを**bufSz**で指定されたバイト数までSSHストリームデータバッファに書き込みます。
+### wolfSSH_ReadKey_buffer()
+
+```c
+#include
-wolfSSH_stream_send()はブロッキングとノンブロッキングI/Oの両方で動作できます。ノンブロッキングI/Oの場合にはハンドシェークが完了できなかった場合は即戻ります。この場合、wolfssh_get_error()を呼び出すと、**WS_WANT_READ** または**WS_WANT_WRITE**のいずれかが返されます。
+int wolfSSH_ReadKey_buffer(const byte* in, word32 inSz,
+ int format, byte** out, word32* outSz,
+ const byte** outType, word32* outTypeSz,
+ void* heap);
+```
-この場合呼び出し元は、データの書き込みがペンディングされ、wolfSSHが中断されたところから書き込みを再開できるように、wolfSSH_stream_send()の呼び出しを繰り返す必要があります。非ブロッキングソケットを使用する場合、何も実行する必要はありませんが、select()を使用して必要な条件を確認できます。
+**説明**
-ブロッキングI/Oが使用されている場合は、wolfSSH_stream_send()は、データが送信されたときかエラーが発生した時のみ戻ります。
+サイズ `inSz` のバッファ `in` から鍵を読み込み、`format` 型の鍵としてデコードする。`format` には `WOLFSSH_FORMAT_ASN1`、`WOLFSSH_FORMAT_PEM`、`WOLFSSH_FORMAT_SSH`、または `WOLFSSH_FORMAT_OPENSSH` を指定できる。デコードされた鍵は、`wolfSSH_CTX_UsePrivateKey_buffer()` で利用できる形式で、`out` が指すバッファに格納され、そのサイズが `outSz` に格納される。`out` が NULL の場合、`heap` を使って鍵用のバッファが確保される。鍵種別文字列は `outType` に格納され、その長さが `outTypeSz` に格納される。
-WS_WANT_READ またはWS_WANT_WRITEのいずれもかえされていない場合(すなわち**WS_REKEYING**が返された場合)は、内部処理が終了するまでwolfSSH_worker()を呼び出し続ける必要があります。
+**引数**
+- `in` - エンコードされた鍵を含むバッファ
+- `inSz` - 入力バッファのサイズ
+- `format` - 入力鍵のエンコーディング
+- `out` - デコードされた鍵の出力バッファ(NULL の場合は `heap` から確保)
+- `outSz` - デコードされた鍵サイズの出力先
+- `outType` - 鍵種別文字列の出力先
+- `outTypeSz` - 鍵種別文字列の長さの出力先
+- `heap` - `out` が NULL の場合に確保で使用されるヒープ
**戻り値**
-**>0** – SSHストリームバッファに書き込んだバイト数
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_MEMORY_E`
+- `WS_BUFFER_E`
+- `WS_PARSE_E`
+- `WS_UNIMPLEMENTED_E`
+- `WS_RSA_E`
+- `WS_ECC_E`
+- `WS_KEY_AUTH_MAGIC_E`
+- `WS_KEY_FORMAT_E`
+- `WS_KEY_CHECK_VAL_E`
-**0** – クリーンコネクションシャットダウンかソケットエラー。 **wolfSSH_get_error()** を呼び出して詳細を取得すること
+**関連項目**
-**WS_FATAL_ERROR** – エラーが発生。**wolfSSH_get_error()** を呼び出して詳細を取得すること
+- `wolfSSH_ReadKey_file()`
-**WS_BAD_ARGUMENT** - 引数の一つがNULL
+### wolfSSH_ReadKey_buffer_ex()
-**WS_REKEYING** - リキーイング処理中。 wolfSSH_worker()を呼び出して完了させること
+```c
+#include
-**引数**
+int wolfSSH_ReadKey_buffer_ex(const byte* in, word32 inSz, int format,
+ byte** out, word32* outSz, const byte** outType, word32* outTypeSz,
+ int isPrivate, void* heap);
+```
-**ssh** – WOLFSSHオブジェクトへのポインター
+**説明**
-**buf** – wolfSSH_stream_send()が送信するデータを格納するバッファへのポインター
+wolfSSH_ReadKey_buffer() と同様だが、バッファが秘密鍵か公開鍵かを推測するのではなく、明示的な `isPrivate` フラグで指定する。
-**bufSz** – size of the buffer
+**引数**
-```
-#include
-int wolfSSH_stream_send(WOLFSSH* ssh , byte* buf , word32 bufSz);
-```
+- `in` - エンコードされた鍵を含むバッファ
+- `inSz` - 入力バッファのサイズ
+- `format` - 入力鍵のエンコーディング
+- `out` - デコードされた鍵の出力バッファ(NULL の場合は `heap` から確保)
+- `outSz` - デコードされた鍵サイズの出力先
+- `outType` - 鍵種別文字列の出力先
+- `outTypeSz` - 鍵種別文字列の長さの出力先
+- `isPrivate` - 鍵が秘密鍵の場合は非ゼロ、公開鍵の場合は 0
+- `heap` - `out` が NULL の場合に確保で使用されるヒープ
+**戻り値**
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_MEMORY_E`
+- `WS_BUFFER_E`
+- `WS_PARSE_E`
+- `WS_UNIMPLEMENTED_E`
**関連項目**
-wolfSSH_accept()
+- `wolfSSH_ReadKey_buffer()`
-wolfSSH_stream_read()
-
-
-### wolfSSH_stream_exit()
+### wolfSSH_ReadPublicKey_buffer()
+```c
+#include
-**用法**
+int wolfSSH_ReadPublicKey_buffer(const byte* in, word32 inSz, int format,
+ byte** out, word32* outSz, const byte** outType, word32* outTypeSz,
+ void* heap);
+```
**説明**
-SSHストリームを終了させます。
+バッファ `in` から公開鍵を読み込みデコードする。wolfSSH_ReadKey_buffer() と同様に動作するが、公開鍵専用である。
+
+**引数**
+- `in` - エンコードされた公開鍵を含むバッファ
+- `inSz` - 入力バッファのサイズ
+- `format` - 入力鍵のエンコーディング
+- `out` - デコードされた鍵の出力バッファ(NULL の場合は `heap` から確保)
+- `outSz` - デコードされた鍵サイズの出力先
+- `outType` - 鍵種別文字列の出力先
+- `outTypeSz` - 鍵種別文字列の長さの出力先
+- `heap` - `out` が NULL の場合に確保で使用されるヒープ
**戻り値**
-**WS_BAD_ARGUMENT** - 引数の一つがNULL
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_MEMORY_E`
+- `WS_BUFFER_E`
+- `WS_PARSE_E`
+- `WS_UNIMPLEMENTED_E`
-**WS_SUCCESS** - 成功
+**関連項目**
-**引数**
+- `wolfSSH_ReadKey_buffer()`
-**ssh** – WOLFSSHオブジェクトへのポインター
-**status** – SSHコネクションの状態
+### wolfSSH_ReadKey_file()
-```
+```c
#include
-int wolfSSH_stream_exit(WOLFSSH* ssh, int status);
-```
-### wolfSSH_TriggerKeyExchange()
-
-
-**用法**
+int wolfSSH_ReadKey_file(const char* name,
+ byte** out, word32* outSz,
+ const byte** outType, word32* outTypeSz,
+ byte* isPrivate, void* heap);
+```
**説明**
-鍵交換処理を開始します。ハンドシェークに必要なパケットを用意して送信します。
+ファイル `name` から鍵を読み込む。フォーマットはファイル内容から推測される。鍵バッファ `out`、鍵種別 `outType`、およびそれぞれのサイズは wolfSSH_ReadKey_buffer() と同様に生成される。`isPrivate` フラグは、鍵が秘密鍵であるかどうかを示すよう設定される。確保処理には指定された `heap` が使用される。
+**引数**
-**戻り値**
-
-**WS_BAD_ARGUEMENT** – 引数がNULL
+- `name` - 鍵ファイルへのパス
+- `out` - デコードされた鍵の出力バッファ(NULL の場合は `heap` から確保)
+- `outSz` - デコードされた鍵サイズの出力先
+- `outType` - 鍵種別文字列の出力先
+- `outTypeSz` - 鍵種別文字列の長さの出力先
+- `isPrivate` - 鍵が秘密鍵の場合に非ゼロが設定される出力
+- `heap` - `out` が NULL の場合に確保で使用されるヒープ
-**WS_SUCCESS** - 成功
+**戻り値**
-**引数**
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+- `WS_BAD_FILE_E`
+- `WS_MEMORY_E`
+- `WS_BUFFER_E`
+- `WS_PARSE_E`
+- `WS_UNIMPLEMENTED_E`
+- `WS_RSA_E`
+- `WS_ECC_E`
+- `WS_KEY_AUTH_MAGIC_E`
+- `WS_KEY_FORMAT_E`
+- `WS_KEY_CHECK_VAL_E`
-**ssh** – WOLFSSHオブジェクトへのポインター
+**関連項目**
-```
-#include
-int wolfSSH_TriggerKeyExchange(WOLFSSH* ssh );
-```
+- `wolfSSH_ReadKey_buffer()`
-## テスト機能
+## 鍵交換アルゴリズムの設定
+wolfSSH は、使用している wolfCrypt ライブラリでのアルゴリズムの利用可否に基づいて、
+鍵交換 (KEX) 時に使用するアルゴリズムリストの集合をセットアップする。
-### wolfSSH_GetStats()
+利用可能なアルゴリズムを確認するためのアクセサ関数と、KEX で使用されるアルゴリズムリストを
+確認するためのアクセサ関数が用意されている。アクセサ関数は 4 つ 1 組で提供される。すなわち、
+CTX オブジェクトからの設定・取得、および SSH オブジェクトからの設定・取得である。CTX を使って
+作成された SSH オブジェクトはすべて CTX のアルゴリズムリストを継承するが、独自のリストを
+与えることもできる。
+デフォルトでは、SHA-1 を使用するアルゴリズムはすべて無効化されているが、以下のいずれかの
+関数を使って再度有効化できる。wolfCrypt 側で SHA-1 が無効化されている場合、SHA-1 は使用できない。
-**用法**
-**説明**
+### wolfSSH アルゴリズムリストの設定
-**ssh**セッションに関連した、**txCount** , **rxCount** , **seq** , と **peerSeq** を更新します。
+```c
+#include
+int wolfSSH_CTX_SetAlgoListKex(WOLFSSH_CTX* ctx, const char* list);
+int wolfSSH_CTX_SetAlgoListKey(WOLFSSH_CTX* ctx, const char* list);
+int wolfSSH_CTX_SetAlgoListCipher(WOLFSSH_CTX* ctx, const char* list);
+int wolfSSH_CTX_SetAlgoListMac(WOLFSSH_CTX* ctx, const char* list);
+int wolfSSH_CTX_SetAlgoListKeyAccepted(WOLFSSH_CTX* ctx, const char* list);
-**戻り値**
+int wolfSSH_SetAlgoListKex(WOLFSSH* ssh, const char* list);
+int wolfSSH_SetAlgoListKey(WOLFSSH* ssh, const char* list);
+int wolfSSH_SetAlgoListCipher(WOLFSSH* ssh, const char* list);
+int wolfSSH_SetAlgoListMac(WOLFSSH* ssh, const char* list);
+int wolfSSH_SetAlgoListKeyAccepted(WOLFSSH* ssh, const char* list);
+```
-なし
+**説明**
-**引数**
+これらの関数は、wolfSSH の _ctx_ または _ssh_ オブジェクトに設定される各種アルゴリズムリストの
+セッターとして機能する。これらの文字列は KEX 初期化時にピアへ送信され、ピアが KEX 初期化
+メッセージを送ってきた際の比較に使用される。KeyAccepted リストはユーザー認証に使用される。
-**ssh** – WOLFSSHオブジェクトへのポインター
+CTX 版の関数は、指定された WOLFSSH_CTX オブジェクト _ctx_ に対してアルゴリズムリストを設定する。
+これらはコンパイル時にデフォルト値が設定されている。指定した値がその代わりに使用される。
+なお、このライブラリは文字列をコピーしないため、その所有権はアプリケーション側にあり、
+アプリケーションが CTX を解放する際に文字列を解放するのはアプリケーションの責任である。
+CTX を使って SSH オブジェクトを作成すると、SSH オブジェクトは CTX の文字列を継承する。
+SSH オブジェクトのアルゴリズムリストは上書きすることができる。
-**txCount** – 総送信済みデータ数を返却する為の変数のアドレス
+`Kex` は鍵交換アルゴリズムリストを指定する。`Key` はサーバー公開鍵アルゴリズムリストを指定する。
+`Cipher` はバルク暗号化アルゴリズムリストを指定する。`Mac` はメッセージ認証コードアルゴリズム
+リストを指定する。`KeyAccepted` はユーザー認証で許可される公開鍵アルゴリズムを指定する。
-**rxCount** – 総受信済みデータ数を返却する為の変数のアドレス
+**戻り値**
-**seq** – パケットシーケンス番号を返却する為の変数のアドレス。パケットシーケンス番号は0から始まりパケット毎にインクリメントされる
+- `WS_SUCCESS`
+- `WS_SSH_CTX_NULL_E`
+- `WS_SSH_NULL_E`
-**peerSeq** – 相手パケットシーケンス番号を返却する為の変数のアドレス。パケットシーケンス番号は0から始まりパケット毎にインクリメントされる
+### wolfSSH アルゴリズムリストの取得
-```
+```c
#include
-void wolfSSH_GetStats(WOLFSSH* ssh , word32* txCount , word32* rxCount ,
-word32* seq , word32* peerSeq )
-```
-
-### wolfSSH_KDF()
+const char* wolfSSH_CTX_GetAlgoListKex(WOLFSSH_CTX* ctx);
+const char* wolfSSH_CTX_GetAlgoListKey(WOLFSSH_CTX* ctx);
+const char* wolfSSH_CTX_GetAlgoListCipher(WOLFSSH_CTX* ctx);
+const char* wolfSSH_CTX_GetAlgoListMac(WOLFSSH_CTX* ctx);
+const char* wolfSSH_CTX_GetAlgoListKeyAccepted(WOLFSSH_CTX* ctx);
-**用法**
+const char* wolfSSH_GetAlgoListKex(WOLFSSH* ssh);
+const char* wolfSSH_GetAlgoListKey(WOLFSSH* ssh);
+const char* wolfSSH_GetAlgoListCipher(WOLFSSH* ssh);
+const char* wolfSSH_GetAlgoListMac(WOLFSSH* ssh);
+const char* wolfSSH_GetAlgoListKeyAccepted(WOLFSSH* ssh);
+```
**説明**
-APIテストが鍵派生の既知の回答テストを行うことができるように使用されます。
-鍵派生関数は鍵マテリアル**k** と **h**を元に対称鍵を生成します。ここで、**k**はデフィーヘルマンのシェアードシークレットであり、**h**は初期の鍵交換中に生成されたハンドシェークのハッシュ値です。**keyid**および**hashid**によって指定される複数のタイプの鍵が導出される可能性があります。
+これらの関数は、wolfSSH の _ctx_ または _ssh_ オブジェクトに設定される各種アルゴリズムリストの
+ゲッターとして機能する。
+`Kex` は鍵交換アルゴリズムリストを指定する。`Key` はサーバー公開鍵アルゴリズムリストを指定する。
+`Cipher` はバルク暗号化アルゴリズムリストを指定する。`Mac` はメッセージ認証コードアルゴリズム
+リストを指定する。`KeyAccepted` はユーザー認証で許可される公開鍵アルゴリズムを指定する。
-```
-Initial IV client to server: keyId = A
-Initial IV server to client: keyId = B
-Encryption key client to server: keyId = C
-Encryption key server to client: keyId = D
-Integrity key client to server: keyId = E
-Integrity key server to client : keyId = F
-```
**戻り値**
-**WS_SUCCESS**
-
-**WS_CRYPTO_FAILED**
+これらの関数は、コンパイル時に設定されたデフォルト値、またはセッター関数で実行時に設定された
+値へのポインターを返す。`ctx` または `ssh` パラメーターが NULL の場合、関数は NULL を返す。
-**引数**
-**hashId** – キーイングマテリアルを生成させる為のハッシュのタイプ(WC_HASH_TYPE_SHA あるいは WC_HASH_TYPE_SHA256)
+### wolfSSH_CheckAlgoName()
-**keyId** – 生成する鍵を示す文字A から F
+```c
+#include
-**key** – 期待されている鍵との比較に使用される生成済みの鍵
+int wolfSSH_CheckAlgoName(const char* name);
+```
-**keySz** – 鍵**key**の生成に必要なサイズ
+**説明**
-**k** – デフィーヘルマン鍵交換で得たシェアードシークレット
+指定した単一のアルゴリズム名 `name` が有効かつサポートされているかどうかを確認する。
-**kSz** – シェアードシークレット**k**のサイズ
+**引数**
-**h** – 鍵交換中に生成されたハンドシェークのハッシュ値
+- `name` - 確認するアルゴリズム名
-**hSz** – ハッシュ**h**のサイズ
+**戻り値**
-**sessionId** – 最初のハッシュ**h**のユニークなID
+- `WS_SUCCESS`
+- `WS_INVALID_ALGO_ID`
-**sessionIdSz** – **sessionId**のサイズ
+### wolfSSH アルゴリズムの照会
-```
+```c
#include
-int wolfSSH_KDF(byte hashId , byte keyId , byte* key , word32 keySz ,
-const byte* k , word32 kSz , const byte* h , word32 hSz ,
-const byte* sessionId , word32 sessionIdSz );
+
+const char* wolfSSH_QueryKex(word32* index);
+const char* wolfSSH_QueryKey(word32* index);
+const char* wolfSSH_QueryCipher(word32* index);
+const char* wolfSSH_QueryMac(word32* index);
```
+**説明**
+
+指定された種別(Kex、Key、Cipher、または Mac)の有効なアルゴリズムの名前文字列を返す。Key
+種別は、ユーザー認証で受理される鍵種別としても使用される。`index` を 0 に初期化し、呼び出す
+たびに同じポインターを渡すことで反復処理を行う。関数はこのポインターを進める。戻り値が NULL
+の場合、リストの末尾に達したことを意味する。
+**引数**
-## セッション機能
+- `index` - イテレーター。0 に初期化し、呼び出しごとに渡す
+**戻り値**
+- アルゴリズム名文字列へのポインター、またはリストの末尾に達した場合は `NULL`
-### wolfSSH_GetSessionType()
+### wolfSSH_GetText()
+```c
+#include
-**用法**
+size_t wolfSSH_GetText(WOLFSSH* ssh, WS_Text id, char* str, size_t strSz);
+```
**説明**
-wolfSSH_GetSessionType()はセッションの種類を返します。
+`id`(KEX アルゴリズム、KEX 曲線、KEX ハッシュ、入出力暗号、入出力 MAC などの `WS_Text` 値)
+で識別されるネゴシエーション済み項目のテキスト表現を `str` に書き込む。終端 NULL を含めて
+`strSz` バイトを超えて書き込むことはない。
-**戻り値**
+**引数**
-WOLFSSH_SESSION_UNKNOWN
+- `ssh` - wolfSSH セッションへのポインター
+- `id` - 取得する `WS_Text` 項目
+- `str` - テキストの出力バッファ
+- `strSz` - 出力バッファのサイズ
-WOLFSSH_SESSION_SHELL
+**戻り値**
-WOLFSSH_SESSION_EXEC
+- 書き込まれた文字数(終端 NULL を除く)。値が `strSz` 以上の場合、出力が切り詰められたことを
+ 意味する
-WOLFSSH_SESSION_SUBSYSTEM
+## グローバルリクエストコールバック
-**引数**
+これらのコールバックは、SSH グローバルリクエストメッセージおよびその成功/失敗応答を処理する。
-**ssh** - WOLFSSHオブジェクトへのポインター
+### wolfSSH_SetGlobalReq()
-```
+```c
#include
-WS_SessionType wolfSSH_GetSessionType(const WOLFSSH* ssh );
-```
-### wolfSSH_GetSessionCommand()
+void wolfSSH_SetGlobalReq(WOLFSSH_CTX* ctx, WS_CallbackGlobalReq cb);
+```
+**説明**
-**用法**
+ピアからグローバルリクエストメッセージを受信した際に呼び出されるコールバックを登録する。
-**説明**
+**引数**
-セッションの現在のコマンドを返します
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - グローバルリクエストコールバック
**戻り値**
-**const char*** - コマンドへのポインター
+なし
-**引数**
+**関連項目**
-**ssh** - WOLFSSHオブジェクトへのポインター
+- `wolfSSH_SetGlobalReqCtx()`
-```
+### wolfSSH_SetGlobalReqCtx()
+
+```c
#include
-const char* wolfSSH_GetSessionCommand(const WOLFSSH* ssh );
+
+void wolfSSH_SetGlobalReqCtx(WOLFSSH* ssh, void* ctx);
```
-## ポートフォワーディング関数
+**説明**
+グローバルリクエストコールバックに渡されるユーザーコンテキストポインターを設定する。
+**引数**
-### wolfSSH_ChannelFwdNew()
+- `ssh` - wolfSSH セッションへのポインター
+- `ctx` - コールバックに渡すユーザーコンテキストポインター
+**戻り値**
-**用法**
+なし
-**説明**
+### wolfSSH_GetGlobalReqCtx()
-wolfSSHセッションにTCP/IP転送チャネルを設定します。SSHセッションが接続され、認証された場合、ポート_hostport_のaddress_host_のインターフェイスにローカルリスナーが作成されます。そのリスナーの新しい接続があれば、SSHサーバーへの新しいChannelRequestをトリガーして、ポート_hostport_で_host_への接続を確立します。
+```c
+#include
+void* wolfSSH_GetGlobalReqCtx(WOLFSSH* ssh);
+```
-**戻り値**
+**説明**
-**WOLFSSH_CHAN*** – エラーの場合はNULL、成功の場合は新たな新しいチャンネルレコード
+wolfSSH_SetGlobalReqCtx() で以前に設定されたユーザーコンテキストポインターを返す。
**引数**
-**ssh** - WOLFSSHオブジェクトへのポインター
-
-**host** – バインドリスナーのホストアドレス
+- `ssh` - wolfSSH セッションへのポインター
-**hostPort** – バインドリスナーのポート
+**戻り値**
-**origin** – 接続元のIPアドレス
+- グローバルリクエストコンテキストポインター。存在しない場合は `NULL`
-**originPort** – 接続元のポート
+### wolfSSH_SetReqSuccess()
-```
+```c
#include
-WOLFSSH_CHANNEL* wolfSSH_ChannelFwdNew(WOLFSSH* ssh ,
-const char* host , word32 hostPort ,
-const char* origin , word32 originPort );
-```
-
-### wolfSSH_ChannelFree()
-
-**用法**
+void wolfSSH_SetReqSuccess(WOLFSSH_CTX* ctx, WS_CallbackReqSuccess cb);
+```
**説明**
-チャネル _channel_のメモリを解放します。チャネルはセッションのチャネルリストから削除されます。
+ピアからリクエスト成功応答を受信した際に呼び出されるコールバックを登録する。
+
+**引数**
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - リクエスト成功コールバック
**戻り値**
-**int** – エラーコード
+なし
+
+**関連項目**
-**引数**
+- `wolfSSH_SetReqSuccessCtx()`
-**channel** – 解放されるwolfSSHチャネル
+### wolfSSH_SetReqSuccessCtx()
-```
+```c
#include
-int wolfSSH_ChannelFree(WOLFSSH_CHANNEL* channel );
+
+void wolfSSH_SetReqSuccessCtx(WOLFSSH* ssh, void* ctx);
```
-### wolfSSH_worker()
+**説明**
+
+リクエスト成功コールバックに渡されるユーザーコンテキストポインターを設定する。
+**引数**
-**用法**
+- `ssh` - wolfSSH セッションへのポインター
+- `ctx` - コールバックに渡すユーザーコンテキストポインター
-**説明**
+**戻り値**
-wolfSSH Worker機能は接続を見守り、データが受信されると処理します。SSHセッションにはセッションの多くの管理すべきメッセージがあり、これにより自動的にケアがあります。特定のチャネルのデータが受信されると、ワーカーはデータをチャネルに配置します。(function wolfssh_stream_read()dosmuchも同じですが、単一のチャネルの受信データも返します。)wolfssh_worker()は次のアクションを実行します:
+なし
-1. _outputbuffer_ 内に保留中のデータを送信しようとします。
-2. セッションのソケットに対して _DoReceive()_ を呼び出します。
-3. 特定のチャネルのデータが受信された場合、データを返して通知を受け取り、チャネルIDを指定して通知します。
+### wolfSSH_GetReqSuccessCtx()
+```c
+#include
-**戻り値**
+void* wolfSSH_GetReqSuccessCtx(WOLFSSH* ssh);
+```
-**int** – エラーコードあるいはステータス
+**説明**
-**WS_CHANNEL_RXD** – チャネルに受信済みのデータとチャネルIDがセットされている
+wolfSSH_SetReqSuccessCtx() で以前に設定されたユーザーコンテキストポインターを返す。
**引数**
-**ssh** - WOLFSSHオブジェクトへのポインター
+- `ssh` - wolfSSH セッションへのポインター
-**id** – IDを格納する変数へのポインター
+**戻り値**
+- リクエスト成功コンテキストポインター。存在しない場合は `NULL`
-```
+### wolfSSH_SetReqFailure()
+
+```c
#include
-int wolfSSH_worker(WOLFSSH* ssh , word32* channelId );
-```
-### wolfSSH_ChannelGetId()
+void wolfSSH_SetReqFailure(WOLFSSH_CTX* ctx, WS_CallbackReqSuccess cb);
+```
+**説明**
-**用法**
+ピアからリクエスト失敗応答を受信した際に呼び出されるコールバックを登録する。
-**説明**
+**引数**
-引数で与えられたチャネルに対してIDあるいは相手のIDを返します。
+- `ctx` - wolfSSH コンテキストへのポインター
+- `cb` - リクエスト失敗コールバック
**戻り値**
-**int** – エラーコード
-
-**引数**
+なし
-**channel** – チャネルへのポインター
+**関連項目**
-**id** – IDを格納する変数へのポインター
+- `wolfSSH_SetReqFailureCtx()`
-**peer** – 自チャネルIDか相手チャネルID
+### wolfSSH_SetReqFailureCtx()
-```
+```c
#include
-int wolfSSH_ChannelGetId(WOLFSSH_CHANNEL* channel , word32* id , byte peer);
-```
-
-### wolfSSH_ChannelFind()
-
-**用法**
+void wolfSSH_SetReqFailureCtx(WOLFSSH* ssh, void* ctx);
+```
**説明**
-Given a session _ssh_ , find the channel associated with _id_.
-
-**戻り値**
-
-**WOLFSSH_CHANNEL*** – チャネルへのポインター,IDがリストになければNULL
+リクエスト失敗コールバックに渡されるユーザーコンテキストポインターを設定する。
**引数**
-**ssh** - WOLFSSHオブジェクトへのポインター
+- `ssh` - wolfSSH セッションへのポインター
+- `ctx` - コールバックに渡すユーザーコンテキストポインター
-**id** – 検索したいチャネルID
+**戻り値**
-**peer** – どちらの側(自channel ID か相手channel ID)
+なし
+### wolfSSH_GetReqFailureCtx()
-```
+```c
#include
-WOLFSSH_CHANNEL* wolfSSH_ChannelFind(WOLFSSH* ssh ,
-word32 id , byte peer );
-```
-
-### wolfSSH_ChannelRead()
-
-**用法**
+void* wolfSSH_GetReqFailureCtx(WOLFSSH* ssh);
+```
**説明**
-チャネルオブジェクトからデータをコピーします
+wolfSSH_SetReqFailureCtx() で以前に設定されたユーザーコンテキストポインターを返す。
+**引数**
-**戻り値**
+- `ssh` - wolfSSH セッションへのポインター
-**int** – 読みだしたバイト数
+**戻り値**
-**>0** – 成功時には読みだしたバイト数を返します
+- リクエスト失敗コンテキストポインター。存在しない場合は `NULL`
-**0** – クリーンコネクションシャットダウンかソケットエラーが発生している。 エラー詳細を取得するためにwolfSSH_get_error()を呼び出すこと。
+## TPM 2.0 連携
-**WS_FATAL_ERROR** – そのほかのエラーが発生。エラー詳細を取得するためにwolfSSH_get_error()を呼び出すこと。
+これらの関数は、ホスト鍵操作のために wolfTPM 2.0 デバイスおよび鍵を統合する。使用するには、
+wolfSSH を `WOLFSSH_TPM` を有効にしてビルドし、wolfTPM がインストールされている必要がある。
-**引数**
+### wolfSSH_SetTpmDev()
-**channel** – wolfSSH channelへのポインター
+```c
+#include
-**buf** – wolfSSH_ChannelReadが読みだしたデータを格納するバッファアドレス
+void wolfSSH_SetTpmDev(WOLFSSH* ssh, WOLFTPM2_DEV* dev);
+```
-**bufSz** – バッファのサイズ
+**説明**
-```
-#include
-int wolfSSH_ChannelRead(WOLFSSH_CHANNEL* channel, byte* buf, word32 bufSz );
-```
+TPM を利用したホスト鍵操作のために、wolfTPM 2.0 デバイスをセッションに関連付ける。
-### wolfSSH_ChannelSend()
+**引数**
+- `ssh` - wolfSSH セッションへのポインター
+- `dev` - wolfTPM 2.0 デバイスへのポインター
-**用法**
+**戻り値**
-**説明**
+なし
-指定したチャネル経由でデータを相手に送信します。データはチャネルデータメッセージにパッキングされて送られます。さらに送信すべきデータがある場合には、 _wolfSSH_worker()_ を呼び出すと相手へのデータ送信を継続します。
+**関連項目**
-**戻り値**
+- `wolfSSH_SetTpmKey()`
-**int** – 送信したバイト数
+### wolfSSH_SetTpmKey()
-**>0** – 成功時には送信したバイト数を返す
+```c
+#include
-**0** – クリーンコネクションシャットダウンかソケットエラーが発生している。 エラー詳細を取得するためにwolfSSH_get_error()を呼び出すこと。
+void wolfSSH_SetTpmKey(WOLFSSH* ssh, WOLFTPM2_KEY* key);
+```
-**WS_FATAL_ERROR** – そのほかのエラーが発生。エラー詳細を取得するためにwolfSSH_get_error()を呼び出すこと。
+**説明**
+TPM を利用したホスト鍵操作のために、wolfTPM 2.0 鍵をセッションに関連付ける。
**引数**
-**channel** – wolfSSH channelへのポインター
+- `ssh` - wolfSSH セッションへのポインター
+- `key` - wolfTPM 2.0 鍵へのポインター
-**buf** – wolfSSH_ChannelSend()が送信のために読みだすバッファへのポインター
+**戻り値**
-**bufSz** – バッファのサイズ
+なし
+### wolfSSH_GetTpmDev()
-```
+```c
#include
-int* wolfSSH_ChannelSend(WOLFSSH_CHANNEL* channel, const byte* buf, word32 bufSz);
-```
-### wolfSSH_ChannelExit()
+void* wolfSSH_GetTpmDev(WOLFSSH* ssh);
+```
+**説明**
-**用法**
+以前にセッションに関連付けられた wolfTPM 2.0 デバイスを返す。
-**説明**
+**引数**
-チャネルを終了し、相手へのメッセージ送信を停止し、チャネルがクローズしたとマークします。この関数はチャネルと残ったデータを解放しませんし、チャネルはリストに残ります。クローズ後は未送信データはそのままですが、受信は可能です。(現時点ではEOFとcloseを送りチャネルを削除します)
+- `ssh` - wolfSSH セッションへのポインター
**戻り値**
-**int** – エラーコード
-
-**引数**
+- wolfTPM 2.0 デバイスへのポインター。存在しない場合は `NULL`
-**channel** – wolfSSH channelへのポインター
+### wolfSSH_GetTpmKey()
-```
+```c
#include
-int wolfSSH_ChannelExit(WOLFSSH_CHANNEL* channel );
+
+void* wolfSSH_GetTpmKey(WOLFSSH* ssh);
```
-### wolfSSH_ChannelNext()
+**説明**
+以前にセッションに関連付けられた wolfTPM 2.0 鍵を返す。
-**用法**
+**引数**
-**説明**
+- `ssh` - wolfSSH セッションへのポインター
-_ssh_ の _channel_ の次のチャネルを返します。_channel_ がNULLの場合には、チャネルリスト内の最初のチャネルを返します。
+**戻り値**
+- wolfTPM 2.0 鍵へのポインター。存在しない場合は `NULL`
-**戻り値**
+### wolfSSH_CTX_UseTpmHostKey()
-**WOLFSSH_CHANNEL** – 最初のチャネルあるいは次のチャネルへのポインターあるいはNULL
+```c
+#include
-**引数**
+int wolfSSH_CTX_UseTpmHostKey(WOLFSSH_CTX* ctx,
+ WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key);
+```
-**ssh** - WOLFSSHオブジェクトへのポインター
+**説明**
-**channel** – wolfSSH channelへのポインター
+指定された wolfTPM 2.0 デバイスおよび鍵をサーバーホスト鍵として使用するようコンテキストを
+設定する。
-```
-#include
-WOLFSSH_CHANNEL* wolfSSH_ChannelFwdNew(WOLFSSH* ssh , WOLFSSH_CHANNEL* channel );
-```
+**引数**
+
+- `ctx` - wolfSSH コンテキストへのポインター
+- `dev` - wolfTPM 2.0 デバイスへのポインター
+- `key` - wolfTPM 2.0 鍵へのポインター
+
+**戻り値**
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
diff --git a/wolfSSH/src-ja/chapter14.md b/wolfSSH/src-ja/chapter14.md
index f2f34ff3..85a871e7 100644
--- a/wolfSSH/src-ja/chapter14.md
+++ b/wolfSSH/src-ja/chapter14.md
@@ -1,6 +1,6 @@
-# wolfSSL SFTP API リファレンス
+# wolfSSH SFTP API リファレンス
-## 接続機能
+## 接続関数
@@ -8,837 +8,556 @@
-**用法**
-
-**説明**
+```c
+#include
-クライアントからの接続要求を処理します
+int wolfSSH_SFTP_accept(WOLFSSH* ssh);
+```
-**戻り値**
+**説明**
-**WS_SFTP_COMPLETE** - 成功
+クライアントからの受信 SFTP 接続要求を処理します。SSH セッションが確立された後、
+サーバー側で呼び出します。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
-
-
-```
-#include
-int wolfSSH_SFTP_accept(WOLFSSH* ssh );
-```
-**使用例**
-
-```
-WOLFSSH* ssh;
+- `ssh` - 接続に使用する wolfSSH セッションへのポインター
-//create new WOLFSSH structure
-...
+**戻り値**
-if (wolfSSH_SFTP_accept(ssh) != WS_SUCCESS) {
-//handle error case
-}
-```
+- 成功時は `WS_SFTP_COMPLETE`
+- 失敗時は負のエラーコード
**関連項目**
-wolfSSH_SFTP_free()
-
-wolfSSH_new()
-
-wolfSSH_SFTP_connect()
-
+- `wolfSSH_SFTP_connect()`
+- `wolfSSH_SFTP_negotiate()`
### wolfSSH_SFTP_connect()
-**用法**
-**説明**
+```c
+#include
-SFTPサーバーへの接続を開始します。
+int wolfSSH_SFTP_connect(WOLFSSH* ssh);
+```
-**戻り値**
+**説明**
-**WS_SFTP_COMPLETE** - 成功
+サーバーへの SFTP 接続を開始します。SSH セッションが確立された後、クライアント側で
+呼び出します。
**引数**
-**ssh** - – WOLFSSHオブジェクトへのポインター
-
+- `ssh` - 接続に使用する wolfSSH セッションへのポインター
-```
-#include
-int wolfSSH_SFTP_connect(WOLFSSH* ssh );
-```
-
-
-**使用例**
-
-```
-WOLFSSH* ssh;
-
-//after creating a new WOLFSSH structure
+**戻り値**
-wolfSSH_SFTP_connect(ssh);
-```
+- 成功時は `WS_SFTP_COMPLETE`
+- 失敗時は負のエラーコード
**関連項目**
-wolfSSH_SFTP_accept()
-
-wolfSSH_new()
-
-wolfSSH_free()
-
+- `wolfSSH_SFTP_accept()`
+- `wolfSSH_SFTP_negotiate()`
### wolfSSH_SFTP_negotiate()
-**用法**
-
-**説明**
-
-本関数はクライアントからの接続要求かサーバーへの接続要求のいずれかを処理します。いずれを処理するかはwolfSSHオブジェクトにセットされているアクションに依存します。
-
-
-**戻り値**
-
-**WS_SUCCESS** - 成功
-
-**引数**
-
-**ssh** - – WOLFSSHオブジェクトへのポインター
-
-
-```
+```c
#include
-int wolfSSH_SFTP_negotiate(WOLFSSH* ssh)
-```
-
-**使用例**
+int wolfSSH_SFTP_negotiate(WOLFSSH* ssh);
```
-WOLFSSH* ssh;
-//create new WOLFSSH structure with side of connection
-set
-....
-
-if (wolfSSH_SFTP_negotiate(ssh) != WS_SUCCESS) {
-//handle error case
-}
-```
-
-**関連項目**
-
-wolfSSH_SFTP_free()
-
-wolfSSH_new()
+**説明**
-wolfSSH_SFTP_connect()
+SFTP プロトコルのネゴシエーションを実行します。セッションがどちら側のために作成
+されたかに応じて、クライアントからの受信接続を処理するか、サーバーへ接続要求を
+送信します。
-wolfSSH_SFTP_accept()
+**引数**
+- `ssh` - 接続に使用する wolfSSH セッションへのポインター
+**戻り値**
-## プロトコル関係
+- 成功時は `WS_SUCCESS`
+- 失敗時は負のエラーコード
+**関連項目**
+- `wolfSSH_SFTP_accept()`
+- `wolfSSH_SFTP_connect()`
-### wolfSSH_SFTP_RealPath()
+### wolfSSH_SFTP_SetDefaultPath()
+```c
+#include
-**用法**
+int wolfSSH_SFTP_SetDefaultPath(WOLFSSH* ssh, const char* path);
+```
**説明**
-REALPATHパケットを相手に送信し、相手から取得したファイル名を返します。
+SFTP セッションのデフォルト(開始)ディレクトリを設定します。サーバー側では、これは
+相対パスを解決する際の基準となるベースディレクトリです。
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `path` - 設定するデフォルトパス
**戻り値**
-成功時にはWS_SFTPNAME構造体へのポインターを返します。エラー発生時にはNULLを返します。
+- `WS_SUCCESS`
+- `WS_BAD_ARGUMENT`
+## プロトコルレベル関数
-**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
-**dir** - 実際のパスを取得するためのディレクトリ/ファイル名
+### wolfSSH_SFTP_RealPath()
-```
+```c
#include
-WS_SFTPNAME* wolfSSH_SFTP_RealPath(WOLFSSH* ssh , char* dir);
-```
-**使用例**
-
-```
-WOLFSSH* ssh ;
-//set up ssh and do sftp connections
-...
-
-if (wolfSSH_SFTP_read( ssh ) != WS_SUCCESS) {
-//handle error case
-}
+WS_SFTPNAME* wolfSSH_SFTP_RealPath(WOLFSSH* ssh, char* dir);
```
-**関連項目**
-
-wolfSSH_SFTP_accept()
-
-wolfSSH_SFTP_connect()
-
-
-
-### wolfSSH_SFTP_Close()
-
-
-
-**用法**
-
**説明**
-相手にクローズパケットを送信します。
-
-
-**戻り値**
-
-**WS_SUCCESS** - 成功
+ピアに REALPATH 要求を送信し、ファイルまたはディレクトリの正規名を返します。返された
+`WS_SFTPNAME` は wolfSSH_SFTPNAME_free() で解放する必要があります。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
-
-**handle** - 閉じようとするハンドル
-
-**handleSz** - ハンドルバッファーのサイズ
-
+- `ssh` - wolfSSH セッションへのポインター
+- `dir` - 解決するファイル名またはディレクトリ名
-```
-#include
-int wolfSSH_SFTP_Close(WOLFSSH* ssh , byte* handle , word32 handleSz );
-```
-**使用例**
-
-```
-WOLFSSH* ssh;
-byte handle[HANDLE_SIZE];
-word32 handleSz = HANDLE_SIZE;
-
-//set up ssh and do sftp connections
-...
+**戻り値**
-if (wolfSSH_SFTP_Close(ssh, handle, handleSz) != WS_SUCCESS) {
-//handle error case
-}
-```
+- 成功時は `WS_SFTPNAME` 構造体へのポインター
+- エラー時は `NULL`
**関連項目**
-wolfSSH_SFTP_accept()
-
-wolfSSH_SFTP_connect()
+- `wolfSSH_SFTPNAME_free()`
+### wolfSSH_SFTP_Close()
-### wolfSSH_SFTP_Open()
+```c
+#include
-**用法**
+int wolfSSH_SFTP_Close(WOLFSSH* ssh, byte* handle, word32 handleSz);
+```
**説明**
-Openパケットを相手に送信します。結果を受け取るバッファサイズのをhandleSzで指定し、相手から受け取ったハンドルをバッファに格納します。
-
-
-openの理由として取り得る値は:
+指定されたファイルハンドルについて、ピアにクローズ要求を送信します。このハンドルは、
+以前の wolfSSH_SFTP_Open() の呼び出しから取得したものです。
-WOLFSSH_FXF_READ
-
-WOLFSSH_FXF_WRITE
-
-WOLFSSH_FXF_APPEND
-
-WOLFSSH_FXF_CREAT
-
-WOLFSSH_FXF_TRUNC
-
-WOLFSSH_FXF_EXCL
+**引数**
+- `ssh` - wolfSSH セッションへのポインター
+- `handle` - クローズするファイルハンドル
+- `handleSz` - ハンドルバッファのサイズ
**戻り値**
-**WS_SUCCESS** - 成功
-
-**引数**
+- `WS_SUCCESS`
+- 失敗時は負のエラーコード
-**ssh** – WOLFSSHオブジェクトへのポインター
-
-**dir** - 開くファイルの名前
-
-**reason** - ファイルを開く理由
+**関連項目**
-**atr** - ファイルの初期属性
+- `wolfSSH_SFTP_Open()`
-**handle** - 結果として得られるハンドル
+### wolfSSH_SFTP_Open()
-**handleSz** - ハンドル用バッファのサイズ
-```
+```c
#include
-int wolfSSH_SFTP_Open(WOLFSSH* ssh , char* dir , word32 reason, WS_SFTP_FILEATRB* atr , byte* handle , word32* handleSz);
-```
-
-**使用例**
-
-
+int wolfSSH_SFTP_Open(WOLFSSH* ssh, char* dir, word32 reason,
+ WS_SFTP_FILEATRB* atr, byte* handle, word32* handleSz);
```
-WOLFSSH* ssh ;
-char name[NAME_SIZE];
-byte handle[HANDLE_SIZE];
-word32 handleSz = HANDLE_SIZE;
-WS_SFTP_FILEATRB atr;
-
-//set up ssh and do sftp connections
-...
-
-if (wolfSSH_SFTP_Open( ssh , name , WOLFSSH_FXF_WRITE | WOLFSSH_FXF_APPEND | WOLFSSH_FXF_CREAT , &atr , handle , &handleSz ) != WS_SUCCESS) {
-//handle error case
-}
-```
-
-**関連項目**
-
-wolfSSH_SFTP_accept()
-
-wolfSSH_SFTP_connect()
-
-
-### wolfSSH_SFTP_SendReadPacket()
-
-**用法**
**説明**
-readパケットを相手に送信します。ハンドル用のバッファは直前のwolfSSH_SFTP_Openで得られたハンドルを格納していなければなりません。読みだすことができたデータはoutバッファに格納されます。
-
-
-**戻り値**
-
-成功時には読みだしたデータ数を返します。エラー発生時には、負の値を返します。
+`dir` で指定された名前のファイルについて、ピアにオープン要求を送信します。成功時、
+得られたファイルハンドルが `handle` に格納され、そのサイズが `handleSz` に書き込ま
+れます。`reason` 引数はオープンフラグのビットマスクで、`WOLFSSH_FXF_READ`、
+`WOLFSSH_FXF_WRITE`、`WOLFSSH_FXF_APPEND`、`WOLFSSH_FXF_CREAT`、`WOLFSSH_FXF_TRUNC`、
+`WOLFSSH_FXF_EXCL` のいずれかです。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
-
-**handle** - 読みだそうとするハンドル
+- `ssh` - wolfSSH セッションへのポインター
+- `dir` - オープンするファイルの名前
+- `reason` - オープンフラグのビットマスク(上記を参照)
+- `atr` - 初期ファイル属性
+- `handle` - 得られたファイルハンドルの出力バッファ
+- `handleSz` - 入力時はバッファのサイズ、出力時はハンドルのサイズが設定される
-**handleSz** - ハンドルバッファのサイズ
+**戻り値**
-**ofst** - 読み出しを開始するオフセット
+- `WS_SUCCESS`
+- 失敗時は負のエラーコード
-**out** - 読み出した結果を格納するバッファ
+**関連項目**
-**outSz** - バッファサイズ
+- `wolfSSH_SFTP_Close()`
+- `wolfSSH_SFTP_SendReadPacket()`
+- `wolfSSH_SFTP_SendWritePacket()`
+### wolfSSH_SFTP_SendReadPacket()
-```
+```c
#include
-int wolfSSH_SFTP_SendReadPacket(WOLFSSH* ssh , byte* handle , word32 handleSz , word64 ofst , byte* out , word32 outSz );
-```
-
-
-
-**使用例**
+int wolfSSH_SFTP_SendReadPacket(WOLFSSH* ssh, byte* handle,
+ word32 handleSz, const word32* ofst, byte* out, word32 outSz);
```
-WOLFSSH* ssh;
-byte handle[HANDLE_SIZE];
-word32 handleSz = HANDLE_SIZE;
-byte out[OUT_SIZE];
-word32 outSz = OUT_SIZE;
-word32 ofst = 0;
-int ret;
-
-//set up ssh and do sftp connections
-...
-//get handle with wolfSSH_SFTP_Open()
-
-if ((ret = wolfSSH_SFTP_SendReadPacket(ssh, handle, handleSz, ofst, out, outSz)) < 0) {
-//handle error case
-}
-//ret holds the number of bytes placed into out buffer
-```
-
-**関連項目**
-
-wolfSSH_SFTP_SendWritePacket()
-
-wolfSSH_SFTP_Open()
-
-
-### wolfSSH_SFTP_SendWritePacket()
-
-
-
-**用法**
**説明**
-writeパケットを相手に送信します。ハンドル用のバッファは直前のwolfSSH_SFTP_Openで得られたハンドルを格納していなければなりません。
-
-**戻り値**
-
-成功時には書き込んだサイズを返します。エラー発生時には負の値を返します。
+`handle`(wolfSSH_SFTP_Open() から取得)が参照するファイルについて、ピアに読み取り
+要求を送信します。読み取られたバイトは `out` バッファに格納されます。`ofst` 引数は、
+読み取りを開始するファイルオフセットを指します。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
-
-**handle** - 書き込もうとするハンドル
-
-**handleSz** - ハンドルバッファのサイズ
-
-**ofst** - 書き込みを開始するオフセット
-
-**out** - 書き込むデータを保持するバッファ
-
-**outSz** - バッファサイズ
-
-
-```
-#include
-int wolfSSH_SFTP_SendWritePacket(WOLFSSH* ssh, byte* handle, word32 handleSz, word64 ofst, byte* out, word32 outSz);
-```
-
-**使用例**
+- `ssh` - wolfSSH セッションへのポインター
+- `handle` - 読み取り元のファイルハンドル
+- `handleSz` - ハンドルバッファのサイズ
+- `ofst` - 読み取りを開始するファイルオフセットへのポインター
+- `out` - 読み取ったデータを保持するバッファ
+- `outSz` - 出力バッファのサイズ
+**戻り値**
-```
-WOLFSSH* ssh;
-byte handle[HANDLE_SIZE];
-word32 handleSz = HANDLE_SIZE;
-byte out[OUT_SIZE];
-word32 outSz = OUT_SIZE;
-word32 ofst = 0;
-int ret;
-
-//set up ssh and do sftp connections
-...
-//get handle with wolfSSH_SFTP_Open()
-
-if ((ret = wolfSSH_SFTP_SendWritePacket(ssh, handle, handleSz, ofst, out, outSz)) < 0) {
-//handle error case
-}
-//ret holds the number of bytes written
-```
+- 0 以上 - 成功時に読み取ったバイト数
+- 失敗時は負のエラーコード
**関連項目**
-wolfSSH_SFTP_SendReadPacket()
+- `wolfSSH_SFTP_SendWritePacket()`
+- `wolfSSH_SFTP_Open()`
-wolfSSH_SFTP_Open()
+### wolfSSH_SFTP_SendWritePacket()
-### wolfSSH_SFTP_STAT()
-
+```c
+#include
-**用法**
+int wolfSSH_SFTP_SendWritePacket(WOLFSSH* ssh, byte* handle,
+ word32 handleSz, const word32* ofst, byte* out, word32 outSz);
+```
**説明**
-STATパケットを相手に送信します。ファイルあるいはディレクトリの属性を取得します。ファイルが存在しないかあるいは属性が存在しない場合は相手はエラーを返します。
+`handle`(wolfSSH_SFTP_Open() から取得)が参照するファイルについて、ピアに書き込み
+要求を送信し、`out` バッファの内容を書き込みます。`ofst` 引数は、書き込みを行う
+ファイルオフセットを指します。
+**引数**
+
+- `ssh` - wolfSSH セッションへのポインター
+- `handle` - 書き込み先のファイルハンドル
+- `handleSz` - ハンドルバッファのサイズ
+- `ofst` - 書き込みを開始するファイルオフセットへのポインター
+- `out` - ピアに送信するデータのバッファ
+- `outSz` - バッファのサイズ
**戻り値**
-**WS_SUCCESS** - 成功
+- 0 以上 - 成功時に書き込んだバイト数
+- 失敗時は負のエラーコード
-**引数**
+**関連項目**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `wolfSSH_SFTP_SendReadPacket()`
+- `wolfSSH_SFTP_Open()`
-**dir** - NULLターミネートされたファイルあるいはディレクトリ名
+### wolfSSH_SFTP_STAT()
-**atr** - 属性値がこの構造体に返却されます
-```
+```c
#include
-int wolfSSH_SFTP_STAT(WOLFSSH* ssh , char* dir, WS_SFTP_FILEATRB* atr);
-```
-**使用例**
+int wolfSSH_SFTP_STAT(WOLFSSH* ssh, char* dir, WS_SFTP_FILEATRB* atr);
```
-WOLFSSH* ssh;
-byte name[NAME_SIZE];
-int ret;
-WS_SFTP_FILEATRB atr;
-//set up ssh and do sftp connections
-...
+**説明**
-if ((ret = wolfSSH_SFTP_STAT(ssh, name, &atr)) < 0) {
-//handle error case
-}
-```
+ファイルまたはディレクトリの属性を取得するために、ピアに STAT 要求を送信します。
+シンボリックリンクをたどります。対象が存在しない場合、ピアはエラーを返し、この関数は
+エラー値を返します。
-**関連項目**
+**引数**
-wolfSSH_SFTP_LSTAT()
+- `ssh` - wolfSSH セッションへのポインター
+- `dir` - ファイルまたはディレクトリの NULL 終端の名前
+- `atr` - 得られた属性を受け取る構造体
-wolfSSH_SFTP_connect()
+**戻り値**
+- `WS_SUCCESS`
+- 失敗時は負のエラーコード
-### wolfSSH_SFTP_LSTAT()
+**関連項目**
-**用法**
+- `wolfSSH_SFTP_LSTAT()`
+- `wolfSSH_SFTP_SetSTAT()`
-**説明**
+### wolfSSH_SFTP_LSTAT()
-LSTATパケットを相手に送信します。ファイルあるいはディレクトリの属性値を取得します。STATパケットがシンボリックリンクをたどりませんがLSTATパケットはシンボリックリンクをたどって処理します。ファイルが存在しないかあるいは属性が存在しない場合は相手はエラーを返します。
+```c
+#include
+int wolfSSH_SFTP_LSTAT(WOLFSSH* ssh, char* dir, WS_SFTP_FILEATRB* atr);
+```
-**戻り値**
+**説明**
-**WS_SUCCESS** - 成功
+ファイルまたはディレクトリの属性を取得するために、ピアに LSTAT 要求を送信します。
+wolfSSH_SFTP_STAT() とは異なり、LSTAT はシンボリックリンクをたどらず、リンク自体の
+属性を返します。対象が存在しない場合、ピアはエラーを返し、この関数はエラー値を
+返します。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
-
-**dir** - NULLターミネートされたファイルあるいはディレクトリ名
-
-**atr** - 属性値がこの構造体に返却されます
+- `ssh` - wolfSSH セッションへのポインター
+- `dir` - ファイルまたはディレクトリの NULL 終端の名前
+- `atr` - 得られた属性を受け取る構造体
+**戻り値**
-```
-#include
-int wolfSSH_SFTP_LSTAT(WOLFSSH* ssh, char* dir, WS_SFTP_FILEATRB* atr);
-```
-**使用例**
-```
-WOLFSSH* ssh;
-byte name[NAME_SIZE];
-int ret;
-WS_SFTP_FILEATRB atr;
-
-//set up ssh and do sftp connections
-...
-
-if ((ret = wolfSSH_SFTP_LSTAT(ssh, name, &atr)) < 0) {
-//handle error case
-}
-```
+- `WS_SUCCESS`
+- 失敗時は負のエラーコード
**関連項目**
-wolfSSH_SFTP_STAT()
-
-wolfSSH_SFTP_connect()
+- `wolfSSH_SFTP_STAT()`
+- `wolfSSH_SFTP_SetSTAT()`
+### wolfSSH_SFTP_SetSTAT()
-### wolfSSH_SFTPNAME_free()
+```c
+#include
-**用法**
+int wolfSSH_SFTP_SetSTAT(WOLFSSH* ssh, char* dir, WS_SFTP_FILEATRB* atr);
+```
**説明**
-単一のWS_SFTPNAMEノードを解放します。指定したノードがノードリストの途中のものであった場合には、リストは壊れます。
-
-**戻り値**
-
-なし
+`atr` の属性(例えばパーミッション、サイズ、タイムスタンプ)を指定されたファイル
+またはディレクトリに適用するために、ピアに SETSTAT 要求を送信します。
**引数**
-**name** - 解放されるノード
-
-
+- `ssh` - wolfSSH セッションへのポインター
+- `dir` - ファイルまたはディレクトリの NULL 終端の名前
+- `atr` - 適用する属性
+**戻り値**
-```
-#include
-void wolfSSH_SFTPNAME_free(WS_SFTPNAME* name );
-```
-**使用例**
-
-```
-WOLFSSH* ssh;
-WS_SFTPNAME* name;
-
-//set up ssh and do sftp connections
-...
-name = wolfSSH_SFTP_RealPath(ssh, path);
-if (name != NULL) {
-wolfSSH_SFTPNAME_free(name);
-}
-```
+- `WS_SUCCESS`
+- 失敗時は負のエラーコード
**関連項目**
-wolfSSH_SFTPNAME_list_free()
-
-
-### wolfSSH_SFTPNAME_list_free()
+- `wolfSSH_SFTP_STAT()`
+### wolfSSH_SFTPNAME_free()
+```c
+#include
-**用法**
+void wolfSSH_SFTPNAME_free(WS_SFTPNAME* n);
+```
**説明**
-リスト中の全WS_SFTPNAMEノードを解放します。
+単一の `WS_SFTPNAME` ノードを解放します。ノードがリストの途中にある場合、それを解放
+するとリストが壊れます。リスト全体を解放するには wolfSSH_SFTPNAME_list_free() を使用
+してください。
+
+**引数**
+- `n` - 解放する `WS_SFTPNAME` ノード
**戻り値**
なし
-**引数**
-
-**name** - 解放するリストの先頭
+**関連項目**
+- `wolfSSH_SFTPNAME_list_free()`
+### wolfSSH_SFTPNAME_list_free()
-```
+```c
#include
-void wolfSSH_SFTPNAME_list_free(WS_SFTPNMAE* name );
-```
-
-**使用例**
+void wolfSSH_SFTPNAME_list_free(WS_SFTPNAME* n);
```
-WOLFSSH* ssh;
-WS_SFTPNAME* name;
-
-//set up ssh and do sftp connections
-...
-
-name = wolfSSH_SFTP_LS(ssh, path);
-if (name != NULL) {
-wolfSSH_SFTPNAME_list_free(name);
-}
-```
-
-**関連項目**
-
-wolfSSH_SFTPNAME_free()
-
-
-## Reget/Reput 機能
-
-### wolfSSH_SFTP_SaveOfst()
-
-
-
-**用法**
**説明**
-get あるいはputコマンドが中断された場合のオフセットを保存します。オフセットはwolfSSH_SFTP_GetOfstで復元できます。
-
-
-**戻り値**
-**WS_SUCCESS** - 成功
+wolfSSH_SFTP_LS() が返すリストのような、`WS_SFTPNAME` ノードのリスト全体を解放し
+ます。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `n` - 解放する `WS_SFTPNAME` リストの先頭
-**from** - NULL終端されたソースパスを示す文字列
-
-**to** - NULL終端されたデスティネーションパスを示す文字列
-
-**ofst** - 記憶されるべきファイルのオフセット
-
-
-
-```
-#include
-int wolfSSH_SFTP_SaveOfst(WOLFSSH* ssh , char* from , char*
-to ,
-word64 ofst );
-```
-
-**使用例**
-
-```
-WOLFSSH* ssh;
-char from[NAME_SZ];
-char to[NAME_SZ];
-word64 ofst;
-
-//set up ssh and do sftp connections
-...
+**戻り値**
-if (wolfSSH_SFTP_SaveOfst(ssh, from, to, ofst) != WS_SUCCESS) {
-//handle error case
-}
-```
+なし
**関連項目**
-wolfSSH_SFTP_GetOfst()
+- `wolfSSH_SFTPNAME_free()`
-wolfSSH_SFTP_Interrupt()
+## Reget / Reput 関数
+### wolfSSH_SFTP_SaveOfst()
-### wolfSSH_SFTP_GetOfst()
+```c
+#include
-**用法**
+int wolfSSH_SFTP_SaveOfst(WOLFSSH* ssh, char* frm, char* to,
+ const word32* ofst);
+```
**説明**
-get あるいはputコマンドが中断された場合のオフセットを取得します。
+中断された get または put の転送オフセットを、ソース(`frm`)と宛先(`to`)のパスを
+キーとして保存します。保存されたオフセットは、後で wolfSSH_SFTP_GetOfst() により
+取得できます。
+**引数**
-**戻り値**
+- `ssh` - wolfSSH セッションへのポインター
+- `frm` - NULL 終端のソースパス
+- `to` - NULL 終端の宛先パス
+- `ofst` - 保存するオフセットへのポインター
-成功時にはオフセット値を返します。オフセットが保存されていない場合には0が返されます。
+**戻り値**
+- `WS_SUCCESS`
+- 失敗時は負のエラーコード
-**引数**
+**関連項目**
-**ssh** – WOLFSSHオブジェクトへのポインター
+- `wolfSSH_SFTP_GetOfst()`
+- `wolfSSH_SFTP_Interrupt()`
-**from** - NULL終端されたソースパスを示す文字列
+### wolfSSH_SFTP_GetOfst()
-**to** - NULL終端されたデスティネーションパスを示す文字列
-```
+```c
#include
-word64 wolfSSH_SFTP_GetOfst(WOLFSSH* ssh, char* from, char* to);
-```
-
-**使用例**
+int wolfSSH_SFTP_GetOfst(WOLFSSH* ssh, char* frm, char* to,
+ word32* ofst);
```
-WOLFSSH* ssh;
-char from[NAME_SZ];
-char to[NAME_SZ];
-word64 ofst;
-
-//set up ssh and do sftp connections
-...
-ofst = wolfSSH_SFTP_GetOfst(ssh, from, to);
-//start reading/writing from ofst
-```
+**説明**
-**関連項目**
+中断された get または put について、ソース(`frm`)と宛先(`to`)のパスをキーとして
+保存された転送オフセットを取得し、`ofst` に書き込みます。保存されたオフセットが
+見つからない場合、`ofst` は 0 に設定されます。
-wolfSSH_SFTP_SaveOfst()
+**引数**
-wolfSSH_SFTP_Interrup()
+- `ssh` - wolfSSH セッションへのポインター
+- `frm` - NULL 終端のソースパス
+- `to` - NULL 終端の宛先パス
+- `ofst` - 保存されたオフセットの出力
+**戻り値**
+- `WS_SUCCESS`
+- 失敗時は負のエラーコード
-### wolfSSH_SFTP_ClearOfst()
+**関連項目**
+- `wolfSSH_SFTP_SaveOfst()`
+- `wolfSSH_SFTP_Interrupt()`
+### wolfSSH_SFTP_ClearOfst()
-**用法**
-**説明**
-保存されている全オフセット値をクリアします。
+```c
+#include
+int wolfSSH_SFTP_ClearOfst(WOLFSSH* ssh);
+```
-**戻り値**
+**説明**
-**WS_SUCCESS** - 成功
+セッションについて保存されているすべての転送オフセットをクリアします。
**引数**
-**ssh** – WOLFSSHオブジェクトへのポインター