我想通过 Win SSPI(Schannel) 接口建立 TLS 连接。
我正处于加密 - 解密过程的阶段,我发现自己真的很困惑 -谁负责管理内存分配?:
- 当我想向rempte方发送数据包时,我必须先通过调用EncryptMessage函数来加密数据,该函数包含4个缓冲区:缓冲区到标题,缓冲区到数据应该加密,缓冲区到拖车,和类型为 SECBUFFER_EMPTY 的第四个缓冲区(我必须说我不明白它的用途,但在MSDN中被写入添加它。)。现在调用 EncryptMessage 函数时,加密数据在哪里?它会覆盖我作为输入缓冲区发送的数据吗?如果是这样,如果加密数据与我发送的原始缓冲区的大小相比太大,会发生什么?EncrypteMessage 是否分配额外的内存并将其加入原始缓冲区?
- 当我收到数据时,我还收到了一个加密字节流,我必须将加密数据发送到 DecryptMessage 函数。我的问题又是 - SSPI 在哪里找到解密的数据?如果解密数据比原始流短,谁负责释放分配的剩余字节?
- 当我解密消息时,该函数有时会返回 SECBUFFER_EXTRA 类型的缓冲区。在MSDN中写了这个额外缓冲区的含义。再一次,我不完全明白谁在分配这个内存位置,它只是指向我发送的原始流中任何位置的指针吗?
我不确定是否只有熟悉 SSPI 的人才能回答我,也许是熟悉 Microsoft 实现的人。
我将不胜感激任何答案,甚至部分答案将向我解释 SSPI 管理的内部流程是什么。
谢谢!