I'm extremely new to this so any help would be much appreciated.
Ultimately I need to use pre-computed Public and Private EC keys to
digitally sign and verify a message.  I can't seem to be able to take
the DER encoded keys and produce a usable EC_KEY for calling the
ECDSA_sign() or ECDSA_verify() functions.

 

To try to simplify, I attempted the following unrelated code (error
checking removed)

 

    int len;

    unsigned char *pptr;

    unsigned char buf[1024];

    int        ret;

    ECDSA_SIG *sig;    

    EC_KEY    *newkey;

    EC_KEY    *eckey = EC_KEY_new();

 

    // Get the EC Group

    eckey->group = EC_GROUP_new_by_curve_name(NID_secp192k1);

 

    // Generate a new key

    if (!EC_KEY_generate_key(eckey))

    {

        printf("Error generating key!\n");

        return 0;

    }

 

    // Get the private key in DER

    pptr = buf;

    len = i2d_ECPrivateKey(eckey, &pptr);

 

    // Convert the private key back from DER/allocate new eckey

    newkey = d2i_ECPrivateKey(NULL, &pptr, len);

    if (newkey == NULL)

    {

        printf("This always fails!!\n");

    }

 

Why does the call to d2i_ECPrivateKey(NULL, &pptr, len); always fail?
(the length returned from the previous call is 222), generating the key,
allocation and group by name all appears to work.

 

I think what I am really lacking is an understanding of how the ECDSA
library is meant to be used.  Are there any examples of how to do this?
Everything I find seems to use the above 'generate key' rather than
using pre-computed keys.

 

I would have thought that I passed my known key into the
d2i_ECPrivateKey() function and used the result from that point forward.
Is this not the normal use flow?

 

Thanks in advance for any advice (or pointers on where to read more),

 

Ryan

Reply via email to