public static byte[] CreateResponse( TpmRc responseCode, TpmHandle[] handles, SessionOut[] sessions, byte[] responseParmsNoHandles) { var m = new Marshaller(); TpmSt tag = sessions.Length == 0 ? TpmSt.NoSessions : TpmSt.Sessions; m.Put(tag, "tag"); m.PushLength(4); m.Put(responseCode, "responseCode"); foreach (TpmHandle h in handles) { m.Put(h, "handle"); } if (tag == TpmSt.Sessions) { m.Put((uint)responseParmsNoHandles.Length, "parmsLenght"); } m.Put(responseParmsNoHandles, "parms"); foreach (SessionOut s in sessions) m.Put(s, "session"); m.PopAndSetLengthToTotalLength(); return m.GetBytes(); }
/// <summary> /// Create a TPM command byte stream from constituent components /// </summary> /// <param name="commandCode"></param> /// <param name="handles"></param> /// <param name="sessions"></param> /// <param name="parmsWithoutHandles"></param> /// <returns></returns> public static byte[] CreateCommand( TpmCc commandCode, TpmHandle[] handles, SessionIn[] sessions, byte[] parmsWithoutHandles) { // ReSharper disable once UnusedVariable CommandInfo commandInfo = Tpm2.CommandInfoFromCommandCode(commandCode); var m = new Marshaller(); TpmSt tag = sessions.Length == 0 ? TpmSt.NoSessions : TpmSt.Sessions; m.Put(tag, "tag"); m.PushLength(4); m.Put(commandCode, "commandCode"); foreach (TpmHandle h in handles) { m.Put(h, "handle"); } if (tag == TpmSt.Sessions) { var m2 = new Marshaller(); foreach (SessionIn s in sessions) { m2.Put(s, "session"); } m.PutUintPrependedArray(m2.GetBytes(), "sessions"); } m.Put(parmsWithoutHandles, "parms"); m.PopAndSetLengthToTotalLength(); return m.GetBytes(); }