In message <1480697558.2410.33.ca...@hansenpartnership.com> on Fri, 02 Dec 2016 08:52:38 -0800, James Bottomley <james.bottom...@hansenpartnership.com> said:
James.Bottomley> On Thu, 2016-12-01 at 09:30 +0100, Richard Levitte wrote: James.Bottomley> > James.Bottomley> > James Bottomley <james.bottom...@hansenpartnership.com> skrev: (1 James.Bottomley> > december 2016 07:36:26 CET) James.Bottomley> > > On Thu, 2016-12-01 at 01:38 +0100, Richard Levitte wrote: James.Bottomley> > > > James.Bottomley> > > > James Bottomley <james.bottom...@hansenpartnership.com> skrev: (1 James.Bottomley> > > > december 2016 00:42:09 CET) James.Bottomley> [...] James.Bottomley> > > > > On Thu, 2016-12-01 at 00:22 +0100, Richard Levitte wrote: James.Bottomley> > > > > > Generally speaking, I am unsure about your solution. It seems James.Bottomley> > > > > > like hack to fit a specific case where something more general James.Bottomley> > > > > > could be of greater service to others as well. James.Bottomley> > > > > James.Bottomley> > > > > Well, the more adaptable patch set was the previous one that James.Bottomley> > > > > overloaded the meaning of key_id. This one has a specific bio James.Bottomley> > > > > mechanism for loading PEM files, so it only really works for James.Bottomley> > > > > engines that have PEM representable unloaded keys (which, to be James.Bottomley> > > > > fair, is almost all of them, since even the USB crypto keys James.Bottomley> > > > > have a wrapped format). James.Bottomley> > > > > James.Bottomley> > > > > I've tried to make it as generic as possible, but I am James.Bottomley> > > > > conditioned to think to my use case: TPM keys. If you give an James.Bottomley> > > > > example of another use case, it will help me see where it James.Bottomley> > > > > should be more generic. James.Bottomley> > > > James.Bottomley> > > > Among other things, I'd rather not encourage an API that James.Bottomley> > > > inherently makes the engine<->libcrypto tie even tighter. Also, James.Bottomley> > > > it puts a requirement on the engine to parse PEM, which is James.Bottomley> > > > unnecessary. James.Bottomley> James.Bottomley> Actually, I missed this initially. This is definitely not a James.Bottomley> requirement: engines that wish to parse PEM keys may do so, but an James.Bottomley> engine that doesn't simply doesn't implement the callback. Only James.Bottomley> engines that are loaded from the configuration file actually get asked James.Bottomley> if they understand the key, and then only if they supply the callback, James.Bottomley> so this is a decision on which engines to is made by the admin or James.Bottomley> packager (and the engine builder, who decides whether to implement or James.Bottomley> not). When I made that argument, I hadn't thought and felt things through entirely. Truth be told, I'm feeling very uneasy handing over the reading and parsing of the PEM file to an engine. However, handing over the decoded data and leaving it to the engine to do something sensible with it, no issues at all. James.Bottomley> If I summarise the arguments about self identifying files from the v1 James.Bottomley> thread: James.Bottomley> James.Bottomley> 1. We agreed that usability is greatly enhanced if openssl simply loads James.Bottomley> a key when presented with the file/uri etc. without the user having James.Bottomley> to specify what the format of a key is Check. My STORE branch is made to support that. James.Bottomley> 2. For PEM files, we believe this is easy because the guards uniquely James.Bottomley> identify the file format, so whatever key the application needs, we James.Bottomley> can verify is contained in the thing presented Check. James.Bottomley> 3. THere was more debate on the files that aren't fully self James.Bottomley> describing, like DER. The argument was that the DER structure is James.Bottomley> usually unique enough, so we could do this, but there were James.Bottomley> reservations. Yup... The current TSS KEY BLOB is among those reservations ;-) James.Bottomley> 4. I thought there was agreement that we could move forwards with the James.Bottomley> PEM bit because it was uncontroversial We're not quite on the same page regarding the exact implementation. However, I think I have a solution... James.Bottomley> The current PEM key loading code is already hooked for PKCS8, to make James.Bottomley> the above a reality, we should hook it for pkcs12 as well. Once you James.Bottomley> have the store code, I believe it should be hooked for this as well. James.Bottomley> In this scenario, I don't quite see why it's not a hack to hook for James.Bottomley> pkcs8 (and presumably 12) but it is a hack to hook for engines and James.Bottomley> store. James.Bottomley> James.Bottomley> If we agree on DER, the ideal world becomes all apps simply use James.Bottomley> OPENSSL_load_privkey() and no-one needs to worry about format for key James.Bottomley> loading because any reasonable format just works. I toyed around with the idea that I already mentioned, that instead of passing the BIO and have the engine read it at its leasure, there would be a STORE call after the PEM_bytes_read_bio() call in PEM_read_bio_PrivateKey(), where the decoded data would be passed in the STORE call. The result is a branch of mine that I haven't made into a PR, built in top of my STORE branch: https://github.com/levitte/openssl/tree/tpm_engine-support Please have a look, and especially at these changes: https://github.com/levitte/openssl/commit/ae9f05a9d8d60e2c05d8f3b442161e648d1a0738 I think they should fit your bill fairly well, all that's needed is that you add a store file handler to e_tpm.c (I did toy around with that as well, but it's too dependent on pre 1.1.0 OpenSSL, I didn't want to spend more time clearing that up). I have an untested patch that I can send you if you want. Cheers, Richard -- Richard Levitte levi...@openssl.org OpenSSL Project http://www.openssl.org/~levitte/ -- openssl-dev mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev