Add Export/import feature

This commit is contained in:
Jim Norman 2006-08-10 16:21:47 +00:00
parent 38264cc856
commit 2d3518d9bd
18 changed files with 1591 additions and 279 deletions

View File

@ -185,6 +185,11 @@
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "ExportSecrets.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "Firefox.cs"
SubType = "Code"
@ -195,6 +200,11 @@
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "ImportSecrets.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "KdeWallet.cs"
SubType = "Code"
@ -235,11 +245,6 @@
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "TrayLib.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "images\CASA.bmp"
BuildAction = "Content"

View File

@ -241,7 +241,7 @@ namespace Novell.CASA.GUI
{
if (!Common.IsArgSet(args, Common.ARG_NO_TRAY_ICON))
{
if (config.GetConfigSetting(Common.CONFIG_RUN_IN_TRAY, true))
if (config.GetConfigSetting(Common.CONFIG_RUN_IN_TRAY, true))
{
if (mCasaTray == null)
mCasaTray = new CasaTray(this, config);
@ -2072,6 +2072,23 @@ namespace Novell.CASA.GUI
}
public void on_exportSecrets_activate(object obj, EventArgs args)
{
ExportSecrets es = new ExportSecrets(config);
es.Run();
}
public void on_importSecrets_activate(object obj, EventArgs args)
{
ImportSecrets importSecrets = new ImportSecrets(config, objMiCasa);
importSecrets.Run();
if (objMiCasa != null)
objMiCasa.AggregateStore();
}
/// <summary>
/// ********************************************************************
/// private void HandleQuit()

View File

@ -39,6 +39,9 @@ namespace Novell.CASA.GUI
public class CommonGUI
{
public static string HINT_DIR = "Export Directory";
public static string HINT_FILENAME = "Export Filename";
[Glade.Widget]
Gtk.Label label86,
label88;
@ -155,7 +158,7 @@ namespace Novell.CASA.GUI
{
// prompt user
MessageDialog md=new MessageDialog(
mainWindow,Gtk.DialogFlags.Modal,
mainWindow,Gtk.DialogFlags.Modal,
Gtk.MessageType.Warning,
Gtk.ButtonsType.Ok,
"Master Password entered is incorrect");
@ -212,6 +215,106 @@ namespace Novell.CASA.GUI
mTrayInstance.UpdateTrayIcon(false);
}
}
public static string FileChooser(FileChooserAction action, String sWindowTitle, String sCurrentFolder, String sHintFileName)
{
FileChooserDialog chooser = new FileChooserDialog (sWindowTitle,
null,
action);
if (sCurrentFolder != null)
chooser.SetCurrentFolder(sCurrentFolder);
if (sHintFileName != null)
chooser.SetFilename(sCurrentFolder+sHintFileName);
// set location
chooser.SetPosition(Gtk.WindowPosition.CenterAlways);
chooser.AddButton (Stock.Cancel, ResponseType.Cancel);
if (action == FileChooserAction.Open)
chooser.AddButton (Stock.Open, ResponseType.Ok);
else
chooser.AddButton(Stock.Save, ResponseType.Ok);
int response = chooser.Run ();
string ret = null;
if ((ResponseType) response == ResponseType.Ok)
{
ret = chooser.Uri;
}
/*
// if the action is SAVE, and the file that is choosen exists, prompt the user for overwrite
if (action == FileChooserAction.Save)
{
string sFilename = ret.Substring(8);
if (System.IO.File.Exists(sFilename))
{
// prompt user for overwrite
}
}
*/
chooser.Destroy();
return ret;
}
/// <summary>
/// VerifyMasterPasswordWithUser dialog
/// </summary>
public void VerifyMasterPasswordWithUser()
{
//Logger.DbgLog("GUI:CasaMain.Login() - IsMasterPasswordSet returned false");
#if W32
Glade.XML gxmlTemp = new Glade.XML ("../images/casa.glade", "dialogLogin", null);
#endif
#if LINUX
Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogLogin", null);
#endif
gxmlTemp.Autoconnect (this);
dialogLogin.TransientFor = (Gtk.Window)CasaMain.gxmlMain.GetWidget("windowMain");;
label86.Text = "Enter your Master Password to continue.";
entryMasterPassword3.Text="";
label88.Hide();
entryMasterPassword4.Hide();
//dialogLogin.SetPosition(Gtk.WindowPosition.Center);
dialogLogin.Destroyed += new EventHandler(dialogLogin_Destroyed);
dialogLogin.Modal = true;
dialogLogin.Show();
}
public static void DisplayMessage(Gtk.MessageType messageType, String sMessage)
{
MessageDialog md = new MessageDialog(null,
Gtk.DialogFlags.Modal,
messageType,
Gtk.ButtonsType.Close,
sMessage);
md.SetPosition(Gtk.WindowPosition.CenterAlways);
md.Response +=new ResponseHandler(md_Response3);
md.Show();
}
private static void md_Response3(object o, ResponseArgs args)
{
MessageDialog md = (MessageDialog)o;
if (md != null)
{
md.Destroy();
}
}
#if W32
public static bool IsGTKSharpInstalled()

150
CASA/gui/ExportSecrets.cs Normal file
View File

@ -0,0 +1,150 @@
using System;
using System.IO;
using Novell.CASA.MiCasa.Communication;
using Novell.CASA.MiCasa.Common;
using Gtk;
using Glade;
namespace Novell.CASA.GUI
{
/// <summary>
/// Summary description for ExportSecrets.
/// </summary>
public class ExportSecrets
{
private Config m_config = null;
[Glade.Widget]
Gtk.Label label86,
label88;
[Glade.Widget]
Gtk.Entry entryMasterPassword;
[Glade.Widget]
Gtk.Dialog dialogExport;
[Glade.Widget]
Gtk.CheckButton checkbuttonNoEncrypt;
public ExportSecrets(Config config)
{
m_config = config;
}
public void Run()
{
// prompt for master password, and optional passphrase to encrypt
//Logger.DbgLog("GUI:CasaMain.Login() - IsMasterPasswordSet returned false");
#if W32
Glade.XML gxmlTemp = new Glade.XML ("../images/casa.glade", "dialogExport", null);
#endif
#if LINUX
Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogLogin", null);
#endif
gxmlTemp.Autoconnect (this);
dialogExport.TransientFor = (Gtk.Window)CasaMain.gxmlMain.GetWidget("windowMain");;
dialogExport.Destroyed += new EventHandler(dialogExport_Destroyed);
dialogExport.Modal = true;
dialogExport.Show();
}
private void dialogExport_Destroyed(object sender, EventArgs e)
{
}
private void on_buttonCloseExportSecrets_clicked(object sender, EventArgs args)
{
if (dialogExport != null)
{
dialogExport.Destroy();
}
}
private void on_buttonOkExportSecrets_clicked(object sender, EventArgs args)
{
if( 0 == miCASA.SetMasterPassword(0, entryMasterPassword.Text) )
{
string sMasterPWD = entryMasterPassword.Text;
string sEncryptString = entryMasterPassword.Text;
if (checkbuttonNoEncrypt.Active)
sEncryptString = null;
if (dialogExport != null)
{
dialogExport.Destroy();
}
string sHintDir = m_config.GetConfigSetting(CommonGUI.HINT_DIR, null);
string sHintFile = m_config.GetConfigSetting(CommonGUI.HINT_FILENAME, null);
// prompt the user for storage location
string sFileName = GetStorageFileName(sHintDir, sHintFile);
if (sFileName != null)
{
//Store off this location for next export
int iLastSlash = sFileName.LastIndexOf("/");
if (iLastSlash > 0)
{
sHintFile = sFileName.Substring(iLastSlash + 1);
sHintDir = sFileName.Substring(8, sFileName.Length - sHintFile.Length - 8);
}
// save for later use
m_config.SetConfigSetting(CommonGUI.HINT_DIR, sHintDir);
m_config.SetConfigSetting(CommonGUI.HINT_FILENAME, sHintFile);
m_config.WriteConfig();
// call our daemon to get the users secrets
ExportXMLSecrets exportSecrets = new ExportXMLSecrets(sMasterPWD, sEncryptString);
byte[] theSecrets = (byte[])Novell.CASA.MiCasa.Communication.MiCasaRequestReply.Send(MiCasaRequestReply.VERB_EXPORT_SECRETS, null, null, null, exportSecrets);
// write em out.
FileStream fs = new FileStream(sFileName.Substring(8), FileMode.Create);
fs.Write(theSecrets, 0, theSecrets.Length);
fs.Flush();
fs.Close();
CommonGUI.DisplayMessage(MessageType.Info, "Secrets saved to: \r\n" + sFileName.Substring(8));
}
}
else
{
// prompt user
MessageDialog md=new MessageDialog(dialogExport,Gtk.DialogFlags.Modal,
Gtk.MessageType.Warning,
Gtk.ButtonsType.Ok,
"Master Password incorrect");
md.Response +=new ResponseHandler(md_Response2);
md.SetPosition(Gtk.WindowPosition.CenterOnParent);
md.Modal = true;
md.Show();
}
}
private string GetStorageFileName(string sHintDir, string sHintFile)
{
String sFileName = CommonGUI.FileChooser(FileChooserAction.Save, "Select filename and location for secrets", sHintDir, sHintFile);
return sFileName;
}
private void md_Response2(object o, ResponseArgs args)
{
MessageDialog md = (MessageDialog)o;
if (md != null)
{
md.Destroy();
}
}
}
}

119
CASA/gui/ImportSecrets.cs Normal file
View File

@ -0,0 +1,119 @@
using System;
using System.IO;
using Novell.CASA.MiCasa.Communication;
using Novell.CASA.MiCasa.Common;
namespace Novell.CASA.GUI
{
/// <summary>
/// Summary description for ImportSecrets.
/// </summary>
public class ImportSecrets
{
Config m_config = null;
public MiCasa m_objMiCasa = null;
byte[] buffer = null;
[Glade.Widget]
Gtk.Entry entryMasterPassword;
[Glade.Widget]
Gtk.Dialog dialogImport;
public ImportSecrets(Config config, MiCasa objMiCasa)
{
m_config = config;
m_objMiCasa = objMiCasa;
}
public void Run()
{
String sHintDir = m_config.GetConfigSetting(CommonGUI.HINT_DIR, null);;
String sHintFilename = m_config.GetConfigSetting(CommonGUI.HINT_FILENAME, null);
// ask the user to locate the secret file to import
string sFile = CommonGUI.FileChooser(Gtk.FileChooserAction.Open, "Select import file", sHintDir, sHintFilename);
if (sFile != null)
{
// parse of the file:///
sFile = sFile.Substring(8);
if (File.Exists(sFile))
{
// let's read it
FileStream fs = new FileStream(sFile, FileMode.Open);
buffer = new byte[fs.Length];
int iBytes = fs.Read(buffer, 0, (int)fs.Length);
string data = System.Text.Encoding.ASCII.GetString(buffer);
fs.Flush();
fs.Close();
// check for clear text secrets
if (data.StartsWith("<?xml"))
{
ImportXMLSecrets addSecrets = new ImportXMLSecrets(null, buffer);
MiCasaRequestReply.Send(MiCasaRequestReply.VERB_ADD_XML_SECRETS, null, null, null, addSecrets);
CommonGUI.DisplayMessage(Gtk.MessageType.Info, "Import complete");
}
else
{
GetMasterPasswordUsedForImport();
}
}
}
}
public void GetMasterPasswordUsedForImport()
{
// prompt for master password, and optional passphrase to encrypt
//Logger.DbgLog("GUI:CasaMain.Login() - IsMasterPasswordSet returned false");
#if W32
Glade.XML gxmlTemp = new Glade.XML ("../images/casa.glade", "dialogImport", null);
#endif
#if LINUX
Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogLogin", null);
#endif
gxmlTemp.Autoconnect (this);
dialogImport.TransientFor = (Gtk.Window)CasaMain.gxmlMain.GetWidget("windowMain");;
dialogImport.Modal = true;
dialogImport.Show();
}
private void on_buttonImportOK_clicked(object sender, EventArgs args)
{
if (entryMasterPassword != null)
{
ImportXMLSecrets addSecrets = new ImportXMLSecrets(entryMasterPassword.Text, buffer);
addSecrets = (ImportXMLSecrets)MiCasaRequestReply.Send(MiCasaRequestReply.VERB_ADD_XML_SECRETS, null, null, null, addSecrets);
if (dialogImport != null)
{
dialogImport.Destroy();
}
if (m_objMiCasa != null)
{
m_objMiCasa.AggregateStore();
}
if (addSecrets.GetStatus().Equals("Success"))
CommonGUI.DisplayMessage(Gtk.MessageType.Info, "Import complete");
else
CommonGUI.DisplayMessage(Gtk.MessageType.Info, "Failed: " + addSecrets.GetStatus());
}
}
private void on_buttonImportClose_clicked(object sender, EventArgs args)
{
if (dialogImport != null)
{
dialogImport.Destroy();
}
}
}
}

View File

@ -56,7 +56,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="image3732">
<widget class="GtkImage" id="image3902">
<property name="visible">True</property>
<property name="stock">gtk-new</property>
<property name="icon_size">1</property>
@ -78,7 +78,7 @@
<signal name="activate" handler="OnNewSecretActivated" last_modification_time="Tue, 27 Sep 2005 06:02:26 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3733">
<widget class="GtkImage" id="image3903">
<property name="visible">True</property>
<property name="stock">gtk-new</property>
<property name="icon_size">1</property>
@ -99,7 +99,7 @@
<signal name="activate" handler="OnNewKeyActivated" last_modification_time="Tue, 27 Sep 2005 06:02:36 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3734">
<widget class="GtkImage" id="image3904">
<property name="visible">True</property>
<property name="stock">gtk-new</property>
<property name="icon_size">1</property>
@ -125,7 +125,7 @@
<accelerator key="F5" modifiers="0" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image3735">
<widget class="GtkImage" id="image3905">
<property name="visible">True</property>
<property name="stock">gtk-refresh</property>
<property name="icon_size">1</property>
@ -152,7 +152,7 @@
<signal name="activate" handler="OnLockMiCASASecrets" last_modification_time="Mon, 10 Oct 2005 19:51:54 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3736">
<widget class="GtkImage" id="image3906">
<property name="visible">True</property>
<property name="stock">gtk-dialog-authentication</property>
<property name="icon_size">1</property>
@ -173,7 +173,7 @@
<signal name="activate" handler="OnUnLockMiCASASecrets" last_modification_time="Tue, 11 Oct 2005 20:12:35 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3737">
<widget class="GtkImage" id="image3907">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">1</property>
@ -194,7 +194,7 @@
<signal name="activate" handler="OnDestroyMiCASASecrets" last_modification_time="Tue, 11 Oct 2005 20:12:35 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3738">
<widget class="GtkImage" id="image3908">
<property name="visible">True</property>
<property name="stock">gtk-delete</property>
<property name="icon_size">1</property>
@ -213,6 +213,54 @@
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="exportSecrets">
<property name="visible">True</property>
<property name="label" translatable="yes">_Export Secrets</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_exportSecrets_activate" last_modification_time="Mon, 07 Aug 2006 19:38:42 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3909">
<property name="visible">True</property>
<property name="stock">gtk-floppy</property>
<property name="icon_size">1</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="importSecrets">
<property name="visible">True</property>
<property name="label" translatable="yes">_Import Secrets</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_importSecrets_activate" last_modification_time="Mon, 07 Aug 2006 19:38:42 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3910">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">1</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separator7">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="quit1">
<property name="visible">True</property>
@ -222,7 +270,7 @@
<accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image3739">
<widget class="GtkImage" id="image3911">
<property name="visible">True</property>
<property name="stock">gtk-quit</property>
<property name="icon_size">1</property>
@ -258,7 +306,7 @@
<accelerator key="F2" modifiers="0" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image3740">
<widget class="GtkImage" id="image3912">
<property name="visible">True</property>
<property name="stock">gtk-zoom-fit</property>
<property name="icon_size">1</property>
@ -279,7 +327,7 @@
<signal name="activate" handler="LinkKeyValue" last_modification_time="Fri, 19 Aug 2005 06:23:15 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3741">
<widget class="GtkImage" id="image3913">
<property name="visible">True</property>
<property name="stock">gtk-jump-to</property>
<property name="icon_size">1</property>
@ -300,7 +348,7 @@
<signal name="activate" handler="CopyKeyValue" last_modification_time="Fri, 19 Aug 2005 06:23:15 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3742">
<widget class="GtkImage" id="image3914">
<property name="visible">True</property>
<property name="stock">gtk-copy</property>
<property name="icon_size">1</property>
@ -328,7 +376,7 @@
<accelerator key="Delete" modifiers="0" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image3743">
<widget class="GtkImage" id="image3915">
<property name="visible">True</property>
<property name="stock">gtk-delete</property>
<property name="icon_size">1</property>
@ -362,7 +410,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="image3744">
<widget class="GtkImage" id="image3916">
<property name="visible">True</property>
<property name="stock">gtk-execute</property>
<property name="icon_size">1</property>
@ -384,7 +432,7 @@
<signal name="activate" handler="on_konquerer_activate" last_modification_time="Thu, 02 Mar 2006 07:08:06 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3745">
<widget class="GtkImage" id="image3917">
<property name="visible">True</property>
<property name="stock">gtk-execute</property>
<property name="icon_size">1</property>
@ -405,7 +453,7 @@
<signal name="activate" handler="on_kopete_activate" last_modification_time="Thu, 02 Mar 2006 07:08:44 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3746">
<widget class="GtkImage" id="image3918">
<property name="visible">True</property>
<property name="stock">gtk-execute</property>
<property name="icon_size">1</property>
@ -426,7 +474,7 @@
<signal name="activate" handler="on_networkmanager_activate" last_modification_time="Thu, 02 Mar 2006 07:07:54 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3747">
<widget class="GtkImage" id="image3919">
<property name="visible">True</property>
<property name="stock">gtk-execute</property>
<property name="icon_size">1</property>
@ -447,7 +495,7 @@
<signal name="activate" handler="on_gaim_activate" last_modification_time="Thu, 02 Mar 2006 07:07:29 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3748">
<widget class="GtkImage" id="image3920">
<property name="visible">True</property>
<property name="stock">gtk-execute</property>
<property name="icon_size">1</property>
@ -472,7 +520,7 @@
<signal name="activate" handler="ResetMasterPassword" last_modification_time="Wed, 02 Nov 2005 15:28:00 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3749">
<widget class="GtkImage" id="image3921">
<property name="visible">True</property>
<property name="stock">gtk-revert-to-saved</property>
<property name="icon_size">1</property>
@ -499,7 +547,7 @@
<signal name="activate" handler="Preferences" last_modification_time="Fri, 19 Aug 2005 06:40:17 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3750">
<widget class="GtkImage" id="image3922">
<property name="visible">True</property>
<property name="stock">gtk-preferences</property>
<property name="icon_size">1</property>
@ -533,7 +581,7 @@
<signal name="activate" handler="on_create_sample_secrets1_activate" last_modification_time="Fri, 30 Sep 2005 12:58:41 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3751">
<widget class="GtkImage" id="image3923">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
@ -554,7 +602,7 @@
<signal name="activate" handler="on_remove_test_secrets1_activate" last_modification_time="Fri, 30 Sep 2005 12:59:05 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3752">
<widget class="GtkImage" id="image3924">
<property name="visible">True</property>
<property name="stock">gtk-remove</property>
<property name="icon_size">1</property>
@ -605,7 +653,7 @@
<accelerator key="F1" modifiers="0" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image3753">
<widget class="GtkImage" id="image3925">
<property name="visible">True</property>
<property name="stock">gtk-help</property>
<property name="icon_size">1</property>
@ -632,7 +680,7 @@
<signal name="activate" handler="About" last_modification_time="Thu, 01 Sep 2005 15:30:28 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image3754">
<widget class="GtkImage" id="image3926">
<property name="visible">True</property>
<property name="stock">gtk-dialog-info</property>
<property name="icon_size">1</property>
@ -11863,4 +11911,614 @@ the following characters
</child>
</widget>
<widget class="GtkDialog" id="dialogExport">
<property name="visible">True</property>
<property name="title" translatable="yes">CASA - Export Secrets</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_CENTER_ALWAYS</property>
<property name="modal">True</property>
<property name="resizable">False</property>
<property name="destroy_with_parent">True</property>
<property name="icon">CASAicons.ico</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="focus_on_map">True</property>
<property name="urgency_hint">False</property>
<property name="has_separator">True</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="vbox148">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="hbuttonbox23">
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
<widget class="GtkButton" id="button64">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-help</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NONE</property>
<property name="focus_on_click">True</property>
<property name="response_id">-11</property>
</widget>
</child>
<child>
<widget class="GtkButton" id="buttonCloseExportSecrets">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-close</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">-7</property>
<signal name="clicked" handler="on_buttonCloseExportSecrets_clicked" last_modification_time="Tue, 08 Aug 2006 19:58:38 GMT"/>
</widget>
</child>
<child>
<widget class="GtkButton" id="buttonOkExportSecrets">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-ok</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">-5</property>
<signal name="clicked" handler="on_buttonOkExportSecrets_clicked" last_modification_time="Mon, 07 Aug 2006 23:37:55 GMT"/>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox149">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkHBox" id="hbox87">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkVBox" id="vbox150">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkImage" id="image3853">
<property name="visible">True</property>
<property name="stock">gtk-dialog-authentication</property>
<property name="icon_size">6</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">4</property>
<property name="expand">False</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">4</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox151">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkLabel" id="label263">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Export miCASA Secrets&lt;/b&gt;</property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">4</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label264">
<property name="visible">True</property>
<property name="label" translatable="yes">Your Master Password is required to
export your secrets. Your secrets will
be encrypted using your Master Password.
If you wish, you can export your secrets
in clear text. </property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">4</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkFrame" id="frame30">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="label_xalign">0</property>
<property name="label_yalign">0.5</property>
<property name="shadow_type">GTK_SHADOW_IN</property>
<child>
<widget class="GtkAlignment" id="alignment45">
<property name="visible">True</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xscale">1</property>
<property name="yscale">1</property>
<property name="top_padding">0</property>
<property name="bottom_padding">0</property>
<property name="left_padding">12</property>
<property name="right_padding">0</property>
<child>
<widget class="GtkTable" id="table31">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="n_columns">2</property>
<property name="homogeneous">False</property>
<property name="row_spacing">6</property>
<property name="column_spacing">6</property>
<child>
<widget class="GtkLabel" id="label265">
<property name="visible">True</property>
<property name="label" translatable="yes">Master Password :</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">1</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entryMasterPassword">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">False</property>
<property name="max_length">512</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="checkbuttonNoEncrypt">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Do not encrypt export file</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="active">False</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
</widget>
</child>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
</child>
</widget>
<widget class="GtkDialog" id="dialogImport">
<property name="visible">True</property>
<property name="title" translatable="yes">CASA - Import Secrets</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_CENTER_ALWAYS</property>
<property name="modal">True</property>
<property name="resizable">False</property>
<property name="destroy_with_parent">True</property>
<property name="icon">CASAicons.ico</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="focus_on_map">True</property>
<property name="urgency_hint">False</property>
<property name="has_separator">True</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="vbox152">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="hbuttonbox24">
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
<widget class="GtkButton" id="button65">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-help</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NONE</property>
<property name="focus_on_click">True</property>
<property name="response_id">-11</property>
</widget>
</child>
<child>
<widget class="GtkButton" id="buttonImportClose">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-close</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">-7</property>
<signal name="clicked" handler="on_buttonImportClose_clicked" last_modification_time="Wed, 09 Aug 2006 20:53:18 GMT"/>
</widget>
</child>
<child>
<widget class="GtkButton" id="buttonImportOK">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-ok</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">-5</property>
<signal name="clicked" handler="on_buttonImportOK_clicked" last_modification_time="Wed, 09 Aug 2006 20:53:23 GMT"/>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox153">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkHBox" id="hbox88">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkVBox" id="vbox154">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkImage" id="image3854">
<property name="visible">True</property>
<property name="stock">gtk-dialog-authentication</property>
<property name="icon_size">6</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">4</property>
<property name="expand">False</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">4</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox155">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkLabel" id="label266">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Export miCASA Secrets&lt;/b&gt;</property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">4</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label267">
<property name="visible">True</property>
<property name="label" translatable="yes">The file you selected appears
to be encypted. Please enter
the Master Password used
to encrypt this file</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">4</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkFrame" id="frame31">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="label_xalign">0</property>
<property name="label_yalign">0.5</property>
<property name="shadow_type">GTK_SHADOW_IN</property>
<child>
<widget class="GtkAlignment" id="alignment46">
<property name="visible">True</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xscale">1</property>
<property name="yscale">1</property>
<property name="top_padding">0</property>
<property name="bottom_padding">0</property>
<property name="left_padding">12</property>
<property name="right_padding">0</property>
<child>
<widget class="GtkTable" id="table32">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="n_columns">2</property>
<property name="homogeneous">False</property>
<property name="row_spacing">6</property>
<property name="column_spacing">6</property>
<child>
<widget class="GtkLabel" id="label268">
<property name="visible">True</property>
<property name="label" translatable="yes">Master Password :</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">1</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entryMasterPassword">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">False</property>
<property name="max_length">512</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="y_options"></property>
</packing>
</child>
</widget>
</child>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>

View File

@ -804,5 +804,49 @@ namespace sscs.cache
string homeDir = GetUserHomeDirectory();
return homeDir + ConstStrings.MICASA_VALIDATION_FILE;
}
internal byte[] GetSecrets(string sEncryptionString)
{
if (lss != null)
{
MemoryStream ms = lss.GetSecretsAsXMLStream();
byte[] baSecrets = ms.ToArray();
// encrypt if an encryptionstring was passed
if ((sEncryptionString != null) && (sEncryptionString.Length > 0))
{
byte[] baKey = sscs.crypto.CASACrypto.Generate16ByteKeyFromString(sEncryptionString, null, false);
// now encypt it.
baSecrets = sscs.crypto.CASACrypto.EncryptData(baSecrets, baKey);
}
return baSecrets;
}
else
{
return null;
}
}
internal void MergeXMLSecrets(byte[] encryptedXmlSecrets, string sEncryptionString)
{
if (sEncryptionString != null)
{
// decrypt the buffer using the string passed in.
byte[] baKey = sscs.crypto.CASACrypto.Generate16ByteKeyFromString(sEncryptionString, null, false);
byte[] baBuffer = sscs.crypto.CASACrypto.DecryptData(encryptedXmlSecrets, baKey);
MergeXMLSecrets(baBuffer);
}
}
internal void MergeXMLSecrets(byte[] decryptedXmlSecrets)
{
XmlDocument doc = new XmlDocument();
String sXMLData = Encoding.ASCII.GetString(decryptedXmlSecrets);
doc.LoadXml(sXMLData);
if (lss != null)
{
lss.AddXMLSecretsToStore(doc);
}
}
}
}

View File

@ -40,7 +40,7 @@ namespace sscs.communication.win {
private uint NumberPipes = 16;
private uint OutBuffer = 65536; //512;
private uint InBuffer = 65536; //512;
private const int MAX_READ_BYTES = 5000;
private const int MAX_READ_BYTES = 15000;
private bool _listen = true;
public bool Listen {
get {

View File

@ -98,6 +98,16 @@
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "common\ExportXMLSecrets.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "common\ImportXMLSecrets.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "common\LinkedKeyInfo.cs"
SubType = "Code"

View File

@ -0,0 +1,34 @@
using System;
namespace Novell.CASA.MiCasa.Common
{
/// <summary>
/// Summary description for ExportSecrets.
/// </summary>
///
[Serializable]
public class ExportXMLSecrets
{
private string m_sMasterPassword = null;
private string m_sPassphrase = null;
public ExportXMLSecrets(string sMasterPassword, string sPassphrase)
{
m_sMasterPassword = sMasterPassword;
if (sPassphrase != null)
{
m_sPassphrase = sPassphrase;
}
}
public string GetMasterPassword()
{
return m_sMasterPassword;
}
public string GetPassphrase()
{
return m_sPassphrase;
}
}
}

View File

@ -0,0 +1,42 @@
using System;
namespace Novell.CASA.MiCasa.Common
{
/// <summary>
/// Summary description for AddXMLSecrets.
/// </summary>
///
[Serializable]
public class ImportXMLSecrets
{
private string m_MasterPassword = null;
private byte[] m_XmlSecrets = null;
private string m_sStatus = "";
public ImportXMLSecrets(string sMasterPassword, byte[] XmlSecrets)
{
m_MasterPassword = sMasterPassword;
m_XmlSecrets = XmlSecrets;
}
public string GetMasterPasssword()
{
return m_MasterPassword;
}
public byte[] GetXmlSecrets()
{
return m_XmlSecrets;
}
public void SetStatus(string s)
{
m_sStatus = s;
}
public string GetStatus()
{
return m_sStatus;
}
}
}

View File

@ -56,6 +56,8 @@ namespace Novell.CASA.MiCasa.Communication
public const int VERB_RESET_MASTER_PASSWORD = 18;
public const int VERB_GET_SECRETIDS = 19;
public const int VERB_VALIDATE_DESKTOP_PWD = 20;
public const int VERB_EXPORT_SECRETS = 21;
public const int VERB_ADD_XML_SECRETS = 22;
public const int VERB_DUMP_LINKED_KEYS = 96;
public const int VERB_CREATE_TEST_SECRETS = 97;

View File

@ -32,143 +32,199 @@ using sscs.constants;
namespace sscs.crypto
{
public class CASACrypto
{
public class CASACrypto
{
private const int SALTSIZE = 64;
private const int ITERATION_COUNT = 1000;
private const int HASH_SIZE = 32;
private const int SALTSIZE = 64;
private const int ITERATION_COUNT = 1000;
private const int HASH_SIZE = 32;
internal static byte[] Generate16ByteKeyFromString(string sTheString, string sFilepath, bool bUseOldMethod)
{
byte[] baKey = new byte[16]; //return value
try
{
Rfc2898DeriveBytes pkcs5 = new Rfc2898DeriveBytes(sTheString, SALTSIZE, ITERATION_COUNT, bUseOldMethod);
baKey = pkcs5.GetBytes(16);
}
catch(Exception e)
{
CSSSLogger.ExpLog(e.ToString());
CSSSLogger.DbgLog("Key generation failed");
baKey = null;
}
return baKey;
}
internal static byte[] Generate16ByteKeyFromString(string sTheString, string sFilepath, bool bUseOldMethod)
{
byte[] baKey = new byte[16]; //return value
try
{
Rfc2898DeriveBytes pkcs5 = new Rfc2898DeriveBytes(sTheString, SALTSIZE, ITERATION_COUNT, bUseOldMethod);
baKey = pkcs5.GetBytes(16);
}
catch(Exception e)
{
CSSSLogger.ExpLog(e.ToString());
CSSSLogger.DbgLog("Key generation failed");
baKey = null;
}
return baKey;
}
internal static bool StoreKeySetUsingMasterPasscode(byte[] key,
byte[] IV, byte[] baMasterPasscode, string fileName)
{
bool bRet = false;
FileStream fsEncrypt = null;
CryptoStream csEncrypt = null;
try
{
internal static bool StoreKeySetUsingMasterPasscode(byte[] key,
byte[] IV, byte[] baMasterPasscode, string fileName)
{
bool bRet = false;
FileStream fsEncrypt = null;
CryptoStream csEncrypt = null;
try
{
//Get an encryptor.
RijndaelManaged myRijndael = new RijndaelManaged();
ICryptoTransform encryptor;
encryptor = myRijndael.CreateEncryptor(baMasterPasscode, GenerateAndSaveIV(fileName, myRijndael));
//Get an encryptor.
RijndaelManaged myRijndael = new RijndaelManaged();
ICryptoTransform encryptor;
encryptor = myRijndael.CreateEncryptor(baMasterPasscode, GenerateAndSaveIV(fileName, myRijndael));
//Encrypt the data to a file
fsEncrypt = new FileStream(fileName, FileMode.Create);
//Encrypt the data to a file
fsEncrypt = new FileStream(fileName, FileMode.Create);
// make hidden
File.SetAttributes(fileName, FileAttributes.Hidden);
SHA256 sha = new SHA256Managed();
byte[] hash = sha.ComputeHash(key);
SHA256 sha = new SHA256Managed();
byte[] hash = sha.ComputeHash(key);
fsEncrypt.Write(hash,0,hash.Length);
fsEncrypt.Flush();
fsEncrypt.Write(hash,0,hash.Length);
fsEncrypt.Flush();
csEncrypt = new CryptoStream(fsEncrypt, encryptor, CryptoStreamMode.Write);
csEncrypt = new CryptoStream(fsEncrypt, encryptor, CryptoStreamMode.Write);
//Write all data to the crypto stream and flush it.
csEncrypt.Write(key, 0, key.Length);
csEncrypt.FlushFinalBlock();
bRet = true;
}
catch(Exception e)
{
CSSSLogger.ExpLog(e.ToString());
CSSSLogger.DbgLog("Unable to store the generated key");
bRet = false;
}
if (csEncrypt != null)
csEncrypt.Close();
if( fsEncrypt != null )
fsEncrypt.Close();
return bRet;
}
//Write all data to the crypto stream and flush it.
csEncrypt.Write(key, 0, key.Length);
csEncrypt.FlushFinalBlock();
bRet = true;
}
catch(Exception e)
{
CSSSLogger.ExpLog(e.ToString());
CSSSLogger.DbgLog("Unable to store the generated key");
bRet = false;
}
if (csEncrypt != null)
csEncrypt.Close();
if( fsEncrypt != null )
fsEncrypt.Close();
return bRet;
}
internal static byte[] GetKeySetFromFile(byte[] baMasterPasscode,
string fileName )
{
byte[] baSavedKey = null;
FileStream fsDecrypt = null;
CryptoStream csDecrypt = null;
internal static byte[] GetKeySetFromFile(byte[] baMasterPasscode,
string fileName )
{
byte[] baSavedKey = null;
FileStream fsDecrypt = null;
CryptoStream csDecrypt = null;
try
{
try
{
#if LINUX
UnixFileInfo fsTest = new UnixFileInfo (fileName);
if((fsTest == null) || !(fsTest.Exists) || fsTest.IsSymbolicLink)
#else
if(!File.Exists(fileName))
if(!File.Exists(fileName))
#endif
{
return null;
}
{
return null;
}
/* Get a decryptor that uses the same key and IV
* as the encryptor.
*/
/* Get a decryptor that uses the same key and IV
* as the encryptor.
*/
RijndaelManaged myRijndael = new RijndaelManaged();
ICryptoTransform decryptor = myRijndael.CreateDecryptor(baMasterPasscode, RetrieveIV(fileName, baMasterPasscode));
//Now decrypt
fsDecrypt = new FileStream(fileName, FileMode.Open);
RijndaelManaged myRijndael = new RijndaelManaged();
ICryptoTransform decryptor = myRijndael.CreateDecryptor(baMasterPasscode, RetrieveIV(fileName, baMasterPasscode));
//Now decrypt
fsDecrypt = new FileStream(fileName, FileMode.Open);
byte[] storedHash = new byte[32];
fsDecrypt.Read(storedHash,0,storedHash.Length);
byte[] storedHash = new byte[32];
fsDecrypt.Read(storedHash,0,storedHash.Length);
csDecrypt = new CryptoStream(fsDecrypt, decryptor, CryptoStreamMode.Read);
baSavedKey = new byte[32];
csDecrypt = new CryptoStream(fsDecrypt, decryptor, CryptoStreamMode.Read);
baSavedKey = new byte[32];
//Read the data out of the crypto stream.
csDecrypt.Read(baSavedKey, 0, baSavedKey.Length);
//Read the data out of the crypto stream.
csDecrypt.Read(baSavedKey, 0, baSavedKey.Length);
SHA256 sha = new SHA256Managed();
byte[] newHash = sha.ComputeHash(baSavedKey);
for( int i = 0 ; i < 32; i++ )
{
if(storedHash[i] != newHash[i])
{
CSSSLogger.DbgLog("Hash doesnot match");
csDecrypt.Close();
fsDecrypt.Close();
return null;
}
}
}
catch(Exception e)
{
CSSSLogger.ExpLog(e.ToString());
CSSSLogger.DbgLog("Unable to get the stored key");
baSavedKey = null;
}
SHA256 sha = new SHA256Managed();
byte[] newHash = sha.ComputeHash(baSavedKey);
for( int i = 0 ; i < 32; i++ )
{
if(storedHash[i] != newHash[i])
{
CSSSLogger.DbgLog("Hash doesnot match");
csDecrypt.Close();
fsDecrypt.Close();
return null;
}
}
}
catch(Exception e)
{
CSSSLogger.ExpLog(e.ToString());
CSSSLogger.DbgLog("Unable to get the stored key");
baSavedKey = null;
}
if (csDecrypt != null)
csDecrypt.Close();
if (csDecrypt != null)
csDecrypt.Close();
if ( fsDecrypt != null )
fsDecrypt.Close();
if ( fsDecrypt != null )
fsDecrypt.Close();
return baSavedKey;
}
return baSavedKey;
}
internal static byte[] DecryptData(byte[] encyptedXmlData, byte[] key)
{
CryptoStream csDecrypt = null;
byte[] buffer = new byte[encyptedXmlData.Length];
MemoryStream ms = new MemoryStream(encyptedXmlData);
try
{
//Get an decryptor.
RijndaelManaged myRijndael = new RijndaelManaged();
ICryptoTransform decryptor = myRijndael.CreateDecryptor(key, key);
csDecrypt = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
//Read all data to the crypto stream and flush it.
int iBytesRead = csDecrypt.Read(buffer,0,encyptedXmlData.Length);
}
catch(Exception e)
{
CSSSLogger.ExpLog(e.ToString());
CSSSLogger.DbgLog("decrypting failed.");
}
if (csDecrypt != null)
csDecrypt.Close();
return buffer;
}
internal static byte[] EncryptData(byte[] xmlData, byte[] key)
{
CryptoStream csEncrypt = null;
MemoryStream encryptedData = new MemoryStream();
try
{
//Get an encryptor.
RijndaelManaged myRijndael = new RijndaelManaged();
ICryptoTransform encryptor = myRijndael.CreateEncryptor(key, key);
//csEncrypt = new CryptoStream(fsEncrypt, encryptor, CryptoStreamMode.Write);
csEncrypt = new CryptoStream(encryptedData, encryptor, CryptoStreamMode.Write);
//Write all data to the crypto stream and flush it.
csEncrypt.Write(xmlData, 0, xmlData.Length);
csEncrypt.FlushFinalBlock();
}
catch(Exception e)
{
CSSSLogger.ExpLog(e.ToString());
CSSSLogger.DbgLog("Encrypting failed.");
}
if (csEncrypt != null)
csEncrypt.Close();
return encryptedData.ToArray();
}
internal static void EncryptDataAndWriteToFile(byte[] xmlData,
byte[] key, string fileName)

View File

@ -237,89 +237,9 @@ namespace sscs.lss
{
return false;
}
xpath = "//" + XmlConsts.miCASANode;
XmlNode miCASANode = doc.SelectSingleNode(xpath);
if(miCASANode != null)
{
xpath = "descendant::" + XmlConsts.keyChainNode;
XmlNodeList keyChainNodeList = miCASANode.SelectNodes(xpath);
foreach(XmlNode node in keyChainNodeList)
{
XmlAttributeCollection attrColl = node.Attributes;
string keyChainId = (attrColl[XmlConsts.idAttr]).Value + "\0";
KeyChain keyChain = null;
if( userStore.CheckIfKeyChainExists(keyChainId) == false )
{
keyChain = new KeyChain(keyChainId);
userStore.AddKeyChain(keyChain);
}
else
{
keyChain = userStore.GetKeyChain(keyChainId);
}
xpath = "descendant::" + XmlConsts.secretNode;
XmlNodeList secretNodeList = node.SelectNodes(xpath);
foreach(XmlNode secretNode in secretNodeList)
{
attrColl = secretNode.Attributes;
string secretId = (attrColl[XmlConsts.idAttr]).Value + "\0";
xpath = "descendant::" + XmlConsts.valueNode;
Secret secret = new Secret(secretId);
if( keyChain.CheckIfSecretExists(secretId) == false)
{
keyChain.AddSecret(secret);
XmlNode secretValNode = (secretNode.SelectSingleNode(xpath));
xpath = "descendant::" + XmlConsts.keyNode;
XmlNodeList keyNodeList = secretValNode.SelectNodes(xpath);
secret = keyChain.GetSecret(secretId);
foreach(XmlNode keyNode in keyNodeList)
{
attrColl = keyNode.Attributes;
string key;
try
{
key = (attrColl[XmlConsts.idAttr]).Value;
}
catch (Exception)
{
// LinkedKey node, continue
continue;
}
xpath = "descendant::" + XmlConsts.keyValueNode;
XmlNode keyValNode = keyNode.SelectSingleNode(xpath);
string keyValue = keyValNode.InnerText;
secret.SetKeyValue(key,keyValue);
// add linked keys
xpath = "descendant::" + XmlConsts.linkedKeyNode;
XmlNodeList linkNodeList = keyNode.SelectNodes(xpath);
foreach(XmlNode linkNode in linkNodeList)
{
// get TargetSecretID
xpath = "descendant::" + XmlConsts.linkedTargetSecretNode;
XmlNode targetSecretNode = linkNode.SelectSingleNode(xpath);
string sSecretID = targetSecretNode.InnerText + "\0";
// get TargetSecretKey
xpath = "descendant::" + XmlConsts.linkedTargetKeyNode;
XmlNode targetKeyNode = linkNode.SelectSingleNode(xpath);
string sKeyID = targetKeyNode.InnerText;
LinkedKeyInfo lki = new LinkedKeyInfo(sSecretID, sKeyID, true);
KeyValue kv = secret.GetKeyValue(key);
kv.AddLink(lki);
}
}
}//if ends
}
}//end of traversing keyChainNodeList
}
// add these to the store
AddXMLSecretsToStore(doc);
}
catch(Exception e)
{
@ -332,6 +252,94 @@ namespace sscs.lss
return true;
}
internal void AddXMLSecretsToStore(XmlDocument doc)
{
string xpath = "";
xpath = "//" + XmlConsts.miCASANode;
XmlNode miCASANode = doc.SelectSingleNode(xpath);
if(miCASANode != null)
{
xpath = "descendant::" + XmlConsts.keyChainNode;
XmlNodeList keyChainNodeList = miCASANode.SelectNodes(xpath);
foreach(XmlNode node in keyChainNodeList)
{
XmlAttributeCollection attrColl = node.Attributes;
string keyChainId = (attrColl[XmlConsts.idAttr]).Value + "\0";
KeyChain keyChain = null;
if( userStore.CheckIfKeyChainExists(keyChainId) == false )
{
keyChain = new KeyChain(keyChainId);
userStore.AddKeyChain(keyChain);
}
else
{
keyChain = userStore.GetKeyChain(keyChainId);
}
xpath = "descendant::" + XmlConsts.secretNode;
XmlNodeList secretNodeList = node.SelectNodes(xpath);
foreach(XmlNode secretNode in secretNodeList)
{
attrColl = secretNode.Attributes;
string secretId = (attrColl[XmlConsts.idAttr]).Value + "\0";
xpath = "descendant::" + XmlConsts.valueNode;
Secret secret = new Secret(secretId);
if( keyChain.CheckIfSecretExists(secretId) == false)
{
keyChain.AddSecret(secret);
XmlNode secretValNode = (secretNode.SelectSingleNode(xpath));
xpath = "descendant::" + XmlConsts.keyNode;
XmlNodeList keyNodeList = secretValNode.SelectNodes(xpath);
secret = keyChain.GetSecret(secretId);
foreach(XmlNode keyNode in keyNodeList)
{
attrColl = keyNode.Attributes;
string key;
try
{
key = (attrColl[XmlConsts.idAttr]).Value;
}
catch (Exception)
{
// LinkedKey node, continue
continue;
}
xpath = "descendant::" + XmlConsts.keyValueNode;
XmlNode keyValNode = keyNode.SelectSingleNode(xpath);
string keyValue = keyValNode.InnerText;
secret.SetKeyValue(key,keyValue);
// add linked keys
xpath = "descendant::" + XmlConsts.linkedKeyNode;
XmlNodeList linkNodeList = keyNode.SelectNodes(xpath);
foreach(XmlNode linkNode in linkNodeList)
{
// get TargetSecretID
xpath = "descendant::" + XmlConsts.linkedTargetSecretNode;
XmlNode targetSecretNode = linkNode.SelectSingleNode(xpath);
string sSecretID = targetSecretNode.InnerText + "\0";
// get TargetSecretKey
xpath = "descendant::" + XmlConsts.linkedTargetKeyNode;
XmlNode targetKeyNode = linkNode.SelectSingleNode(xpath);
string sKeyID = targetKeyNode.InnerText;
LinkedKeyInfo lki = new LinkedKeyInfo(sSecretID, sKeyID, true);
KeyValue kv = secret.GetKeyValue(key);
kv.AddLink(lki);
}
}
}//if ends
}
}//end of traversing keyChainNodeList
}
}
private void PersistStoreDelayThreadFn()
{
Thread.Sleep(15000);

View File

@ -33,6 +33,7 @@ using sscs.lss;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Xml;
using Novell.CASA.MiCasa.Common;
using Novell.CASA.MiCasa.Communication;
@ -218,6 +219,14 @@ namespace sscs.verbs
{
return DoValidateDesktopPwd(ssStore, wo);
}
case MiCasaRequestReply.VERB_EXPORT_SECRETS:
{
return DoExportSecrets(ssStore, wo);
}
case MiCasaRequestReply.VERB_ADD_XML_SECRETS:
{
return DoMergeXMLSecrets(ssStore, wo);
}
default:
{
@ -235,6 +244,61 @@ namespace sscs.verbs
return wo;
}
private WrappedObject DoMergeXMLSecrets(SecretStore ssStore, WrappedObject wo)
{
ImportXMLSecrets addSecrets = (ImportXMLSecrets)wo.GetObject();
string sMasterPassword = addSecrets.GetMasterPasssword();
byte[] baXMLSecrets = addSecrets.GetXmlSecrets();
try
{
if (sMasterPassword != null)
{
// decrypt secrets if possible
ssStore.MergeXMLSecrets(baXMLSecrets, sMasterPassword);
}
else
{
// do the merge now.
ssStore.MergeXMLSecrets(baXMLSecrets);
}
addSecrets.SetStatus("Success");
wo.SetError(constants.RetCodes.SUCCESS, "");
}
catch (Exception e)
{
addSecrets.SetStatus(e.ToString());
wo.SetError(constants.RetCodes.FAILURE, e.ToString());
}
return wo;
}
private WrappedObject DoExportSecrets(SecretStore ssStore, WrappedObject wo)
{
ExportXMLSecrets secrets = (ExportXMLSecrets)wo.GetObject();
// validate masterpassword
try
{
string sMasterPassword = secrets.GetMasterPassword();
ssStore.UnlockStore(null, sMasterPassword);
}
catch (Exception e)
{
wo.SetError(constants.RetCodes.FAILURE, e.ToString());
return wo;
}
string sEncrpyptionPassphrase = secrets.GetPassphrase();
// get all secrets
wo.SetObject(ssStore.GetSecrets(sEncrpyptionPassphrase));
wo.SetError(constants.RetCodes.SUCCESS, "");
return wo;
}
private WrappedObject DoValidateDesktopPwd(SecretStore ssStore, WrappedObject wo)
{
// let's validate the Desktop pwd

View File

@ -21,24 +21,6 @@
}
"Entry"
{
"MsmKey" = "8:_43A67B1DA6D34A6098E563CC902B950F"
"OwnerKey" = "8:_A6D188F9B5AF430C92D0B9606ADF4C63"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_43A67B1DA6D34A6098E563CC902B950F"
"OwnerKey" = "8:_98DCC664712A41B993FCD33026D06FFC"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_43A67B1DA6D34A6098E563CC902B950F"
"OwnerKey" = "8:_BF2CE61978054B2DB482792974E390F0"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_6CE0B932302E4E3783AAD1EA468ABD34"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -75,6 +57,24 @@
}
"Entry"
{
"MsmKey" = "8:_EF3E9937AC8B4A898E7B80BCEA175E6A"
"OwnerKey" = "8:_98DCC664712A41B993FCD33026D06FFC"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_EF3E9937AC8B4A898E7B80BCEA175E6A"
"OwnerKey" = "8:_BF2CE61978054B2DB482792974E390F0"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_EF3E9937AC8B4A898E7B80BCEA175E6A"
"OwnerKey" = "8:_A6D188F9B5AF430C92D0B9606ADF4C63"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_EF467E7BEF8E4109BAD7E2FE47508D13"
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
@ -307,13 +307,13 @@
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:CASA"
"ProductCode" = "8:{9763A76D-50C8-4D81-AAB2-0415D042E299}"
"PackageCode" = "8:{A775679E-BE18-4FCC-884B-B5A6626CD0A4}"
"ProductCode" = "8:{970A65D5-A969-4659-B2AF-F212B518F99A}"
"PackageCode" = "8:{1368B6D9-3ACA-446D-8E33-C207F44508D6}"
"UpgradeCode" = "8:{DFD8B8A0-EA51-4202-831C-7CD2B90A63AE}"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE"
"ProductVersion" = "8:1.7.732"
"ProductVersion" = "8:1.7.786"
"Manufacturer" = "8:Novell"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:"
@ -835,7 +835,7 @@
}
"MergeModule"
{
"{35A69C6E-5BA4-440D-803D-762B59A45393}:_43A67B1DA6D34A6098E563CC902B950F"
"{35A69C6E-5BA4-440D-803D-762B59A45393}:_EF3E9937AC8B4A898E7B80BCEA175E6A"
{
"UseDynamicProperties" = "11:TRUE"
"IsDependency" = "11:TRUE"
@ -854,7 +854,7 @@
{
"{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_98DCC664712A41B993FCD33026D06FFC"
{
"SourcePath" = "8:..\\CASA-gui-msm\\Debug\\CASA-gui.msm"
"SourcePath" = "8:..\\CASA-gui-msm\\Release\\CASA-gui.msm"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_E8900D5F0BD44DC0BB0BEFDF7C43B30C"
@ -907,7 +907,7 @@
}
"{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_A6D188F9B5AF430C92D0B9606ADF4C63"
{
"SourcePath" = "8:..\\CASA-dev-msm\\Debug\\miCASA-Dev-msm.msm"
"SourcePath" = "8:..\\CASA-dev-msm\\Release\\miCASA-Dev-msm.msm"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_E8900D5F0BD44DC0BB0BEFDF7C43B30C"
@ -939,17 +939,31 @@
"SourcePath" = "8:..\\CASA-dev-msm\\Release\\miCASA-Dev-msm.msm"
"Properties"
{
"_62D43560615587AE3DB95A0BA428D5BE.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"_4610C2D660057AC39D7FDD4891590B10.4F1ACC03A482468C9BEBF6D83FA4F7FE"
{
"Name" = "8:_62D43560615587AE3DB95A0BA428D5BE.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Name" = "8:_4610C2D660057AC39D7FDD4891590B10.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DisplayName" = "8:"
"Description" = "8:"
"Type" = "3:2"
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_A1ECD7DAF522A0E5D85BCDD9EAED3209.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_8FCF3A547028ECFD0B5049EFAB348182.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Attributes" = "3:0"
"Setting" = "3:2"
"Value" = "8:_A1ECD7DAF522A0E5D85BCDD9EAED3209.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DefaultValue" = "8:_A1ECD7DAF522A0E5D85BCDD9EAED3209.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Value" = "8:_8FCF3A547028ECFD0B5049EFAB348182.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DefaultValue" = "8:_8FCF3A547028ECFD0B5049EFAB348182.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"ParentName" = "8:_6418E7496A474EDDAC9A91150BBE4A26.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"UsePlugInResources" = "11:FALSE"
}
"_4F85CEF984A77868D0A929E54872824F.4F1ACC03A482468C9BEBF6D83FA4F7FE"
{
"Name" = "8:_4F85CEF984A77868D0A929E54872824F.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DisplayName" = "8:"
"Description" = "8:"
"Type" = "3:2"
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_0683B4C519DB3748EBD996E0ABA831C0.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Attributes" = "3:0"
"Setting" = "3:2"
"Value" = "8:_0683B4C519DB3748EBD996E0ABA831C0.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DefaultValue" = "8:_0683B4C519DB3748EBD996E0ABA831C0.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"ParentName" = "8:_6418E7496A474EDDAC9A91150BBE4A26.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"UsePlugInResources" = "11:FALSE"
}
@ -964,59 +978,45 @@
"Setting" = "3:1"
"UsePlugInResources" = "11:FALSE"
}
"_6E1C74B0F6DBAA22C571F4B02C1DB283.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"_B6F5734BF952F464EAB21BAD6E20F38A.4F1ACC03A482468C9BEBF6D83FA4F7FE"
{
"Name" = "8:_6E1C74B0F6DBAA22C571F4B02C1DB283.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Name" = "8:_B6F5734BF952F464EAB21BAD6E20F38A.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DisplayName" = "8:"
"Description" = "8:"
"Type" = "3:2"
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_E33B56BF66EDE9E5F123E5CB7C4EEAB7.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_79BCEE497E2B712D20C7E4A2F4800E60.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Attributes" = "3:0"
"Setting" = "3:2"
"Value" = "8:_E33B56BF66EDE9E5F123E5CB7C4EEAB7.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DefaultValue" = "8:_E33B56BF66EDE9E5F123E5CB7C4EEAB7.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Value" = "8:_79BCEE497E2B712D20C7E4A2F4800E60.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DefaultValue" = "8:_79BCEE497E2B712D20C7E4A2F4800E60.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"ParentName" = "8:_6418E7496A474EDDAC9A91150BBE4A26.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"UsePlugInResources" = "11:FALSE"
}
"_95C01A87787956AC69FC2E9C7FA507A7.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"_E7CF2B4A827BE173141CA1E1D0F82AFF.4F1ACC03A482468C9BEBF6D83FA4F7FE"
{
"Name" = "8:_95C01A87787956AC69FC2E9C7FA507A7.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Name" = "8:_E7CF2B4A827BE173141CA1E1D0F82AFF.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DisplayName" = "8:"
"Description" = "8:"
"Type" = "3:2"
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_79C6F8F43FF4CB3AF63B925D0EA1C564.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_108CF762A5E732DB8AA6185773BCA705.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Attributes" = "3:0"
"Setting" = "3:2"
"Value" = "8:_79C6F8F43FF4CB3AF63B925D0EA1C564.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DefaultValue" = "8:_79C6F8F43FF4CB3AF63B925D0EA1C564.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Value" = "8:_108CF762A5E732DB8AA6185773BCA705.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DefaultValue" = "8:_108CF762A5E732DB8AA6185773BCA705.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"ParentName" = "8:_6418E7496A474EDDAC9A91150BBE4A26.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"UsePlugInResources" = "11:FALSE"
}
"_E1A13CA07F77E5ABDB363BA4E14A8EED.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"_F0F8D6D23B097F7830C01E614D9034B9.4F1ACC03A482468C9BEBF6D83FA4F7FE"
{
"Name" = "8:_E1A13CA07F77E5ABDB363BA4E14A8EED.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Name" = "8:_F0F8D6D23B097F7830C01E614D9034B9.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DisplayName" = "8:"
"Description" = "8:"
"Type" = "3:2"
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_793F49C101FDC71EA468B0F50F5E7FF8.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_290870C7D1693472634A9D8D875DA83B.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Attributes" = "3:0"
"Setting" = "3:2"
"Value" = "8:_793F49C101FDC71EA468B0F50F5E7FF8.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DefaultValue" = "8:_793F49C101FDC71EA468B0F50F5E7FF8.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"ParentName" = "8:_6418E7496A474EDDAC9A91150BBE4A26.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"UsePlugInResources" = "11:FALSE"
}
"_ED516AEF413A6424C60E58C4FE881B58.4F1ACC03A482468C9BEBF6D83FA4F7FE"
{
"Name" = "8:_ED516AEF413A6424C60E58C4FE881B58.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DisplayName" = "8:"
"Description" = "8:"
"Type" = "3:2"
"ContextData" = "8:InstallToGAC=;IsolateToManifest=_4CF0917F390ACC0AF5A1750516A3993E.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Attributes" = "3:0"
"Setting" = "3:2"
"Value" = "8:_4CF0917F390ACC0AF5A1750516A3993E.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DefaultValue" = "8:_4CF0917F390ACC0AF5A1750516A3993E.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"Value" = "8:_290870C7D1693472634A9D8D875DA83B.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"DefaultValue" = "8:_290870C7D1693472634A9D8D875DA83B.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"ParentName" = "8:_6418E7496A474EDDAC9A91150BBE4A26.4F1ACC03A482468C9BEBF6D83FA4F7FE"
"UsePlugInResources" = "11:FALSE"
}
@ -1030,7 +1030,7 @@
}
"{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_BF2CE61978054B2DB482792974E390F0"
{
"SourcePath" = "8:..\\CASA-msm\\Debug\\CASA-msm.msm"
"SourcePath" = "8:..\\CASA-msm\\Release\\CASA-msm.msm"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_E8900D5F0BD44DC0BB0BEFDF7C43B30C"