openssl3.2 - note - Decoders and Encoders with OpenSSL

openssl3.2 - note - Decoders and Encoders with OpenSSL

概述

看了官方文档 Decoders and Encoders with OpenSSL, 做个笔记

笔记

解码器 - 将openssl对象的数据转换为用户面向字节的数据
编码器 - 将用户面向字节的数据转换为openssl对象数据.

编码器和解码器都要创建上下文, 才能使用.

OSSL_DECODER_CTX *OSSL_DECODER_CTX_new(void);

OSSL_DECODER_CTX *
OSSL_DECODER_CTX_new_for_pkey(EVP_PKEY **pkey,
                              const char *input_type,
                              const char *input_structure,
                              const char *keytype, int selection,
                              OSSL_LIB_CTX *libctx, const char *propquery);

OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new(void);
OSSL_ENCODER_CTX *OSSL_ENCODER_CTX_new_for_pkey(const EVP_PKEY *pkey,
                                                int selection,
                                                const char *output_type,
                                                const char *output_struct,
                                                const char *propquery);

解码器状态

  • 如果能识别输入的数据格式, 进入下一个解码器.
  • 如果不能识别输入的数据格式, 重新定位到输入数据头部, 尝试用剩下的解码器来解码.
  • 如果读取字节输入时发生致命错误, 就退出处理.

编码器状态
编码器比解码器更具确定性. 只有成功,失败2种状态.

OSSL_PARAM
如果要读写什么内容, 干什么活, 都通过相关接口设置 OSSL_PARAM(没找到官方例子代码, 参数设置都没用OSSL_PARAM; 但是在EVP_PKEY的实现, 能看到需要对上下文设置OSSL_PARAM)

编码器/解码器的调用链

在这里插入图片描述

OSSL_STORE

针对输入的数据, 生成一个回溯解码器的链条(即使数据是未知的).
这样就可以用已知的解码器自动去尝试解码用户(或对象带的附加数据)的输入.
如果回溯解码器链条上的所有解码器都处理不了(不认识)输入的数据, 才失败.

编码器/解码器的名称和属性

每个编码器和解码器都有确定的名称和属性, 表明编码/解码器的功能/输入/输出.

OSSL_FUNC_decoder_freectx_fn

OSSL_FUNC_decoder_freectx_fn是解码器函数类型.
没看到谁给openssl的解码器赋值…

OSSL_FUNC_encoder_encode_fn

OSSL_FUNC_encoder_encode_fn是编码器函数类型
编码器的赋值都是用宏来弄的

// e.g. below
MAKE_BLOB_ENCODER(ec, ec, PUBLIC_KEY);

官方文档

file:///D:/3rd_prj/crypt/openssl-3.2.0/doc/html/man7/provider-decoder.html
file:///D:/3rd_prj/crypt/openssl-3.2.0/doc/html/man7/provider-encoder.html
file:///D:/3rd_prj/crypt/openssl-3.2.0/doc/html/man7/provider-object.html

END

相关推荐

  1. openssl源文件下载地址、arm交叉编译arm32

    2024-03-16 13:30:03       39 阅读
  2. openssh

    2024-03-16 13:30:03       51 阅读
  3. Openssh

    2024-03-16 13:30:03       33 阅读
  4. Linux:升级OpenSSLOpenSSH

    2024-03-16 13:30:03       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-16 13:30:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-16 13:30:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-16 13:30:03       82 阅读
  4. Python语言-面向对象

    2024-03-16 13:30:03       91 阅读

热门阅读

  1. 关系型数据库和非关系型数据库

    2024-03-16 13:30:03       39 阅读
  2. 说说JVM的class文件(二)

    2024-03-16 13:30:03       39 阅读
  3. Lua-掌握Lua语言基础1

    2024-03-16 13:30:03       30 阅读
  4. redis的安装与string类型

    2024-03-16 13:30:03       32 阅读
  5. 关于static

    2024-03-16 13:30:03       45 阅读
  6. Tomcat数据源笔记

    2024-03-16 13:30:03       41 阅读
  7. Edge浏览器可以多开的几种方法

    2024-03-16 13:30:03       37 阅读
  8. Nginx 报错 504 Gateway Time-out 的解决方法

    2024-03-16 13:30:03       36 阅读