Revision: 742fd8e279
Author: Nightgunner5
Date: Mon Nov 9 14:43:49 2009
Log: Start decryption code....
http://code.google.com/p/shacrypt/source/detail?r=742fd8e279
Revision: 34a329bab1
Author: Nightgunner5
Date: Mon Nov 9 15:04:45 2009
Log: RAII (Look it up on Wikipedia)
http://code.google.com/p/shacrypt/source/detail?r=34a329bab1
Revision: c98279b9aa
Author: Nightgunner5
Date: Mon Nov 9 17:05:03 2009
Log: Decryption interface is done, except for the actual decryption part.
http://code.google.com/p/shacrypt/source/detail?r=c98279b9aa
==============================================================================
Revision: 742fd8e279
Author: Nightgunner5
Date: Mon Nov 9 14:43:49 2009
Log: Start decryption code.
Add check for file selection in encrypt step 1.
Make "enter your password like I told you to" work when the user is in the
advanced tab.
http://code.google.com/p/shacrypt/source/detail?r=742fd8e279
Modified:
/glade.c
/shacrypt.glade
=======================================
--- /glade.c Mon Nov 9 13:47:30 2009
+++ /glade.c Mon Nov 9 14:43:49 2009
@@ -46,6 +46,14 @@
}
G_MODULE_EXPORT void encrypt_step1_ok( GtkWidget* button, gpointer data ) {
+ // Make sure there's actually a file selected.
+ GtkFileChooser* file;
+
+ file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_e1_select" ) );
+
+ if ( gtk_file_chooser_get_filename( file ) == NULL )
+ return;
+
// This part of the reset is here because Glade won't let me set
default values.
GtkToggleButton* sha1;
GtkToggleButton* sha224;
@@ -344,18 +352,22 @@
}
G_MODULE_EXPORT void encrypt_step2_ok( GtkWidget* button, gpointer data ) {
- GtkEntry* pass1;
- GtkEntry* pass2;
-
+ GtkNotebook* tabs;
+ GtkEntry* pass1;
+ GtkEntry* pass2;
+
+ tabs = GTK_NOTEBOOK( gtk_builder_get_object(
builder, "notebook_e2_tabs" ) );
pass1 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password1" ) );
pass2 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password2" ) );
if ( !gtk_entry_get_text_length( pass1 ) ) {
+ gtk_notebook_set_current_page( tabs, 0 );
gtk_widget_grab_focus( GTK_WIDGET( pass1 ) );
return;
}
if ( !gtk_entry_get_text_length( pass2 ) ) {
+ gtk_notebook_set_current_page( tabs, 0 );
gtk_widget_grab_focus( GTK_WIDGET( pass2 ) );
return;
}
@@ -399,9 +411,33 @@
gtk_progress_bar_set_fraction( meter, 0.0 );
}
+/* Decryption */
G_MODULE_EXPORT void button_pressed_decrypt( GtkWidget* button, gpointer
data ) {
+ GtkWidget* step1;
+ step1 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step1" )
);
+
+ gtk_widget_show( step1 );
+}
+
+G_MODULE_EXPORT void decrypt_step1_ok( GtkWidget* button, gpointer data ) {
+ GtkFileChooser* file;
+
+ file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_d1_select" ) );
+
+ // Make sure there's actually a file selected.
+
+ if ( gtk_file_chooser_get_filename( file ) == NULL )
+ return;
+
}
+
+G_MODULE_EXPORT void decrypt_step1_cancel( GtkWidget* button, gpointer
data ) {
+ GtkWidget* step1;
+ step1 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step1" )
);
+
+ gtk_widget_hide( step1 );
+}
G_MODULE_EXPORT void button_pressed_asymmetric( GtkWidget* button,
gpointer data ) {
@@ -428,6 +464,11 @@
gtk_builder_connect_signals( builder, NULL );
+ GtkFileFilter* shacrypt_mask;
+ shacrypt_mask = GTK_FILE_FILTER( gtk_builder_get_object(
builder, "filter_shacrypt_ext" ) );
+
+ gtk_file_filter_add_pattern( shacrypt_mask, "*.shacrypt" );
+
gtk_widget_show( window );
gtk_main();
=======================================
--- /shacrypt.glade Mon Nov 9 13:47:30 2009
+++ /shacrypt.glade Mon Nov 9 14:43:49 2009
@@ -127,7 +127,6 @@
<property name="type_hint">dialog</property>
<property name="transient_for">main</property>
<property name="has_separator">False</property>
- <signal name="delete_event" handler="encrypt_step1_cancel"/>
<signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox4">
@@ -162,10 +161,11 @@
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="button_e1_cancel">
- <property name="label" translatable="yes">Cancel</property>
+ <property name="label">gtk-cancel</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
+ <property name="use_stock">True</property>
<signal name="clicked" handler="encrypt_step1_cancel"/>
</object>
<packing>
@@ -176,19 +176,12 @@
</child>
<child>
<object class="GtkButton" id="button_e1_ok">
+ <property name="label">gtk-ok</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
+ <property name="use_stock">True</property>
<signal name="clicked" handler="encrypt_step1_ok"/>
- <child>
- <object class="GtkLabel" id="label_e1_ok">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Ok</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
</object>
<packing>
<property name="expand">False</property>
@@ -226,7 +219,7 @@
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
- <object class="GtkNotebook" id="notebook1">
+ <object class="GtkNotebook" id="notebook_e2_tabs">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
@@ -244,6 +237,7 @@
<property name="can_focus">True</property>
<property name="visibility">False</property>
<property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
<property name="invisible_char_set">True</property>
<signal name="changed"
handler="encrypt_step2_passchange"/>
</object>
@@ -581,10 +575,11 @@
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="button_e2_cancel">
- <property name="label" translatable="yes">Cancel</property>
+ <property name="label">gtk-cancel</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
+ <property name="use_stock">True</property>
<signal name="clicked" handler="encrypt_step2_cancel"/>
</object>
<packing>
@@ -595,20 +590,15 @@
</child>
<child>
<object class="GtkButton" id="button_e2_ok">
+ <property name="label">gtk-ok</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
<property name="receives_default">True</property>
+ <property name="use_stock">True</property>
<accelerator key="Return" signal="clicked"/>
<signal name="clicked" handler="encrypt_step2_ok"/>
- <child>
- <object class="GtkLabel" id="label_e2_ok">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Ok</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
</object>
<packing>
<property name="expand">False</property>
@@ -674,4 +664,93 @@
<property name="upper">256</property>
<property name="step_increment">1</property>
</object>
+ <object class="GtkDialog" id="decrypt_step1">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Decrypt a file (Step 1 of
3)</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="default_width">500</property>
+ <property name="default_height">400</property>
+ <property name="type_hint">dialog</property>
+ <property name="transient_for">main</property>
+ <property name="has_separator">False</property>
+ <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox5">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkFileChooserWidget" id="file_d1_select">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="filter">filter_shacrypt_ext</property>
+ <property name="use_preview_label">False</property>
+ <property name="preview_widget_active">False</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_d1_desc">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Select a file to
decrypt.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">5</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area5">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button_d1_cancel">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="decrypt_step1_cancel"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_d1_ok">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="decrypt_step1_ok"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">button_d1_cancel</action-widget>
+ <action-widget response="0">button_d1_ok</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkFileFilter" id="filter_shacrypt_ext"/>
</interface>
==============================================================================
Revision: 34a329bab1
Author: Nightgunner5
Date: Mon Nov 9 15:04:45 2009
Log: RAII (Look it up on Wikipedia)
http://code.google.com/p/shacrypt/source/detail?r=34a329bab1
Modified:
/glade.c
=======================================
--- /glade.c Mon Nov 9 14:43:49 2009
+++ /glade.c Mon Nov 9 15:04:45 2009
@@ -36,6 +36,8 @@
step1 = GTK_WIDGET( gtk_builder_get_object( builder, "encrypt_step1" )
);
gtk_widget_show( step1 );
+
+ g_free( step1 );
}
G_MODULE_EXPORT void encrypt_step1_cancel( GtkWidget* button, gpointer
data ) {
@@ -43,6 +45,8 @@
step1 = GTK_WIDGET( gtk_builder_get_object( builder, "encrypt_step1" )
);
gtk_widget_hide( step1 );
+
+ g_free( step1 );
}
G_MODULE_EXPORT void encrypt_step1_ok( GtkWidget* button, gpointer data ) {
@@ -51,8 +55,12 @@
file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_e1_select" ) );
- if ( gtk_file_chooser_get_filename( file ) == NULL )
+ if ( gtk_file_chooser_get_filename( file ) == NULL ) {
+ g_free( file );
return;
+ }
+
+ g_free( file );
// This part of the reset is here because Glade won't let me set
default values.
GtkToggleButton* sha1;
@@ -89,6 +97,17 @@
gtk_widget_set_sensitive( seed, FALSE );
gtk_range_set_value( GTK_RANGE( seed ), 20.0 );
+ g_free( sha1 );
+ g_free( sha224 );
+ g_free( sha256 );
+ g_free( sha384 );
+ g_free( sha512 );
+ g_free( md5 );
+ g_free( cubehash );
+ g_free( whirlpool );
+ g_free( randomseed );
+ g_free( seed );
+
// Now on to the actual displaying part.
GtkWidget* step1;
GtkWidget* step2;
@@ -98,6 +117,9 @@
gtk_widget_show( step2 );
gtk_widget_hide( step1 );
+
+ g_free( step1 );
+ g_free( step2 );
}
/* Password scoring method adapted from
@@ -108,32 +130,34 @@
meter = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_e2_pass_strength" ) );
- int score = 0,
- lower = 0,
- upper = 0,
- num = 0,
- symb = 0,
- len, i;
+ int len = gtk_entry_get_text_length( button );
const char* pass = gtk_entry_get_text( button );
- len = gtk_entry_get_text_length( button );
-
if ( len == 0 ) {
gtk_progress_bar_set_fraction( meter, 0.0 );
gtk_progress_bar_set_text( meter, "Enter a password." );
- return;
-
- }
+
+ g_free( meter );
+ g_free( pass );
+
+ return;
+ }
+
+ int score, i,
+ lower = 0,
+ upper = 0,
+ num = 0,
+ symb = 0;
// Total length
if ( len > 15 ) {
- score += 18;
+ score = 18;
} else if ( len > 7 ) {
- score += 12;
+ score = 12;
} else if ( len > 4 ) {
- score += 6;
+ score = 6;
} else {
- score += 3;
+ score = 3;
}
for ( i = 0; i < len; i++ ) {
@@ -190,6 +214,9 @@
gtk_progress_bar_set_text( meter, "Ok" );
else
gtk_progress_bar_set_text( meter, "Bad" );
+
+ g_free( meter );
+ g_free( pass );
}
G_MODULE_EXPORT unsigned char encrypt_step2_get_algos() {
@@ -230,6 +257,15 @@
if ( gtk_toggle_button_get_active( whirlpool ) )
algos |= '\x80';
+ g_free( sha1 );
+ g_free( sha224 );
+ g_free( sha256 );
+ g_free( sha384 );
+ g_free( sha512 );
+ g_free( md5 );
+ g_free( cubehash );
+ g_free( whirlpool );
+
return algos;
}
@@ -245,9 +281,9 @@
}
GtkToggleButton* randomseed;
- randomseed = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "radio_e2_randomseed_off" ) );
-
GtkWidget* seed;
+
+ randomseed = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "radio_e2_randomseed_off" ) );
seed = GTK_WIDGET( gtk_builder_get_object(
builder, "hscale_e2_randomseed" ) );
if ( gtk_toggle_button_get_active( randomseed ) ) {
@@ -257,6 +293,9 @@
} else {
gtk_widget_set_sensitive( seed, TRUE );
}
+
+ g_free( randomseed );
+ g_free( seed );
}
G_MODULE_EXPORT void encrypt_step3() {
@@ -264,11 +303,13 @@
GtkEntry* pass;
GtkFileChooser* file;
GtkProgressBar* progress;
+ GtkRange* seedlen;
step3 = GTK_WINDOW( gtk_builder_get_object( builder, "encrypt_step3" )
);
pass = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password1" ) );
file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_e1_select" ) );
progress = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_e3_progress" ) );
+ seedlen = GTK_RANGE( gtk_builder_get_object(
builder, "hscale_e2_randomseed" ) );
gtk_progress_bar_set_text( progress, NULL );
gtk_window_set_deletable( step3, FALSE );
@@ -285,28 +326,32 @@
char* filename;
filename = gtk_file_chooser_get_filename( file );
+ g_free( file );
+
+ n = (int)gtk_range_get_value( seedlen );
+ g_free( seedlen );
f = fopen( filename, "rb" );
sprintf( tmp, "%s.shacrypt", filename );
i = 0;
- while ( fopen( tmp, "rb" ) != NULL ) {
+ while ( ( o = fopen( tmp, "rb" ) ) != NULL ) {
+ g_free( o );
i++;
sprintf( tmp, "%s_%lu.shacrypt", filename, i );
}
o = fopen( tmp, "wb" );
- GtkRange* seedlen;
- seedlen = GTK_RANGE( gtk_builder_get_object(
builder, "hscale_e2_randomseed" ) );
-
- n = (int)gtk_range_get_value( seedlen );
+ g_free( tmp );
+ g_free( filename );
for ( i = 0; i < n; i++ )
fbuf[i] = g_random_int_range( 0, 255 );
SHACrypt_Init( &s, (char*)gtk_entry_get_text( pass ),
gtk_entry_get_text_length( pass ), algos, fbuf, n );
+ g_free( pass );
fwrite( identifier, 1, 3, o ); // Identifier
fwrite( "\2\0", 1, 2, o ); // Format version
@@ -334,6 +379,11 @@
fclose( f );
fclose( o );
+ g_free( f );
+ g_free( o );
+ g_free( fbuf );
+ g_free( obuf );
+
GtkEntry* pass1;
GtkEntry* pass2;
GtkProgressBar* meter;
@@ -347,8 +397,15 @@
gtk_progress_bar_set_text( meter, "Enter a password" );
gtk_progress_bar_set_fraction( meter, 0.0 );
+ g_free( pass1 );
+ g_free( pass2 );
+ g_free( meter );
+
gtk_progress_bar_set_text( progress, "Done!" );
gtk_window_set_deletable( step3, TRUE );
+
+ g_free( progress );
+ g_free( step3 );
}
G_MODULE_EXPORT void encrypt_step2_ok( GtkWidget* button, gpointer data ) {
@@ -363,33 +420,53 @@
if ( !gtk_entry_get_text_length( pass1 ) ) {
gtk_notebook_set_current_page( tabs, 0 );
gtk_widget_grab_focus( GTK_WIDGET( pass1 ) );
+
+ g_free( pass1 );
+ g_free( pass2 );
+ g_free( tabs );
+
return;
}
if ( !gtk_entry_get_text_length( pass2 ) ) {
gtk_notebook_set_current_page( tabs, 0 );
gtk_widget_grab_focus( GTK_WIDGET( pass2 ) );
+
+ g_free( pass1 );
+ g_free( pass2 );
+ g_free( tabs );
+
return;
}
+
+ g_free( tabs );
if ( strcmp( gtk_entry_get_text( pass1 ), gtk_entry_get_text( pass2 )
) == 0 ) {
GtkWidget* step2;
GtkWidget* step3;
+
step2 = GTK_WIDGET( gtk_builder_get_object(
builder, "encrypt_step2" ) );
step3 = GTK_WIDGET( gtk_builder_get_object(
builder, "encrypt_step3" ) );
gtk_widget_show( step3 );
gtk_widget_hide( step2 );
- GThread* enc;
- enc = g_thread_create( encrypt_step3, NULL, FALSE, NULL );
+ g_free( step2 );
+ g_free( step3 );
+
+ g_thread_create( encrypt_step3, NULL, FALSE, NULL );
} else {
GtkProgressBar* meter;
meter = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_e2_pass_strength" ) );
gtk_progress_bar_set_text( meter, "Passwords do not match!" );
- }
+
+ g_free( meter );
+ }
+
+ g_free( pass1 );
+ g_free( pass2 );
}
G_MODULE_EXPORT void encrypt_step2_cancel( GtkWidget* button, gpointer
data ) {
@@ -409,6 +486,11 @@
gtk_entry_set_text( pass2, "" );
gtk_progress_bar_set_text( meter, "Enter a password" );
gtk_progress_bar_set_fraction( meter, 0.0 );
+
+ g_free( step2 );
+ g_free( pass1 );
+ g_free( pass2 );
+ g_free( meter );
}
/* Decryption */
@@ -417,6 +499,8 @@
step1 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step1" )
);
gtk_widget_show( step1 );
+
+ g_free( step1 );
}
G_MODULE_EXPORT void decrypt_step1_ok( GtkWidget* button, gpointer data ) {
@@ -425,11 +509,8 @@
file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_d1_select" ) );
// Make sure there's actually a file selected.
-
if ( gtk_file_chooser_get_filename( file ) == NULL )
return;
-
-
}
G_MODULE_EXPORT void decrypt_step1_cancel( GtkWidget* button, gpointer
data ) {
@@ -437,6 +518,8 @@
step1 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step1" )
);
gtk_widget_hide( step1 );
+
+ g_free( step1 );
}
G_MODULE_EXPORT void button_pressed_asymmetric( GtkWidget* button,
gpointer data ) {
@@ -469,6 +552,8 @@
gtk_file_filter_add_pattern( shacrypt_mask, "*.shacrypt" );
+ g_free( shacrypt_mask );
+
gtk_widget_show( window );
gtk_main();
==============================================================================
Revision: c98279b9aa
Author: Nightgunner5
Date: Mon Nov 9 17:05:03 2009
Log: Decryption interface is done, except for the actual decryption part.
http://code.google.com/p/shacrypt/source/detail?r=c98279b9aa
Modified:
/Makefile
/glade.c
/shacrypt.glade
=======================================
--- /Makefile Sun Nov 8 14:41:52 2009
+++ /Makefile Mon Nov 9 17:05:03 2009
@@ -43,7 +43,7 @@
shacrypt.h: third-party/sha1.h third-party/sha2.h third-party/md5.h
third-party/cubehash.h third-party/nessie.h
commandline.o: shacrypt.h
tests.o: third-party/sha1.h shacrypt.h
-glade.o: shacrypt.h
+glade.o: glade.c shacrypt.h
# This is a horrible, hackish way to do this, but at least it gets the
job done.
$(CC) $(CFLAGS) -c -o glade.o glade.c `pkg-config --cflags gtk+-2.0
gmodule-2.0 gthread-2.0`
=======================================
--- /glade.c Mon Nov 9 15:04:45 2009
+++ /glade.c Mon Nov 9 17:05:03 2009
@@ -138,7 +138,6 @@
gtk_progress_bar_set_text( meter, "Enter a password." );
g_free( meter );
- g_free( pass );
return;
}
@@ -216,7 +215,6 @@
gtk_progress_bar_set_text( meter, "Bad" );
g_free( meter );
- g_free( pass );
}
G_MODULE_EXPORT unsigned char encrypt_step2_get_algos() {
@@ -509,8 +507,40 @@
file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_d1_select" ) );
// Make sure there's actually a file selected.
- if ( gtk_file_chooser_get_filename( file ) == NULL )
+ if ( gtk_file_chooser_get_filename( file ) == NULL ) {
+ g_free( file );
return;
+ }
+
+ // Make sure it's an SHACrypt file.
+ FILE* f;
+ char fbuf[5];
+
+ f = fopen( gtk_file_chooser_get_filename( file ), "rb" );
+ g_free( file );
+
+ if ( f == NULL || fread( fbuf, 1, 5, f ) != 5 )
+ strcpy( fbuf, "fail." ); // Make sure we have all 5 bytes set.
+
+ if ( f != NULL ) {
+ fclose( f );
+
+ g_free( f );
+ }
+
+ if ( strncmp( fbuf, identifier, 3 ) != 0 || fbuf[3] != '\2' ||
fbuf[4] != '\0' ) {
+ g_free( fbuf );
+
+ GtkWidget* invalid_file;
+
+ invalid_file = GTK_WIDGET( gtk_builder_get_object(
builder, "decrypt_step1_error_notshacrypt" ) );
+
+ gtk_widget_show( invalid_file );
+
+ g_free( invalid_file );
+
+ return;
+ }
}
G_MODULE_EXPORT void decrypt_step1_cancel( GtkWidget* button, gpointer
data ) {
@@ -521,9 +551,36 @@
g_free( step1 );
}
+
+G_MODULE_EXPORT void decrypt_step1_error_ok( GtkWidget* button, gpointer
data ) {
+ GtkWidget* error;
+ error = GTK_WIDGET( gtk_builder_get_object(
builder, "decrypt_step1_error_notshacrypt" ) );
+
+ gtk_widget_hide( error );
+
+ g_free( error );
+}
+
+G_MODULE_EXPORT void decrypt_step2_ok( GtkWidget* button, gpointer data ) {
+ // TODO: Finish decryption
+}
+
+G_MODULE_EXPORT void decrypt_step2_cancel( GtkWidget* button, gpointer
data ) {
+ GtkWidget* step2;
+ GtkEntry* pass;
+
+ step2 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step2" )
);
+ pass = GTK_ENTRY( gtk_builder_get_object( builder, "field_d2_password"
) );
+
+ gtk_widget_hide( step2 );
+ gtk_entry_set_text( pass, "" );
+
+ g_free( step2 );
+ g_free( pass );
+}
G_MODULE_EXPORT void button_pressed_asymmetric( GtkWidget* button,
gpointer data ) {
-
+ // TODO: Asymmetric encryption
}
int main( int argc, char** argv ) {
=======================================
--- /shacrypt.glade Mon Nov 9 14:43:49 2009
+++ /shacrypt.glade Mon Nov 9 17:05:03 2009
@@ -647,7 +647,7 @@
<child>
<object class="GtkLabel" id="label_e3_description">
<property name="visible">True</property>
- <property name="label" translatable="yes">Your file is now
being encrypted with the password you specified. A copy has been created,
so the original file will not be modified.</property>
+ <property name="label" translatable="yes">Your file is now
being encrypted using the password you specified. A copy has been created,
so the original file will not be modified.</property>
<property name="justify">center</property>
<property name="wrap">True</property>
</object>
@@ -672,7 +672,6 @@
<property name="default_height">400</property>
<property name="type_hint">dialog</property>
<property name="transient_for">main</property>
- <property name="has_separator">False</property>
<signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox5">
@@ -683,9 +682,10 @@
<object class="GtkFileChooserWidget" id="file_d1_select">
<property name="visible">True</property>
<property name="orientation">vertical</property>
- <property name="filter">filter_shacrypt_ext</property>
<property name="use_preview_label">False</property>
<property name="preview_widget_active">False</property>
+ <property name="filter">filter_shacrypt_ext</property>
+ <signal name="file_activated" handler="decrypt_step1_ok"/>
</object>
<packing>
<property name="position">1</property>
@@ -753,4 +753,201 @@
</action-widgets>
</object>
<object class="GtkFileFilter" id="filter_shacrypt_ext"/>
+ <object class="GtkMessageDialog" id="decrypt_step1_error_notshacrypt">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Error reading file</property>
+ <property name="resizable">False</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">notification</property>
+ <property name="skip_taskbar_hint">True</property>
+ <property name="transient_for">decrypt_step1</property>
+ <property name="message_type">error</property>
+ <property name="text" translatable="yes">File could not be
read</property>
+ <property name="secondary_text" translatable="yes">The file you
selected was not a valid SHACrypt file.
+It might be corrupted or from a newer version.</property>
+ <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox6">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area6">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button_d1b_ok">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="decrypt_step1_error_ok"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">button_d1b_ok</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkDialog" id="decrypt_step2">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Decrypt a file (Step 2 of
3)</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">dialog</property>
+ <property name="transient_for">decrypt_step1</property>
+ <property name="has_separator">False</property>
+ <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
+ <signal name="delete_event" handler="decrypt_step2_cancel"/>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox8">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkNotebook" id="notebook_d2_tabs">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <object class="GtkHBox" id="hbox2">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="label_d2_password">
+ <property name="visible">True</property>
+ <property name="label"
translatable="yes">Password</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="field_d2_password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label_d2_basic">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Basic</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area8">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button_d2_cancel">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="decrypt_step2_cancel"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_d2_ok">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="decrypt_step2_ok"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">button_d2_cancel</action-widget>
+ <action-widget response="0">button_d2_ok</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkWindow" id="decrypt_step3">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Decrypt a file (Step 3 of
3)</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">dialog</property>
+ <property name="deletable">False</property>
+ <property name="transient_for">encrypt_step2</property>
+ <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
+ <child>
+ <object class="GtkVBox" id="vbox6">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkProgressBar" id="progressbar_d3_progress">
+ <property name="visible">True</property>
+ <property name="show_text">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_d3_description">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Your file is now
being decrypted using the password you specified. If the password was
incorrect, the decrypted file will contain seemingly random data. The
encrypted file will not be modified.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
</interface>