| validatePerms(PDEncryption, int, boolean) |   | 60% |   | 43% | 8 | 9 | 7 | 16 | 0 | 1 |
| prepareForDecryption(PDEncryption, COSArray, DecryptionMaterial) |   | 86% |   | 86% | 6 | 23 | 5 | 65 | 0 | 1 |
| isUserPassword(String, byte[], byte[], int, byte[], int, int, boolean) |  | 0% |  | 0% | 3 | 3 | 3 | 3 | 1 | 1 |
| computeEncryptedKeyRev56(byte[], boolean, byte[], byte[], byte[], byte[], int) |   | 76% |   | 70% | 3 | 6 | 6 | 24 | 0 | 1 |
| logIfStrongEncryptionMissing() |  | 0% |  | 0% | 2 | 2 | 6 | 6 | 1 | 1 |
| isOwnerPassword(String, byte[], byte[], int, byte[], int, int, boolean) |  | 0% | | n/a | 1 | 1 | 1 | 1 | 1 | 1 |
| computeOwnerPassword(byte[], byte[], int, int) |   | 87% |   | 91% | 1 | 7 | 1 | 16 | 0 | 1 |
| isUserPassword(byte[], byte[], byte[], int, byte[], int, int, boolean) |   | 61% |   | 66% | 1 | 3 | 1 | 4 | 0 | 1 |
| truncate127(byte[]) |   | 35% |   | 50% | 1 | 2 | 3 | 5 | 0 | 1 |
| prepareDocumentForEncryption(PDDocument) |   | 90% |   | 71% | 4 | 8 | 4 | 31 | 0 | 1 |
| prepareEncryptionDictRev6(String, String, PDEncryption, int) |   | 97% |  | 100% | 0 | 2 | 3 | 52 | 0 | 1 |
| computeHash2B(byte[], byte[], byte[]) |   | 96% |  | 100% | 0 | 9 | 3 | 40 | 0 | 1 |
| isUserPassword56(byte[], byte[], int) |   | 85% |   | 50% | 1 | 2 | 1 | 9 | 0 | 1 |
| isOwnerPassword(byte[], byte[], byte[], int, byte[], int, int, boolean) |   | 93% |   | 87% | 1 | 5 | 1 | 14 | 0 | 1 |
| computeHash2A(byte[], byte[], byte[]) |   | 88% |   | 83% | 1 | 4 | 1 | 11 | 0 | 1 |
| getDocumentIDBytes(COSArray) |   | 85% |   | 50% | 2 | 3 | 1 | 6 | 0 | 1 |
| computeSHA256(byte[], byte[], byte[]) |   | 82% |   | 50% | 1 | 2 | 0 | 4 | 0 | 1 |
| computeRevisionNumber(int) |  | 94% |   | 85% | 2 | 8 | 1 | 11 | 0 | 1 |
| static {...} |  | 100% | | n/a | 0 | 1 | 0 | 4 | 0 | 1 |
| prepareEncryptionDictRev2345(String, String, PDEncryption, int, PDDocument, int, int) |  | 100% |   | 83% | 1 | 4 | 0 | 28 | 0 | 1 |
| computeUserPassword(byte[], byte[], int, byte[], int, int, boolean) |  | 100% |   | 90% | 1 | 6 | 0 | 23 | 0 | 1 |
| computeEncryptedKeyRev234(byte[], byte[], int, byte[], boolean, int, int) |  | 100% |  | 100% | 0 | 6 | 0 | 19 | 0 | 1 |
| getUserPassword(byte[], byte[], int, int) |  | 100% |   | 90% | 1 | 6 | 0 | 16 | 0 | 1 |
| computeRC4key(byte[], int, int) |  | 100% |  | 100% | 0 | 4 | 0 | 9 | 0 | 1 |
| concat(byte[], byte[], byte[]) |  | 100% | | n/a | 0 | 1 | 0 | 5 | 0 | 1 |
| truncateOrPad(byte[]) |  | 100% | | n/a | 0 | 1 | 0 | 5 | 0 | 1 |
| computeEncryptedKey(byte[], byte[], byte[], byte[], byte[], int, byte[], int, int, boolean, boolean) |  | 100% |  | 100% | 0 | 3 | 0 | 3 | 0 | 1 |
| isUserPassword234(byte[], byte[], byte[], int, byte[], int, int, boolean) |  | 100% |  | 100% | 0 | 2 | 0 | 4 | 0 | 1 |
| prepareEncryptionDictAES(PDEncryption, COSName) |  | 100% | | n/a | 0 | 1 | 0 | 8 | 0 | 1 |
| concat(byte[], byte[]) |  | 100% | | n/a | 0 | 1 | 0 | 4 | 0 | 1 |
| StandardSecurityHandler(StandardProtectionPolicy) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| StandardSecurityHandler() |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |