Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #4
0
        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);
        }