/* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once #include "strv.h" #include "user-record.h" typedef struct PasswordCache { /* Passwords acquired from the kernel keyring */ char **keyring_passswords; /* Decoding passwords from security tokens is expensive and typically requires user interaction, * hence cache any we already figured out. */ char **pkcs11_passwords; char **fido2_passwords; } PasswordCache; void password_cache_free(PasswordCache *cache); static inline bool password_cache_contains(const PasswordCache *cache, const char *p) { if (!cache) return false; return strv_contains(cache->pkcs11_passwords, p) || strv_contains(cache->fido2_passwords, p) || strv_contains(cache->keyring_passswords, p); } void password_cache_load_keyring(UserRecord *h, PasswordCache *cache);