Exemple #1
0
    public static Shout Create(Timestamp creationTime, IMemoryOwner <byte> value, OmniDigitalSignature digitalSignature)
    {
        using var bytesPipe = new BytesPipe();
        var target = new Shout(creationTime, value, null);

        target.Export(bytesPipe.Writer, BytesPool.Shared);

        var certificate = OmniDigitalSignature.CreateOmniCertificate(digitalSignature, bytesPipe.Reader.GetSequence());

        return(new Shout(creationTime, value, certificate));
    }
Exemple #2
0
    public static IEnumerable <object?[]> GetRandomSendAndReceiveTestCases()
    {
        var clientDigitalSignature = OmniDigitalSignature.Create("client", OmniDigitalSignatureAlgorithmType.EcDsa_P521_Sha2_256);
        var serverDigitalSignature = OmniDigitalSignature.Create("server", OmniDigitalSignatureAlgorithmType.EcDsa_P521_Sha2_256);

        var results = new List <(OmniDigitalSignature?, OmniDigitalSignature?)> {
            (null, null),
            (clientDigitalSignature, serverDigitalSignature),
        };

        return(results.Select(n => new object?[] { n.Item1, n.Item2 }));
    }
    public static AuthenticationMessage Create(DateTime creationTime, ReadOnlyMemory <byte> hash, OmniDigitalSignature?digitalSignature)
    {
        if (digitalSignature is null)
        {
            return(new AuthenticationMessage(Timestamp.FromDateTime(creationTime), hash, null));
        }

        using var bytesPipe = new BytesPipe();
        var target = new AuthenticationMessage(Timestamp.FromDateTime(creationTime), hash, null);

        target.Export(bytesPipe.Writer, BytesPool.Shared);

        var certificate = OmniDigitalSignature.CreateOmniCertificate(digitalSignature, bytesPipe.Reader.GetSequence());

        return(new AuthenticationMessage(Timestamp.FromDateTime(creationTime), hash, certificate));
    }
Exemple #4
0
        public static OmniSignature GetOmniSignature(OmniDigitalSignature digitalSignature)
        {
            if (digitalSignature is null)
            {
                throw new ArgumentNullException(nameof(digitalSignature));
            }
            if (digitalSignature.Name == null)
            {
                throw new ArgumentNullException(nameof(digitalSignature.Name));
            }

            if (digitalSignature.AlgorithmType == OmniDigitalSignatureAlgorithmType.EcDsa_P521_Sha2_256)
            {
                return(new OmniSignature(digitalSignature.Name, CreateOmniHash(digitalSignature.Name, digitalSignature.PublicKey.Span, OmniHashAlgorithmType.Sha2_256)));
            }
            else
            {
                throw new NotSupportedException();
            }
        }
Exemple #5
0
    public static OmniCertificate Create(OmniDigitalSignature digitalSignature, ReadOnlySequence <byte> sequence)
    {
        if (digitalSignature is null)
        {
            throw new ArgumentNullException(nameof(digitalSignature));
        }

        ReadOnlyMemory <byte> value;

        if (digitalSignature.AlgorithmType == OmniDigitalSignatureAlgorithmType.EcDsa_P521_Sha2_256)
        {
            value = EcDsa_P521_Sha2_256.Sign(digitalSignature.PrivateKey, sequence);
        }
        else
        {
            throw new NotSupportedException(nameof(digitalSignature.AlgorithmType));
        }

        return(new OmniCertificate(digitalSignature.Name, digitalSignature.AlgorithmType, digitalSignature.PublicKey, value));
    }
Exemple #6
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();
            }
        }
 public static OmniCertificate CreateOmniCertificate(OmniDigitalSignature digitalSignature, ReadOnlySequence <byte> sequence)
 {
     return(OmniCertificate.Create(digitalSignature, sequence));
 }
Exemple #8
0
        public static async ValueTask <MulticastClue> Create(string type, Channel channel, Timestamp creationTime, Clue clue, OmniDigitalSignature digitalSignature, int miningLimit, TimeSpan miningTimeout, CancellationToken token)
        {
            OmniHashcash hashcash = null;
            {
                var hub = new Hub();

                try
                {
                    var target = new MulticastClue(type, channel, creationTime, clue, null, null);
                    target.Export(hub.Writer, BufferPool.Shared);
                    hub.Writer.Complete();

                    hashcash = await OmniMiner.Create(hub.Reader.GetSequence(), _utf8Encoding.Value.GetBytes(digitalSignature.GetOmniSignature().ToString()), OmniHashcashAlgorithmType.Sha2_256, miningLimit, miningTimeout, token);

                    hub.Reader.Complete();
                }
                finally
                {
                    hub.Reset();
                }
            }

            {
                var hub = new Hub();

                try
                {
                    var target = new MulticastClue(type, channel, creationTime, clue, hashcash, null);
                    target.Export(hub.Writer, BufferPool.Shared);
                    hub.Writer.Complete();

                    var certificate = OmniCertificate.Create(digitalSignature, hub.Reader.GetSequence());
                    hub.Reader.Complete();

                    return(new MulticastClue(type, channel, creationTime, clue, hashcash, certificate));
                }
                finally
                {
                    hub.Reset();
                }
            }
        }