Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 2
0
        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();
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }