GenerateHash() public static method

public static GenerateHash ( byte data ) : byte[]
data byte
return byte[]
        public void ComputeHash(bool useScrypt)
        {
            MemoryStream ms = new MemoryStream();
            BinaryWriter bw = new BinaryWriter(ms);

            bw.Write(mVersion);
            bw.Write(mPrevBlock);
            bw.Write(mMerkleRoot);
            bw.Write(mTimestamp);
            bw.Write(mDifficultyBits);
            bw.Write(mNOnce);
            byte[] data = ms.ToArray();
            bw.Close();

            if (useScrypt)
            {
                MinerLib_cs.Work work = new MinerLib_cs.Work();
                Buffer.BlockCopy(data, 0, work.data, 0, 80);
                for (int i = 0; i < 20; i++)
                {
                    work.data[i] = Utils.Byteswap(work.data[i]);
                }

                MinerLib_cs.Scrypt scrypt = new MinerLib_cs.Scrypt(work);
                mHash = scrypt.GetHash();
            }
            else
            {
                // SHA 256
                mHash = Utils.GenerateHash(data);
            }
        }
Beispiel #2
0
        int DisptachPacket(byte[] packet, long size)
        {
            MemoryStream stream = new MemoryStream(packet);
            BinaryReader br     = new BinaryReader(stream);

            int bytesConsumed = 0;

            while (stream.Position + 24 < size)
            {
                uint   networkID = br.ReadUInt32();
                string packetID  = Utils.ReadString(br, 12);
                uint   length    = br.ReadUInt32();
                uint   checksum  = br.ReadUInt32();
                if (stream.Position + length > size)
                {
                    break;
                }

                //Console.WriteLine(packetID);

                if (networkID == mNetworkID)
                {
                    byte[] payload = br.ReadBytes((int)length);

                    byte[] hash = Utils.GenerateHash(payload);
                    if (CompareChecksum(checksum, hash))
                    {
                        // valid packet, get the handler
                        if (mPacketProcessors.ContainsKey(packetID))
                        {
                            PacketProcessor p = mPacketProcessors[packetID];
                            p(payload);
                        }
                        else
                        {
                            Console.WriteLine("Unhandled packet: " + packetID);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Failed checksum!");
                    }
                }
                else
                {
                    Console.WriteLine("Failed ID Check, Network ID: " + networkID);
                }

                bytesConsumed += 24 + (int)length;
            }

            br.Close();
            return(bytesConsumed);
        }
Beispiel #3
0
        public void SendPacket(string packetID, byte[] payload)
        {
            byte[] hash = Utils.GenerateHash(payload);

            MemoryStream stream = new MemoryStream();
            BinaryWriter w      = new BinaryWriter(stream);

            w.Write(mNetworkID);

            for (int i = 0; i < 12; i++)
            {
                if (i < packetID.Length)
                {
                    w.Write((byte)packetID[i]);
                }
                else
                {
                    w.Write((byte)0);
                }
            }

            // Payload len
            w.Write(payload.Length);

            // Checksum
            w.Write(hash[0]);
            w.Write(hash[1]);
            w.Write(hash[2]);
            w.Write(hash[3]);

            w.Write(payload);

            byte[] packetData = stream.ToArray();
            mSocket.Send(packetData);
            w.Close();
        }