1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 05:37:34 +00:00

LibCrypt: Clean up crypt_r

Remove an unused constant, use a C++-style `reinterpret_cast` and employ
an early return to remove excessive indentation. No functional changes.
This commit is contained in:
Jelle Raaijmakers 2022-11-24 11:24:03 +01:00 committed by Linus Groh
parent 2f7873d427
commit f0a4cc2d80

View file

@ -22,7 +22,6 @@ char* crypt(char const* key, char const* salt)
} }
static constexpr size_t crypt_salt_max = 16; static constexpr size_t crypt_salt_max = 16;
static constexpr size_t sha_string_length = 44;
char* crypt_r(char const* key, char const* salt, struct crypt_data* data) char* crypt_r(char const* key, char const* salt, struct crypt_data* data)
{ {
@ -31,8 +30,12 @@ char* crypt_r(char const* key, char const* salt, struct crypt_data* data)
return nullptr; return nullptr;
} }
if (salt[0] == '$') { // We only support SHA-256 at the moment
if (salt[1] == '5') { if (salt[0] != '$' || salt[1] != '5') {
errno = EINVAL;
return nullptr;
}
char const* salt_value = salt + 3; char const* salt_value = salt + 3;
size_t salt_len = min(strcspn(salt_value, "$"), crypt_salt_max); size_t salt_len = min(strcspn(salt_value, "$"), crypt_salt_max);
size_t header_len = salt_len + 3; size_t header_len = salt_len + 3;
@ -46,7 +49,7 @@ char* crypt_r(char const* key, char const* salt, struct crypt_data* data)
Crypto::Hash::SHA256 sha; Crypto::Hash::SHA256 sha;
sha.update(StringView { key, strlen(key) }); sha.update(StringView { key, strlen(key) });
sha.update((u8 const*)salt_value, salt_len); sha.update(reinterpret_cast<u8 const*>(salt_value), salt_len);
auto digest = sha.digest(); auto digest = sha.digest();
auto string = encode_base64(ReadonlyBytes(digest.immutable_data(), digest.data_length())); auto string = encode_base64(ReadonlyBytes(digest.immutable_data(), digest.data_length()));
@ -58,11 +61,5 @@ char* crypt_r(char const* key, char const* salt, struct crypt_data* data)
} }
return data->result; return data->result;
}
}
// DES crypt is not available.
errno = EINVAL;
return nullptr;
} }
} }