openssl ans1定义的实体

由于openssl中的ASN1的结构是通过宏来定义的,导致我们经常找不到他的结构在哪里,通过阅读rfc,并且对照OPENSSL,发现OPENSSL中的结构基本是按照相关rfc中的名称,在openssl中进行搜索,就能找到具体的定义了。

搜索这两个结构,基本就能搜索出对应的结构,这些定义在asn1t.h中

ASN1_SEQUENCE

ASN1_SEQUENCE_ref()

  1. pkcs1中定义的公私钥
    某个类的ans1的结构查看rfc,openssl中的asn1结构和rfc中的名称一致
    pkcs1 rfc
    pkcs1公钥私钥 对应
    RSAPrivateKey
    RSAPublicKey 定义在rsa_asn1.c中
  2. pkcs8中定义的私钥
    rfc pkcs8
    https://www.rfc-editor.org/rfc/rfc5208#section-5

rfc中的名称为PrivateKeyInfo 还有一种EncryptedPrivateKeyInfo

在openssl中搜索PrivateKeyInfo 可以搜索,对应的是PKCS8_PRIV_KEY_INFO

定义在ossl_type.h中

  1. x509的定义

x509 rfc

https://www.rfc-editor.org/rfc/rfc5280#section-3.1

可以找到证书的定义,定义在x_x509.c中

ASN1_SEQUENCE_ref(X509, x509_cb) = {

ASN1_EMBED(X509, cert_info, X509_CINF),

ASN1_EMBED(X509, sig_alg, X509_ALGOR),

ASN1_EMBED(X509, signature, ASN1_BIT_STRING)

} ASN1_SEQUENCE_END_ref(X509, X509)

  1. pkcs7的定义
    https://www.rfc-editor.org/rfc/rfc2315

openssl定义在pk7_asn1.c中

ASN1_NDEF_SEQUENCE_cb(PKCS7, pk7_cb) = {

ASN1_SIMPLE(PKCS7, type, ASN1_OBJECT),

ASN1_ADB_OBJECT(PKCS7)

}ASN1_NDEF_SEQUENCE_END_cb(PKCS7, PKCS7)

  1. sm2密文的定义

    sm2密文封装

    定义在sm2_crypt.c中

    ASN1_SEQUENCE(SM2_Ciphertext) = {

    ASN1_SIMPLE(SM2_Ciphertext, C1x, BIGNUM),

    ASN1_SIMPLE(SM2_Ciphertext, C1y, BIGNUM),

    ASN1_SIMPLE(SM2_Ciphertext, C3, ASN1_OCTET_STRING),

    ASN1_SIMPLE(SM2_Ciphertext, C2, ASN1_OCTET_STRING),

    } ASN1_SEQUENCE_END(SM2_Ciphertext)

  2. sm2签名的定义

sm2签名

看sm2_sign.c中,其实生成了ECDSA_SIG,搜索,可得

定义在ec_asn1.c中

ASN1_SEQUENCE(ECDSA_SIG) = {

ASN1_SIMPLE(ECDSA_SIG, r, CBIGNUM),

ASN1_SIMPLE(ECDSA_SIG, s, CBIGNUM)

} static_ASN1_SEQUENCE_END(ECDSA_SIG)

  1. ec 公私钥的定义

    ec_asn1.c

    ASN1_SEQUENCE(EC_PRIVATEKEY) = {

    ASN1_EMBED(EC_PRIVATEKEY, version, INT32),

    ASN1_SIMPLE(EC_PRIVATEKEY, privateKey, ASN1_OCTET_STRING),

    ASN1_EXP_OPT(EC_PRIVATEKEY, parameters, ECPKPARAMETERS, 0),

    ASN1_EXP_OPT(EC_PRIVATEKEY, publicKey, ASN1_BIT_STRING, 1)

    } static_ASN1_SEQUENCE_END(EC_PRIVATEKEY)

  2. 公钥编码

    所有公钥最后都编码成X509_PUBKEY

    定义在x_pubkey.c中

ASN1_SEQUENCE_cb(X509_PUBKEY, pubkey_cb) = {

ASN1_SIMPLE(X509_PUBKEY, algor, X509_ALGOR),

ASN1_SIMPLE(X509_PUBKEY, public_key, ASN1_BIT_STRING)

} ASN1_SEQUENCE_END_cb(X509_PUBKEY, X509_PUBKEY)

相关推荐
Lazy Dave11 天前
gmssl私钥文件格式
网络安全·ssl·openssl
沉在嵌入式的鱼1 个月前
RK3588移植Openssl库
linux·rk3588·openssl
黑屋里的马1 个月前
ssl相关命令生成证书
服务器·网络·ssl·openssl·gmssl
fangeqin1 个月前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
API开发2 个月前
苹果芯片macOS安装版Homebrew(亲测) ,一键安装node、python、vscode等,比绿色软件还干净、无污染
vscode·python·docker·nodejs·openssl·brew·homebrew
码农不惑2 个月前
Rust使用tokio(二)HTTPS相关
https·rust·web·openssl
liulilittle2 个月前
通过高级处理器硬件指令集AES-NI实现AES-256-CFB算法并通过OPENSSL加密验证算法正确性。
linux·服务器·c++·算法·安全·加密·openssl
liulilittle2 个月前
OpenSSL 的 AES-NI 支持机制
linux·运维·服务器·算法·加密·openssl·解密
liulilittle2 个月前
通过高级处理器硬件指令集AES-NI实现AES-256-CFB算法。
linux·服务器·c++·算法·安全·加密·openssl
花花少年2 个月前
Ubuntu系统下交叉编译openssl
openssl·交叉编译