示例#1
0
        public bool SetMetadata(UnicastClue UnicastClue)
        {
            lock (_lockObject)
            {
                var now = DateTime.UtcNow;

                if (UnicastClue == null ||
                    UnicastClue.Type == null ||
                    UnicastClue.Signature == null ||
                    UnicastClue.Signature.Hash.Value.Length == 0 ||
                    string.IsNullOrWhiteSpace(UnicastClue.Signature.Name) ||
                    (UnicastClue.CreationTime.ToDateTime() - now).TotalMinutes > 30 ||
                    UnicastClue.Certificate == null)
                {
                    return(false);
                }

                if (!_UnicastClues.TryGetValue(UnicastClue.Type, out var dic))
                {
                    dic = new Dictionary <OmniSignature, Dictionary <OmniSignature, HashSet <UnicastClue> > >();
                    _UnicastClues[UnicastClue.Type] = dic;
                }

                if (!dic.TryGetValue(UnicastClue.Signature, out var dic2))
                {
                    dic2 = new Dictionary <OmniSignature, HashSet <UnicastClue> >();
                    dic[UnicastClue.Signature] = dic2;
                }

                var signature = UnicastClue.Certificate.GetOmniSignature();

                if (!dic2.TryGetValue(signature, out var hashset))
                {
                    hashset         = new HashSet <UnicastClue>();
                    dic2[signature] = hashset;
                }

                if (!hashset.Contains(UnicastClue))
                {
                    if (!UnicastClue.VerifyCertificate())
                    {
                        return(false);
                    }

                    hashset.Add(UnicastClue);
                }

                return(true);
            }
        }
示例#2
0
        public bool VerifyCertificate()
        {
            var hub = new Hub();

            try
            {
                var target = new UnicastClue(this.Type, this.Signature, 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();
            }
        }
示例#3
0
        public static UnicastClue Create(string type, OmniSignature signature, Timestamp creationTime, Clue clue, OmniDigitalSignature digitalSignature)
        {
            var hub = new Hub();

            try
            {
                var target = new UnicastClue(type, signature, 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 UnicastClue(type, signature, creationTime, clue, certificate));
            }
            finally
            {
                hub.Reset();
            }
        }