コード例 #1
0
 public LightningLogStore(ILogObjectTypeProvider typeProvider)
 {
     _typeProvider = typeProvider;
     _hashProvider = new LogEntryHashProvider(_typeProvider);
     _keyBuilder   = new SequenceKeyBuilder();
     _sequence     = new LogStoreSequenceProvider(this);
 }
コード例 #2
0
 public OntologyWriter(ILogStore store, ILogObjectTypeProvider typeProvider, ILogEntryHashProvider hashProvider,
                       IOntologyChangeHandler changeHandler, IOptions <WebServerOptions> options)
 {
     _store         = store;
     _typeProvider  = typeProvider;
     _hashProvider  = hashProvider;
     _changeHandler = changeHandler;
     _options       = options;
 }
コード例 #3
0
        public LogDeserializeContext(BinaryReader br, ILogObjectTypeProvider typeProvider)
        {
            this.br           = br;
            this.typeProvider = typeProvider;

            Version = br.ReadUInt64();

            if (Version > LogSerializeContext.FormatVersion)
            {
                throw new Exception("Tried to load block with a version that is too new");
            }
        }
コード例 #4
0
        public LogSerializeContext(BinaryWriter bw, ILogObjectTypeProvider typeProvider, ulong version = FormatVersion)
        {
            this.bw           = bw;
            this.typeProvider = typeProvider;
            if (Version > FormatVersion)
            {
                throw new Exception("Tried to save block with a version that is too new");
            }
            Version = version;

            bw.Write(Version);
        }
コード例 #5
0
        public LightningRecordStore(string partitionKey, ISearchIndex index, RecordEvents events,
                                    ILogObjectTypeProvider typeProvider, ILogger <LightningRecordStore> logger = default)
        {
            _index        = index;
            _events       = events;
            _logger       = logger;
            _typeProvider = typeProvider;

            _columnKeyBuilder = new RecordColumnKeyBuilder();
            _recordKeyBuilder = new RecordKeyBuilder();

            _sequence = new GlobalSequenceProvider(partitionKey);
        }
コード例 #6
0
 public LightningMediaStore(MediaEvents events, ILogObjectTypeProvider typeProvider)
 {
     _events          = events;
     _typeProvider    = typeProvider;
     _mediaKeyBuilder = new MediaKeyBuilder();
 }
コード例 #7
0
 internal LogEntryHashProvider(ILogObjectTypeProvider typeProvider, HashAlgorithm algorithm)
 {
     _typeProvider = typeProvider;
     _algorithm    = algorithm;
 }
コード例 #8
0
 public LogEntryHashProvider(ILogObjectTypeProvider typeProvider) : this(typeProvider, SHA256.Create())
 {
 }
コード例 #9
0
        public static void RoundTripCheck(this LogEntry entry, ILogObjectTypeProvider typeProvider, byte[] secretKey)
        {
            var firstMemoryStream     = new MemoryStream();
            var firstSerializeContext = new LogSerializeContext(new BinaryWriter(firstMemoryStream), typeProvider);

            byte[] nonce;
            if (secretKey != null)
            {
                nonce = SecretStream.Nonce();
                firstSerializeContext.bw.WriteVarBuffer(nonce);
                using var ems = new MemoryStream();
                using var ebw = new BinaryWriter(ems);
                var ec = new LogSerializeContext(ebw, typeProvider, firstSerializeContext.Version);
                entry.Serialize(ec, false);
                firstSerializeContext.bw.WriteVarBuffer(SecretStream.EncryptMessage(ems.ToArray(), nonce, secretKey));
            }
            else
            {
                firstSerializeContext.bw.Write(false);
                entry.Serialize(firstSerializeContext, false);
            }

            var originalData = firstMemoryStream.ToArray();

            var br = new BinaryReader(new MemoryStream(originalData));
            var deserializeContext = new LogDeserializeContext(br, typeProvider);

            nonce = deserializeContext.br.ReadVarBuffer();

            LogEntry deserialized;

            if (nonce != null)
            {
                using var dms =
                          new MemoryStream(SecretStream.DecryptMessage(deserializeContext.br.ReadVarBuffer(), nonce,
                                                                       secretKey));
                using var dbr = new BinaryReader(dms);
                var dc = new LogDeserializeContext(dbr, typeProvider);
                deserialized = new LogEntry(dc);
            }
            else
            {
                deserialized = new LogEntry(deserializeContext);
            }

            var secondMemoryStream     = new MemoryCompareStream(originalData);
            var secondSerializeContext = new LogSerializeContext(new BinaryWriter(secondMemoryStream), typeProvider);

            if (secretKey != null)
            {
                secondSerializeContext.bw.WriteVarBuffer(nonce);
                using var ems = new MemoryStream();
                using var ebw = new BinaryWriter(ems);
                var ec = new LogSerializeContext(ebw, typeProvider, secondSerializeContext.Version);
                deserialized.Serialize(ec, false);
                secondSerializeContext.bw.WriteVarBuffer(SecretStream.EncryptMessage(ems.ToArray(), nonce, secretKey));
            }
            else
            {
                secondSerializeContext.bw.Write(false);
                deserialized.Serialize(secondSerializeContext, false);
            }
        }
コード例 #10
0
 public LightningPageStore(PageEvents events, ILogObjectTypeProvider typeProvider)
 {
     _events         = events;
     _typeProvider   = typeProvider;
     _pageKeyBuilder = new PageKeyBuilder();
 }