iTextSharp.text.pdf.PdfEncryption.SetupGlobalEncryptionKey C# (CSharp) Метод

SetupGlobalEncryptionKey() приватный Метод

private SetupGlobalEncryptionKey ( byte documentID, byte userPad, byte ownerKey, int permissions ) : void
documentID byte
userPad byte
ownerKey byte
permissions int
Результат void
        private void SetupGlobalEncryptionKey(byte[] documentID, byte[] userPad, byte[] ownerKey, int permissions)
        {
            this.documentID = documentID;
            this.ownerKey = ownerKey;
            this.permissions = permissions;
            // use variable keylength
            mkey = new byte[keyLength / 8];

            //fixed by ujihara in order to follow PDF refrence
            md5.Reset();
            md5.BlockUpdate(userPad, 0, userPad.Length);
            md5.BlockUpdate(ownerKey, 0, ownerKey.Length);

            byte[] ext = new byte[4];
            ext[0] = (byte)permissions;
            ext[1] = (byte)(permissions >> 8);
            ext[2] = (byte)(permissions >> 16);
            ext[3] = (byte)(permissions >> 24);
            md5.BlockUpdate(ext, 0, 4);
            if (documentID != null)
            md5.BlockUpdate(documentID, 0, documentID.Length);
            if (!encryptMetadata)
            md5.BlockUpdate(metadataPad, 0, metadataPad.Length);
            byte[] hash = new byte[md5.GetDigestSize()];
            md5.DoFinal(hash, 0);

            byte[] digest = new byte[mkey.Length];
            Array.Copy(hash, 0, digest, 0, mkey.Length);

            md5.Reset();
            // only use the really needed bits as input for the hash
            if (revision == STANDARD_ENCRYPTION_128 || revision == AES_128) {
            for (int k = 0; k < 50; ++k) {
                Array.Copy(DigestAlgorithms.Digest("MD5", digest), 0, digest, 0, mkey.Length);
            }
            }
            Array.Copy(digest, 0, mkey, 0, mkey.Length);
        }