而当我们调用时,我们根据type的类型,直接进行调用。比如说:EVP_KEY *pkey;pkey->pkey.rsa;直接就将ptr当成rsa类型操作。这就是共用体的好处。下面一幅图是从Openssl中截取的代码片段来证明上面的分析。
} 2)EVP封装中的密钥结构EVP_PKEY struct evp_pkey_st { int type; int save_type; int references; const EVP_PKEY_ASN1_METHOD *ameth; ENGINE *engine; union { char *ptr; #ifndef OPENSSL_NO_RSA struct rsa_st *rsa; /* RSA */ #endif #ifndef OPENSSL_NO_DSA struct dsa_st *dsa; /* D...
8、获取证书公钥函数_ EVP_PKEY* X509_get_pubkey (X509* x); 9、创建和释放证书存储区域 X509_STORE * X509_STORE_new(void); void_X509_STORE_free(X509_STORE * v); 函数:创建和发布一个X509_STORE结构,主要用于认证。 10. 将证书添加到证书存储区域 Int_X509_STORE_add_cert(X509_STORE * ctx X50...
structdh_st{BIGNUM*p;BIGNUM*g;longlength;/* optional */BIGNUM*pub_key;/* g^x */BIGNUM*priv_key;/* x */} 2)EVP封装中的密钥结构EVP_PKEY structevp_pkey_st{inttype;intsave_type;intreferences;constEVP_PKEY_ASN1_METHOD*ameth;ENGINE*engine;union{char*ptr;#ifndefOPENSSL_NO_RSAstructrsa_st...
OpenSSL密文的解密一般需要调用两次EVP_PKEY_decrypt(),该函数定义如下: 第一次调用,“out”参数传NULL。在函数返回时,“outlen”参数会返回“out”所需的缓冲区大小,并分配一块相应大小的堆内存。 第二次调用,“out”为第一次调用所分配的内存,运算结束后存放解密结果。
以Pkey接口为例,通过EVP_PKEY_meth_set_x接口完成PKEY方法的注册。这里也可以通过PKEY的子方法完成注册,例如ECC相关的EC_KEY_METHOD,OpenSSL speed速度测试中直接调用字方法完成,这样的好处是可以使用speed工具完成性能测试,但PKEY接口更加通用,将公钥算法全部包含在内,目前GmSSL支持的公钥算法相关NID如下:...
1. EVP提供的RSA 加密解密 主要接口: intEVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);intEVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, unsignedchar*out, size_t *outlen,constunsignedchar*in, size_t inlen);intEVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);intEVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, ...
SM2解密代码中存在安全问题,第一次调用 EVP_PKEY_decrypt() 返回的明文所需的缓冲区大小的计算可能小于第二次调用所需的实际大小。当应用程序第二次使用较小的缓冲区调用 EVP_PKEY_decrypt() 时,可能会导致缓冲区溢出。恶意攻击者如果能够向应用程序提供用于解密的SM2内容,将导致攻击者选择的数据溢出缓冲区最多 62...
OpenSSL Project 本周正式推出了 OpenSSL 1.1.1l,该版本修补了一个高严重性漏洞,该漏洞能够让攻击者改变应用程序的行为或导致应用程序崩溃。该漏洞的 CVE ID 为 CVE-2021-3711,被描述为一个与 SM2 解密有关的缓冲区溢出漏洞。为了解密 SM2 加密的数据,应用程序通常会调用 API 函数 EVP_PKEY_decrypt()。一...
intEVP_MD_type(constEVP_MD*md);#defineEVP_MD_nid(e) EVP_MD_type(e)#defineEVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e))intEVP_MD_pkey_type(constEVP_MD*md);intEVP_MD_size(constEVP_MD*md);intEVP_MD_block_size(constEVP_MD*md); ...