Win SSPI(Schannel)インターフェースでTLS接続を確立したい。
私は暗号化と復号化のプロセスの段階にあり、本当に混乱していることに気づきました -メモリ割り当てを管理する責任があるのは誰ですか? :
- rempte パーティにデータ パケットを送信する場合は、4 つのバッファーを含むバッファーを使用して EncryptMessage 関数を呼び出して、データを暗号化する必要があります。ヘッダーへのバッファー、データへのバッファーは暗号化する必要があり、トレーラーへのバッファー、タイプ SECBUFFER_EMPTY の 4 番目のバッファー (これが何に使用されるのか理解していないと言わざるを得ませんが、MSDNには追加するように書かれています)。EncryptMessage 関数が呼び出されると、暗号化されたデータはどこにあるのでしょうか? 入力バッファとして送信したデータを上書きしますか? もしそうなら、暗号化されたデータが送信した元のバッファのサイズよりも大きすぎる場合はどうなりますか? EncrypteMessage は追加のメモリを割り当て、それを元のバッファに結合しますか?
- データを受信すると、受信した暗号化されたバイトのストリームも取得し、暗号化されたデータを DecryptMessage 関数に送信する必要があります。私の質問は再び - SSPI は復号化されたデータをどこで見つけますか? また、復号化データが元のストリームよりも短い場合、割り当てられた残りのバイトを解放する責任は誰にありますか?
- メッセージを復号化すると、関数がタイプ SECBUFFER_EXTRA のバッファを返すことがあります。MSDNには、この余分なバッファの意味が書かれています。繰り返しになりますが、誰がこのメモリの場所を割り当てているのか完全にはわかりません。それは、私が送信した元のストリーム内の任意の場所へのポインタですか?
SSPIに精通している人だけが私に答えることができるかどうかはわかりません.Microsoftの実装をよく知っている人かもしれません.
SSPIが管理する内部プロセスとは何かを説明する回答、または部分的な回答をいただければ幸いです。
ありがとう!