static int pkey_ec_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen) { int ret; EC_PKEY_CTX *dctx = ctx->data; EC_KEY *ec_key = ctx->pkey->pkey.ec; ECIES_PARAMS *params = NULL; if (dctx->enc_type == NID_sm2encrypt) { ret = SM2_encrypt_with_recommended(out, outlen, in, inlen, ec_key); } else if (dctx->enc_type == NID_ecies_recommendedParameters) { ret = ECIES_encrypt_with_recommended(out, outlen, in, inlen, ec_key); } switch (dctx->enc_type) { case NID_sm2encrypt: ret = SM2_encrypt_with_recommended(out, outlen, in, inlen, ec_key); break; case NID_ecies_recommendedParameters: ret = ECIES_encrypt_with_recommended(out, outlen, in, inlen, ec_key); break; case NID_ecies_specifiedParameters: //we need to get ECIES_PARAMS from context ret = ECIES_encrypt(params, out, outlen, in, inlen, ec_key); break; default: ret = 0; } return ret; }
static int pkey_ec_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen) { EC_PKEY_CTX *dctx = ctx->data; EC_KEY *ec_key = ctx->pkey->pkey.ec; switch (dctx->ec_scheme) { case NID_sm_scheme: if (!SM2_encrypt(dctx->ec_encrypt_param, in, inlen, out, outlen, ec_key)) { ECerr(EC_F_PKEY_EC_ENCRYPT, EC_R_SM2_ENCRYPT_FAILED); return 0; } break; case NID_secg_scheme: if (!ECIES_encrypt(dctx->ec_encrypt_param, in, inlen, out, outlen, ec_key)) { ECerr(EC_F_PKEY_EC_ENCRYPT, EC_R_ECIES_ENCRYPT_FAILED); return 0; } break; default: ECerr(EC_F_PKEY_EC_ENCRYPT, EC_R_INVALID_ENC_TYPE); return 0; } return 1; }
static int pkey_ec_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, const unsigned char *in, size_t inlen) { EC_KEY *ec_key = ctx->pkey->pkey.ec; ECIES_PARAMS *param = ECIES_get_parameters(ec_key); fprintf(stderr, "%s %s %d\n", __FUNCTION__, __FILE__, __LINE__); return ECIES_encrypt(out, outlen, param, in, inlen, ec_key); }