Commit graph

10 commits

Author SHA1 Message Date
Reedy
4cd8d9cff5 Fix numerous PSR12.Properties.ConstantVisibility.NotFound
Change-Id: I2ec09c02c2e4ed399d993cb1871e67df02167ca8
2020-05-11 01:36:36 +01:00
Max Semenik
b86088857a Use strict types in includes/password
This is a well isolated area of code, without functions that are
likely to receive PHP's trademark "garbage in, garbage out" data
as parameters. Capitalize on this and require strict types there.

Change-Id: I9f1c172e737018d058ddc1700d8234832b58efa6
2019-11-19 15:01:09 +00:00
Max Semenik
9227d862da Remove deprecated Password::equals()
Deprecated in 1.33, hard deprecated in 1.34. No callers anywhere
since 1.33.

Change-Id: Ifaca13bac841af1b8f6e906feb0c1c1bdc4aaa48
2019-10-27 00:13:03 -07:00
Max Semenik
382851ca07 Hard deprecate Password::equals()
Change-Id: I8d655a4f7a57f2186b1457d956af74bf21d4db08
2019-04-12 18:39:14 -07:00
Max Semenik
796ea841d7 Password: update documentation
Change-Id: Ifd7afc48e301a7985c2dd9134a7ea75af9bfeb4b
2019-03-17 12:44:19 -07:00
Max Semenik
292e13edc5 Add support for Argon2 password hashing
So far, everything we had was vulnerable to newest advances in
GPU cracking and timing side-channel attacks. Argon2 was designed
specifically to address these problems.

Unfortunately, PHP support is lagging, with some builds missing
Argon2id or even Argon2i.

Change-Id: Ifdf648f5d8a734a663e630286724a6d0a87c7510
2019-02-10 02:20:52 -08:00
Max Semenik
7a7976ba7a Password: replace equals() with verify()
So far, our key derivation code assumed that it has control over
the salt used by the derivation routines, however I want to add Argon2
support and it doesn't work this way: password_hash() generates the
salt itself, and the only way to verify a password is by using
password_verify(). Current way the things are done doesn't support it
because it relies on the result of password hashing with parameters we
provide to be deterministic.

Therefore, I'm deprecating Password::equals(), as well as whole concept
of comparing Password objects - it's used only in tests anyway. It's
getting replaced with verify() that only accepts password strings.
Uses of old function are fixed with exception of a few calls in tests
that will be addressed in my Argon2 patch.

Change-Id: I2b2be9a422ee0f773490eac316ad81505c3f8571
2019-01-24 13:40:40 -08:00
Max Semenik
d4f3e554d7 Decrease the number of 'function says it should return something' errors
Change-Id: Ib5115fe5bbaa67d8a6e54cc3ba1ba7020e239e11
2016-12-15 16:05:52 -08:00
Brian Wolff
e8589233bc Throw an exception if password hash would be truncated by DB
DB uses a tinyblob field. With layered encrypted passwords, the
length gets close to 255 and can exceed if you use a long name
for the password type. Previously these would be silently inserted
into the DB and truncated, which would lock user out of their
account.

Change-Id: Idf0d0248b181f42d92e3ad6c3220b5331cd4d4d0
2016-11-15 06:21:03 +00:00
Tyler Anthony Romeo
95a8974c6b
Added password hashing API
Deprecated the old User::crypt, et. al password hashing
system and implemented an extensible password hashing
API.

The new Password class allows registering of child classes
and provides factory functions for creating new Password
objects. The built-in hash types are the old MediaWiki MD5
types, which are for backwards-compatibility only, and bcrypt.

Also included is support for wrapping existing hashes as well
as encrypting passwords with a configured encryption key.

Bug: 54948
Bug: 28419
Change-Id: I0a9c972931a0eff0cfb2619cef3ddffd03710285
2014-07-27 15:51:18 -04:00