diff options
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/luapplib/ppcrypt.h')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/luapplib/ppcrypt.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/ppcrypt.h b/Build/source/texk/web2c/luatexdir/luapplib/ppcrypt.h new file mode 100644 index 00000000000..fc74cfe37ed --- /dev/null +++ b/Build/source/texk/web2c/luatexdir/luapplib/ppcrypt.h @@ -0,0 +1,61 @@ + +#ifndef PP_CRYPT_H +#define PP_CRYPT_H + +#include "ppfilter.h" +#include "utilcrypt.h" +#include "utilcryptdef.h" + +typedef struct { + ppuint algorithm_variant; /* /V entry of encrypt dict */ + ppuint algorithm_revision; /* /R entry of encrypt dict */ + ppint permissions; /* /P entry of encrypt dict */ + ppdict *map; /* /CF filters map of encrypt dict */ + uint8_t userpass[32]; /* padded user password */ + size_t userpasslength; /* the length of unpadded user password */ + uint8_t ownerpass[32]; /* padded owner password */ + size_t ownerpasslength; /* the length of unpadded owner password */ + uint8_t filekey[32+5+4]; /* generated file key with extra space of 5..9 bytes for salt */ + size_t filekeylength; /* key length; usually 5, 16 or 32 bytes */ + uint8_t cryptkey[32]; /* final crypt key for a given reference */ + size_t cryptkeylength; /* final crypt key length; usually keylength + 5 */ + ppref *ref; /* currently loaded ref (each ref may have a different key) */ + union { /* cached crypt states for strings encrypted/decrypted with the same key */ + struct { + rc4_state rc4state; + rc4_map rc4map; + rc4_map rc4copy; + }; + struct { + aes_state aesstate; + aes_keyblock aeskeyblock; + uint8_t ivcopy[16]; + }; + }; + int flags; +} ppcrypt; + +#define PPCRYPT_NO_METADATA (1<<0) +#define PPCRYPT_USER_PASSWORD (1<<1) +#define PPCRYPT_OWNER_PASSWORD (1<<2) +#define PPCRYPT_STREAM_RC4 (1<<3) +#define PPCRYPT_STRING_RC4 (1<<4) +#define PPCRYPT_STREAM_AES (1<<5) +#define PPCRYPT_STRING_AES (1<<6) +#define PPCRYPT_OBSCURITY (1<<7) + +#define PPCRYPT_STREAM (PPCRYPT_STREAM_AES|PPCRYPT_STREAM_RC4) +#define PPCRYPT_STRING (PPCRYPT_STRING_AES|PPCRYPT_STRING_RC4) +#define PPCRYPT_RC4 (PPCRYPT_STREAM_RC4|PPCRYPT_STRING_RC4) +#define PPCRYPT_AES (PPCRYPT_STREAM_AES|PPCRYPT_STRING_AES) + +ppcrypt_status ppdoc_crypt_init (ppdoc *pdf, const void *userpass, size_t userpasslength, const void *ownerpass, size_t ownerpasslength); +int ppstring_decrypt (ppcrypt *crypt, const void *input, size_t size, void *output, size_t *newsize); + +#define ppcrypt_start_ref(crypt, r) ((crypt)->ref = r, (crypt)->cryptkeylength = 0) +#define ppcrypt_end_ref(crypt) ((crypt)->ref = NULL, (crypt)->cryptkeylength = 0) +#define ppcrypt_ref(pdf, crypt) ((crypt = (pdf)->crypt) != NULL && crypt->ref != NULL) + +void ppstream_info (ppstream *stream, ppdoc *pdf); + +#endif
\ No newline at end of file |