Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce keypair generation as engine ctrl command #474

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Commits on Sep 12, 2022

  1. Introduce generic keypair generation interface and engine ctrl command

    As discussed in OpenSC#379 and
    OpenSC#378 we need a generic interface
    that supports multiple algorithms for key generation. Attempt was made
    to create a new keygen method and register it in PKCS11_pkey_meths() in
    p11_pkey.c (so that it's possible to generate keys using OpenSSL's
    EVP_PKEY_* API) but multiple design issues appeared. How and where do you
    pass the key ID, token label and alike was the first question. As
    suggested by the maintainer here:
    OpenSC#379 (comment),
    app_data from EVP_PKEY_CTX was (mis)used and that worked well. The
    reason why this approach was abandoned is because a good (or bad) way
    to get a handle of the PKCS11_CTX_private, that is necessary for the
    Cryptoki call, was not found.
    The way other operations work is that they rely on the key being
    loaded *_first_* through ENGINE_load_public(private)_key because this
    is when the PKCS11_CTX gets initialized and a handle to
    PKCS11_OBJECT_private gets set to the ex_data of the underlying key.
    Key generation obviously cannot rely on that mechanism since key
    doesn't yet exist.
    
    Instead, a generic PKCS11_generate_key interface was made that
    takes a structure describing the key generation algorithm. For now
    it only contains simple options like curve name for ECC or number
    of bits for RSA key generation. This interface can then be used
    as any other PKCS11 wrapper interface or using the ENGINE control
    commands. Using it with ENGINE control commands is demonstrated in
    the new tests/keygen.c file.
    
    Code for ECC keygen was taken from:
    OpenSC#379 and reworked to compile and
    work with some new additions to libp11 i.e. templates.
    Ivan Stepic authored and Ivan Stepic committed Sep 12, 2022
    Configuration menu
    Copy the full SHA
    97ee3ce View commit details
    Browse the repository at this point in the history

Commits on Sep 13, 2022

  1. Fix constness of key generation attributes

    Ivan Stepic authored and Ivan Stepic committed Sep 13, 2022
    Configuration menu
    Copy the full SHA
    d89ebfe View commit details
    Browse the repository at this point in the history