public static IJType GetJsonDecoded(Context context, byte[] message, long senderId) { byte[] aesBinKey = context.Contacts .Where(u => u.PublicId == senderId) .Select(u => u.ReceiveAesKey) .SingleOrDefault(); AESPassword key = new AESPassword(aesBinKey); byte[] decrypted = key.Decrypt(message); JsonTypes type = (JsonTypes)decrypted[0]; string jsonText = Encoding.UTF8.GetString(decrypted, 1, decrypted.Length - 1); switch (type) { case JsonTypes.ALARM: return(JsonConvert.DeserializeObject <JAlarm>(jsonText)); case JsonTypes.CONTACT_DETAIL: return(JsonConvert.DeserializeObject <JContactDetail>(jsonText)); case JsonTypes.MESSAGES: return(JsonConvert.DeserializeObject <JMessage>(jsonText)); case JsonTypes.MESSAGES_THREAD: return(JsonConvert.DeserializeObject <JMessageThread>(jsonText)); case JsonTypes.AES_KEY: return(JsonConvert.DeserializeObject <JAESKey>(jsonText)); default: throw new Exception("Unknown JsonType."); } }
public static JsonCapsula GetJsonDecoded(Context context, byte[] message, long senderId) { byte[] aesBinKey = context.Contacts .Where(u => u.PublicId == senderId) .Select(u => u.ReceiveAesKey) .SingleOrDefault(); AESPassword key = new AESPassword(aesBinKey); byte[] decrypted = key.Decrypt(message); MemoryStream stream = new MemoryStream(decrypted); JsonTypes type = (JsonTypes)BinaryEncoder.ReadInt(stream); string jsonText = TextEncoder.ReadString(stream); byte[] attechment = null; int isAttechment = BinaryEncoder.ReadInt(stream); if (isAttechment == 1) { attechment = BinaryEncoder.ReceiveBytes(stream); } IJType jmessage; switch (type) { case JsonTypes.ALARM: jmessage = JsonConvert.DeserializeObject <JAlarm>(jsonText); break; case JsonTypes.CONTACT: jmessage = JsonConvert.DeserializeObject <JContact>(jsonText); break; case JsonTypes.MESSAGES: jmessage = JsonConvert.DeserializeObject <JMessage>(jsonText); break; case JsonTypes.MESSAGES_THREAD: jmessage = JsonConvert.DeserializeObject <JMessageThread>(jsonText); break; default: throw new Exception("Unknown JsonType."); } return(new JsonCapsula() { Attechment = attechment, Message = jmessage }); }
static void AesTrial() { using (Context context = new Context(config)) { byte[] aesBinKey = context.Contacts .Where(u => u.PublicId == connection.UserId) .Select(u => u.ReceiveAesKey) .SingleOrDefault(); AESPassword key = new AESPassword(aesBinKey); String testStr = "Testy tisty teristy\n"; for (int i = 0; i != 3; i++) { testStr += testStr; } WriteLine($"Encrypting string: {testStr}"); byte[] data = Encoding.UTF8.GetBytes(testStr); byte[] encrypted = key.Encrypt(data); WriteLine(Encoding.UTF8.GetString(key.Decrypt(encrypted))); } }