private void btnGetS1Msg_Click(object sender, EventArgs e) { lblGetS1MsgRet.Text = string.Empty; // Get S1 message from the trusted application IntPtr s1Msg = Marshal.AllocHGlobal(S1_MESSAGE_LEN); StatusCode status = (StatusCode)SigmaWrapper.GetS1Message(s1Msg); switch (status) { // S1 message was received successfully case StatusCode.STATUS_SUCCEEDED: { Marshal.Copy(s1Msg, S1MsgToSend, 0, S1MsgToSend.Length); // Update GUI lblGetS1MsgRet.Text = "S1 message created successfully."; btnGetS1Msg.Enabled = false; btnGetS2Msg.Enabled = true; break; } case StatusCode.INITIALIZE_FAILED: lblGetS1MsgRet.Text = "Error: JHI Initializing failed."; labelErrS1.Text = GetErrorMsgAsString(); break; case StatusCode.INSTALL_FAILED: lblGetS1MsgRet.Text = "Error: Installing TA failed."; labelErrS1.Text = GetErrorMsgAsString(); break; case StatusCode.OPEN_SESSION_FAILED: lblGetS1MsgRet.Text = "Error: Opening a session failed."; labelErrS1.Text = GetErrorMsgAsString(); break; case StatusCode.FAILED_TO_INITIALIZE_SIGMA: lblGetS1MsgRet.Text = "Error: SIGMA Initializing failed."; labelErrS1.Text = GetErrorMsgAsString(); break; case StatusCode.FAILED_TO_GET_PUBLIC_KEY: lblGetS1MsgRet.Text = "Error: Failed to get public key.\nIs your platform EPID provisioned?"; labelErrS1.Text = GetErrorMsgAsString(); break; default: lblGetS1MsgRet.Text = "Failed to perform send and receive operation in\norder to get S1 message."; labelErrS1.Text = GetErrorMsgAsString(); break; } Marshal.FreeHGlobal(s1Msg); }
private string GetErrorMsgAsString() { IntPtr errorMessageIntPtr = Marshal.AllocHGlobal(ERROR_MESSAGE_LEN); IntPtr errorMsgLenIntPtr = Marshal.AllocHGlobal(INT_SIZE); SigmaWrapper.GetErrorMessage(errorMessageIntPtr, errorMsgLenIntPtr); byte[] messageLength = new byte[INT_SIZE]; Marshal.Copy(errorMsgLenIntPtr, messageLength, 0, messageLength.Length); byte[] message = new byte[BitConverter.ToInt32(messageLength, 0)]; Marshal.Copy(errorMessageIntPtr, message, 0, message.Length); Marshal.FreeHGlobal(errorMessageIntPtr); Marshal.FreeHGlobal(errorMsgLenIntPtr); return(System.Text.Encoding.ASCII.GetString(message)); }
private void Form1_FormClosed(object sender, FormClosedEventArgs e) { Hide(); SigmaWrapper.Close(); Application.Exit(); }
private void btnClose_Click(object sender, EventArgs e) { Hide(); SigmaWrapper.Close(); Application.Exit(); }
private void btnGetS3Msg_Click(object sender, EventArgs e) { lblGetS3MsgRet.Text = string.Empty; // Get S3 message length from the trusted application IntPtr s3MsgLen = Marshal.AllocHGlobal(INT_SIZE); StatusCode status = (StatusCode)SigmaWrapper.GetS3MessagLen(s2Message, s2MsgLen, s3MsgLen); switch (status) { case StatusCode.STATUS_SUCCEEDED: { byte[] S3MsgLenByteArray = new byte[INT_SIZE]; Marshal.Copy(s3MsgLen, S3MsgLenByteArray, 0, S3MsgLenByteArray.Length); // Convert S3 message length from most significant byte first presentation to most significant byte last presentation SwapArrBitEndianness(S3MsgLenByteArray); int s3MessageLenInt = BitConverter.ToInt32(S3MsgLenByteArray, 0); // Get S3 message from the trusted application IntPtr s3Msg = Marshal.AllocHGlobal(s3MessageLenInt); status = (StatusCode)SigmaWrapper.GetS3Message(s2Message, s2MsgLen, s3MessageLenInt, s3Msg); switch (status) { // S3 message was received successfully case StatusCode.STATUS_SUCCEEDED: { // Send S3 message length to server socket.Send(BitConverter.GetBytes(s3MessageLenInt)); // Send S3 message to server for processing and verification byte[] S3MsgToSend = new byte[s3MessageLenInt]; Marshal.Copy(s3Msg, S3MsgToSend, 0, S3MsgToSend.Length); socket.Send(S3MsgToSend); lblGetS3MsgRet.Text = "S3 message was created successfully."; // Get S3 processing status from server status = (StatusCode)ReceiveIntFromServer(); //if (status == StatusCode.STATUS_SUCCEEDED) //lblEnd.Text = "Now both parties have one shared secret and\ncan use any symmetrical encryption algorithm."; //else //lblEnd.Text = "Server failed to verify S3 message."; break; } case StatusCode.INCORRECT_S2_BUFFER: lblGetS3MsgRet.Text = "Trusted application received an incorrect S2 message."; break; case StatusCode.FAILED_TO_PROCESS_S2: lblGetS3MsgRet.Text = "Failed to process S2."; break; case StatusCode.WRONG_INTEL_SIGNED_CERT_TYPE: lblGetS3MsgRet.Text = "Verifier's certificate is wrong Intel signed."; break; case StatusCode.FAILED_TO_GET_SESSION_PARAMS: lblGetS3MsgRet.Text = "Failed to get session parameters."; break; case StatusCode.FAILED_TO_DISPOSE_SIGMA: lblGetS3MsgRet.Text = "Failed to dispose SIGMA."; break; default: lblGetS3MsgRet.Text = "Failed to perform send and receive operation in\norder to get S3 message."; break; } Marshal.FreeHGlobal(s3Msg); btnGetS3Msg.Enabled = false; break; } case StatusCode.FAILED_TO_GET_S3_LEN: lblGetS3MsgRet.Text = "Error: Failed to get S3 message length."; break; default: lblGetS3MsgRet.Text = "Failed to perform send and receive operation in\norder to get S3 message length."; break; } Marshal.FreeHGlobal(s3MsgLen); }