docs: public EncryptionKey loadKeyUsingPassword(String password) {
          if (password == null || password.equals("")) {
              throw new IllegalArgumentException("password is required to be a non-null/non-empty " +
                      "string");
          }
          KeyData data = this.storage.getEncryptionKeyData();
          if (data == null || !validateEncryptionKeyData(data)) {
              return null;
          }
  
          EncryptionKey dpk = null;
          SecretKey aesKey = null;
          try {
              aesKey = pbkdf2DerivedKeyForPassword(password, data.getSalt(), data.iterations,
                      ENCRYPTION_KEYCHAIN_AES_KEY_SIZE);
              byte[] dpkBytes = DPKEncryptionUtil.decryptAES(aesKey, data.getIv(), data
                      .getEncryptedDPK());
              dpk = new EncryptionKey(dpkBytes);
          } catch (NoSuchAlgorithmException e) {
              throw new DPKException("Failed to decrypt DPK", e);
          } catch (InvalidKeySpecException e) {
              throw new DPKException("Failed to decrypt DPK", e);
          } catch (IllegalBlockSizeException e) {
              throw new DPKException("Failed to decrypt DPK", e);
          } catch (InvalidKeyException e) {
              throw new DPKException("Failed to decrypt DPK", e);
          } catch (BadPaddingException e) {
              throw new DPKException("Failed to decrypt DPK", e);
          } catch (InvalidAlgorithmParameterException e) {
              throw new DPKException("Failed to decrypt DPK", e);
          } catch (NoSuchPaddingException e) {
              throw new DPKException("Failed to decrypt DPK", e);
          }
  
          return dpk;
      }