Crypt-OpenSSL-Base-Func
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
OSSL_PARAM params[3];
params[0] = OSSL_PARAM_construct_utf8_string(OSSL_ASYM_CIPHER_PARAM_PAD_MODE, OSSL_PKEY_RSA_PAD_MODE_OAEP, 0);
params[1]= OSSL_PARAM_construct_utf8_string(OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST, digest_name, 0);
params[2] = OSSL_PARAM_construct_end();
ctx = EVP_PKEY_CTX_new_from_pkey(libctx, pub, propq);
EVP_PKEY_encrypt_init_ex(ctx, params);
EVP_PKEY_encrypt(ctx, NULL, &out_len, in, in_len);
*out = OPENSSL_zalloc(out_len);
if( EVP_PKEY_encrypt(ctx, *out, &out_len, in, in_len) <=0 ){
OPENSSL_free(*out);
out_len = -1;
}
EVP_PKEY_CTX_free(ctx);
return out_len;
}
size_t rsa_oaep_decrypt_raw(unsigned char *digest_name, EVP_PKEY *priv, unsigned char* in, size_t in_len, unsigned char ** out)
{
int ret=0;
OSSL_LIB_CTX *libctx=NULL;
EVP_PKEY_CTX *ctx = NULL;
char *propq = NULL;
size_t out_len;
OSSL_PARAM params[3];
params[0] = OSSL_PARAM_construct_utf8_string(OSSL_ASYM_CIPHER_PARAM_PAD_MODE, OSSL_PKEY_RSA_PAD_MODE_OAEP, 0);
params[1]= OSSL_PARAM_construct_utf8_string(OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST, digest_name, 0);
params[2] = OSSL_PARAM_construct_end();
ctx = EVP_PKEY_CTX_new_from_pkey(libctx, priv, propq);
EVP_PKEY_decrypt_init_ex(ctx, params);
EVP_PKEY_decrypt(ctx, NULL, &out_len, in, in_len);
*out = OPENSSL_zalloc(out_len);
if( EVP_PKEY_decrypt(ctx, *out, &out_len, in, in_len) <=0 ){
OPENSSL_free(*out);
out_len = -1;
}
EVP_PKEY_CTX_free(ctx);
return out_len;
}
unsigned char* read_key(EVP_PKEY *pkey)
{
BIGNUM *priv_bn = NULL;
char* priv_hex = NULL;
char* priv = NULL;
size_t priv_len=0;
EVP_PKEY_get_bn_param(pkey, OSSL_PKEY_PARAM_PRIV_KEY, &priv_bn);
if(priv_bn==NULL){
EVP_PKEY_get_raw_private_key(pkey, NULL, &priv_len);
priv = OPENSSL_malloc(priv_len);
EVP_PKEY_get_raw_private_key(pkey, priv, &priv_len);
priv_bn = BN_bin2bn(priv, priv_len, NULL);
OPENSSL_free(priv);
}
priv_hex = BN_bn2hex(priv_bn);
OPENSSL_free(priv_bn);
return priv_hex;
}
EVP_PKEY* read_key_from_der(unsigned char* keyfile)
{
EVP_PKEY *pkey = NULL;
/*BIO *inf=NULL;*/
/*inf = BIO_new_file(keyfile, "r");*/
/*pkey = d2i_PrivateKey_bio(inf, &pkey);*/
/*BIO_set_close(inf, BIO_CLOSE);*/
FILE *inf = NULL;
inf = fopen(keyfile, "r");
pkey = d2i_PrivateKey_fp(inf, &pkey);
fclose(inf);
return pkey;
}
EVP_PKEY* read_pubkey_from_der(unsigned char* keyfile)
{
EVP_PKEY *pkey = NULL;
unsigned char *buf = NULL;
size_t buf_len = slurp(keyfile, &buf);
d2i_PUBKEY(&pkey, (const unsigned char **) &buf, buf_len);
return pkey;
}
EVP_PKEY* read_key_from_pem(unsigned char* keyfile)
{
EVP_PKEY *pkey = NULL;
BIO *inf=NULL;
inf = BIO_new_file(keyfile, "r");
pkey = PEM_read_bio_PrivateKey(inf, NULL, NULL, NULL);
BIO_set_close(inf, BIO_CLOSE);
return pkey;
}
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.362 second using v1.00-cache-2.02-grep-82fe00e-cpan-2cc899e4a130 )