int _gnutls_hpke_datum_to_pubkey(const gnutls_ecc_curve_t curve,
const gnutls_datum_t *datum,
- gnutls_pubkey_t *pk)
+ gnutls_pubkey_t pubkey)
{
int ret;
return gnutls_assert_val(ret);
}
- ret = gnutls_pubkey_init(pk);
- if (ret < 0) {
- return gnutls_assert_val(ret);
- }
-
- ret = gnutls_pubkey_import_ecc_raw(*pk, curve, &x, &y);
+ ret = gnutls_pubkey_import_ecc_raw(pubkey, curve, &x, &y);
if (ret < 0) {
gnutls_assert_val(ret);
- gnutls_pubkey_deinit(*pk);
- *pk = NULL;
return ret;
}
static int montgomery_curve_keypair_from_raw_privkey(
const gnutls_mac_algorithm_t mac, const gnutls_hpke_kem_t kem,
const gnutls_datum_t *dkp_prk, const gnutls_ecc_curve_t curve,
- const gnutls_datum_t *suite_id, gnutls_privkey_t *privkey,
- gnutls_pubkey_t *pubkey)
+ const gnutls_datum_t *suite_id, gnutls_privkey_t privkey,
+ gnutls_pubkey_t pubkey)
{
int ret;
unsigned char
}
clamp_sk(kem, sk.data);
- ret = gnutls_privkey_init(privkey);
- if (ret < 0) {
- gnutls_assert_val(ret);
- goto cleanup;
- }
- ret = gnutls_privkey_import_ecc_raw(*privkey, curve, NULL, NULL, &sk);
+ ret = gnutls_privkey_import_ecc_raw(privkey, curve, NULL, NULL, &sk);
if (ret < 0) {
gnutls_assert_val(ret);
- goto error;
- }
-
- ret = gnutls_pubkey_init(pubkey);
- if (ret < 0) {
- gnutls_assert_val(ret);
- goto error;
+ goto cleanup;
}
- ret = gnutls_pubkey_import_privkey(*pubkey, *privkey, 0, 0);
+ ret = gnutls_pubkey_import_privkey(pubkey, privkey, 0, 0);
if (ret < 0) {
gnutls_assert_val(ret);
- goto error;
+ goto cleanup;
}
- goto cleanup;
-
-error:
- gnutls_privkey_deinit(*privkey);
- gnutls_pubkey_deinit(*pubkey);
-
cleanup:
zeroize_key(sk.data, sk.size);
static int prime_curve_keypair_from_raw_privkey(
const gnutls_mac_algorithm_t mac, const gnutls_hpke_kem_t kem,
const gnutls_datum_t *dkp_prk, const gnutls_ecc_curve_t curve,
- const gnutls_datum_t *suite_id, gnutls_privkey_t *privkey,
- gnutls_pubkey_t *pubkey)
+ const gnutls_datum_t *suite_id, gnutls_privkey_t privkey,
+ gnutls_pubkey_t pubkey)
{
int ret;
unsigned char
continue;
}
- ret = gnutls_privkey_init(privkey);
- if (ret < 0) {
- ret = gnutls_assert_val(ret);
- goto cleanup;
- }
-
- ret = gnutls_privkey_import_ecc_raw(*privkey, curve, NULL, NULL,
+ ret = gnutls_privkey_import_ecc_raw(privkey, curve, NULL, NULL,
&sk);
if (ret < 0) {
gnutls_assert_val(ret);
- goto error;
- }
-
- ret = gnutls_pubkey_init(pubkey);
- if (ret < 0) {
- gnutls_assert_val(ret);
- goto error;
+ goto cleanup;
}
- ret = gnutls_pubkey_import_privkey(*pubkey, *privkey, 0, 0);
+ ret = gnutls_pubkey_import_privkey(pubkey, privkey, 0, 0);
if (ret < 0) {
gnutls_assert_val(ret);
- goto error;
+ goto cleanup;
}
break;
}
- goto cleanup;
-
-error:
- gnutls_privkey_deinit(*privkey);
- gnutls_pubkey_deinit(*pubkey);
-
cleanup:
zeroize_key(sk.data, sk.size);
zeroize_key(labeled_expand_info.data, labeled_expand_info.size);
int _gnutls_hpke_keypair_from_ikm(const gnutls_hpke_kem_t kem,
const gnutls_datum_t *ikme,
- gnutls_privkey_t *privkey,
- gnutls_pubkey_t *pubkey)
+ gnutls_privkey_t privkey,
+ gnutls_pubkey_t pubkey)
{
int ret;
unsigned char dkp_prk_buf[HPKE_MAX_HASH_SIZE] = { 0 };
static int generate_new_keypair(const gnutls_ecc_curve_t curve,
const gnutls_hpke_kem_t kem,
const gnutls_pk_algorithm_t pk_algo,
- gnutls_privkey_t *ephemeral_privkey,
- gnutls_pubkey_t *ephemeral_pubkey)
+ gnutls_privkey_t ephemeral_privkey,
+ gnutls_pubkey_t ephemeral_pubkey)
{
int ret;
return ret;
}
- ret = gnutls_privkey_generate(*ephemeral_privkey, pk_algo,
+ ret = gnutls_privkey_generate(ephemeral_privkey, pk_algo,
GNUTLS_CURVE_TO_BITS(curve), 0);
if (ret < 0) {
gnutls_assert_val(ret);
return ret;
}
- ret = gnutls_pubkey_init(ephemeral_pubkey);
- if (ret < 0) {
- gnutls_assert_val(ret);
- return ret;
- }
-
- ret = gnutls_pubkey_import_privkey(*ephemeral_pubkey,
- *ephemeral_privkey, 0, 0);
+ ret = gnutls_pubkey_import_privkey(ephemeral_pubkey, ephemeral_privkey,
+ 0, 0);
if (ret < 0) {
gnutls_assert_val(ret);
return ret;
int _gnutls_hpke_generate_keypair(const gnutls_datum_t *ikme,
const gnutls_hpke_kem_t kem,
const gnutls_pubkey_t receiver_pubkey,
- gnutls_privkey_t *ephemeral_privkey,
- gnutls_pubkey_t *ephemeral_pubkey)
+ gnutls_privkey_t ephemeral_privkey,
+ gnutls_pubkey_t ephemeral_pubkey)
{
int ret;
if (ikme == NULL) {
int _gnutls_hpke_datum_to_pubkey(const gnutls_ecc_curve_t curve,
const gnutls_datum_t *datum,
- gnutls_pubkey_t *pk);
+ gnutls_pubkey_t pubkey);
int _gnutls_hpke_keypair_from_ikm(const gnutls_hpke_kem_t kem,
const gnutls_datum_t *ikme,
- gnutls_privkey_t *privkey,
- gnutls_pubkey_t *pubkey);
+ gnutls_privkey_t privkey,
+ gnutls_pubkey_t pubkey);
int _gnutls_hpke_generate_keypair(const gnutls_datum_t *ikme,
const gnutls_hpke_kem_t kem,
const gnutls_pubkey_t receiver_pubkey,
- gnutls_privkey_t *ephemeral_privkey,
- gnutls_pubkey_t *ephemeral_pubkey);
+ gnutls_privkey_t ephemeral_privkey,
+ gnutls_pubkey_t ephemeral_pubkey);
int _gnutls_hpke_privkey_clone(gnutls_privkey_t src, gnutls_privkey_t *dst);
unsigned char dh_buf[HPKE_MAX_DH_SIZE];
gnutls_datum_t dh = { dh_buf, 0 };
+ ret = gnutls_pubkey_init(&ephemeral_pubkey);
+ if (ret < 0) {
+ ret = gnutls_assert_val(ret);
+ goto cleanup;
+ }
+
+ ret = gnutls_privkey_init(&ephemeral_privkey);
+ if (ret < 0) {
+ ret = gnutls_assert_val(ret);
+ goto cleanup;
+ }
+
ret = _gnutls_hpke_generate_keypair(ctx->ikme, ctx->kem,
- receiver_pubkey, &ephemeral_privkey,
- &ephemeral_pubkey);
+ receiver_pubkey, ephemeral_privkey,
+ ephemeral_pubkey);
if (ret < 0) {
gnutls_assert_val(ret);
goto cleanup;
goto cleanup;
}
- ret = _gnutls_hpke_datum_to_pubkey(curve, enc, &ephemeral_pubkey);
+ ret = gnutls_pubkey_init(&ephemeral_pubkey);
+ if (ret < 0) {
+ ret = gnutls_assert_val(ret);
+ goto cleanup;
+ }
+
+ ret = _gnutls_hpke_datum_to_pubkey(curve, enc, ephemeral_pubkey);
if (ret < 0) {
gnutls_assert_val(ret);
goto cleanup;
* @kem: The KEM algorithm to use for key pair generation.
* @ikm: A pointer to a gnutls_datum_t structure containing the input key material (IKM) to be used for key pair
* generation. This should be a non-empty byte string that serves as the seed for key pair generation.
- * @privkey: A pointer to a gnutls_privkey_t variable where the generated private key will be stored. The function will initialize this variable with the generated private key.
- * @pubkey: A pointer to a gnutls_pubkey_t variable where the generated public key will be stored. The function will initialize this variable with the generated public key.
+ * @privkey: An initialized private key.
+ * @pubkey: An initialized public key.
*
* This function generates a key pair (private key and public key) for the specified KEM algorithm using the provided
* input key material (IKM). The IKM is used as a seed for the key generation process, allowing for deterministic key
*/
int gnutls_hpke_generate_keypair(gnutls_hpke_kem_t kem,
const gnutls_datum_t *ikm,
- gnutls_privkey_t *privkey,
- gnutls_pubkey_t *pubkey)
+ gnutls_privkey_t privkey,
+ gnutls_pubkey_t pubkey)
{
int ret;
if (ikm == NULL || ikm->data == NULL || ikm->size == 0 ||
}
if (params->ikmS != NULL) {
+ ret = gnutls_privkey_init(&skS);
+ if (ret < 0) {
+ fail("gnutls_privkey_init: %s\n", gnutls_strerror(ret));
+ }
+ ret = gnutls_pubkey_init(&pkS);
+ if (ret < 0) {
+ fail("gnutls_pubkey_init: %s\n", gnutls_strerror(ret));
+ }
ret = gnutls_hpke_generate_keypair(params->kem, params->ikmS,
- &skS, &pkS);
+ skS, pkS);
if (ret < 0) {
fail("gnutls_hpke_generate_keypair (mode %d, kem: %d, kdf: %d, aead: %d) failed: %s\n",
params->mode, params->kem, params->kdf,
}
}
- ret = gnutls_hpke_generate_keypair(params->kem, ¶ms->ikmR, &skR,
- &pkR);
+ ret = gnutls_privkey_init(&skR);
+ if (ret < 0) {
+ fail("gnutls_privkey_init: %s\n", gnutls_strerror(ret));
+ }
+ ret = gnutls_pubkey_init(&pkR);
+ if (ret < 0) {
+ fail("gnutls_pubkey_init: %s\n", gnutls_strerror(ret));
+ }
+ ret = gnutls_hpke_generate_keypair(params->kem, ¶ms->ikmR, skR,
+ pkR);
if (ret < 0) {
fail("gnutls_hpke_generate_keypair (mode %d, kem: %d, kdf: %d, aead: %d) failed: %s\n",
params->mode, params->kem, params->kdf, params->aead,