[openssl-users] EVP-level load_key functions
Jakob Bohm
jb-openssl at wisemo.com
Sun Aug 9 23:56:04 UTC 2015
I don't know, I have not studied that part of OpenSSL
closely enough to decide.
I was mostly trying to come up with a reasonable
counterargument to "designing a comprehensive certificate
and key loading engine API is too hard to bother"
reasoning.
On 09/08/2015 20:56, Reinier Torenbeek wrote:
> Hello Jakob,
>
> Looking at crypt/store/store.h, do you agree that a store
> implementation is the place where the functionality that you describe
> below belongs?
>
> Thanks,
> Reinier
>
>
> On 8/6/15 8:44 PM, Jakob Bohm wrote:
>> I think what one wants as a first approximation is
>> functions that can enumerate and load keys and
>> certificates from "engine storage", such as smart
>> cards (most engines would obviously load only
>> "proxy structures/handles" when asked to load a
>> private key).
>>
>> E.g.
>>
>> PSOME_PRIVKEY_TYPE EVP_EnumPrivKeys(T hEngine, ofs_t i);
>>
>> PSOME_PUBKEY_TYPE EVP_EnumPubKeys(T hEngine, ofs_t i);
>>
>> PSOME_CERT_TYPE EVP_EnumCerts(T hEngine, ofs_t i);
>>
>> Each will return either:
>>
>> The item at index i in engine storage
>>
>> NULL for no such item at index i
>>
>> (void*)(size_t)(1) for "i past last currently
>> valid index for such items"
>>
>> Engines would have some leeway if they will return
>> NULL or 1 for some values slightly past last index,
>> and if there will be any relationships between indexes
>> for different types.
>>
>> A second order approximation would be functions
>> that can look for matching triplets:
>> Given a public key, private key or certificate,
>> load a matching item of one of the other 2 kinds,
>> if present in storage, or return a "not found"
>> error (of cause the cases of private key or cert
>> to public key mapping are already trivial without
>> calling the engine, the remaining 4 cases are the
>> interesting ones, some engines can do them
>> efficiently others would fall back to generic EVP
>> layer loops over the first order enumeration
>> functions and a generic EVP layer public key
>> compare). Note, I can imagine engines that can
>> quickly go between private keys and certs, but not
>> from public key to either, so all 4 cases need to
>> be exposed to the engine level, even if (PrivToCert
>> and CertToPriv methods have defaults that call
>> PubToCert and PubToPriv).
>>
>> With these two simpler approximations, application
>> code should be able to do most of the needed real
>> world jobs, such as figuring out which useful
>> certificates with matching private keys are present
>> on an inserted smart card or key fob.
>>
>> A third item that might be wanted for some engines
>> (such as the generic "engine" that can look in
>> /etc/ssl/certs) would be a search for certs by exact
>> subject distinguished name match, with the
>> possibility of returning more than one result (think
>> different serials/keyids).
>>
>> Arbitrary criteria searching would typically end up
>> as a loop over enumeration functions anyway.
>>
>> Searching for chain building purposes can be built
>> on top of all this without bloating the EVP and engine
>> interfaces with all that code.
Enjoy
Jakob
--
Jakob Bohm, CIO, Partner, WiseMo A/S. http://www.wisemo.com
Transformervej 29, 2860 Søborg, Denmark. Direct +45 31 13 16 10
This public discussion message is non-binding and may contain errors.
WiseMo - Remote Service Management for PCs, Phones and Embedded
More information about the openssl-users
mailing list