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 static Akep2Message1 FromString(string str) { var contentBytes = PemParser.GetMessageContentBytes(str); var contentObjectsList = (List <object>)SksAsn1Parser.Parse(contentBytes); var nonceA = (byte[])contentObjectsList[0]; return(new Akep2Message1(nonceA)); }
public void GetMessageBytesTest() { // todo: refactor var expectedSequence = new byte[] { (byte)SksAsn1Type.Sequence, 0x0E, (byte)SksAsn1Type.Printablestring, 0x03, 65, 66, 67, (byte)SksAsn1Type.OctetString, 0x05, 0x00, 0x01, 0x02, 0x03, 0x04, }; var expectedSequenceBase64 = Convert.ToBase64String(expectedSequence); var expected = $"-----BEGIN INITIAL MESSAGE 1-----{expectedSequenceBase64}-----END INITIAL MESSAGE 1"; var messageBytes = PemParser.GetMessageContentBytes(expected); CollectionAssert.AreEqual(expectedSequence, messageBytes); }
public static ChatMessage FromString(string str) { var contentBytes = PemParser.GetMessageContentBytes(str); var contentObjectsList = (List <object>)SksAsn1Parser.Parse(contentBytes); var iv = (byte[])contentObjectsList[0]; var encryptedmessageBytes = (byte[])contentObjectsList[1]; var hmacBytes = (byte[])contentObjectsList[2]; return(new ChatMessage(iv, encryptedmessageBytes, hmacBytes)); }
public static HandshakeMessage2 FromString(string str) { var contentBytes = PemParser.GetMessageContentBytes(str); var contentObjectsList = (List <object>)SksAsn1Parser.Parse(contentBytes); var protocolId = (ProtocolType)(int)contentObjectsList[0]; //var ttps = (List<string>) contentObjectsList[1]; // todo: add TTPs return(new HandshakeMessage2(protocolId, null)); }
public static HandshakeMessage1 FromString(string str) { var contentBytes = PemParser.GetMessageContentBytes(str); var contentObjectsList = (List <object>)SksAsn1Parser.Parse(contentBytes); var a = (string)contentObjectsList[0]; var b = (string)contentObjectsList[1]; var keyId = (byte[])contentObjectsList[2]; var passwordId = (byte[])contentObjectsList[3]; // todo: add TTPs return(new HandshakeMessage1(a, b, keyId, passwordId, null)); }
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, }); }