*Guessing the context that is sent to EVP_PKEY_derive_set_peer is
initialized/created with a pkey belonging to different group. *
*In other words, EC keys of both parties in DH are not of the same group. *


On Mon, Jun 30, 2014 at 10:13 AM, pratyush parimal <
[email protected]> wrote:

> Hi all,
>
> Did anyone have any luck with this one?
>
> Thanks,
> Pratyush Parimal.
>
>
> ---------- Forwarded message ----------
> From: pratyush parimal <[email protected]>
> Date: Wed, Jun 25, 2014 at 10:43 AM
> Subject: Converting public part of 'EVP_PKEY' structure to 'unsigned
> char*' , and back.
> To: [email protected]
>
>
> Hi all,
>
> I was trying to use ECDH (in OpenSSL v1.0.1f) for a project, and after
> generating the EVP_PKEY structure, I needed to extract its public key and
> send it over to the other party. I was unable to find a straightforward way
> which worked for me.
>
> What I tried was this:
>
> EVP_PKEY*
> extract_peerkey_3(EVP_PKEY* EVP_PKEY_both) //'both' meaning it contains
> public + private
> {
> int len = 0;
>
>  len = i2d_PUBKEY(EVP_PKEY_both, NULL); //find out required buffer length
> unsigned char *buf, *p;
>  buf = (unsigned char*) malloc(len); //allocate
> p = buf;
> len = i2d_PUBKEY(EVP_PKEY_both, &p);
>
> const unsigned char* p2 = buf;
> EVP_PKEY* EVP_PKEY_public = d2i_PUBKEY(NULL, &p2, len);
>  if (EVP_PKEY_public == NULL)
> {
> handleCryptoError("d2i failed", ERR_get_error());
>  }
>
> return EVP_PKEY_public;
> }
>
> The function doesn't throw an error, but when I pass the returned
> 'EVP_PKEY_public' structure to the function 'EVP_PKEY_derive_set_peer', I
> get an error message "error:10071065:elliptic curve
> routines:EC_POINT_cmp:incompatible objects".
>
> I also tried to follow the steps given at
> http://stackoverflow.com/questions/18155559/how-does-one-access-the-raw-ecdh-public-key-private-key-and-params-inside-opens
> .
> When i reconstruct the EVP_PKEY using the steps EC_POINT_oct2point() -> 
> EC_KEY_set_public_key()
> -> EVP_PKEY_set1_EC_KEY(), the resulting EVP_PKEY does work for me. In
> fact I'm able to derive the same secret on both sides using this sequence,
> but I feel it's too roundabout.
>
> I also saw the following:
> http://marc.info/?l=openssl-users&m=116474297608094&w=2, which talks
> about using 'i2d_PUBKEY', but I haven't been able to make it work so far.
>
> Is my usage of d2i_PUBKEY or i2d_PUBKEY wrong in some way? Does anyone
> know how to use them properly?
> Any help will be appreciated.
>
> Thanks!
> Pratyush Parimal
>
>

Reply via email to