// Digital-sign the data on the memory public static byte[] SignMemory(byte[] srcData, string comment, bool kernelModeDriver, int cert_id, int sha_mode) { #if !BU_OSS int i; string out_filename = null; byte[] ret = null; string in_tmp_filename = Path.Combine(in_dir, Str.DateTimeToStrShortWithMilliSecs(DateTime.Now) + "_" + Env.MachineName + "_" + Secure.Rand63i().ToString() + ".dat"); IO.SaveFile(in_tmp_filename, srcData); for (i = 0; i < NumRetries; i++) { Sign sign = new Sign(); sign.Proxy = new WebProxy(); try { out_filename = sign.ExecSignEx(Path.GetFileName(in_tmp_filename), kernelModeDriver, comment, cert_id, sha_mode); break; } catch (Exception ex) { if (i != (NumRetries - 1)) { Kernel.SleepThread(RetryIntervals); } else { throw ex; } } } for (i = 0; i < NumRetriesForCopy; i++) { try { ret = IO.ReadFile(Path.Combine(out_dir, out_filename)); } catch (Exception ex) { if (i != (NumRetriesForCopy - 1)) { Kernel.SleepThread(RetryIntervalsForCopy); } else { throw ex; } } } string tmpFileName = IO.CreateTempFileNameByExt(".exe"); try { File.Delete(tmpFileName); } catch { } File.WriteAllBytes(tmpFileName, ret); lock (lockObj) { if (ExeSignChecker.CheckFileDigitalSignature(tmpFileName) == false) { throw new ApplicationException("CheckFileDigitalSignature failed."); } if (kernelModeDriver) { if (ExeSignChecker.IsKernelModeSignedFile(tmpFileName) == false) { throw new ApplicationException("IsKernelModeSignedFile failed."); } } } try { } catch { File.Delete(tmpFileName); } return(ret); #else // BU_OSS return(srcData); #endif // BU_OSS }