diff --git a/Serialization/ZNIFile/ByteArrayTag.cs b/Serialization/ZNIFile/ByteArrayTag.cs
index a47cc21..a606ae9 100644
--- a/Serialization/ZNIFile/ByteArrayTag.cs
+++ b/Serialization/ZNIFile/ByteArrayTag.cs
@@ -51,7 +51,7 @@ namespace LibZNI.Serialization.ZNIFile
public override void SkipTag(BinaryReader br)
{
- _ = new BoolTag().ReadTag(br);
+ _ = new ByteArrayTag().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
diff --git a/Serialization/ZNIFile/Folder.cs b/Serialization/ZNIFile/Folder.cs
index 3b5f27e..8f72082 100644
--- a/Serialization/ZNIFile/Folder.cs
+++ b/Serialization/ZNIFile/Folder.cs
@@ -182,6 +182,15 @@ namespace LibZNI.Serialization.ZNIFile
case TagType.STRING:
_next = new StringTag();
break;
+ case TagType.BYTEARRAY:
+ _next = new ByteArrayTag();
+ break;
+ case TagType.INTARRAY:
+ _next = new IntArrayTag();
+ break;
+ case TagType.LONGARRAY:
+ _next = new LongArrayTag();
+ break;
case TagType.END:
return true;
}
diff --git a/Serialization/ZNIFile/IntArrayTag.cs b/Serialization/ZNIFile/IntArrayTag.cs
new file mode 100644
index 0000000..8b49762
--- /dev/null
+++ b/Serialization/ZNIFile/IntArrayTag.cs
@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LibZNI.Serialization.ZNIFile
+{
+ public class IntArrayTag : Tag
+ {
+ private int[] BArrVal;
+ public int[] Value
+ {
+ get
+ {
+ return BArrVal;
+ }
+ }
+
+ public IntArrayTag(string _Name, int[] val)
+ {
+ Name = _Name;
+ BArrVal = val;
+ }
+ public IntArrayTag(int[] boolVal) : this(null, boolVal)
+ {
+ }
+ public IntArrayTag() : this(null, new int[] {}) { }
+
+ public override TagType Type
+ {
+ get
+ {
+ return TagType.INTARRAY;
+ }
+ }
+
+ public override bool ReadTag(BinaryReader br)
+ {
+ Name = br.ReadString();
+ int count = br.ReadInt32();
+ BArrVal = new int[count];
+ for(int i = 0; i < count; i++)
+ {
+ BArrVal[i] = br.ReadInt32();
+ }
+
+ return true;
+ }
+
+ public override void Rename(string old, string newName)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void SkipTag(BinaryReader br)
+ {
+ _ = new IntArrayTag().ReadTag(br);
+ }
+
+ public override void WriteData(BinaryWriter bw)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void WriteTag(BinaryWriter bw)
+ {
+ bw.Write(((int)Type));
+ bw.Write(Name);
+ bw.Write(Value.Length);
+
+ foreach(int i in Value)
+ {
+ bw.Write(i);
+ }
+ }
+
+ public override object Clone()
+ {
+ return new IntArrayTag(Name, Value);
+ }
+ }
+}
diff --git a/Serialization/ZNIFile/ListTag.cs b/Serialization/ZNIFile/ListTag.cs
index 7fa8a98..881f9ff 100644
--- a/Serialization/ZNIFile/ListTag.cs
+++ b/Serialization/ZNIFile/ListTag.cs
@@ -142,6 +142,15 @@ namespace LibZNI.Serialization.ZNIFile
case TagType.STRING:
_next = new StringTag();
break;
+ case TagType.BYTEARRAY:
+ _next = new ByteArrayTag();
+ break;
+ case TagType.INTARRAY:
+ _next = new IntArrayTag();
+ break;
+ case TagType.LONGARRAY:
+ _next = new LongArrayTag();
+ break;
case TagType.END:
return true;
}
diff --git a/Serialization/ZNIFile/LongArrayTag.cs b/Serialization/ZNIFile/LongArrayTag.cs
new file mode 100644
index 0000000..471951a
--- /dev/null
+++ b/Serialization/ZNIFile/LongArrayTag.cs
@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LibZNI.Serialization.ZNIFile
+{
+ public class LongArrayTag : Tag
+ {
+ private long[] BArrVal;
+ public long[] Value
+ {
+ get
+ {
+ return BArrVal;
+ }
+ }
+
+ public LongArrayTag(string _Name, long[] val)
+ {
+ Name = _Name;
+ BArrVal = val;
+ }
+ public LongArrayTag(long[] boolVal) : this(null, boolVal)
+ {
+ }
+ public LongArrayTag() : this(null, new long[] {}) { }
+
+ public override TagType Type
+ {
+ get
+ {
+ return TagType.LONGARRAY;
+ }
+ }
+
+ public override bool ReadTag(BinaryReader br)
+ {
+ Name = br.ReadString();
+ int count = br.ReadInt32();
+ BArrVal = new long[count];
+ for(int i = 0; i < count; i++)
+ {
+ BArrVal[i] = br.ReadInt64();
+ }
+
+ return true;
+ }
+
+ public override void Rename(string old, string newName)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void SkipTag(BinaryReader br)
+ {
+ _ = new LongArrayTag().ReadTag(br);
+ }
+
+ public override void WriteData(BinaryWriter bw)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void WriteTag(BinaryWriter bw)
+ {
+ bw.Write(((int)Type));
+ bw.Write(Name);
+ bw.Write(Value.Length);
+
+ foreach(int i in Value)
+ {
+ bw.Write(i);
+ }
+ }
+
+ public override object Clone()
+ {
+ return new LongArrayTag(Name, Value);
+ }
+ }
+}
diff --git a/Serialization/ZNIFile/Tag.cs b/Serialization/ZNIFile/Tag.cs
index b8bcc1d..ac12c29 100644
--- a/Serialization/ZNIFile/Tag.cs
+++ b/Serialization/ZNIFile/Tag.cs
@@ -224,6 +224,32 @@ namespace LibZNI.Serialization.ZNIFile
}
}
}
+ public ulong uLongValue
+ {
+ get
+ {
+ switch (Type)
+ {
+ case TagType.ULONG:
+ return (this as uLongTag).Value;
+ default:
+ throw new Exception("Invalid type");
+ }
+ }
+ }
+ public Guid UUIDValue
+ {
+ get
+ {
+ switch (Type)
+ {
+ case TagType.UUID:
+ return (this as UUIDTag).Value;
+ default:
+ throw new Exception("Invalid type");
+ }
+ }
+ }
public abstract void Rename(string old, string newName);
diff --git a/Serialization/ZNIFile/TagType.cs b/Serialization/ZNIFile/TagType.cs
index 9c3ae07..a82a0ca 100644
--- a/Serialization/ZNIFile/TagType.cs
+++ b/Serialization/ZNIFile/TagType.cs
@@ -8,17 +8,21 @@ namespace LibZNI.Serialization.ZNIFile
{
public enum TagType
{
- FOLDER = 0,
- STRING = 1,
- INTEGER = 2,
- LIST = 3, // List can be any valid Tag Type
- END = 4, // Present at the end of a folder or list
- BOOL = 5,
+ FOLDER = 10,
+ STRING = 8,
+ INTEGER = 3,
+ LIST = 9, // List can be any valid Tag Type
+ END = 0, // Present at the end of a folder or list
+ BOOL = 13,
DOUBLE = 6,
- FLOAT = 7,
- LONG = 8,
- BYTE = 9,
- BYTEARRAY = 10,
+ FLOAT = 5,
+ LONG = 4,
+ BYTE = 1,
+ BYTEARRAY = 7,
+ INTARRAY = 11,
+ LONGARRAY=12,
+ ULONG=14,
+ UUID=15,
diff --git a/Serialization/ZNIFile/UUIDTag.cs b/Serialization/ZNIFile/UUIDTag.cs
new file mode 100644
index 0000000..48803e1
--- /dev/null
+++ b/Serialization/ZNIFile/UUIDTag.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LibZNI.Serialization.ZNIFile
+{
+ public class UUIDTag : Tag
+ {
+ private Guid LongVal;
+ public Guid Value
+ {
+ get
+ {
+ return LongVal;
+ }
+ }
+
+ public UUIDTag(string _Name, Guid val)
+ {
+ Name = _Name;
+ LongVal = val;
+ }
+ public UUIDTag(Guid _LongVal) : this(null, _LongVal)
+ {
+ }
+ public UUIDTag() : this(null, Guid.Empty) { }
+
+ public override TagType Type
+ {
+ get
+ {
+ return TagType.UUID;
+ }
+ }
+
+ public override bool ReadTag(BinaryReader br)
+ {
+ Name = br.ReadString();
+ LongVal = Guid.Parse(br.ReadString());
+ return true;
+ }
+
+ public override void Rename(string old, string newName)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void SkipTag(BinaryReader br)
+ {
+ _ = new UUIDTag().ReadTag(br);
+ }
+
+ public override void WriteData(BinaryWriter bw)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void WriteTag(BinaryWriter bw)
+ {
+ bw.Write(((int)Type));
+ bw.Write(Name);
+
+ bw.Write(Value.ToString());
+ }
+
+ public override object Clone()
+ {
+ return new UUIDTag(Name, Value);
+ }
+ }
+}
diff --git a/Serialization/ZNIFile/ulongTag.cs b/Serialization/ZNIFile/ulongTag.cs
new file mode 100644
index 0000000..771dd64
--- /dev/null
+++ b/Serialization/ZNIFile/ulongTag.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LibZNI.Serialization.ZNIFile
+{
+ public class uLongTag : Tag
+ {
+ private ulong LongVal;
+ public ulong Value
+ {
+ get
+ {
+ return LongVal;
+ }
+ }
+
+ public uLongTag(string _Name, ulong val)
+ {
+ Name = _Name;
+ LongVal = val;
+ }
+ public uLongTag(ulong _LongVal) : this(null, _LongVal)
+ {
+ }
+ public uLongTag() : this(null, 0) { }
+
+ public override TagType Type
+ {
+ get
+ {
+ return TagType.ULONG;
+ }
+ }
+
+ public override bool ReadTag(BinaryReader br)
+ {
+ Name = br.ReadString();
+ LongVal = br.ReadUInt64();
+ return true;
+ }
+
+ public override void Rename(string old, string newName)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void SkipTag(BinaryReader br)
+ {
+ _ = new uLongTag().ReadTag(br);
+ }
+
+ public override void WriteData(BinaryWriter bw)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void WriteTag(BinaryWriter bw)
+ {
+ bw.Write(((int)Type));
+ bw.Write(Name);
+
+ bw.Write(Value);
+ }
+
+ public override object Clone()
+ {
+ return new uLongTag(Name, Value);
+ }
+ }
+}
diff --git a/Tools.cs b/Tools.cs
index 67aaa60..c25cde9 100644
--- a/Tools.cs
+++ b/Tools.cs
@@ -1,16 +1,16 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
+using System;
+using System.Collections.Generic;
+using System.Linq;
using System.Numerics;
-using System.Runtime.InteropServices;
-using System.Security.Cryptography;
-using System.Text;
+using System.Runtime.InteropServices;
+using System.Security.Cryptography;
+using System.Text;
using System.Xml;
-using Newtonsoft.Json;
-
-namespace LibZNI
-{
- public class Tools
+using Newtonsoft.Json;
+
+namespace LibZNI
+{
+ public class Tools
{
///
/// Finds whether the sum can even be calculated!
@@ -75,7 +75,7 @@ namespace LibZNI
/// The list of items to create {sum} from
/// The magical number you want to recreate
/// A memory list to reduce the time taken finding the best way to make the sum!
- /// The list of {elements} recursively that can make the sum
+ /// The list of {elements} recursively that can make the sum
public static List BestSum(List elements, int sum, Dictionary> memo)
{
if (memo != null)
@@ -110,14 +110,14 @@ namespace LibZNI
memo[sum] = shortestCombo;
return shortestCombo;
- }
+ }
///
/// Finds the shortest possible way to create the sum and returns that list
///
/// The list of items to create {sum} from
/// The magical number you want to recreate
/// A memory list to reduce the time taken finding the best way to make the sum!
- /// The list of {elements} recursively that can make the sum
+ /// The list of {elements} recursively that can make the sum
public static List BestSum(List elements, BigInteger sum, Dictionary> memo, int recursion=0)
{
if (memo != null)
@@ -149,22 +149,22 @@ namespace LibZNI
memo[sum] = shortestCombo;
return shortestCombo;
- }
+ }
///
/// This function is meant for aiding in attacking the TripleDES encryption for the EDRA algorithm. We intentionally want to break TripleDES since we know for a fact we have one of the correct answers that was used as the encryption key. By doing this, we find the right encryption key with zero knowledge
///
/// The TripleDES byte array we want to blank
- /// Zero filled Byte Array
+ /// Zero filled Byte Array
public static byte[] MakeBlankKey(byte[] input)
{
return new byte[input.Length];
- }
-
+ }
+
///
/// This function is meant for aiding in attacking the TripleDES encryption for the EDRA algorithm. We intentionally want to break TripleDES since we know for a fact that we have one of the solutions. This function will increment the current key. If the attack has completed an exception will be thrown
///
/// The key array
- /// The next key in sequence
+ /// The next key in sequence
public static byte[] IncrementAttackVector(byte[] tdes)
{
string hstr = Convert.ToHexString(tdes);
@@ -183,116 +183,117 @@ namespace LibZNI
hstr = Convert.ToHexString(num.ToByteArray());
return Convert.FromHexString(hstr);
- }
-
+ }
+
#pragma warning disable IDE1006 // Naming Styles
public static Int32 getTimestamp()
-#pragma warning restore IDE1006 // Naming Styles
- {
- return int.Parse(DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString());
- }
-
- public static string GetOSShortID()
- {
- bool isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
- bool isLinux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux);
- bool isMac = RuntimeInformation.IsOSPlatform(OSPlatform.OSX);
- if (isWindows) return "windows";
- if (isLinux) return "linux";
- if (isMac) return "osx";
-
-
- return "unknown";
- }
-
-
- public static string Hash2String(byte[] Hash)
- {
- StringBuilder sb = new StringBuilder();
- foreach (byte b in Hash)
- {
- sb.Append(b.ToString("X2"));
- }
- return sb.ToString();
- }
-
- public static string MD5Hash(string ToHash)
- {
- byte[] Source = UTF8Encoding.UTF8.GetBytes(ToHash);
- byte[] Hash = new MD5CryptoServiceProvider().ComputeHash(Source);
- return Tools.Hash2String(Hash);
- }
-
- public static string MD5Hash(byte[] ToHash)
- {
- return Tools.Hash2String(new MD5CryptoServiceProvider().ComputeHash(ToHash));
- }
-
- public static string SHA256Hash(string ToHash)
- {
- SHA256 hasher = SHA256.Create();
- return Tools.Hash2String(hasher.ComputeHash(UTF8Encoding.UTF8.GetBytes(ToHash)));
- }
-
- public static string SHA256Hash(byte[] ToHash)
- {
- SHA256 Hasher = SHA256.Create();
- return Tools.Hash2String(Hasher.ComputeHash(ToHash));
+#pragma warning restore IDE1006 // Naming Styles
+ {
+ return int.Parse(DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString());
+ }
+
+ public static string userProfileFolder = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
+ public static string GetOSShortID()
+ {
+ bool isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
+ bool isLinux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux);
+ bool isMac = RuntimeInformation.IsOSPlatform(OSPlatform.OSX);
+ if (isWindows) return "windows";
+ if (isLinux) return "linux";
+ if (isMac) return "osx";
+
+
+ return "unknown";
+ }
+
+
+ public static string Hash2String(byte[] Hash)
+ {
+ StringBuilder sb = new StringBuilder();
+ foreach (byte b in Hash)
+ {
+ sb.Append(b.ToString("X2"));
+ }
+ return sb.ToString();
+ }
+
+ public static string MD5Hash(string ToHash)
+ {
+ byte[] Source = UTF8Encoding.UTF8.GetBytes(ToHash);
+ byte[] Hash = new MD5CryptoServiceProvider().ComputeHash(Source);
+ return Tools.Hash2String(Hash);
+ }
+
+ public static string MD5Hash(byte[] ToHash)
+ {
+ return Tools.Hash2String(new MD5CryptoServiceProvider().ComputeHash(ToHash));
+ }
+
+ public static string SHA256Hash(string ToHash)
+ {
+ SHA256 hasher = SHA256.Create();
+ return Tools.Hash2String(hasher.ComputeHash(UTF8Encoding.UTF8.GetBytes(ToHash)));
+ }
+
+ public static string SHA256Hash(byte[] ToHash)
+ {
+ SHA256 Hasher = SHA256.Create();
+ return Tools.Hash2String(Hasher.ComputeHash(ToHash));
}
public static byte[] SHA256HashBytes(byte[] ToHash)
{
SHA256 hasher = SHA256.Create();
return hasher.ComputeHash(ToHash);
- }
+ }
public static byte[] SHA256HashBytes(string ToHash)
{
SHA256 hasher = SHA256.Create();
return hasher.ComputeHash(UTF8Encoding.UTF8.GetBytes(ToHash));
- }
-
- public static string ZHX(string ToHash)
- {
- ZHash tmp = new ZHash();
- tmp.NewKey();
- tmp.CalculateKey(ToHash);
- return tmp._key;
- }
-
- public static string ZSR(string ToSerialize)
- {
- ZHash tmp = new ZHash();
- tmp.NewSerial();
- tmp.CalculateKey(ToSerialize);
- return tmp._key;
- }
-
- public static string Base64Encode(string plainText)
- {
- var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
- return System.Convert.ToBase64String(plainTextBytes);
- }
- public static string Base64Decode(string base64EncodedData)
- {
- var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
- return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
- }
-
- public static string GoUpOneLevel(string path)
- {
- string[] paths = path.Split(new[] { '/', '\\' });
-
- List pathList = paths.ToList();
- pathList.Remove(pathList[pathList.Count-1]);
-
- string pathListStr = "";
- foreach(string s in pathList)
- {
- pathListStr += s + "/";
- }
- return pathListStr;
- }
-
+ }
+
+ public static string ZHX(string ToHash)
+ {
+ ZHash tmp = new ZHash();
+ tmp.NewKey();
+ tmp.CalculateKey(ToHash);
+ return tmp._key;
+ }
+
+ public static string ZSR(string ToSerialize)
+ {
+ ZHash tmp = new ZHash();
+ tmp.NewSerial();
+ tmp.CalculateKey(ToSerialize);
+ return tmp._key;
+ }
+
+ public static string Base64Encode(string plainText)
+ {
+ var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
+ return System.Convert.ToBase64String(plainTextBytes);
+ }
+ public static string Base64Decode(string base64EncodedData)
+ {
+ var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
+ return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
+ }
+
+ public static string GoUpOneLevel(string path)
+ {
+ string[] paths = path.Split(new[] { '/', '\\' });
+
+ List pathList = paths.ToList();
+ pathList.Remove(pathList[pathList.Count-1]);
+
+ string pathListStr = "";
+ foreach(string s in pathList)
+ {
+ pathListStr += s + "/";
+ }
+ return pathListStr;
+ }
+
///
/// Format:
/// w = week
@@ -302,7 +303,7 @@ namespace LibZNI
/// s = second
///
///
- ///
+ ///
public static TimeSpan DecodeTimeNotation(string TimeStr)
{
@@ -350,8 +351,8 @@ namespace LibZNI
i += 2;
}
return F;
- }
-
+ }
+
public static int GetUnixDifference(TimeSpan ts)
{
return (int)ts.TotalSeconds;
@@ -361,17 +362,17 @@ namespace LibZNI
/// Encodes a timestamp or difference into ZNI Notation
///
///
- /// ZNI Time Notation
+ /// ZNI Time Notation
public static string EncodeTimeNotation(TimeSpan ts)
{
return EncodeTimeNotation(GetUnixDifference(ts));
- }
-
+ }
+
///
/// Encodes a unix timestamp or difference into ZNI Notation
///
///
- /// ZNI Time Notation
+ /// ZNI Time Notation
public static string EncodeTimeNotation(int ts)
{
var ONE_DAY = ((60 * 60) * 24);
@@ -413,114 +414,114 @@ namespace LibZNI
X.Add($"s");
}
return String.Join("", X);
- }
- }
-
- [Serializable()]
- public class ZHash
- {
- [JsonRequired(), JsonProperty(PropertyName = "value")]
- public string _key;
- [JsonIgnore()]
- public string _template;
-
- public void Reset()
- {
- _key = _template;
- }
-
- public override string ToString()
- {
- return _key;
- }
-
-
- public void NewKey()
- {
-
- _key = "".PadLeft(10, '0');
- _key += "-";
- _key += "".PadRight(4, '0');
- _key += "-";
- _key += "".PadRight(6, '0');
- _key += "-";
- _key += "".PadRight(8, '0');
-
- }
-
- public void NewSerial()
- {
- _key = "".PadLeft(10, '0');
- _key += "-";
- _key += "".PadRight(6, '0');
- _key += "-";
- _key += "".PadRight(4, '0');
- _key += "-";
- _key += "".PadRight(4, '0');
- _key += "-";
- _key += "".PadRight(2, '0');
- _key += "-";
- _key += "".PadRight(4, '0');
- _key += "-";
- _key += "".PadRight(8, '0');
-
- }
- public void CalculateKey(string K)
- {
- string valid = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ=.+/\\][{}';:?><,_-)(*&^%$#@!`~|";
- while (valid.Length < K.Length)
- {
- valid += valid;
- }
- StringBuilder tmp = new StringBuilder(_key);
-
- for (int i = 0; i < _key.Length; i++)
- {
- char V = _key[i];
- if (V != '-')
- {
- MD5 MDHash = MD5.Create();
- for (int ii = 0; ii < ((K.Length > _key.Length) ? _key.Length : K.Length); ii++)
- {
- byte[] md5Data = MDHash.ComputeHash(Encoding.UTF8.GetBytes((K + i.ToString() + valid[i].ToString() + valid[ii].ToString()).ToCharArray()));
- // Replace digit with MD5'd char from String K encoded alongside (i)
- StringBuilder hashData = new StringBuilder();
- foreach (byte b in md5Data)
- {
- hashData.Append(b.ToString("X2"));
- }
- string Hash = hashData.ToString();
- tmp[i] = Hash[(i > 31 ? 1 : i)];
- //Console.Write("\r" + tmp.ToString() + "\r");
- }
- }
- }
- //Console.WriteLine("\r\n");
- _key = tmp.ToString();
- }
-
- public static byte[] HashToBytes(string Key)
- {
- return Enumerable.Range(0, Key.Length).Where(x=>x % 2 == 0).Select(x=>Convert.ToByte(Key.Substring(x,2),16)).ToArray();
- }
- public static ZHash Bytes2Hash(byte[] key)
- {
- ZHash itm = new ZHash();
- foreach(byte b in key)
- {
- itm._key += b.ToString("X2");
- }
- itm._template = itm._key;
- return itm;
- }
-
- public static string Bytes2HashStr(byte[] key)
- {
- return Bytes2Hash(key)._key;
- }
- }
-
- public static class LinqExtensions
+ }
+ }
+
+ [Serializable()]
+ public class ZHash
+ {
+ [JsonRequired(), JsonProperty(PropertyName = "value")]
+ public string _key;
+ [JsonIgnore()]
+ public string _template;
+
+ public void Reset()
+ {
+ _key = _template;
+ }
+
+ public override string ToString()
+ {
+ return _key;
+ }
+
+
+ public void NewKey()
+ {
+
+ _key = "".PadLeft(10, '0');
+ _key += "-";
+ _key += "".PadRight(4, '0');
+ _key += "-";
+ _key += "".PadRight(6, '0');
+ _key += "-";
+ _key += "".PadRight(8, '0');
+
+ }
+
+ public void NewSerial()
+ {
+ _key = "".PadLeft(10, '0');
+ _key += "-";
+ _key += "".PadRight(6, '0');
+ _key += "-";
+ _key += "".PadRight(4, '0');
+ _key += "-";
+ _key += "".PadRight(4, '0');
+ _key += "-";
+ _key += "".PadRight(2, '0');
+ _key += "-";
+ _key += "".PadRight(4, '0');
+ _key += "-";
+ _key += "".PadRight(8, '0');
+
+ }
+ public void CalculateKey(string K)
+ {
+ string valid = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ=.+/\\][{}';:?><,_-)(*&^%$#@!`~|";
+ while (valid.Length < K.Length)
+ {
+ valid += valid;
+ }
+ StringBuilder tmp = new StringBuilder(_key);
+
+ for (int i = 0; i < _key.Length; i++)
+ {
+ char V = _key[i];
+ if (V != '-')
+ {
+ MD5 MDHash = MD5.Create();
+ for (int ii = 0; ii < ((K.Length > _key.Length) ? _key.Length : K.Length); ii++)
+ {
+ byte[] md5Data = MDHash.ComputeHash(Encoding.UTF8.GetBytes((K + i.ToString() + valid[i].ToString() + valid[ii].ToString()).ToCharArray()));
+ // Replace digit with MD5'd char from String K encoded alongside (i)
+ StringBuilder hashData = new StringBuilder();
+ foreach (byte b in md5Data)
+ {
+ hashData.Append(b.ToString("X2"));
+ }
+ string Hash = hashData.ToString();
+ tmp[i] = Hash[(i > 31 ? 1 : i)];
+ //Console.Write("\r" + tmp.ToString() + "\r");
+ }
+ }
+ }
+ //Console.WriteLine("\r\n");
+ _key = tmp.ToString();
+ }
+
+ public static byte[] HashToBytes(string Key)
+ {
+ return Enumerable.Range(0, Key.Length).Where(x=>x % 2 == 0).Select(x=>Convert.ToByte(Key.Substring(x,2),16)).ToArray();
+ }
+ public static ZHash Bytes2Hash(byte[] key)
+ {
+ ZHash itm = new ZHash();
+ foreach(byte b in key)
+ {
+ itm._key += b.ToString("X2");
+ }
+ itm._template = itm._key;
+ return itm;
+ }
+
+ public static string Bytes2HashStr(byte[] key)
+ {
+ return Bytes2Hash(key)._key;
+ }
+ }
+
+ public static class LinqExtensions
{
///
@@ -581,20 +582,20 @@ namespace LibZNI
{
i -= bitToSet;
}
- }
-
- public static string ReplaceAtIndex(this string a, int b, string c)
- {
- string sSplice = "";
- if(b == 0)
- {
- sSplice = $"{c}{a.Substring(1)}";
- }else
- {
- sSplice = $"{a.Substring(0,b)}{c}{a.Substring(b+1)}";
- }
- return sSplice;
- }
+ }
+
+ public static string ReplaceAtIndex(this string a, int b, string c)
+ {
+ string sSplice = "";
+ if(b == 0)
+ {
+ sSplice = $"{c}{a.Substring(1)}";
+ }else
+ {
+ sSplice = $"{a.Substring(0,b)}{c}{a.Substring(b+1)}";
+ }
+ return sSplice;
+ }
public static BigInteger GetAtIndex(this List X, BigInteger I)
{
BigInteger D = -1;
@@ -604,7 +605,7 @@ namespace LibZNI
if (D >= I) return V;
}
return 0;
- }
+ }
public static int GoesIntoTimes(this BigInteger X, BigInteger Z)
{
int nTimes = 0;
@@ -622,58 +623,58 @@ namespace LibZNI
}
return nTimes;
- }
-
-
- }
-
- public static class ZNILSLTools
- {
- public static bool Compare(this List itx, List itx2)
- {
- if (itx.Count != itx2.Count) return false;
- for(int i = 0; i < itx.Count; i++)
- {
- if(itx[i] != itx2[i]) return false;
- }
-
- return true;
- }
-
+ }
+
+
+ }
+
+ public static class ZNILSLTools
+ {
+ public static bool Compare(this List itx, List itx2)
+ {
+ if (itx.Count != itx2.Count) return false;
+ for(int i = 0; i < itx.Count; i++)
+ {
+ if(itx[i] != itx2[i]) return false;
+ }
+
+ return true;
+ }
+
#pragma warning disable IDE1006 // Naming Styles
- public static List llParseString2List(this string item, string[] opts, string[] keepopts)
- {
- return ParseString2List(item, opts, keepopts, false);
+ public static List llParseString2List(this string item, string[] opts, string[] keepopts)
+ {
+ return ParseString2List(item, opts, keepopts, false);
}
- public static List llParseStringKeepNulls(this string item, string[] opts, string[] keepopts)
- {
- return ParseString2List(item, opts, keepopts, true);
+ public static List llParseStringKeepNulls(this string item, string[] opts, string[] keepopts)
+ {
+ return ParseString2List(item, opts, keepopts, true);
}
-#pragma warning restore IDE1006 // Naming Styles
-
+#pragma warning restore IDE1006 // Naming Styles
+
#pragma warning disable IDE1006 // Naming Styles
public static string llDumpList2String(this List items, string delimiter)
#pragma warning restore IDE1006 // Naming Styles
{
return String.Join(delimiter, items.Select(t => t.ToString()).ToArray());
- }
-
- internal static string[] Augment(this string[] itm, string x)
- {
- List working = new List(itm);
- List buffer = new List();
- for(int i = 0; i < working.Count; i++)
- {
- if (String.IsNullOrEmpty(working[i])) break;
- buffer.Add(working[i]);
-
- if (i == working.Count - 1) break;
- else
- buffer.Add(x);
-
- }
- return buffer.ToArray();
- }
+ }
+
+ internal static string[] Augment(this string[] itm, string x)
+ {
+ List working = new List(itm);
+ List buffer = new List();
+ for(int i = 0; i < working.Count; i++)
+ {
+ if (String.IsNullOrEmpty(working[i])) break;
+ buffer.Add(working[i]);
+
+ if (i == working.Count - 1) break;
+ else
+ buffer.Add(x);
+
+ }
+ return buffer.ToArray();
+ }
///
/// This function was partially taken from the OpenSimulator code and modified to no longer be LSL related and purely function the same way for my own sanity's sake
///
@@ -681,23 +682,23 @@ namespace LibZNI
///
///
///
- ///
- public static List ParseString2List(this string item, string[] opts, string[] keepopts, bool keepNulls)
- {
- int sourceLen = item.Length;
- int optionsLength = opts.Length;
- int spacersLen = keepopts.Length;
-
- int dellen = 0;
- string[] delArray = new string[optionsLength + spacersLen];
-
- int outlen = 0;
- string[] outArray = new string[sourceLen * 2 + 1];
-
- int i, j;
- string d;
-
-
+ ///
+ public static List ParseString2List(this string item, string[] opts, string[] keepopts, bool keepNulls)
+ {
+ int sourceLen = item.Length;
+ int optionsLength = opts.Length;
+ int spacersLen = keepopts.Length;
+
+ int dellen = 0;
+ string[] delArray = new string[optionsLength + spacersLen];
+
+ int outlen = 0;
+ string[] outArray = new string[sourceLen * 2 + 1];
+
+ int i, j;
+ string d;
+
+
for(i=0;i outList = new List();
+ }
+
+ List outList = new List();
for(i = 0;i entries = new List();
- List tmpBuffer = new List();
- List buffer = new List();
- buffer.Add(item);
- foreach(string x in opts)
- {
- for(int i=0;i();
- }
-
- // Now re-run the buffer through the keep opts list
- tmpBuffer = new List();
- foreach(string z in keepopts)
- {
- for(int i=0;i();
- }
-
-
-
- entries = buffer;
- buffer = new List();
-
- return entries;*/
- }
- }
-}
+ }
+
+ return outList;
+ /*
+ List entries = new List();
+ List tmpBuffer = new List();
+ List buffer = new List();
+ buffer.Add(item);
+ foreach(string x in opts)
+ {
+ for(int i=0;i();
+ }
+
+ // Now re-run the buffer through the keep opts list
+ tmpBuffer = new List();
+ foreach(string z in keepopts)
+ {
+ for(int i=0;i();
+ }
+
+
+
+ entries = buffer;
+ buffer = new List();
+
+ return entries;*/
+ }
+ }
+}