Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
2593-crypto-Extend-bn.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2593-crypto-Extend-bn.patch of Package erlang
From 993d6b8f80bbb31c528c9b666580f4af68d0d839 Mon Sep 17 00:00:00 2001 From: Hans Nilsson <hans@erlang.org> Date: Thu, 21 Apr 2022 20:04:12 +0200 Subject: [PATCH 3/7] crypto: Extend bn.* --- lib/crypto/c_src/bn.c | 22 +++++++++++++++++++--- lib/crypto/c_src/bn.h | 5 ++++- lib/crypto/c_src/dh.c | 6 +++--- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/lib/crypto/c_src/bn.c b/lib/crypto/c_src/bn.c index 838173c5e8..f06ed9002e 100644 --- a/lib/crypto/c_src/bn.c +++ b/lib/crypto/c_src/bn.c @@ -196,12 +196,28 @@ ERL_NIF_TERM bn2term(ErlNifEnv* env, size_t size, const BIGNUM *bn) #ifdef HAS_3_0_API -int get_ossl_param_from_bin(ErlNifEnv* env, char* key, ERL_NIF_TERM bin, OSSL_PARAM *dest) +int get_ossl_octet_string_param_from_bin(ErlNifEnv* env, char* key, ERL_NIF_TERM bin, OSSL_PARAM *dest) +{ + ErlNifBinary tmp; + + if (!enif_inspect_binary(env, bin, &tmp)) return 0; + + *dest = OSSL_PARAM_construct_octet_string(key, tmp.data, tmp.size); + return 1; +} + + +int get_ossl_BN_param_from_bin(ErlNifEnv* env, char* key, ERL_NIF_TERM bin, OSSL_PARAM *dest) +{ + return get_ossl_BN_param_from_bin_sz(env, key, bin, dest, NULL); +} + +int get_ossl_BN_param_from_bin_sz(ErlNifEnv* env, char* key, ERL_NIF_TERM bin, OSSL_PARAM *dest, size_t *size) { BIGNUM *bn = NULL; ErlNifBinary tmp; - if (!get_bn_from_bin(env, bin, &bn) || + if (!get_bn_from_bin_sz(env, bin, &bn, size) || !enif_inspect_binary(env, bin_from_bn(env,bn), &tmp) || // Allocate buf BN_bn2nativepad(bn, tmp.data, tmp.size) < 0) {// Fill with BN in right endianity if (bn) BN_free(bn); @@ -219,7 +235,7 @@ int get_ossl_param_from_bin_in_list(ErlNifEnv* env, char* key, ERL_NIF_TERM *lis return enif_get_list_cell(env, *listcell, &head, listcell) && - get_ossl_param_from_bin(env, key, head, dest); + get_ossl_BN_param_from_bin(env, key, head, dest); } #endif diff --git a/lib/crypto/c_src/bn.h b/lib/crypto/c_src/bn.h index f0b447970f..5e207aed2d 100644 --- a/lib/crypto/c_src/bn.h +++ b/lib/crypto/c_src/bn.h @@ -35,7 +35,10 @@ int get_bn_from_bin(ErlNifEnv* env, ERL_NIF_TERM term, BIGNUM** bnp); int get_bn_from_bin_sz(ErlNifEnv* env, ERL_NIF_TERM term, BIGNUM** bnp, size_t* binsize); #ifdef HAS_3_0_API -int get_ossl_param_from_bin(ErlNifEnv* env, char* key, ERL_NIF_TERM bin, OSSL_PARAM *dest); +int get_ossl_octet_string_param_from_bin(ErlNifEnv* env, char* key, ERL_NIF_TERM bin, OSSL_PARAM *dest); +int get_ossl_BN_param_from_bin(ErlNifEnv* env, char* key, ERL_NIF_TERM bin, OSSL_PARAM *dest); +int get_ossl_BN_param_from_bin_sz(ErlNifEnv* env, char* key, ERL_NIF_TERM bin, OSSL_PARAM *dest, size_t *size); + int get_ossl_param_from_bin_in_list(ErlNifEnv* env, char* key, ERL_NIF_TERM *listcell, OSSL_PARAM *dest); #endif diff --git a/lib/crypto/c_src/dh.c b/lib/crypto/c_src/dh.c index ebf47cae3c..4bcab0ec6e 100644 --- a/lib/crypto/c_src/dh.c +++ b/lib/crypto/c_src/dh.c @@ -53,7 +53,7 @@ ERL_NIF_TERM dh_generate_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM ar /* Fetch parameters and assign them to params[] */ if (argv[0] != atom_undefined) - if (!get_ossl_param_from_bin(env, "priv", argv[0], ¶ms[i++])) { + if (!get_ossl_BN_param_from_bin(env, "priv", argv[0], ¶ms[i++])) { ret = EXCP_BADARG_N(env, 0, "PrivKeyIn"); goto done; } @@ -183,7 +183,7 @@ ERL_NIF_TERM dh_compute_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg /* Build peer_pkey */ - if (!get_ossl_param_from_bin(env, "pub", argv[0], ¶ms[i++])) + if (!get_ossl_BN_param_from_bin(env, "pub", argv[0], ¶ms[i++])) assign_goto(ret, err, EXCP_BADARG_N(env, 0, "Bad peer public key; binary expected")); { /*argv[2] - the lists [P,G] */ @@ -211,7 +211,7 @@ ERL_NIF_TERM dh_compute_key_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg assign_goto(ret, err, EXCP_ERROR(env, "Can't do fromdata")); /* Build own_pkey. Just replace the pub key with the priv key in params */ - if (!get_ossl_param_from_bin(env, "priv", argv[1], ¶ms[0])) + if (!get_ossl_BN_param_from_bin(env, "priv", argv[1], ¶ms[0])) assign_goto(ret, err, EXCP_BADARG_N(env, 0, "Bad peer public key; binary expected")); own_pctx = EVP_PKEY_CTX_new_from_name(NULL, "DH", NULL); -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor