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; }
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); } }