【问题标题】:OpenSSL Bio chains: Clarrification on documentationOpenSSL Bio 链:文档说明
【发布时间】:2010-04-21 12:22:55
【问题描述】:

Openssl 内存 BIO 接收器的文档是 here

我正在创建一个 BIO 链来将二进制字符串转换为 base64 字符串。源/接收器始终是一个内存位置,这使我能够保持相同的链环绕。但是,当我写入数据时,数据(应该)进入由 OpenSSL 管理的内存缓冲区,并且当从链中读取时,它应该来自用户提供的内存缓冲区。

BIO_set_mem_buf() 是用于设置用户提供的缓冲区的函数,我将在使用 new 管理内存时设置 BIO_NOCLOSE 属性。现在,为了使用相同的链进行写入,我需要将内存 bio 更改为管理自己的内存。我的问题是: “在用户提供自定义缓冲区后,BIO_reset() 是否会将其改回管理自己的内存?对于我想做的事情使用单链是否有任何性能影响?”

【问题讨论】:

    标签: c++ formatting openssl


    【解决方案1】:

    我不确定你是否正确,但这是我通常使用 OpenSSL 的方式:

    我认为 OpenSSL 的 BIO 结构是某种不透明流。

    无论我必须向 OpenSSL 传递(或从中获取)什么数据,它通常都存储在我自己的自定义数据结构中,然后复制到 OpenSSL BIO 或从 OpenSSL BIO 复制以进行处理。

    正如您所说,OpenSSL 的文档在某些方面并不是很清楚。由于我们无法合理地对其内部行为做出假设,因此我相信这种做事方式更安全。

    但是,如果您需要高性能并希望避免 无用 副本(这是合法的),您最好咨询OpenSSL Users mailing-list。他们的回答会很准确,我相信只有他们才能回答文档中没有准确描述的问题。

    【讨论】:

    • 我通过在线程本地内存中保留 BIO mem sink 和 bio base64 过滤器的副本来解决这个问题。在解码时,我创建了一个新的 bio mem,其中包含由我的应用程序管理的缓冲区。
    猜你喜欢
    • 2019-03-26
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2012-08-28
    相关资源
    最近更新 更多