This patch fixes a few problems with the cryptography in the original
version of the gem. I think it fixes all of them, while introducing no
new ones, but I'm not a cryptographer. A better solution might be to
add another dependency on rbnacl (and libsodium), but this does keep to
a minimum of dependencies. Even if that dependency is openssl.
Use of SHA256 over SHA1, as SHA1 is depracated for new applications
and has been for a while.
Use HMAC-SHA256 as a Key Derivation Function, which avoids users
getting a smaller effective keysize if they use e.g. hex for the
secret. They still shouldn't use a passphrase, though. This fix also
means the gem creates independent keys for the HMAC and the encryption.
Go for encrypt then MAC, not MAC then encrypt, which avoids issues
with using the server as e.g. a CBC padding oracle.
Use constant-time compares for the MAC, to avoid message forgery
through repeated requests to the server, and timing the response.
The new way of encrypting then encoding avoids effectively double
Base64 encoding the paylod, which should make the cookies shorter by
about 30%.
Go for AES-256, mostly for parity with the use of HMAC-SHA256.
Moved all of the above fixes into a seperate class. Which should
probably have specs.
Fixed some specs which broke with the new way of encrypting the messages.
This patch fixes a few problems with the cryptography in the original version of the gem. I think it fixes all of them, while introducing no new ones, but I'm not a cryptographer. A better solution might be to add another dependency on rbnacl (and libsodium), but this does keep to a minimum of dependencies. Even if that dependency is openssl.