public CACertificate(ulong id, string authorityName, DateTime issueDate, DateTime expireDate, HashFunctionType hashFunction = HashFunctionType.SHA1, uint ip = 0, byte[] ip6 = null) : base(id, issueDate, expireDate, hashFunction) { // assign type BinaryList cr = new BinaryList(); // make header cr.Append(id, issueDate, expireDate); // hash function cr.Append((byte)((byte)hashFunction << 4)); this.hashFunction = hashFunction; // CA Name this.name = authorityName; cr.Append((byte)(authorityName.Length), Encoding.ASCII.GetBytes(authorityName)); // public key rsa = RSA.Create();// new RSACryptoServiceProvider(2048); rsa.KeySize = 2048; RSAParameters dRSAKey = rsa.ExportParameters(true); cr.Append((byte)dRSAKey.Exponent.Length, dRSAKey.Exponent, (ushort)dRSAKey.Modulus.Length, dRSAKey.Modulus); publicRawData = cr.ToArray(); privateRawData = DC.Merge(dRSAKey.D, dRSAKey.DP, dRSAKey.DQ, dRSAKey.InverseQ, dRSAKey.P, dRSAKey.Q); }
/* * public bool Storable * { * get; * set; * }*/ public override byte[] Compose() { var name = base.Compose(); var pv = ((byte)(Permission) << 1) | (Storage == StorageMode.Recordable ? 1 : 0); if (WriteExpansion != null && ReadExpansion != null) { var rexp = DC.ToBytes(ReadExpansion); var wexp = DC.ToBytes(WriteExpansion); return(BinaryList.ToBytes((byte)(0x38 | pv), wexp.Length, wexp, rexp.Length, rexp, (byte)name.Length, name)); } else if (WriteExpansion != null) { var wexp = DC.ToBytes(WriteExpansion); return(BinaryList.ToBytes((byte)(0x30 | pv), wexp.Length, wexp, (byte)name.Length, name)); } else if (ReadExpansion != null) { var rexp = DC.ToBytes(ReadExpansion); return(BinaryList.ToBytes((byte)(0x28 | pv), rexp.Length, rexp, (byte)name.Length, name)); } else { return(BinaryList.ToBytes((byte)(0x20 | pv), (byte)name.Length, name)); } }
public override byte[] Compose() { var name = base.Compose(); var bl = new BinaryList() .AddUInt8((byte)name.Length) .AddUInt8Array(name) .AddUInt8Array(ReturnType.Compose()) .AddUInt8((byte)Arguments.Length); for (var i = 0; i < Arguments.Length; i++) { bl.AddUInt8Array(Arguments[i].Compose()); } if (Annotation != null) { var exp = DC.ToBytes(Annotation); bl.AddInt32(exp.Length) .AddUInt8Array(exp); bl.InsertUInt8(0, Inherited ? (byte)0x90 : (byte)0x10); } else { bl.InsertUInt8(0, Inherited ? (byte)0x80 : (byte)0x0); } return(bl.ToArray()); }
public void Iteration() { // ReSharper disable once SuggestVarOrType_SimpleTypes using BinaryList <int> .Enumerator e = Sample.GetEnumerator(); Assert.That(e.MoveNext(), Is.True); Assert.That(e.Current, Is.EqualTo(42)); Assert.That(e.MoveNext(), Is.False); Assert.That(e.MoveNext(), Is.False); }
public void Singleton() { // ReSharper disable once SuggestVarOrType_Elsewhere BinaryList <int> seq = Seq(42); Assert.That(seq, Is.EqualTo(new[] { 42 })); Assert.That(seq.Count, Is.EqualTo(1)); Assert.That(seq[0], Is.EqualTo(42)); }
/****************************************************************************/ public byte[] ToArray() { using (BinaryList aList = new BinaryList()) { aList.Add(_key); aList.Add(_IV); return(aList.ToArray()); } }
public override byte[] Serialize(bool includePrivate = false) { if (includePrivate) { return(BinaryList.ToBytes(publicRawData, signature, privateRawData)); } else { return(BinaryList.ToBytes(publicRawData, signature)); } }
/****************************************************************************/ public Crypto(byte[] key_iv) { using (BinaryList aList = new BinaryList(key_iv)) { _key = aList[0].DeepClone(); _IV = aList[1].DeepClone(); } #if DEBUG _strIV = _IV.ToBase64String(); _strKey = _key.ToBase64String(); #endif }
public override byte[] Compose() { var name = base.Compose(); if (Expansion != null) { var exp = DC.ToBytes(Expansion); return(BinaryList.ToBytes((byte)0x50, exp.Length, exp, (byte)name.Length, name)); } else { return(BinaryList.ToBytes((byte)0x40, (byte)name.Length, name)); } }
public override byte[] Compose() { var name = base.Compose(); if (Expansion != null) { var exp = DC.ToBytes(Expansion); return(BinaryList.ToBytes((byte)(0x10 | (IsVoid ? 0x8 : 0x0)), exp.Length, exp, (byte)name.Length, name)); } else { return(BinaryList.ToBytes((byte)(IsVoid ? 0x8 : 0x0), (byte)name.Length, name)); } }
public static byte[] HistoryComposer(KeyList <PropertyTemplate, PropertyValue[]> history, DistributedConnection connection, bool prependLength = false) { //@TODO:Test var rt = new BinaryList(); for (var i = 0; i < history.Count; i++) { rt.AddUInt8(history.Keys.ElementAt(i).Index) .AddUInt8Array(Codec.Compose(history.Values.ElementAt(i), connection)); } if (prependLength) { rt.InsertInt32(0, rt.Length); } return(rt.ToArray()); }
public Dictionary<int, byte> Encode(byte[] message, string savePath) { List<byte> data = new List<byte>(); data.AddRange(BitConverter.GetBytes(message.Length)); data.AddRange(message); if (!MessageFitsImage(data)) { throw new ArgumentException("Message is too big to encode in the image."); } BinaryList bits = new BinaryList(data); if (InvertBits) bits.Invert(); LockedBitmap lockedBmp = new LockedBitmap(BitmapImage); lockedBmp.LockBits(); Dictionary<int, byte> changes = new Dictionary<int, byte>(); int bitIndex = 0; for (int pixelIndex = Seed[0]; pixelIndex <= (BitmapImage.Height * BitmapImage.Width) && bitIndex < bits.Count; pixelIndex += (Seed[bitIndex % Seed.Count] + 1)) { byte[] pixelValue = lockedBmp.GetPixelArgb(pixelIndex); BinaryOctet octet = pixelValue[(int)Color]; for (int currBit = 0; currBit < lsb; ++currBit) octet = octet.SetBit(currBit, bits[bitIndex++]); if (octet != pixelValue[(int)Color]) { changes.Add(pixelIndex, pixelValue[(int)Color]); pixelValue[(int)Color] = octet; } lockedBmp.SetPixel(PixelCoord(pixelIndex, BitmapImage.Width), pixelValue); } lockedBmp.UnlockBits(); BitmapImage.Save(savePath, ImageFormat.Png); return changes; }
public override bool Save(string filename, bool includePrivate = false) { try { if (includePrivate) { File.WriteAllBytes(filename, BinaryList.ToBytes((byte)CertificateType.DomainPrivate, publicRawData, signature, privateRawData)); } else { File.WriteAllBytes(filename, BinaryList.ToBytes((byte)CertificateType.DomainPublic, publicRawData, signature)); } return(true); } catch { return(false); } }
/// <summary> /// Send data to the other end as parameters /// </summary> /// <param name="values">Values will be converted to bytes then sent.</param> internal void SendParams(params object[] values) { var data = BinaryList.ToBytes(values); if (ready) { var cmd = (IIPPacketCommand)(data[0] >> 6); if (cmd == IIPPacketCommand.Event) { var evt = (IIPPacketEvent)(data[0] & 0x3f); //Console.Write("Sent: " + cmd.ToString() + " " + evt.ToString()); } else if (cmd == IIPPacketCommand.Report) { var r = (IIPPacketReport)(data[0] & 0x3f); //Console.Write("Sent: " + cmd.ToString() + " " + r.ToString()); } else { var act = (IIPPacketAction)(data[0] & 0x3f); //Console.Write("Sent: " + cmd.ToString() + " " + act.ToString()); } //foreach (var param in values) // Console.Write(", " + param); //Console.WriteLine(); } Send(data); //StackTrace stackTrace = new StackTrace(; // Get calling method name //Console.WriteLine("TX " + hostType + " " + ar.Length + " " + stackTrace.GetFrame(1).GetMethod().ToString()); }
private uint processPacket(byte[] msg, uint offset, uint ends, NetworkBuffer data, int chunkId) { var packet = new IIPPacket(); // packets++; if (ready) { var rt = packet.Parse(msg, offset, ends); //Console.WriteLine("Rec: " + chunkId + " " + packet.ToString()); /* * if (packet.Command == IIPPacketCommand.Event) * Console.WriteLine("Rec: " + packet.Command.ToString() + " " + packet.Event.ToString()); * else if (packet.Command == IIPPacketCommand.Report) * Console.WriteLine("Rec: " + packet.Command.ToString() + " " + packet.Report.ToString()); * else * Console.WriteLine("Rec: " + packet.Command.ToString() + " " + packet.Action.ToString() + " " + packet.ResourceId + " " + offset + "/" + ends); */ //packs.Add(packet.Command.ToString() + " " + packet.Action.ToString() + " " + packet.Event.ToString()); //if (packs.Count > 1) // Console.WriteLine("P2"); if (rt <= 0) { var size = ends - offset; data.HoldFor(msg, offset, size, size + (uint)(-rt)); return(ends); } else { offset += (uint)rt; if (packet.Command == IIPPacket.IIPPacketCommand.Event) { switch (packet.Event) { case IIPPacket.IIPPacketEvent.ResourceReassigned: IIPEventResourceReassigned(packet.ResourceId, packet.NewResourceId); break; case IIPPacket.IIPPacketEvent.ResourceDestroyed: IIPEventResourceDestroyed(packet.ResourceId); break; case IIPPacket.IIPPacketEvent.PropertyUpdated: IIPEventPropertyUpdated(packet.ResourceId, packet.MethodIndex, packet.Content); break; case IIPPacket.IIPPacketEvent.EventOccurred: IIPEventEventOccurred(packet.ResourceId, packet.MethodIndex, packet.Content); break; case IIPPacketEvent.ChildAdded: IIPEventChildAdded(packet.ResourceId, packet.ChildId); break; case IIPPacketEvent.ChildRemoved: IIPEventChildRemoved(packet.ResourceId, packet.ChildId); break; case IIPPacketEvent.Renamed: IIPEventRenamed(packet.ResourceId, packet.Content); break; case IIPPacketEvent.AttributesUpdated: IIPEventAttributesUpdated(packet.ResourceId, packet.Content); break; } } else if (packet.Command == IIPPacket.IIPPacketCommand.Request) { switch (packet.Action) { // Manage case IIPPacket.IIPPacketAction.AttachResource: IIPRequestAttachResource(packet.CallbackId, packet.ResourceId); break; case IIPPacket.IIPPacketAction.ReattachResource: IIPRequestReattachResource(packet.CallbackId, packet.ResourceId, packet.ResourceAge); break; case IIPPacket.IIPPacketAction.DetachResource: IIPRequestDetachResource(packet.CallbackId, packet.ResourceId); break; case IIPPacket.IIPPacketAction.CreateResource: IIPRequestCreateResource(packet.CallbackId, packet.StoreId, packet.ResourceId, packet.Content); break; case IIPPacket.IIPPacketAction.DeleteResource: IIPRequestDeleteResource(packet.CallbackId, packet.ResourceId); break; case IIPPacketAction.AddChild: IIPRequestAddChild(packet.CallbackId, packet.ResourceId, packet.ChildId); break; case IIPPacketAction.RemoveChild: IIPRequestRemoveChild(packet.CallbackId, packet.ResourceId, packet.ChildId); break; case IIPPacketAction.RenameResource: IIPRequestRenameResource(packet.CallbackId, packet.ResourceId, packet.Content); break; // Inquire case IIPPacket.IIPPacketAction.TemplateFromClassName: IIPRequestTemplateFromClassName(packet.CallbackId, packet.ClassName); break; case IIPPacket.IIPPacketAction.TemplateFromClassId: IIPRequestTemplateFromClassId(packet.CallbackId, packet.ClassId); break; case IIPPacket.IIPPacketAction.TemplateFromResourceId: IIPRequestTemplateFromResourceId(packet.CallbackId, packet.ResourceId); break; case IIPPacketAction.QueryLink: IIPRequestQueryResources(packet.CallbackId, packet.ResourceLink); break; case IIPPacketAction.ResourceChildren: IIPRequestResourceChildren(packet.CallbackId, packet.ResourceId); break; case IIPPacketAction.ResourceParents: IIPRequestResourceParents(packet.CallbackId, packet.ResourceId); break; case IIPPacket.IIPPacketAction.ResourceHistory: IIPRequestInquireResourceHistory(packet.CallbackId, packet.ResourceId, packet.FromDate, packet.ToDate); break; // Invoke case IIPPacket.IIPPacketAction.InvokeFunction: IIPRequestInvokeFunction(packet.CallbackId, packet.ResourceId, packet.MethodIndex, packet.Content); break; case IIPPacket.IIPPacketAction.GetProperty: IIPRequestGetProperty(packet.CallbackId, packet.ResourceId, packet.MethodIndex); break; case IIPPacket.IIPPacketAction.GetPropertyIfModified: IIPRequestGetPropertyIfModifiedSince(packet.CallbackId, packet.ResourceId, packet.MethodIndex, packet.ResourceAge); break; case IIPPacket.IIPPacketAction.SetProperty: IIPRequestSetProperty(packet.CallbackId, packet.ResourceId, packet.MethodIndex, packet.Content); break; // Attribute case IIPPacketAction.GetAllAttributes: IIPRequestGetAttributes(packet.CallbackId, packet.ResourceId, packet.Content, true); break; case IIPPacketAction.UpdateAllAttributes: IIPRequestUpdateAttributes(packet.CallbackId, packet.ResourceId, packet.Content, true); break; case IIPPacketAction.ClearAllAttributes: IIPRequestClearAttributes(packet.CallbackId, packet.ResourceId, packet.Content, true); break; case IIPPacketAction.GetAttributes: IIPRequestGetAttributes(packet.CallbackId, packet.ResourceId, packet.Content, false); break; case IIPPacketAction.UpdateAttributes: IIPRequestUpdateAttributes(packet.CallbackId, packet.ResourceId, packet.Content, false); break; case IIPPacketAction.ClearAttributes: IIPRequestClearAttributes(packet.CallbackId, packet.ResourceId, packet.Content, false); break; } } else if (packet.Command == IIPPacket.IIPPacketCommand.Reply) { switch (packet.Action) { // Manage case IIPPacket.IIPPacketAction.AttachResource: IIPReply(packet.CallbackId, packet.ClassId, packet.ResourceAge, packet.ResourceLink, packet.Content); break; case IIPPacket.IIPPacketAction.ReattachResource: IIPReply(packet.CallbackId, packet.ResourceAge, packet.Content); break; case IIPPacket.IIPPacketAction.DetachResource: IIPReply(packet.CallbackId); break; case IIPPacket.IIPPacketAction.CreateResource: IIPReply(packet.CallbackId, packet.ResourceId); break; case IIPPacket.IIPPacketAction.DeleteResource: case IIPPacketAction.AddChild: case IIPPacketAction.RemoveChild: case IIPPacketAction.RenameResource: IIPReply(packet.CallbackId); break; // Inquire case IIPPacket.IIPPacketAction.TemplateFromClassName: case IIPPacket.IIPPacketAction.TemplateFromClassId: case IIPPacket.IIPPacketAction.TemplateFromResourceId: IIPReply(packet.CallbackId, ResourceTemplate.Parse(packet.Content)); break; case IIPPacketAction.QueryLink: case IIPPacketAction.ResourceChildren: case IIPPacketAction.ResourceParents: case IIPPacketAction.ResourceHistory: IIPReply(packet.CallbackId, packet.Content); break; // Invoke case IIPPacket.IIPPacketAction.InvokeFunction: IIPReplyInvoke(packet.CallbackId, packet.Content); break; case IIPPacket.IIPPacketAction.GetProperty: IIPReply(packet.CallbackId, packet.Content); break; case IIPPacket.IIPPacketAction.GetPropertyIfModified: IIPReply(packet.CallbackId, packet.Content); break; case IIPPacket.IIPPacketAction.SetProperty: IIPReply(packet.CallbackId); break; // Attribute case IIPPacketAction.GetAllAttributes: case IIPPacketAction.GetAttributes: IIPReply(packet.CallbackId, packet.Content); break; case IIPPacketAction.UpdateAllAttributes: case IIPPacketAction.UpdateAttributes: case IIPPacketAction.ClearAllAttributes: case IIPPacketAction.ClearAttributes: IIPReply(packet.CallbackId); break; } } else if (packet.Command == IIPPacketCommand.Report) { switch (packet.Report) { case IIPPacketReport.ManagementError: IIPReportError(packet.CallbackId, AsyncReply.ErrorType.Management, packet.ErrorCode, null); break; case IIPPacketReport.ExecutionError: IIPReportError(packet.CallbackId, AsyncReply.ErrorType.Exception, packet.ErrorCode, packet.ErrorMessage); break; case IIPPacketReport.ProgressReport: IIPReportProgress(packet.CallbackId, AsyncReply.ProgressType.Execution, packet.ProgressValue, packet.ProgressMax); break; case IIPPacketReport.ChunkStream: IIPReportChunk(packet.CallbackId, packet.Content); break; } } } } else { var rt = authPacket.Parse(msg, offset, ends); //Console.WriteLine(session.LocalAuthentication.Type.ToString() + " " + offset + " " + ends + " " + rt + " " + authPacket.ToString()); if (rt <= 0) { data.HoldFor(msg, ends + (uint)(-rt)); return(ends); } else { offset += (uint)rt; if (session.LocalAuthentication.Type == AuthenticationType.Host) { if (authPacket.Command == IIPAuthPacket.IIPAuthPacketCommand.Declare) { if (authPacket.RemoteMethod == IIPAuthPacket.IIPAuthPacketMethod.Credentials && authPacket.LocalMethod == IIPAuthPacket.IIPAuthPacketMethod.None) { Server.Membership.UserExists(authPacket.RemoteUsername, authPacket.Domain).Then(x => { if (x) { session.RemoteAuthentication.Username = authPacket.RemoteUsername; remoteNonce = authPacket.RemoteNonce; session.RemoteAuthentication.Domain = authPacket.Domain; SendParams((byte)0xa0, localNonce); } else { //Console.WriteLine("User not found"); SendParams((byte)0xc0, (byte)1, (ushort)14, DC.ToBytes("User not found")); } }); } } else if (authPacket.Command == IIPAuthPacket.IIPAuthPacketCommand.Action) { if (authPacket.Action == IIPAuthPacket.IIPAuthPacketAction.AuthenticateHash) { var remoteHash = authPacket.Hash; Server.Membership.GetPassword(session.RemoteAuthentication.Username, session.RemoteAuthentication.Domain).Then((pw) => { if (pw != null) { var hashFunc = SHA256.Create(); var hash = hashFunc.ComputeHash(BinaryList.ToBytes(pw, remoteNonce, localNonce)); if (hash.SequenceEqual(remoteHash)) { // send our hash var localHash = hashFunc.ComputeHash(BinaryList.ToBytes(localNonce, remoteNonce, pw)); SendParams((byte)0, localHash); readyToEstablish = true; } else { Global.Log("auth", LogType.Warning, "U:" + RemoteUsername + " IP:" + Socket.RemoteEndPoint.Address.ToString() + " S:DENIED"); //Console.WriteLine("Incorrect password"); SendParams((byte)0xc0, (byte)1, (ushort)5, DC.ToBytes("Error")); } } }); } else if (authPacket.Action == IIPAuthPacket.IIPAuthPacketAction.NewConnection) { if (readyToEstablish) { var r = new Random(); session.Id = new byte[32]; r.NextBytes(session.Id); SendParams((byte)0x28, session.Id); ready = true; OnReady?.Invoke(this); Server.Membership.Login(session); Global.Log("auth", LogType.Warning, "U:" + RemoteUsername + " IP:" + Socket.RemoteEndPoint.Address.ToString() + " S:AUTH"); } } } } else if (session.LocalAuthentication.Type == AuthenticationType.Client) { if (authPacket.Command == IIPAuthPacket.IIPAuthPacketCommand.Acknowledge) { remoteNonce = authPacket.RemoteNonce; // send our hash var hashFunc = SHA256.Create(); var localHash = hashFunc.ComputeHash(BinaryList.ToBytes(localPassword, localNonce, remoteNonce)); SendParams((byte)0, localHash); } else if (authPacket.Command == IIPAuthPacket.IIPAuthPacketCommand.Action) { if (authPacket.Action == IIPAuthPacket.IIPAuthPacketAction.AuthenticateHash) { // check if the server knows my password var hashFunc = SHA256.Create(); var remoteHash = hashFunc.ComputeHash(BinaryList.ToBytes(remoteNonce, localNonce, localPassword)); if (remoteHash.SequenceEqual(authPacket.Hash)) { // send establish request SendParams((byte)0x20, (ushort)0); } else { SendParams((byte)0xc0, 1, (ushort)5, DC.ToBytes("Error")); } } else if (authPacket.Action == IIPAuthPacket.IIPAuthPacketAction.ConnectionEstablished) { session.Id = authPacket.SessionId; ready = true; OnReady?.Invoke(this); } } else if (authPacket.Command == IIPAuthPacket.IIPAuthPacketCommand.Error) { OnError?.Invoke(this, authPacket.ErrorCode, authPacket.ErrorMessage); Close(); } } } } return(offset); //if (offset < ends) // processPacket(msg, offset, ends, data, chunkId); }
public static byte[] Compute(byte[] msg) { /* * Note 1: All variables are 32 bit unsigned integers and addition is calculated modulo 2^32 * Note 2: For each round, there is one round constant k[i] and one entry in the message schedule array w[i], 0 ≤ i ≤ 63 * Note 3: The compression function uses 8 working variables, a through h * Note 4: Big-endian convention is used when expressing the constants in this pseudocode, * and when parsing message block data from bytes to words, for example, * the first word of the input message "abc" after padding is 0x61626380 */ // Initialize hash values: // (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19): var hash = new uint[] { 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 }; // Initialize array of round constants: // (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311): var k = new uint[] { 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 }; // Pre-processing: // begin with the original message of length L bits ulong L = (ulong)msg.Length * 8; // append a single '1' bit // append K '0' bits, where K is the minimum number >= 0 such that L + 1 + K + 64 is a multiple of 512 var K = 512 - ((L + 1 + 64) % 512); if (K == 512) { K = 0; } var paddingLength = (K + 1) / 8; var paddingBytes = new byte[paddingLength]; paddingBytes[0] = 0x80; var data = new BinaryList().AddUInt8Array(msg).AddUInt8Array(paddingBytes).AddUInt64(L).ToArray(); // append L as a 64-bit big-endian integer, making the total post-processed length a multiple of 512 bits // Process the message in successive 512-bit chunks: // break message into 512-bit chunks // for each chunk for (var chunk = 0; chunk < data.Length; chunk += 64) { // create a 64-entry message schedule array w[0..63] of 32-bit words // (The initial values in w[0..63] don't matter, so many implementations zero them here) // copy chunk into first 16 words w[0..15] of the message schedule array var w = new uint[64]; for (var i = 0; i < 16; i++) { w[i] = data.GetUInt32((uint)(chunk + (i * 4)), Endian.Big); } //for(var i = 16; i < 64; i++) // w[i] = 0; // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array: // for i from 16 to 63 // s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3) // s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift 10) // w[i] := w[i-16] + s0 + w[i-7] + s1 for (var i = 16; i < 64; i++) { var s0 = SHA256.RROT(w[i - 15], 7) ^ SHA256.RROT(w[i - 15], 18) ^ (w[i - 15] >> 3); var s1 = SHA256.RROT(w[i - 2], 17) ^ SHA256.RROT(w[i - 2], 19) ^ (w[i - 2] >> 10); w[i] = w[i - 16] + s0 + w[i - 7] + s1; } // Initialize working variables to current hash value: var a = hash[0]; var b = hash[1]; var c = hash[2]; var d = hash[3]; var e = hash[4]; var f = hash[5]; var g = hash[6]; var h = hash[7]; // Compression function main loop: for (var i = 0; i < 64; i++) { var S1 = SHA256.RROT(e, 6) ^ SHA256.RROT(e, 11) ^ SHA256.RROT(e, 25); var ch = (e & f) ^ ((~e) & g); var temp1 = h + S1 + ch + k[i] + w[i]; var S0 = SHA256.RROT(a, 2) ^ SHA256.RROT(a, 13) ^ SHA256.RROT(a, 22); var maj = (a & b) ^ (a & c) ^ (b & c); uint temp2 = S0 + maj; h = g; g = f; f = e; e = (d + temp1) >> 0; d = c; c = b; b = a; a = (temp1 + temp2) >> 0; } // Add the compressed chunk to the current hash value: hash[0] = (hash[0] + a) >> 0; hash[1] = (hash[1] + b) >> 0; hash[2] = (hash[2] + c) >> 0; hash[3] = (hash[3] + d) >> 0; hash[4] = (hash[4] + e) >> 0; hash[5] = (hash[5] + f) >> 0; hash[6] = (hash[6] + g) >> 0; hash[7] = (hash[7] + h) >> 0; } // Produce the final hash value (big-endian): //digest := hash := h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7 var results = new BinaryList(); for (var i = 0; i < 8; i++) { results.AddUInt32(hash[i]); } return(results.ToArray()); }
public ResourceTemplate(Type type) { // set guid var typeName = Encoding.UTF8.GetBytes(type.FullName); var hash = SHA256.Create().ComputeHash(typeName).Clip(0, 16); classId = new Guid(hash); className = type.FullName; #if NETSTANDARD1_5 PropertyInfo[] propsInfo = type.GetTypeInfo().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); EventInfo[] eventsInfo = type.GetTypeInfo().GetEvents(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); MethodInfo[] methodsInfo = type.GetTypeInfo().GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); #else PropertyInfo[] propsInfo = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); EventInfo[] eventsInfo = type.GetEvents(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); MethodInfo[] methodsInfo = type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); #endif //byte currentIndex = 0; byte i = 0; foreach (var pi in propsInfo) { var ps = (ResourceProperty[])pi.GetCustomAttributes(typeof(ResourceProperty), true); if (ps.Length > 0) { var pt = new PropertyTemplate(this, i++, pi.Name, ps[0].ReadExpansion, ps[0].WriteExpansion, ps[0].Storage); properties.Add(pt); } } i = 0; foreach (var ei in eventsInfo) { var es = (ResourceEvent[])ei.GetCustomAttributes(typeof(ResourceEvent), true); if (es.Length > 0) { var et = new EventTemplate(this, i++, ei.Name, es[0].Expansion); events.Add(et); } } i = 0; foreach (MethodInfo mi in methodsInfo) { var fs = (ResourceFunction[])mi.GetCustomAttributes(typeof(ResourceFunction), true); if (fs.Length > 0) { var ft = new FunctionTemplate(this, i++, mi.Name, mi.ReturnType == typeof(void), fs[0].Expansion); functions.Add(ft); } } // append signals for (i = 0; i < events.Count; i++) { members.Add(events[i]); } // append slots for (i = 0; i < functions.Count; i++) { members.Add(functions[i]); } // append properties for (i = 0; i < properties.Count; i++) { members.Add(properties[i]); } // bake it binarily var b = new BinaryList(); b.Append(classId); b.Append((byte)className.Length, className); b.Append(version); b.Append((ushort)members.Count); foreach (var ft in functions) { b.Append(ft.Compose()); } foreach (var pt in properties) { b.Append(pt.Compose()); } foreach (var et in events) { b.Append(et.Compose()); } content = b.ToArray(); }
public DomainCertificate(ulong id, string domain, CACertificate authority, DateTime issueDate, DateTime expireDate, HashFunctionType hashFunction = HashFunctionType.SHA1, uint ip = 0, byte[] ip6 = null) : base(id, issueDate, expireDate, hashFunction) { // assign type var cr = new BinaryList(); // id cr.AddUInt64(id); // ip this.ip = ip; this.ip6 = ip6; cr.AddUInt32(ip); if (ip6?.Length == 16) { cr.AddUInt8Array(ip6); } else { cr.AddUInt8Array(new byte[16]); } cr.AddDateTime(issueDate) .AddDateTime(expireDate); // domain this.domain = domain; cr.AddUInt8((byte)(domain.Length)) .AddUInt8Array(Encoding.ASCII.GetBytes(domain)); // CA this.caName = authority.Name; cr.AddUInt8((byte)(authority.Name.Length)) .AddUInt8Array(Encoding.ASCII.GetBytes(authority.Name)); this.authorityName = authority.Name; // CA Index //co.KeyIndex = authority.KeyIndex; this.caId = authority.Id; cr.AddUInt64(caId); // public key rsa = RSA.Create();// new RSACryptoServiceProvider(2048); rsa.KeySize = 2048; RSAParameters dRSAKey = rsa.ExportParameters(true); cr.AddUInt8((byte)dRSAKey.Exponent.Length) .AddUInt8Array(dRSAKey.Exponent) .AddUInt16((ushort)dRSAKey.Modulus.Length) .AddUInt8Array(dRSAKey.Modulus); publicRawData = cr.ToArray(); // private key this.privateRawData = DC.Merge(dRSAKey.D, dRSAKey.DP, dRSAKey.DQ, dRSAKey.InverseQ, dRSAKey.P, dRSAKey.Q); this.signature = authority.Sign(publicRawData); }
public UserCertificate(ulong id, string username, DomainCertificate domainCertificate, DateTime issueDate, DateTime expireDate, HashFunctionType hashFunction = HashFunctionType.SHA1, uint ip = 0, byte[] ip6 = null) : base(id, issueDate, expireDate, hashFunction) { // assign type var cr = new BinaryList(); //id cr.AddUInt64(id); // ip this.ip = ip; this.ip6 = ip6; cr.AddUInt32(ip); if (ip6?.Length == 16) { cr.AddUInt8Array(ip6); } else { cr.AddUInt8Array(new byte[16]); } // dates this.issueDate = DateTime.UtcNow; this.expireDate = expireDate; cr.AddDateTime(issueDate) .AddDateTime(expireDate); // domain this.domainId = domainCertificate.Id; cr.AddUInt64(domainCertificate.Id); this.domain = domainCertificate.Domain; cr.AddUInt8((byte)domainCertificate.Domain.Length) .AddUInt8Array(Encoding.ASCII.GetBytes(domainCertificate.Domain)); // username this.username = username; cr.AddUInt8((byte)(username.Length)) .AddUInt8Array(Encoding.ASCII.GetBytes(username)); // hash function (SHA1) cr.AddUInt8((byte)((byte)hashFunction << 4));// (byte)0x10); // public key rsa = RSA.Create();// new RSACryptoServiceProvider(2048); rsa.KeySize = 2048; // write public certificate file var key = rsa.ExportParameters(true); publicRawData = new BinaryList().AddUInt8((byte)key.Exponent.Length) .AddUInt8Array(key.Exponent) .AddUInt16((ushort)key.Modulus.Length) .AddUInt8Array(key.Modulus).ToArray(); // sign it this.signature = domainCertificate.Sign(publicRawData); // store private info privateRawData = DC.Merge(key.D, key.DP, key.DQ, key.InverseQ, key.P, key.Q, signature); }
private IEnumerable<byte> ReadBits(int byteCount) { BinaryList data = new BinaryList(); LockedBitmap lockedBmp = new LockedBitmap(BitmapImage); lockedBmp.LockBits(); int bitIndex = 0; for (int pixelIndex = Seed[0]; bitIndex < byteCount * 8; pixelIndex += (Seed[bitIndex % Seed.Count] + 1)) { BinaryOctet octet = lockedBmp.GetPixelArgb(pixelIndex)[(int)Color]; for (byte currBit = 0; currBit < lsb; ++currBit, ++bitIndex) data.Add(octet[currBit]); } lockedBmp.UnlockBits(); return data.ToBytes(InvertBits); }