When opening a document encrypted with AES-256 (owner password only) by providing no password, the isUserPassword method fails, since it tries, indirectly, to decrypt a null pointer by calling computeUserPassword. The result of computeUserPassword would be ignored even if the call succeeded, since it is not need for AES-256 encryption.
Also, the code validating the Perms dictionary is correct, but unfortunately not even Acrobat seems to write Perms correctly (in my case P = F0C0 and Perms = F2C0), so that check needs to be relaxed. Perhaps logging the issue instead of throwing an exception would be more adequate.
Provided is a patch for both issues. I understand it is probably suboptimal but I am completely new to the project and have not yet had the time to study all coding conventions. Considering the patch is very small maybe someone can take it as a pointer of what needs to be changes.