EVP_PKEY_verify(3) OpenSSL EVP_PKEY_verify(3) NNAAMMEE EVP_PKEY_verify_init, EVP_PKEY_verify - signature verification using a public key algorithm SSYYNNOOPPSSIISS #include int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, const unsigned char *tbs, size_t tbslen); DDEESSCCRRIIPPTTIIOONN The _E_V_P___P_K_E_Y___v_e_r_i_f_y___i_n_i_t_(_) function initializes a public key algorithm context using key ppkkeeyy for a signature verification operation. The _E_V_P___P_K_E_Y___v_e_r_i_f_y_(_) function performs a public key verification oper- ation using ccttxx. The signature is specified using the ssiigg and ssiigglleenn parameters. The verified data (i.e. the data believed originally signed) is specified using the ttbbss and ttbbsslleenn parameters. NNOOTTEESS After the call to _E_V_P___P_K_E_Y___v_e_r_i_f_y___i_n_i_t_(_) algorithm specific control operations can be performed to set any appropriate parameters for the operation. The function _E_V_P___P_K_E_Y___v_e_r_i_f_y_(_) can be called more than once on the same context if several operations are performed using the same parameters. RREETTUURRNN VVAALLUUEESS _E_V_P___P_K_E_Y___v_e_r_i_f_y___i_n_i_t_(_) and _E_V_P___P_K_E_Y___v_e_r_i_f_y_(_) return 1 if the verifica- tion was successful and 0 if it failed. Unlike other functions the return value 0 from _E_V_P___P_K_E_Y___v_e_r_i_f_y_(_) only indicates that the signature did not not verify successfully (that is tbs did not match the original data or the signature was of invalid form) it is not an indication of a more serious error. A negative value indicates an error other that signature verification failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm. EEXXAAMMPPLLEE Verify signature using PKCS#1 and SHA256 digest: #include #include EVP_PKEY_CTX *ctx; unsigned char *md, *sig; size_t mdlen, siglen; EVP_PKEY *verify_key; /* NB: assumes verify_key, sig, siglen md and mdlen are already set up * and that verify_key is an RSA public key */ ctx = EVP_PKEY_CTX_new(verify_key); if (!ctx) /* Error occurred */ if (EVP_PKEY_verify_init(ctx) <= 0) /* Error */ if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0) /* Error */ if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0) /* Error */ /* Perform operation */ ret = EVP_PKEY_verify(ctx, sig, siglen, md, mdlen); /* ret == 1 indicates success, 0 verify failure and < 0 for some * other error. */ SSEEEE AALLSSOO _E_V_P___P_K_E_Y___C_T_X___n_e_w(3), _E_V_P___P_K_E_Y___e_n_c_r_y_p_t(3), _E_V_P___P_K_E_Y___d_e_c_r_y_p_t(3), _E_V_P___P_K_E_Y___s_i_g_n(3), _E_V_P___P_K_E_Y___v_e_r_i_f_y___r_e_c_o_v_e_r(3), _E_V_P___P_K_E_Y___d_e_r_i_v_e(3) HHIISSTTOORRYY These functions were first added to OpenSSL 1.0.0. 1.0.2u 2019-12-20 EVP_PKEY_verify(3)