On 24 Jan 2016 14:49, "Marco Pivetta"
>
> The BC breaks may happen in future, given the number of added parameters.
You even designed your additional parameters to avoid BC breaks: what will
happen next time someone needs additional functionality?

I'm not aware about any new functionality that could be added here in the
near future and even if there was any, new parameters can still be added.
I'm pretty sure that once this happens we will have already named params
support which should address all your concerns. I actualy think that with
the named params this will be much better API change than all other
propasals.

>>
>> >  - more security issues if the defaults are unsafe (or become unsafe,
for whatever reason)
>>
>> the current value (16) is effective maximum for the currently supported
AEAD cipher algs and it cannot change.
>
> "current" was used two times in this sentence: that's exactly my fear

As said later in my previous email, the dafault can be different in
dependency on cipher alg. It means that you will have to have default for
AES GCM always 16 (it cannot be higher due to block size) and for some
FUTURE XYZ it would be 32. There will never be need to change it and no bc
break can happen.

>> and the same defaults. It would just be a new function that would work
only for selected cipher algs. It wouldn't address any of your concerns and
would just duplicate things.
>
> It would reduce the extent of BC breaks, as you won't need to notify
everybody using `openssl_encrypt`, but just those that use
`openssl_encrypt_aead`. Also, you'd be able to make the parameters
mandatory, which makes the proposed signature addition [, string &$tag =
NULL [, string $aad = "" [, int $tag_length = 16 ]]]] much less confusing.
You may even just create a `new AEADFlags()` struct to make the hinting
more clear and flexible, so that optional params aren't a problem anymore,
but that would simply anger who still thinks procedural programming is a
maintainable solution.

I'm sorry but I don't think we should add any objects here. OpenSSL ext is
purely procedural and objects wouldn't fit. It would also require some code
reordering and clean up.

>>
>> If you mean some fancy context related set of functions, then it would
require some special handling and much more work. It would add to the
maintenance effort as well. As I said before I have a crypto pecl extension
that does exactly that. Personaly I think that such decision would probably
mean that we won't have AEAD support in openssl ext for quite a long time
as it won't be done anytime soon.
>
> No, I just really mean following:
>
> `openssl_encrypt_aead(string $data , string $method , string $password,
AEADFlags $flags, [, int $options = 0 [, string $iv = "" ]] )`
>
> Much simpler:
>
>  * the AEAD flags are required, less error prone (you can't pass in wrong
flags unless you subclassed)
>  * the AEAD flags encapsulate the default values, which means that the BC
breaks are easier to document, and easier to "fix" in userland (simply
provide a custom AEADFlags instance, with the old params)
>  * the API wasn't butchered just to keep BC with `openssl_encrypt`

As I said above, this wouldn't be procedural. It would also require
significantly more time and doesn't bring anything extra useful. Everithing
that you really need in most cases is just a tag anyway. Another thing is
also a maintenance point of view. If you look to the commits and handling
PR's for this ext, then it's probably just me who actively maintains it
which is quite sad because I have just a little bit of time (usually after
work when I work... :) ) and I also have other exts to care about.

So the thing is that I don't really have time for such changes even if I
thought that it is useful which I don't. And considering that no one else
had time or knowledge to implement AEAD support to openssl ext in the last
10 years or so (since GCM is supported by OpenSSL), it might mean that it
takes another 5 years waiting if this this proposal doesn't get in which
wouldn't be great for users...

>>
>> That being said I know that the current proposal is not the nicest but I
think it fits to the current openssl ext API which is not the nicest either.
>
> This is indeed an adapter: if OpenSSL sucks, then don't jump off the
bridge as well ;-)

I have never said that OpenSSL sucks. :) It's a great library written by
one of the smartest people in the world. I meant that our openssl extension
doesn't have the nicest API. However the API is more or less done in the
same style which we shouldn't change IMHO.

Cheers

Jakub

Reply via email to