000026503 - How to retrieve ECDH public key data after R_CR_key_exchange_phase_1()

Document created by RSA Customer Support Employee on Jun 14, 2016Last modified by RSA Customer Support Employee on Apr 21, 2017
Version 2Show Document
  • View in full screen mode

Article Content

Article Number000026503
Applies ToMicro Edition Suite 3.1
IssueHow to retrieve ECDH public key data after R_CR_key_exchange_phase_1()
NotesYou can get the X and Y values by first creating a public key object using the data returned by R_CR_key_exchange_phase_1(). You can then call R_PKEY_get_info() with R_PKEY_INFO_ID_EC_PUB_KEY_X and R_PKEY_INFO_ID_EC_PUB_KEY_Y respectively to get the individual values.

For example, add the following to the r_phase_items.c sample:

    R_PKEY *pk = NULL;
    R_ITEM pkX, pkY;
    R_ITEM p1;

// after     R_CR_key_exchange_phase_1(obj2, p1_buf2, &p1_len2)

    if ((ret = r_phase_items_create_params(bio_err, pkey_ctx, R_PKEY_TYPE_ECC,
        &pk)) != R_ERROR_NONE)
        BIO_printf(bio_err, "Unable to create parameters\n");
        goto end;

    p1.data = p1_buf1;
    p1.len = p1_len1;
    if ((ret = R_PKEY_set_info(pk, R_PKEY_INFO_ID_EC_PUB_KEY, &p1)) != R_ERROR_NONE)
        BIO_printf(bio_err, "Unable to set public key\n");
        goto end;

    if ((ret = R_PKEY_get_info(pk, R_PKEY_INFO_ID_EC_PUB_KEY_X, &pkX)) != R_ERROR_NONE)
        BIO_printf(bio_err, "Unable to get X-ordinate\n");
        goto end;
    BIO_printf(bio_out, "OBJECT 1 X-ORDINATE:\n");
    BIO_dump(bio_out, pkX.data, pkX.len);
    if ((ret = R_PKEY_get_info(pk, R_PKEY_INFO_ID_EC_PUB_KEY_Y, &pkY)) != R_ERROR_NONE)
        BIO_printf(bio_err, "Unable to get Y-ordinate\n");
        goto end;
    BIO_printf(bio_out, "OBJECT 1 Y-ORDINATE:\n");
    BIO_dump(bio_out, pkY.data, pkY.len);

Legacy Article IDa47768