public bool VerifyCertificate() { var hub = new Hub(); try { var target = new BroadcastClue(this.Type, this.CreationTime, this.Clue, null); target.Export(hub.Writer, BufferPool.Shared); hub.Writer.Complete(); var result = this.Certificate.Verify(hub.Reader.GetSequence()); hub.Reader.Complete(); return(result); } finally { hub.Reset(); } }
public static BroadcastClue Create(string type, Timestamp creationTime, Clue clue, OmniDigitalSignature digitalSignature) { var hub = new Hub(); try { var target = new BroadcastClue(type, creationTime, clue, null); target.Export(hub.Writer, BufferPool.Shared); hub.Writer.Complete(); var certificate = OmniCertificate.Create(digitalSignature, hub.Reader.GetSequence()); hub.Reader.Complete(); return(new BroadcastClue(type, creationTime, clue, certificate)); } finally { hub.Reset(); } }
public bool SetMetadata(BroadcastClue BroadcastClue) { lock (_lockObject) { var now = DateTime.UtcNow; if (BroadcastClue == null || BroadcastClue.Type == null || (BroadcastClue.CreationTime.ToDateTime() - now).TotalMinutes > 30 || BroadcastClue.Certificate == null) { return(false); } if (!_BroadcastClues.TryGetValue(BroadcastClue.Type, out var dic)) { dic = new Dictionary <OmniSignature, BroadcastClue>(); _BroadcastClues[BroadcastClue.Type] = dic; } var signature = BroadcastClue.Certificate.GetOmniSignature(); if (!dic.TryGetValue(signature, out var tempMetadata) || BroadcastClue.CreationTime.ToDateTime() > tempMetadata.CreationTime.ToDateTime()) { if (!BroadcastClue.VerifyCertificate()) { return(false); } dic[signature] = BroadcastClue; } return(true); } }