示例#1
0
 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;
 }
示例#2
0
        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();
        }
示例#3
0
        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");
        }
示例#4
0
 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();
 }
示例#5
0
 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;
 }