/// <summary> /// Parses the content and returns an object of proper type /// </summary> /// <param name="contentBytes"></param> /// <param name="type"></param> /// <param name="code"></param> /// <param name="authenticator"></param> /// <param name="sharedSecret"></param> /// <returns></returns> object ParseContentBytes(byte[] contentBytes, string type, uint code, byte[] authenticator, byte[] sharedSecret) { switch (type) { case "string": return(Encoding.UTF8.GetString(contentBytes)); case "tagged-string": return(Encoding.UTF8.GetString(contentBytes)); case "octet": // If this is a password attribute it must be decrypted if (code == 2) { return(RadiusPassword.Decrypt(sharedSecret, authenticator, contentBytes)); } return(contentBytes); case "integer": return(BitConverter.ToUInt32(contentBytes.Reverse().ToArray(), 0)); case "tagged-integer": return(BitConverter.ToUInt32(contentBytes.Reverse().ToArray(), 0)); case "ipaddr": return(new IPAddress(contentBytes)); default: return(null); } }
public void TestPasswordEncryptDecrypt(String password) { var secret = "xyzzy5461"; var authenticator = "1234567890123456"; var encrypted = RadiusPassword.Encrypt(Encoding.UTF8.GetBytes(secret), Encoding.UTF8.GetBytes(authenticator), Encoding.UTF8.GetBytes(password)); var decrypted = RadiusPassword.Decrypt(Encoding.UTF8.GetBytes(secret), Encoding.UTF8.GetBytes(authenticator), encrypted); Assert.AreEqual(password, decrypted); }