weixin_37661298 2024-06-04 12:25 采纳率: 0%
浏览 43

openssl3.0 自定义一个provider 带rand digest 等功能

怎么写一个openssl 3.0 版本的 provider,provider可以是空壳子,具体算法,可以是空的。

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-06-04 12:25
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    要创建一个OpenSSL 3.0版本的自定义provider,并为它添加随机数生成(rand)和摘要(digest)等功能,可以按照以下步骤进行:

    1. 定义Provider的入口点函数:每个Provider模块必须有一个入口点函数,这个函数是OpenSSL Core与Provider模块交互的接口。这个函数通常命名为OSSL_provider_init,并且需要遵循特定的签名。

    2. 注册Provider:在OSSL_provider_init函数中,你需要注册Provider,包括设置Provider的ID、名称、版本等信息,并注册Provider支持的算法。

    3. 实现随机数生成功能:在Provider中实现随机数生成功能,需要定义一个RAND_METHOD结构体,并实现其中的bytes函数来生成随机数。

    4. 实现摘要功能:实现摘要功能需要定义一个EVP_MD结构体,并实现摘要算法的核心函数,如initupdatefinal等。

    5. 编译和加载Provider:将Provider编译成动态链接库(.so.dll文件),并在OpenSSL应用程序中通过-provider参数加载。

    下面是一些代码示例和参考资料:

    代码示例

    入口点函数定义(参考[^5^]):

    int OSSL_provider_init(const OSSL_PROVIDER *provider,
                           const OSSL_DISPATCH *in,
                           const OSSL_DISPATCH **out,
                           void **provider_ctx);
    

    随机数生成方法(参考[^5^]):

    static int myrand_bytes(unsigned char *buf, size_t num) {
        // 实现随机数生成逻辑
        return 1;
    }
    
    const RAND_METHOD rand_method = {
        NULL, // seed
        myrand_bytes, // bytes
        NULL, // cleanup
        NULL, // add
        NULL, // pseudorand
        myrand_status // status
    };
    

    注册Provider(参考[^4^]):

    static int OSSL_provider_init(const OSSL_PROVIDER *provider,
                                 const OSSL_DISPATCH *in,
                                 const OSSL_DISPATCH **out,
                                 void **provider_ctx) {
        // 收集由Core提供的函数
        // ...
        // 注册Provider支持的算法
        // ...
        return 1;
    }
    

    参考资料

    1. OpenSSL 3.0自定义provider实现openssl engine引擎 实现rand随机数[^5^]
    2. OpenSSL 3.0设计文档OpenSSL 3.0.0 设计(二)|Core 和 Provider 设计[^4^]
    3. OpenSSL中文手册实现Engine示例_OpenSSL 中文手册[^2^]

    请注意,这些代码示例和参考资料提供了一个基本的框架和思路,具体的算法实现需要根据你的具体需求来完成。如果你需要一个空壳子的provider,你可以在RAND_METHODEVP_MD中实现空函数,但在实际使用中,你需要填充这些函数以提供具体的功能。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月4日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见