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