"Fixing" private key/generating public key from incomplete private
Dmitry Eremin-Solenikov
dbaryshkov at gmail.com
Tue Mar 4 16:27:21 CET 2014
Hello,
On Tue, Mar 4, 2014 at 7:02 PM, Werner Koch <wk at gnupg.org> wrote:
> On Sat, 1 Feb 2014 18:06, dbaryshkov at gmail.com said:
>
>> the DSA key from PKCS#8 keyfile. It contains (in terms of gcrypt
>> s-exp) domain parameters (p, q, g), secret exponent (x) but no
>> public exponent (y). I found gcrypt_pubkey_get_sexp, but it
>> (currently) only works for ECC.
>
> We have a similar thing in RSA due to the different ways of specifying
> the parameters required for the use of the CRT. Libgcrypt solves this
> in the general case by not using the CRT. Gpg-agent however computes
> missing parameters in the form required by Libgcrypt during import of an
> (OpenSSL) generated key.
More or less the same problem here - I have private keys without public
key bundled in, so I have to restore it.
>
> Your idea is to define a function to help an application to compute the
> parameters in the Libgcrypt preferred (or required) form.
Yes.
>
>> It there a good way to solve my problem? I was thinking about
>> adding an special mode to gcry_pk_genkey or about adding a
>
> Not good. The key has alrady be generated.
>
>> special API resembling gcrypt_pubkey_get_sexp() but working
>> with such (incomplete) private keys instead of contexts.
>
> What is your problem with contexts? They will be helpful to cache
> intermediate results, for example for mass verification. Thus I plan to
> implement them anyway (gcry_pubkey_*).
The problem is that they are not supported yet for non-ECC things,
are they?
> For example we could use something like this:
>
> gcry_ctx_new (&ctx)
> gcry_pubkey_testkey (key, ctx);
> gcry_pubkey_get_sexp (&result, GCRY_PK_GET_PUBKEY, ctx);
> gcry_ctx_release (ctx);
>
> With gcry_pubkey_testkey being identical to gcry_pk_testkey if no
> context is given. gcry_ctx_new would create a new empty context object
> which gcry_pubkey_testkey would the setup with its internal intermediate
> results (e.g. y).
Would it be possible to use contexts instead of s-exp in external API?
That would bring some speedup for the library I think.
--
With best wishes
Dmitry
More information about the Gcrypt-devel
mailing list