Exemplo n.º 1
0
 public MessageContainer(Hash Sender, Hash Receiver, Hash.HashProvider HashProvider)
 {
     SenderHash   = Sender;
     ReceiverHash = Receiver;
     Provider     = HashProvider;
     Payload      = new byte[0];
 }
Exemplo n.º 2
0
        /// <summary>
        /// Objects for all chains this server is participating in
        /// </summary>
        //private Dictionary<Hash, BlockChain> ParticipatingChains = new Dictionary<Hash, BlockChain>();

        //private Dictionary<Hash, User> KnownUsers = new Dictionary<Hash, User>();


        public void Initialize(Hash.HashProvider Provider)
        {
            if (StoreCache != null)
            {
                StoreCache.Initialize();
            }

            KnownPeers = new ConsistentHash <Peer>(Provider);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Verifies any Hashable item against a key and signature
        /// </summary>
        /// <typeparam name="T">The type</typeparam>
        /// <param name="HashableItem">Item to verify</param>
        /// <param name="signature">Signature Bytes</param>
        /// <param name="Provider">Hash Provider</param>
        /// <param name="VerifyCert">The cert to verify against</param>
        /// <returns></returns>
        public static bool Verify <T>(T HashableItem, byte[] signature, Hash.HashProvider Provider, X509Certificate2 VerifyCert) where T : Hashable
        {
            RSACryptoServiceProvider csp = (RSACryptoServiceProvider)VerifyCert.PublicKey.Key;

            byte[] hash        = HashableItem.GetHash(Provider).Bytes;
            var    providerOID = Hash.GetOIDForProvider(Provider);

            return(csp.VerifyHash(hash, providerOID, signature));
        }
Exemplo n.º 4
0
        /// <summary>
        /// Signs any Hashable item
        /// </summary>
        /// <typeparam name="T">The type</typeparam>
        /// <param name="HashableItem">Object to sign</param>
        /// <param name="Provider">Hash provider</param>
        /// <param name="SigningCert">The cert to sign with</param>
        /// <returns>A</returns>
        public static byte[] Sign <T>(T HashableItem, Hash.HashProvider Provider, X509Certificate2 SigningCert) where T : Hashable
        {
            RSACryptoServiceProvider csp = (RSACryptoServiceProvider)SigningCert.PrivateKey;

            byte[] hash        = HashableItem.GetHash(Provider).Bytes;
            var    providerOID = Hash.GetOIDForProvider(Provider);

            return(csp.SignHash(hash, providerOID));
        }
Exemplo n.º 5
0
        public MessageContainer(Hash Sender, Hash Receiver, Hash.HashProvider HashProvider, byte[] MessagePayload, Cert SenderCertificate)
        {
            SenderHash   = Sender;
            ReceiverHash = Receiver;
            Payload      = MessagePayload;
            SenderCert   = SenderCertificate;
            Provider     = HashProvider;

            ComputeHash(Provider, SenderCert);
        }
Exemplo n.º 6
0
        public static int ByteCount(Hash.HashProvider ForProvider, int PayloadBytes, bool ZeroIndexed)
        {
            int pl = Hash.GetProviderByteLength(ForProvider);

            if (ZeroIndexed)
            {
                return(intLength + PayloadBytes + (pl * 3));
            }
            else
            {
                return(intLength + PayloadBytes + (pl * 3) + 1);
            }
        }
Exemplo n.º 7
0
        Hash[] ayKeys = null;    //cache the ordered keys for better performance

        public ConsistentHash(Hash.HashProvider _Provider)
        {
            Provider = _Provider;
        }
Exemplo n.º 8
0
 public void ComputeHash(Hash.HashProvider Provider, Cert SigningCert) => ((IHashable)Cert).ComputeHash(Provider, SigningCert);
Exemplo n.º 9
0
        public static ServiceConfig Defaults(bool GenerateCerts, int DefaultCertLength, Hash.HashProvider Provider,
                                             string SwarmName, Uri SwarmPublicUri, Uri ServerUri, Uri LocalServerUri, X509Certificate2 SigningCert,
                                             Version ServiceApiCompartibilityVersion, Version ServiceApiVersion, IObjectCache ObjectCache)
        {
            var config = new ServiceConfig();

            config.ServerPeerInfo = new Peer()
            {
                Version = new AppVersionInfo()
                {
                    ApiCompartibilityVersion = ServiceApiCompartibilityVersion,
                    ApiVersion = ServiceApiVersion,
                    Name       = Assembly.GetExecutingAssembly().GetName().FullName,
                    Version    = Assembly.GetExecutingAssembly().GetName().Version
                }
            };

            config.Swarm = new Swarm()
            {
                Accessibility = Swarm.JoinAccessibility.NoRestrictions,

                RootCertMinLength   = DefaultCertLength,
                ServerCertMinLength = DefaultCertLength,
                UserCertMinLength   = DefaultCertLength,

                BlobMinLength  = 1024 * 128,
                BlobMaxLength  = 1024 * 1024,
                BlobMinStorage = new TimeSpan(24, 0, 0),

                ItemMinLength  = 1024,
                ItemMaxLength  = 1024 * 128,
                ItemMinStorage = new TimeSpan(24, 0, 0),

                MessageMinLength  = 1024,
                MessageMaxLength  = 1024 * 128,
                MessageMinStorage = new TimeSpan(4, 0, 0),

                PaddingEnforced = true,
                SwarmName       = SwarmName,
                PublicAddress   = SwarmPublicUri
            };

            config.Server = new Server()
            {
                ServiceAddress = LocalServerUri.OriginalString,
                StoreCache     = ObjectCache
            };

            //start the cache
            config.Server.StoreCache.Initialize();

            if (GenerateCerts)
            {
                var swarmKey = new CertBuilder {
                    Issuer      = SigningCert,
                    SubjectName = "CN=" + config.Swarm.SwarmName,
                    KeyStrength = config.Swarm.RootCertMinLength,
                    NotBefore   = DateTime.Now,
                    NotAfter    = DateTime.Now.AddYears(10)
                }.BuildX509();

                config.Swarm.Cert = new Cert(swarmKey);
                //config.Swarm.PublicKey = Utility.GetPublicKey(swarmKey);

                var serverKey = new CertBuilder {
                    Issuer      = SigningCert,
                    SubjectName = "CN=" + config.Swarm.SwarmName,
                    KeyStrength = config.Swarm.RootCertMinLength,
                    NotBefore   = DateTime.Now,
                    NotAfter    = DateTime.Now.AddYears(10)
                }.BuildX509();

                config.Server.Cert         = new Cert(serverKey);
                config.ServerPeerInfo.Cert = config.Server.Cert.RemovePrivateKey();
                //config.ServerPeerInfo.ComputeHash(Provider, new Cert(SigningCert));
            }

            return(config);
        }
Exemplo n.º 10
0
 /// <summary>
 /// Get a Hash object for this class with a specified provider
 /// </summary>
 public Hash GetHash(Hash.HashProvider _Provider)
 {
     return(Hash.Compute(HashableData(), _Provider));
 }
Exemplo n.º 11
0
 /// <summary>
 /// Compute a hash for this object and optionally signs it
 /// </summary>
 /// <param name="Provider">The hash provider to use</param>
 /// <param name="SigningCert">If provided the cert to sign the hash with</param>
 public void ComputeHash(Hash.HashProvider Provider, Cert SigningCert = null)
 {
     ComputedHash = Hash.Compute(GetHashableData(), Provider, SigningCert);
 }