/// <summary>
        /// Verify Ed25519 signature
        /// </summary>
        /// <param name="signature">Signature bytes</param>
        /// <param name="message">Message</param>
        /// <param name="publicKey">Public key</param>
        /// <returns>True if signature is valid, false if it's not</returns>
        public static bool Verify(ArraySegment <byte> signature, ArraySegment <byte> message, ArraySegment <byte> publicKey)
        {
            if (signature.Count != SignatureSize)
            {
                throw new ArgumentException($"Sizeof signature doesnt match defined size of {SignatureSize}");
            }

            if (publicKey.Count != PublicKeySize)
            {
                throw new ArgumentException($"Sizeof public key doesnt match defined size of {PublicKeySize}");
            }

            return(Ed25519Operations.crypto_sign_verify(signature.Array, signature.Offset, message.Array, message.Offset, message.Count, publicKey.Array, publicKey.Offset));
        }
        /// <summary>
        /// Verify Ed25519 signature
        /// </summary>
        /// <param name="signature">Signature bytes</param>
        /// <param name="message">Message</param>
        /// <param name="publicKey">Public key</param>
        /// <returns>True if signature is valid, false if it's not</returns>
        public static bool Verify(byte[] signature, byte[] message, byte[] publicKey)
        {
            Preconditions.NotNull(signature, nameof(signature));
            Preconditions.NotNull(message, nameof(message));
            Preconditions.NotNull(publicKey, nameof(publicKey));
            if (signature.Length != SignatureSize)
            {
                throw new ArgumentException($"Sizeof signature doesnt match defined size of {SignatureSize}");
            }

            if (publicKey.Length != PublicKeySize)
            {
                throw new ArgumentException($"Sizeof public key doesnt match defined size of {PublicKeySize}");
            }

            return(Ed25519Operations.crypto_sign_verify(signature, 0, message, 0, message.Length, publicKey, 0));
        }