public EncryptionInfo(DirectoryNode dir) { DocumentInputStream dis = dir.CreateDocumentInputStream("EncryptionInfo"); versionMajor = dis.ReadShort(); versionMinor = dis.ReadShort(); encryptionFlags = dis.ReadInt(); if (versionMajor == 4 && versionMinor == 4 && encryptionFlags == 0x40) { StringBuilder builder = new StringBuilder(); byte[] xmlDescriptor = new byte[dis.Available()]; dis.Read(xmlDescriptor); foreach (byte b in xmlDescriptor) builder.Append((char)b); string descriptor = builder.ToString(); header = new EncryptionHeader(descriptor); verifier = new EncryptionVerifier(descriptor); } else { int hSize = dis.ReadInt(); header = new EncryptionHeader(dis); if (header.Algorithm == EncryptionHeader.ALGORITHM_RC4) { verifier = new EncryptionVerifier(dis, 20); } else { verifier = new EncryptionVerifier(dis, 32); } } }
public EncryptionHeader(DocumentInputStream dr) { flags = dr.ReadInt(); sizeExtra = dr.ReadInt(); algorithm = dr.ReadInt(); hashAlgorithm = dr.ReadInt(); keySize = dr.ReadInt(); providerType = dr.ReadInt(); dr.ReadLong(); //skip reserved. StringBuilder builder = new StringBuilder(); while (true) { char c = (char)dr.ReadShort(); if (c == 0) { break; } builder.Append(c); } cspName = builder.ToString(); cipherMode = MODE_ECB; keySalt = null; }
public EncryptionHeader(DocumentInputStream dr) { flags = dr.ReadInt(); sizeExtra = dr.ReadInt(); algorithm = dr.ReadInt(); hashAlgorithm = dr.ReadInt(); keySize = dr.ReadInt(); providerType = dr.ReadInt(); dr.ReadLong(); //skip reserved. StringBuilder builder = new StringBuilder(); while (true) { char c = (char)dr.ReadShort(); if (c == 0) break; builder.Append(c); } cspName = builder.ToString(); cipherMode = MODE_ECB; keySalt = null; }