private void SetupUserKey()
{
if (revision == STANDARD_ENCRYPTION_128 || revision == AES_128) {
md5.BlockUpdate(pad, 0, pad.Length);
md5.BlockUpdate(documentID, 0, documentID.Length);
byte[] digest = new byte[md5.GetDigestSize()];
md5.DoFinal(digest, 0);
md5.Reset();
Array.Copy(digest, 0, userKey, 0, 16);
for (int k = 16; k < 32; ++k)
userKey[k] = 0;
for (int i = 0; i < 20; ++i) {
for (int j = 0; j < mkey.Length; ++j)
digest[j] = (byte)(mkey[j] ^ i);
rc4.PrepareARCFOURKey(digest, 0, mkey.Length);
rc4.EncryptARCFOUR(userKey, 0, 16);
}
}
else {
rc4.PrepareARCFOURKey(mkey);
rc4.EncryptARCFOUR(pad, userKey);
}
}