public static Akep2Message3 FromString(string str, byte[] longTermKey) { var contentBytes = PemParser.GetMessageContentBytes(str); var contentObjectsList = (List <object>)SksAsn1Parser.Parse(contentBytes); var iv = (byte[])contentObjectsList[0]; var encryptedPart = (byte[])contentObjectsList[1]; var hmacPart = (byte[])contentObjectsList[2]; var myHmac = SksHmac.Hash(longTermKey, encryptedPart); if (!Utils.CompareByteArrays(hmacPart, myHmac)) { Logger.Log("AKEP2MESSAGE2:", "Hmac doesn't match"); return(null); } var decryptedSequence = SksAes.DecryptBytesFromBytes_Aes(encryptedPart, longTermKey, iv); contentObjectsList = (List <object>)SksAsn1Parser.Parse(decryptedSequence); var a = (string)contentObjectsList[0]; var nonceB = (byte[])contentObjectsList[1]; return(new Akep2Message3(a, nonceB, longTermKey)); }
public void SendChatMessage(string message) { Logger.Log(GetWholeLogTag(), $"SendChatMessage - Message: {message}"); var secret = GetSecretFromProtocol(); if (secret == null) { Logger.Log("USER:"******"Secret is null"); return; } var iv = Utils.GenerateRandom16(); var encryptedMessageBytes = SksAes.EncryptStringToBytes_Aes(message, secret, iv); var hmacBytes = SksHmac.Hash(secret, Utils.StringToBytes(message)); Logger.Log(GetWholeLogTag(), $"SendChatMessage - EcnryptedBytes: {string.Join(",", encryptedMessageBytes)}"); Logger.Log(GetWholeLogTag(), $"SendChatMessage - Hmac: {string.Join(",", hmacBytes)}"); var chatMessage = new ChatMessage(iv, encryptedMessageBytes, hmacBytes); var finalMessage = chatMessage.ToString(); Client.SendMessage(finalMessage); }
public KdcHelloRequest(string name, byte[] kdcKey) { Iv = Utils.GenerateRandom16(); Name = name; EncryptedName = SksAes.EncryptStringToBytes_Aes($"Hi I am \"{Name}\"", kdcKey, Iv); }
private static void HandleChatMessage(SksMessageReceivedEventArgs sksMessageReceivedEventArgs) { var user = GetUserByIpAndPort(sksMessageReceivedEventArgs.FromIp, sksMessageReceivedEventArgs.FromPort); var message = ChatMessage.FromString(sksMessageReceivedEventArgs.Message); var secret = user.GetSecretFromProtocol(); var messageStr = SksAes.DecryptStringFromBytes_Aes(message.EncryptedMessageBytes, secret, message.Iv); user.Client.OnChatMessageReceived(user.Client.tcpClient, messageStr); }
public Akep2Message3(string a, byte[] nonceB, byte[] longTermKey) { Iv = Utils.GenerateRandom16(); A = a; NonceB = nonceB; var objects = new List <object> { A, NonceB }; var sequence = SksAsn1Encoder.EncodeSequence(objects); EncryptedPart = SksAes.EncryptBytes_Aes(sequence, longTermKey, Iv); HmacPart = SksHmac.Hash(longTermKey, sequence); }
public static KdcHelloResponse FromString(string message, byte[] kdcKey) { var contentBytes = PemParser.GetMessageContentBytes(message); var contentObjectsList = (List <object>)SksAsn1Parser.Parse(contentBytes); var iv = (byte[])contentObjectsList[0]; var encryptedPart = (byte[])contentObjectsList[1]; var decryptedSequence = SksAes.DecryptBytesFromBytes_Aes(encryptedPart, kdcKey, iv); contentObjectsList = (List <object>)SksAsn1Parser.Parse(decryptedSequence); var users = new List <User>(); foreach (var sequenceObj in contentObjectsList) { var sequence = (List <object>)sequenceObj; var ip = (string)sequence[0]; var port = (string)sequence[1]; var name = (string)sequence[2]; var key = (byte[])sequence[3]; var pass = (string)sequence[4]; var user = new User { Password = pass, Key = key, Name = name, IpAddress = ip, Port = port, }; users.Add(user); } return(new KdcHelloResponse { Users = users, }); }