public SerializeResult TrySerialize(IDictionary <string, object> data, EncryptionParameters encryption = null) { var result = new SerializeResult(); switch (encryption) { case PasswordParameters p: result = SerializePasswordBlock(data, p); break; case PublicKeyParameters p: result = SerializePublicKeyHashBlock(data, p); break; default: result = SerializePlainDataBlock(data, true); break; } if (result.Status == SaveStatus.Success) { result.Data = compressor.Compress(result.Data); } return(result); }
public SerializeResult TrySerialize(IDictionary <string, object> data, EncryptionParameters encryption = null) { var result = new SerializeResult(); var settings = new XmlWriterSettings { Encoding = new UTF8Encoding(), Indent = true }; var stream = new MemoryStream(); logger.Debug("Starting to serialize data..."); using (var writer = XmlWriter.Create(stream, settings)) { writer.WriteStartDocument(); writer.WriteDocType("plist", "-//Apple Computer//DTD PLIST 1.0//EN", "http://www.apple.com/DTDs/PropertyList-1.0.dtd", null); writer.WriteStartElement(XmlElement.Root); writer.WriteAttributeString("version", "1.0"); result.Status = WriteDictionary(writer, data); result.Data = stream; writer.WriteEndElement(); writer.WriteEndDocument(); writer.Flush(); writer.Close(); } logger.Debug($"Finished serialization -> Result: {result.Status}."); return(result); }
public void ConfigureClient_MustAbortProcessOnError() { var stream = new MemoryStream() as Stream; var password = new PasswordParameters { Password = "******" }; var parseResult = new ParseResult { Format = FormatType.Binary, RawData = new Dictionary <string, object>(), Status = LoadStatus.Success }; var serializeResult = new SerializeResult { Data = new MemoryStream(), Status = SaveStatus.Success }; RegisterModules(); fileLoader.Setup(n => n.TryLoad(It.IsAny <Uri>(), out stream)).Returns(LoadStatus.Success); binaryParser.Setup(b => b.CanParse(It.IsAny <Stream>())).Throws <Exception>(); var status = sut.ConfigureClientWith(new Uri("C:\\TEMP\\Some\\file.seb"), password); fileLoader.Verify(n => n.TryLoad(It.IsAny <Uri>(), out stream), Times.Once); binaryParser.Verify(b => b.TryParse(It.IsAny <Stream>(), It.IsAny <PasswordParameters>()), Times.Never); certificateStore.Verify(c => c.ExtractAndImportIdentities(It.IsAny <Dictionary <string, object> >()), Times.Never); binarySerializer.Verify(b => b.TrySerialize(It.IsAny <Dictionary <string, object> >(), It.IsAny <EncryptionParameters>()), Times.Never); fileSaver.Verify(f => f.TrySave(It.IsAny <Uri>(), It.IsAny <Stream>()), Times.Never); Assert.AreEqual(SaveStatus.UnexpectedError, status); }
public void Initialize() { compressor = new Mock <IDataCompressor>(); logger = new Mock <ILogger>(); passwordEncryption = new Mock <IPasswordEncryption>(); publicKeyEncryption = new Mock <IPublicKeyEncryption>(); symmetricEncryption = new Mock <IPublicKeyEncryption>(); xmlResult = new SerializeResult { Data = new MemoryStream(), Status = SaveStatus.Success }; xmlSerializer = new Mock <IDataSerializer>(); compressor.Setup(c => c.Compress(It.IsAny <Stream>())).Returns(new MemoryStream()); xmlSerializer.Setup(x => x.TrySerialize(It.IsAny <IDictionary <string, object> >(), It.IsAny <EncryptionParameters>())).Returns(xmlResult); sut = new BinarySerializer(compressor.Object, logger.Object, passwordEncryption.Object, publicKeyEncryption.Object, symmetricEncryption.Object, xmlSerializer.Object); }
public void ConfigureClient_MustKeepSameEncryptionAccordingToConfiguration() { var stream = new MemoryStream() as Stream; var password = new PasswordParameters { Password = "******" }; var parseResult = new ParseResult { Encryption = new PublicKeyParameters { InnerEncryption = password, SymmetricEncryption = true }, Format = FormatType.Binary, RawData = new Dictionary <string, object> { { Keys.ConfigurationFile.KeepClientConfigEncryption, true } }, Status = LoadStatus.Success }; var serializeResult = new SerializeResult { Data = new MemoryStream(), Status = SaveStatus.Success }; RegisterModules(); fileLoader.Setup(n => n.TryLoad(It.IsAny <Uri>(), out stream)).Returns(LoadStatus.Success); binaryParser.Setup(b => b.CanParse(It.IsAny <Stream>())).Returns(true); binaryParser.Setup(b => b.TryParse(It.IsAny <Stream>(), It.IsAny <PasswordParameters>())).Returns(parseResult); binarySerializer.Setup(b => b.CanSerialize(FormatType.Binary)).Returns(true); binarySerializer.Setup(b => b.TrySerialize(It.IsAny <Dictionary <string, object> >(), It.IsAny <EncryptionParameters>())).Returns(serializeResult); fileSaver.Setup(f => f.TrySave(It.IsAny <Uri>(), It.IsAny <Stream>())).Returns(SaveStatus.Success); var status = sut.ConfigureClientWith(new Uri("C:\\TEMP\\Some\\file.seb"), password); binarySerializer.Verify(b => b.TrySerialize( It.IsAny <Dictionary <string, object> >(), It.Is <PublicKeyParameters>(p => p.InnerEncryption == password && p.SymmetricEncryption)), Times.Once); Assert.AreEqual(SaveStatus.Success, status); }
public void ConfigureClient_MustWorkAsExpected() { var stream = new MemoryStream() as Stream; var password = new PasswordParameters { Password = "******" }; var parseResult = new ParseResult { Format = FormatType.Binary, RawData = new Dictionary <string, object>(), Status = LoadStatus.Success }; var serializeResult = new SerializeResult { Data = new MemoryStream(), Status = SaveStatus.Success }; RegisterModules(); fileLoader.Setup(n => n.TryLoad(It.IsAny <Uri>(), out stream)).Returns(LoadStatus.Success); binaryParser.Setup(b => b.CanParse(It.IsAny <Stream>())).Returns(true); binaryParser.Setup(b => b.TryParse(It.IsAny <Stream>(), It.IsAny <PasswordParameters>())).Returns(parseResult); binarySerializer.Setup(b => b.CanSerialize(FormatType.Binary)).Returns(true); binarySerializer.Setup(b => b.TrySerialize(It.IsAny <Dictionary <string, object> >(), It.IsAny <PasswordParameters>())).Returns(serializeResult); fileSaver.Setup(f => f.TrySave(It.IsAny <Uri>(), It.IsAny <Stream>())).Returns(SaveStatus.Success); var status = sut.ConfigureClientWith(new Uri("C:\\TEMP\\Some\\file.seb"), password); fileLoader.Verify(n => n.TryLoad(It.IsAny <Uri>(), out stream), Times.Once); binaryParser.Verify(b => b.TryParse(It.IsAny <Stream>(), It.IsAny <PasswordParameters>()), Times.Once); certificateStore.Verify(c => c.ExtractAndImportIdentities(It.IsAny <Dictionary <string, object> >()), Times.Once); binarySerializer.Verify(b => b.TrySerialize( It.IsAny <Dictionary <string, object> >(), It.Is <PasswordParameters>(p => p.IsHash == true && p.Password == string.Empty)), Times.Once); fileSaver.Verify(f => f.TrySave(It.IsAny <Uri>(), It.IsAny <Stream>()), Times.Once); Assert.AreEqual(SaveStatus.Success, status); }