Esempio n. 1
0
 public LightningLogStore(ILogObjectTypeProvider typeProvider)
 {
     _typeProvider = typeProvider;
     _hashProvider = new LogEntryHashProvider(_typeProvider);
     _keyBuilder   = new SequenceKeyBuilder();
     _sequence     = new LogStoreSequenceProvider(this);
 }
 public OntologyWriter(ILogStore store, ILogObjectTypeProvider typeProvider, ILogEntryHashProvider hashProvider,
                       IOntologyChangeHandler changeHandler, IOptions <WebServerOptions> options)
 {
     _store         = store;
     _typeProvider  = typeProvider;
     _hashProvider  = hashProvider;
     _changeHandler = changeHandler;
     _options       = options;
 }
Esempio n. 3
0
        public static void EntryCheck(this LogEntry entry, LogEntry previous, ILogEntryHashProvider hashProvider)
        {
            if (previous.Index + 1 != entry.Index)
            {
                var message = $"Invalid index: expected '{previous.Index + 1}' but was '{entry.Index}'";
                throw new LogException(message);
            }

            if (!previous.Hash.SequenceEqual(entry.PreviousHash))
            {
                var message =
                    $"Invalid previous hash: expected '{Crypto.ToHexString(previous.Hash)}' but was '{Crypto.ToHexString(entry.PreviousHash)}'";
                throw new LogException(message);
            }

            var hashRoot = hashProvider.ComputeHashRootBytes(entry);

            if (!hashRoot.SequenceEqual(entry.HashRoot))
            {
                var message =
                    $"Invalid hash root: expected '{Crypto.ToHexString(hashRoot)}' but was '{Crypto.ToHexString(entry.HashRoot)}'";
                throw new LogException(message);
            }

            for (var i = 0; i < entry.Objects.Count; i++)
            {
                if (entry.Objects[i].Index == i)
                {
                    continue;
                }
                var message = $"Invalid object index: expected '{i}' but was '{entry.Objects[i].Index}'";
                throw new LogException(message);
            }

            var hash = hashProvider.ComputeHashBytes(entry);

            if (!hash.SequenceEqual(entry.Hash))
            {
                var message =
                    $"Invalid hash: expected '{Crypto.ToHexString(hash)}' but was '{Crypto.ToHexString(entry.Hash)}'";
                throw new LogException(message);
            }
        }