private bool GetValue(string dbFilename, IRimRecords records) { StatusMessage sm; String displayMsg = null; try { sm = getStatusMessage(records); logger.LogStatus("Return Status: " + sm.rc + ": " + sm.msg); switch (sm.rc) { case RC_DESKTOP_DECRYPT_FAILURE: case RC_DEVICE_DECRYPT_FAILURE: displayMsg = sm.msg; password = null; keyfile = null; break; case RC_NOT_SUPPORTED: case RC_LOADED_TO_DEVICE: displayMsg = sm.msg; break; case RC_NO_CHANGES_MADE: //displayMsg = "No changes detected"; break; case RC_CHANGES_MADE: //displayMsg = "Completed"; saveFile(records, dbFilename); break; default: displayMsg = "There was an error on the device: " + sm.msg; break; } } catch (Exception e) { logger.LogStatus("There was an exception receiving the status string. " + e.ToString()); MessageBox.Show("There was an exception receiving the status string. " + e.ToString()); return true; } return false; }
public void sendFile(IRimRecords records, String filename) { logger.LogStatus("Sending file " + filename + " to device"); setProgress("Sending database"); IRimRecord r = records.AddRecord(); r.RecordID = RECORD_DATABASE; r.Version = 4; IRimField f = r.fields.AddField(); f.Id = FIELD_RECORD_TYPE; f.value = RECORD_DATABASE; FileInfo fi = new FileInfo(filename); FileStream fs = File.Open(filename, FileMode.Open); BinaryReader br = new BinaryReader(fs); int l = (int)fi.Length; while (l > 0) { byte[] buffer = br.ReadBytes(Math.Min(l, 8192)); f = r.fields.AddField(); f.Id = FIELD_TYPE_DATA; f.value = buffer; l -= buffer.Length; /* SHA256 md = new SHA256Managed(); byte[] hash = md.ComputeHash(buffer); f = r.fields.AddField(); f.Id = FIELD_TYPE_CHECKSUM; f.value = hash; * */ } br.Close(); fs.Close(); r.Update(); }
public void saveFile(IRimRecords records, String dbFilename) { logger.LogStatus("Saving database to " + dbFilename); setProgress("Saving database to " + dbFilename); IRimRecord r = records.FindRecord(RECORD_DATABASE); int fc = r.fields.Count; if (fc < 2) return; IRimFields fds = r.fields.FindFields(FIELD_TYPE_DATA); IEnumerator enu = fds.GetEnumerator(); FileStream fs = File.Open(dbFilename + ".tmp", FileMode.Create); BinaryWriter bw = new BinaryWriter(fs); while (enu.MoveNext()) { IRimField f = (IRimField)enu.Current; bw.Write((byte[])f.value); } bw.Close(); fs.Close(); File.Replace(dbFilename + ".tmp", dbFilename, dbFilename + ".bak"); }
public void sendCredentials(IRimRecords records) { logger.LogStatus("Sending credentials."); setProgress("Sending credentials"); IRimRecord r = records.AddRecord(); r.RecordID = RECORD_CREDENTIALS; r.Version = 4; IRimField f = r.fields.AddField(); f.Id = FIELD_RECORD_TYPE; f.value = RECORD_CREDENTIALS; if (password != null && password.Length > 0) { f = r.fields.AddField(); f.Id = FIELD_PASSWORD; byte[] pba = new byte[password.Length]; for (int i = 0; i < pba.Length; i++) pba[i] = (byte)password[i]; f.value = pba; } if (keyfile != null && keyfile.Length > 0) { FileInfo fi = new FileInfo(keyfile); FileStream fs = File.Open(keyfile, FileMode.Open); BinaryReader br = new BinaryReader(fs); int l = (int)fi.Length; while (l > 0) { byte[] buffer = br.ReadBytes(Math.Min(l, 8192)); f = r.fields.AddField(); f.Id = FIELD_KEYFILE; f.value = buffer; l -= buffer.Length; } br.Close(); fs.Close(); } r.Update(); }
public StatusMessage getStatusMessage(IRimRecords records) { setProgress("Receiving status message"); IRimRecord r = records.FindRecord(RECORD_MESSAGE); IRimField f = r.fields.FindField(FIELD_RC); StatusMessage sm = new StatusMessage(); sm.rc = BitConverter.ToInt32((byte[])f.value, 0); f = r.fields.FindField(FIELD_MSG); sm.msg = System.Text.Encoding.ASCII.GetString((byte[])f.value); return sm; }