patches/gnome-keyring-01-pkcs.diff
author dcarbery
Fri, 24 Nov 2006 16:37:59 +0000
branch217update
changeset 19096 d542fc2c823e
parent 7697 7c2b42e72181
child 8864 6ba2b7261115
child 19002 56632689bde8
permissions -rw-r--r--
Merged trunk changes r9797:9829 into 217update branch.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
     1
diff -urNp gnome-keyring-0.4.5/aes.c gnome-keyring-0.4.5-hacked/aes.c
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
     2
--- gnome-keyring-0.4.5/aes.c	2003-11-28 04:45:09.000000000 +1300
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
     3
+++ gnome-keyring-0.4.5-hacked/aes.c	2005-09-18 21:14:54.066769856 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
     4
@@ -31,6 +31,9 @@
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
     5
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
     6
 #include "config.h"
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
     7
 
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
     8
+/* Only build this if there is no PKCS11 support available */
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
     9
+#ifndef HAVE_PKCS11
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    10
+
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    11
 #include "aes.h"
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    12
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    13
 #if defined(G_BYTE_ORDER) && defined(G_BIG_ENDIAN) && defined(G_LITTLE_ENDIAN)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    14
@@ -333,3 +336,5 @@ guint32* aesFeedback(aesParam* ap)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    15
 {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    16
 	return ap->fdback;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    17
 }
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    18
+
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    19
+#endif /* ! HAVE_PKCS11 */
7697
7c2b42e72181 2006-07-21 Padraig O'Briain <[email protected]>
padraigo
parents: 5924
diff changeset
    20
--- gnome-keyring-0.5.1/configure.in	2006-06-12 12:07:39.000000000 +0100
7c2b42e72181 2006-07-21 Padraig O'Briain <[email protected]>
padraigo
parents: 5924
diff changeset
    21
+++ gnome-keyring-0.5.1-hacked/configure.in	2006-07-21 14:26:36.126696000 +0100
7c2b42e72181 2006-07-21 Padraig O'Briain <[email protected]>
padraigo
parents: 5924
diff changeset
    22
@@ -125,6 +125,17 @@
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    23
   done
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    24
 fi
7697
7c2b42e72181 2006-07-21 Padraig O'Briain <[email protected]>
padraigo
parents: 5924
diff changeset
    25
 
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    26
+# Check for pkcs11 library
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    27
+#
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    28
+AC_CHECK_HEADERS(security/cryptoki.h)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    29
+have_pkcs=no
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    30
+AC_CHECK_LIB(pkcs11, C_Initialize, have_pkcs=yes)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    31
+if test $have_pkcs = yes; then
7697
7c2b42e72181 2006-07-21 Padraig O'Briain <[email protected]>
padraigo
parents: 5924
diff changeset
    32
+       AC_DEFINE(HAVE_PKCS11,1,[Have pkcs11 library])
7c2b42e72181 2006-07-21 Padraig O'Briain <[email protected]>
padraigo
parents: 5924
diff changeset
    33
+       PKCS_LIBS=-lpkcs11
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    34
+fi
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    35
+AC_SUBST(PKCS_LIBS)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    36
+
7697
7c2b42e72181 2006-07-21 Padraig O'Briain <[email protected]>
padraigo
parents: 5924
diff changeset
    37
 # Check for /dev/random
7c2b42e72181 2006-07-21 Padraig O'Briain <[email protected]>
padraigo
parents: 5924
diff changeset
    38
 #
7c2b42e72181 2006-07-21 Padraig O'Briain <[email protected]>
padraigo
parents: 5924
diff changeset
    39
 AC_CHECK_FILE(/dev/random, AC_DEFINE(HAVE_DEVRANDOM,1,[Have /dev/random]))
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    40
diff -urNp gnome-keyring-0.4.5/gnome-keyring-daemon.c gnome-keyring-0.4.5-hacked/gnome-keyring-daemon.c
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    41
--- gnome-keyring-0.4.5/gnome-keyring-daemon.c	2005-05-07 05:13:20.000000000 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    42
+++ gnome-keyring-0.4.5-hacked/gnome-keyring-daemon.c	2005-09-18 21:14:54.064770160 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    43
@@ -29,6 +29,7 @@
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    44
 #include <stdio.h>
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    45
 #include <string.h>
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    46
 #include <signal.h>
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    47
+#include <string.h>
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    48
 #include <sys/types.h>
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    49
 #include <sys/socket.h>
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    50
 #include <sys/un.h>
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    51
@@ -297,8 +298,11 @@ hash_string (const char *str)
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    52
 {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    53
         guchar digest[16];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    54
 	
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    55
-	gnome_keyring_md5_string (str, digest);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    56
-	return gnome_keyring_md5_digest_to_ascii (digest);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    57
+	(void) memset(digest, 0, sizeof(digest));
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    58
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    59
+	(void) gnome_keyring_md5_digest (str, strlen(str), digest, sizeof(digest));
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    60
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    61
+	return gnome_keyring_md5_digest_to_ascii(digest, sizeof(digest));
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    62
 }
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    63
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    64
 GnomeKeyringAttributeList *
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    65
diff -urNp gnome-keyring-0.4.5/gnome-keyring-daemon-file.c gnome-keyring-0.4.5-hacked/gnome-keyring-daemon-file.c
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    66
--- gnome-keyring-0.4.5/gnome-keyring-daemon-file.c	2005-06-28 11:03:00.000000000 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    67
+++ gnome-keyring-0.4.5-hacked/gnome-keyring-daemon-file.c	2005-09-18 21:18:58.505609504 +1200
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    68
@@ -26,6 +26,7 @@
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    69
 #include <errno.h>
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    70
 #include <stdlib.h>
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    71
 #include <stdio.h>
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    72
+#include <string.h>
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    73
 #include <sys/types.h>
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    74
 #include <sys/socket.h>
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    75
 #include <sys/un.h>
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    76
@@ -34,20 +35,189 @@
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    77
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    78
 #include "gnome-keyring-daemon.h"
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    79
 #include "gnome-keyring-proto.h"
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    80
-#include "md5.h"
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    81
-#include "sha256.h"
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    82
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    83
+#ifdef HAVE_PKCS11
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    84
+#include <security/cryptoki.h>
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    85
+#else
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    86
 #include "aes.h"
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    87
+#endif /* HAVE_PKCS11 */
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    88
+#include "sha256.h"
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    89
+#include "md5.h"
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    90
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    91
 time_t keyring_dir_mtime = 0;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    92
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    93
-static void
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    94
-generate_key (const char *password,
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    95
-	      guchar salt[8],
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    96
-	      int iterations,
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    97
-	      guchar key[16],
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
    98
-	      guchar iv[16])
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
    99
+#ifdef HAVE_PKCS11
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   100
+int
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   101
+GetCryptoSession(CK_MECHANISM_TYPE mech, CK_SESSION_HANDLE_PTR hSession)
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   102
 {
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   103
+	CK_RV rv;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   104
+	CK_ULONG slotcount;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   105
+	CK_SLOT_ID_PTR slot_list;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   106
+	CK_SLOT_ID slot_id;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   107
+	CK_MECHANISM_INFO mech_info;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   108
+	CK_ULONG i;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   109
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   110
+	if (hSession == NULL) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   111
+		return (CKR_ARGUMENTS_BAD);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   112
+	}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   113
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   114
+	/* initialize PKCS #11 */
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   115
+	rv = C_Initialize(NULL);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   116
+	if ((rv != CKR_OK) && (rv != CKR_CRYPTOKI_ALREADY_INITIALIZED)) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   117
+		return (rv);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   118
+	}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   119
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   120
+	/* get slot count */
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   121
+	rv = C_GetSlotList(0, NULL, &slotcount);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   122
+	if (rv != CKR_OK) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   123
+		return (rv);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   124
+	}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   125
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   126
+	if (slotcount == 0) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   127
+		return (CKR_FUNCTION_FAILED);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   128
+	}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   129
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   130
+	/* allocate memory for slot list */
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   131
+	slot_list = malloc(slotcount * sizeof (CK_SLOT_ID));
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   132
+	if (slot_list == NULL) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   133
+		return (CKR_HOST_MEMORY);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   134
+	}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   135
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   136
+	if ((rv = C_GetSlotList(0, slot_list, &slotcount)) != CKR_OK) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   137
+		free(slot_list);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   138
+		return (rv);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   139
+	}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   140
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   141
+	/* find slot with matching mechanism */
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   142
+	for (i = 0; i < slotcount; i++) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   143
+		slot_id = slot_list[i];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   144
+		if (C_GetMechanismInfo(slot_id, mech, &mech_info) == CKR_OK) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   145
+			break;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   146
+		}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   147
+	}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   148
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   149
+	if (i == slotcount) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   150
+		free(slot_list);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   151
+		return (CKR_MECHANISM_INVALID);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   152
+	}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   153
+
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   154
+	rv = C_OpenSession(slot_id, CKF_SERIAL_SESSION, NULL, NULL, hSession);
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   155
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   156
+	free(slot_list);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   157
+	return (rv);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   158
+}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   159
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   160
+static int
4398
8833d7027509 2004-10-30 Laszlo Peter <[email protected]>
laca
parents: 4395
diff changeset
   161
+create_key_object(CK_SESSION_HANDLE  hSession, CK_KEY_TYPE ktype, guchar *keydata, guint32 keylen,
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   162
+                  CK_OBJECT_HANDLE *hKey)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   163
+{
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   164
+	CK_RV rv = CKR_OK;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   165
+	CK_OBJECT_CLASS class = CKO_SECRET_KEY;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   166
+	CK_BBOOL true = TRUE, false =  FALSE;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   167
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   168
+	CK_ATTRIBUTE template[] = {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   169
+		{CKA_CLASS, NULL, sizeof (class) },
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   170
+		{CKA_KEY_TYPE, NULL, sizeof (CKA_KEY_TYPE) },
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   171
+		{CKA_TOKEN, NULL, sizeof (false) },
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   172
+		{CKA_ENCRYPT, NULL, sizeof (true) },
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   173
+		{CKA_VALUE, NULL, keylen }
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   174
+	};
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   175
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   176
+	template[0].pValue = &class;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   177
+	template[1].pValue = &ktype;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   178
+	template[2].pValue = &false;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   179
+	template[3].pValue = &true;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   180
+	template[4].pValue = keydata;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   181
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   182
+	rv = C_CreateObject(hSession, template, 5, hKey);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   183
+	if (rv != CKR_OK) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   184
+		g_warning ("create_key_object: C_CreateObject error 0x%0x", rv);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   185
+	}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   186
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   187
+	return (rv);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   188
+}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   189
+#endif /* HAVE_PKCS11 */
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   190
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   191
+static int
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   192
+generate_key (const char *password, guchar *salt, int iterations, char *key, char *iv)
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   193
+{
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   194
+#ifdef HAVE_PKCS11
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   195
+	/*
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   196
+	 * If we have PKCS11, use the PKCS#5 PKBDF2 algorithm to derive a key 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   197
+	 * from the given password and salt.
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   198
+	 */
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   199
+	CK_SESSION_HANDLE hSession = CK_INVALID_HANDLE;
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   200
+	CK_PKCS5_PBKD2_PARAMS params;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   201
+	CK_OBJECT_CLASS class = CKO_SECRET_KEY;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   202
+	CK_ATTRIBUTE tmpl[3];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   203
+	CK_KEY_TYPE keytype = CKK_AES;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   204
+	CK_OBJECT_HANDLE hKey;
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   205
+	CK_MECHANISM mech; 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   206
+	CK_RV rv = CKR_OK;
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   207
+	CK_BYTE  fullkey[32];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   208
+	CK_ULONG keylen = 32, passlen = strlen(password);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   209
+	int attrs = 0;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   210
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   211
+	g_assert (iterations >= 1);
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   212
+	if (GetCryptoSession(CKM_PKCS5_PBKD2, &hSession) == CKR_OK) {
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   213
+		tmpl[attrs].type = CKA_CLASS;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   214
+		tmpl[attrs].pValue = &class;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   215
+		tmpl[attrs].ulValueLen = sizeof (class);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   216
+		attrs++;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   217
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   218
+		tmpl[attrs].type = CKA_KEY_TYPE;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   219
+		tmpl[attrs].pValue = &keytype;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   220
+		tmpl[attrs].ulValueLen = sizeof (keytype);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   221
+		attrs++;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   222
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   223
+		tmpl[attrs].type = CKA_VALUE_LEN;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   224
+		tmpl[attrs].pValue = (void *)&keylen;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   225
+		tmpl[attrs].ulValueLen = keylen;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   226
+		attrs++;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   227
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   228
+		params.saltSource = CKZ_SALT_SPECIFIED;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   229
+		params.pSaltSourceData = (void *)salt;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   230
+		params.ulSaltSourceDataLen = 8;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   231
+		params.iterations = iterations;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   232
+		params.prf = CKP_PKCS5_PBKD2_HMAC_SHA1;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   233
+		params.pPrfData = NULL;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   234
+		params.ulPrfDataLen = 0;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   235
+		params.pPassword = (CK_UTF8CHAR_PTR)password;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   236
+		params.ulPasswordLen = (CK_ULONG *)&passlen;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   237
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   238
+		mech.mechanism = CKM_PKCS5_PBKD2;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   239
+		mech.pParameter = &params;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   240
+		mech.ulParameterLen = sizeof (params);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   241
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   242
+		rv = C_GenerateKey(hSession, &mech, tmpl, attrs, &hKey);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   243
+		if (rv != CKR_OK) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   244
+			g_warning ("generate_key: C_GenerateKey error 0x%0x", rv);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   245
+			goto cleanup;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   246
+		}
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   247
+
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   248
+		tmpl[0].type = CKA_VALUE;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   249
+		tmpl[0].pValue = fullkey;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   250
+		tmpl[0].ulValueLen = sizeof(fullkey);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   251
+		rv = C_GetAttributeValue(hSession, hKey, tmpl, 1);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   252
+		if (rv != CKR_OK) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   253
+			g_warning ("generate_key: C_GenerateKey error 0x%0x", rv);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   254
+			goto cleanup;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   255
+		}
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   256
+
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   257
+		/*
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   258
+		 * We copied the key data from the object, now destroy it.
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   259
+		 */
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   260
+		(void) C_DestroyObject(hSession, hKey);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   261
+		memcpy (key, fullkey, 16);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   262
+		memcpy (iv, fullkey+16, 16);
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   263
+	}
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   264
+cleanup:
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   265
+	if (hSession != CK_INVALID_HANDLE)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   266
+		C_CloseSession(hSession);
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   267
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   268
+#else
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   269
 	sha256Param sha;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   270
+	int rv = 0;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   271
 	guchar digest[32];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   272
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   273
 	g_assert (iterations >= 1);
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   274
@@ -67,6 +237,8 @@ generate_key (const char *password,
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   275
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   276
 	memcpy (key, digest, 16);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   277
 	memcpy (iv, digest+16, 16);
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   278
+
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   279
+#endif /* HAVE_PKCS11 */
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   280
 }
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   281
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   282
 static gboolean
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   283
@@ -77,17 +249,61 @@ encrypt_buffer (GString *buffer,
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   284
 {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   285
         guchar key[16];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   286
         guchar iv[16];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   287
+#ifdef HAVE_PKCS11
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   288
+	CK_SESSION_HANDLE hSession = CK_INVALID_HANDLE;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   289
+	CK_MECHANISM mechanism;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   290
+	CK_OBJECT_HANDLE hKey;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   291
+	CK_RV rv;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   292
+	CK_ULONG cipherlen;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   293
+#else
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   294
 	aesParam param;
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   295
 	guchar dst[16];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   296
 	guchar src[16];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   297
 	size_t pos;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   298
 	int i;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   299
+#endif
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   300
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   301
 	g_assert (buffer->len % 16 == 0);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   302
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   303
-	generate_key (password, salt, iterations,
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   304
-		      key, iv);
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   305
-	
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   306
+        if (generate_key (password, salt, iterations, (char *)key, (char *)iv) != 0)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   307
+                return (FALSE);
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   308
+#ifdef HAVE_PKCS11
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   309
+        rv = GetCryptoSession(CKM_AES_CBC, &hSession);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   310
+        if (rv != CKR_OK) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   311
+                g_warning ("encrypt_buffer: GetCryptoSession error 0x%0x", rv);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   312
+                return (FALSE);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   313
+        }
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   314
+ 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   315
+        rv = create_key_object(hSession, CKK_AES, key, sizeof(key), &hKey);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   316
+        if (rv != CKR_OK) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   317
+                (void)C_CloseSession(hSession);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   318
+                return (FALSE);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   319
+        }
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   320
+ 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   321
+        /* Setup to do AES CBC mode with the given IV */
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   322
+        mechanism.mechanism = CKM_AES_CBC;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   323
+        mechanism.pParameter = iv;
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   324
+	mechanism.ulParameterLen = sizeof (iv);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   325
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   326
+	rv = C_EncryptInit(hSession, &mechanism, hKey);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   327
+	if (rv != CKR_OK) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   328
+		g_warning ("encrypt_buffer: C_EncryptInit error 0x%0x", rv);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   329
+		goto cleanup;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   330
+	}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   331
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   332
+	cipherlen = buffer->len;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   333
+	/* encrypt the whole buffer in-place. */
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   334
+	if ((rv = C_Encrypt(hSession, (CK_BYTE_PTR)buffer->str, buffer->len, (CK_BYTE_PTR)buffer->str, &cipherlen)) != CKR_OK)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   335
+	g_warning ("encrypt_buffer: C_Encrypt error 0x%0x", rv);
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   336
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   337
+cleanup:
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   338
+	(void)C_DestroyObject(hSession, hKey);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   339
+	(void)C_CloseSession(hSession);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   340
+	if (rv != CKR_OK) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   341
+		return (FALSE);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   342
+	}
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   343
+
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   344
+#else
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   345
 	if (aesSetup(&param, key, 128, ENCRYPT)) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   346
 		return FALSE;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   347
 	}
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   348
@@ -103,6 +319,8 @@ encrypt_buffer (GString *buffer,
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   349
 		memcpy (buffer->str + pos, dst, 16);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   350
 	}
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   351
 
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   352
+#endif /* HAVE_PKCS11 */
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   353
+
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   354
 	return TRUE;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   355
 }
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   356
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   357
@@ -114,23 +332,79 @@ decrypt_buffer (GString *buffer,
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   358
 {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   359
         guchar key[16];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   360
         guchar iv[16];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   361
+#ifdef HAVE_PKCS11
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   362
+        CK_SESSION_HANDLE hSession = CK_INVALID_HANDLE;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   363
+        CK_MECHANISM mechanism;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   364
+        CK_OBJECT_HANDLE hKey;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   365
+        CK_RV rv;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   366
+        CK_ULONG cipherlen;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   367
+        CK_BYTE dst[16];
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   368
+#else
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   369
 	aesParam param;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   370
-	guchar dst[16];
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   371
+        guchar *dst;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   372
+        guint32 dstint[4];
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   373
+        guint32 srcint[4];
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   374
 	size_t pos;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   375
 	int i;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   376
+#endif
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   377
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   378
 	g_assert (buffer->len % 16 == 0);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   379
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   380
-	generate_key (password, salt, iterations,
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   381
-		      key, iv);
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   382
+        if (generate_key (password, salt, iterations, (char *)key, (char *)iv))
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   383
+                return FALSE;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   384
+ 
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   385
+#ifdef HAVE_PKCS11
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   386
+        rv = GetCryptoSession(CKM_AES_CBC, &hSession);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   387
+        if (rv != CKR_OK) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   388
+                g_warning ("decrypt_buffer: GetCryptoSession error 0x%0x", rv);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   389
+                return (FALSE);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   390
+        }
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   391
+ 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   392
+        rv = create_key_object(hSession, CKK_AES, key, sizeof(key), &hKey);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   393
+        if (rv != CKR_OK) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   394
+                (void)C_CloseSession(hSession);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   395
+                return (FALSE);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   396
+        }
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   397
+ 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   398
+        mechanism.mechanism = CKM_AES_CBC;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   399
+        mechanism.pParameter = iv;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   400
+        mechanism.ulParameterLen = sizeof(iv);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   401
+ 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   402
+        rv = C_DecryptInit(hSession, &mechanism, hKey);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   403
+        if (rv != CKR_OK) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   404
+                g_warning ("decrypt_buffer: C_DecryptInit error 0x%0x", rv);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   405
+                goto cleanup;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   406
+        }
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   407
+ 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   408
+        cipherlen = buffer->len;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   409
+        /* decrypt the entire buffer in-place */
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   410
+        if ((rv = C_Decrypt(hSession, (CK_BYTE *)buffer->str, buffer->len,
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   411
+                                                (CK_BYTE *)buffer->str, &cipherlen))) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   412
+                g_warning ("decrypt_buffer: C_Decrypt error 0x%0x", rv);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   413
+        }
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   414
+ 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   415
+cleanup:
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   416
+        (void)C_DestroyObject(hSession, hKey);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   417
+        (void)C_CloseSession(hSession);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   418
+ 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   419
+        if (rv != CKR_OK)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   420
+                return (FALSE);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   421
+ 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   422
+#else
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   423
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   424
 	
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   425
 	if (aesSetup(&param, key, 128, DECRYPT)) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   426
 		return FALSE;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   427
 	}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   428
 	for (pos = 0; pos < buffer->len; pos += 16) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   429
-		if (aesDecrypt (&param, (guint32*) dst, (guint32*) (buffer->str + pos))) {
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   430
+                /* Copy the data to a properly aligned data struct before the AES operation */
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   431
+                memcpy((void *)srcint, buffer->str+pos, 16);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   432
+                if (aesDecrypt (&param, (guint32*) dstint, (guint32 *)srcint)) {
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   433
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   434
 			return FALSE;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   435
 		}
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   436
+                dst = (guchar *)dstint;
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   437
+
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   438
 		for (i = 0; i < 16; i++) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   439
 			dst[i] = iv[i] ^ dst[i];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   440
 		}
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   441
@@ -138,21 +412,19 @@ decrypt_buffer (GString *buffer,
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   442
 		memcpy (buffer->str + pos, dst, 16);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   443
 	}
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   444
 
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   445
+#endif /* HAVE_PKCS11 */
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   446
 	return TRUE;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   447
 }
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   448
 
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   449
 static gboolean
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   450
 verify_decrypted_buffer (GString *buffer)
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   451
 {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   452
-        struct GnomeKeyringMD5Context md5_context;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   453
         guchar digest[16];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   454
-	
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   455
-	gnome_keyring_md5_init (&md5_context);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   456
-	gnome_keyring_md5_update (&md5_context,
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   457
-				  (guchar *)buffer->str + 16, buffer->len - 16);
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   458
-	gnome_keyring_md5_final (digest, &md5_context);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   459
-	
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   460
-	return memcmp (buffer->str, digest, 16) == 0;
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   461
+
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   462
+        if (gnome_keyring_md5_digest((guchar *)(buffer->str + 16), buffer->len - 16,
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   463
+                                digest, sizeof (digest)))
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   464
+                return (FALSE);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   465
+        return (memcmp (buffer->str, digest, 16) == 0);
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   466
 }
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   467
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   468
 static char *
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   469
@@ -278,7 +550,6 @@ generate_file (GString *buffer, GnomeKey
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   470
 	GnomeKeyringItem *item;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   471
 	GnomeKeyringAttributeList *hashed;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   472
 	GString *to_encrypt;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   473
-        struct GnomeKeyringMD5Context md5_context;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   474
         guchar digest[16];
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   475
 	int i;
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   476
 
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   477
@@ -342,11 +613,10 @@ generate_file (GString *buffer, GnomeKey
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   478
 		g_string_append_c (to_encrypt, 0);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   479
 	}
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   480
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   481
-	gnome_keyring_md5_init (&md5_context);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   482
-	gnome_keyring_md5_update (&md5_context,
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   483
-				  (guchar *)to_encrypt->str + 16, to_encrypt->len - 16);
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   484
-	gnome_keyring_md5_final (digest, &md5_context);
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   485
-	memcpy (to_encrypt->str, digest, 16);
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   486
+
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   487
+        if (gnome_keyring_md5_digest((guchar *)(to_encrypt->str + 16), to_encrypt->len - 16,
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   488
+                        digest, 16) == 0)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   489
+                (void) memcpy (to_encrypt->str, digest, 16);
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   490
 	
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   491
 	if (!encrypt_buffer (to_encrypt, keyring->password, keyring->salt, keyring->hash_iterations)) {
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   492
 		g_string_free (to_encrypt, TRUE);
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   493
diff -urNp gnome-keyring-0.4.5/gnome-keyring-daemon-io.c gnome-keyring-0.4.5-hacked/gnome-keyring-daemon-io.c
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   494
--- gnome-keyring-0.4.5/gnome-keyring-daemon-io.c	2005-09-15 01:58:30.000000000 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   495
+++ gnome-keyring-0.4.5-hacked/gnome-keyring-daemon-io.c	2005-09-18 21:14:54.061770616 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   496
@@ -371,10 +386,15 @@ gnome_keyring_client_state_machine (Gnom
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   497
 				gnome_keyring_client_free (client);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   498
 				return;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   499
 			}
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   500
+			if (str != NULL) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   501
 			debug_print (("got name: %s\n", str));
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   502
 			client->app_ref->display_name = str;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   503
 			client->input_pos = 0;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   504
 			client->state = GNOME_CLIENT_STATE_READ_PACKET;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   505
+			} else {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   506
+				gnome_keyring_client_free (client);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   507
+				return;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   508
+			}
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   509
 		}
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   510
 		break;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   511
 	case GNOME_CLIENT_STATE_READ_PACKET:
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   512
diff -urNp gnome-keyring-0.4.5/gnome-keyring-proto.c gnome-keyring-0.4.5-hacked/gnome-keyring-proto.c
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   513
--- gnome-keyring-0.4.5/gnome-keyring-proto.c	2005-05-07 05:13:20.000000000 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   514
+++ gnome-keyring-0.4.5-hacked/gnome-keyring-proto.c	2005-09-18 21:14:54.062770464 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   515
@@ -276,7 +276,6 @@ gnome_keyring_proto_start_operation (GSt
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   516
 		return FALSE;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   517
 	}
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   518
 
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   519
-	
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   520
 	/* Make space for packet size */
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   521
 	*op_start = buffer->len;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   522
 	gnome_keyring_proto_add_uint32 (buffer, 0);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   523
@@ -340,8 +339,7 @@ gnome_keyring_proto_encode_op_string (GS
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   524
 	if (!gnome_keyring_proto_start_operation (buffer, op, &op_start)) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   525
 		return FALSE;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   526
 	}
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   527
-	if (!gnome_keyring_proto_add_utf8_string (buffer,
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   528
-						  str)) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   529
+	if (!gnome_keyring_proto_add_utf8_string (buffer, str)) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   530
 		return FALSE;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   531
 	}
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   532
 	if (!gnome_keyring_proto_end_operation (buffer,	op_start)) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   533
diff -urNp gnome-keyring-0.4.5/Makefile.am gnome-keyring-0.4.5-hacked/Makefile.am
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   534
--- gnome-keyring-0.4.5/Makefile.am	2004-07-21 06:42:50.000000000 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   535
+++ gnome-keyring-0.4.5-hacked/Makefile.am	2005-09-18 21:14:54.067769704 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   536
@@ -72,27 +72,31 @@ gnome_keyring_daemon_SOURCES = \
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   537
 gnome_keyring_daemon_LDADD = \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   538
 	libgnome-keyring-common.la \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   539
 	@LIBOBJS@ \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   540
-	$(GLIB_LIBS)
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   541
+	$(GLIB_LIBS) \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   542
+	$(PKCS_LIBS)
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   543
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   544
 gnome_keyring_ask_SOURCES = \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   545
 	gnome-keyring-ask.c
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   546
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   547
 gnome_keyring_ask_LDADD = \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   548
-	$(GTK_LIBS)
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   549
+	$(GTK_LIBS) \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   550
+	$(PKCS_LIBS)
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   551
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   552
 list_keyrings_SOURCES = \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   553
 	list-keyrings.c
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   554
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   555
 list_keyrings_LDADD = \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   556
 	libgnome-keyring.la \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   557
-	$(GTK_LIBS)
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   558
+	$(GTK_LIBS) \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   559
+	$(PKCS_LIBS)
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   560
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   561
 test_keyring_SOURCES = \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   562
 	test.c
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   563
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   564
 test_keyring_LDADD = \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   565
 	libgnome-keyring.la \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   566
-	$(GTK_LIBS)
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   567
+	$(GTK_LIBS) \
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   568
+	$(PKCS_LIBS)
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   569
 
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   570
 pkgconfigdir = $(libdir)/pkgconfig
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   571
 pkgconfig_DATA = gnome-keyring-1.pc
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   572
diff -urNp gnome-keyring-0.4.5/md5.c gnome-keyring-0.4.5-hacked/md5.c
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   573
--- gnome-keyring-0.4.5/md5.c	2005-05-07 05:13:20.000000000 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   574
+++ gnome-keyring-0.4.5-hacked/md5.c	2005-09-18 20:49:10.348450712 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   575
@@ -20,19 +20,72 @@
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   576
 #include "md5.h"
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   577
 #include <string.h>
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   578
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   579
-static void gnome_keyring_md5_transform (guint32                 buf[4],
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   580
-					 guint32 const           in[16]);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   581
+#ifdef HAVE_PKCS11
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   582
+#include <security/cryptoki.h>
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   583
+int GetCryptoSession(CK_MECHANISM_TYPE, CK_SESSION_HANDLE_PTR);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   584
+#endif
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   585
+
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   586
+char *
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   587
+gnome_keyring_md5_digest_to_ascii (unsigned char *digest, guint32 digestlen)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   588
+{
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   589
+  static char hex_digits[] = "0123456789abcdef";
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   590
+  unsigned char *res;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   591
+  int i;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   592
+
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   593
+  res = g_malloc (33);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   594
+
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   595
+  for (i = 0; i < digestlen; i++) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   596
+    res[2*i] = hex_digits[digest[i] >> 4];
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   597
+    res[2*i+1] = hex_digits[digest[i] & 0xf];
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   598
+  }
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   599
+
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   600
+  res[32] = 0;
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   601
 
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   602
-void
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   603
-gnome_keyring_md5_string (const char *string, unsigned char digest[16])
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   604
+  return (char *)res;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   605
+}
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   606
+
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   607
+int
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   608
+gnome_keyring_md5_digest(guchar *buffer, guint32 len, guchar *digest, guint32 digestlen)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   609
 {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   610
+  guchar md5digest[16];
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   611
+#ifdef HAVE_PKCS11
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   612
+  CK_SESSION_HANDLE hSession = CK_INVALID_HANDLE;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   613
+  CK_MECHANISM mech = { CKM_MD5, NULL, 0 };
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   614
+  CK_RV rv = CKR_OK;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   615
+
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   616
+  if (GetCryptoSession(CKM_MD5, &hSession) == CKR_OK) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   617
+    if ((rv = C_DigestInit(hSession, &mech)) != CKR_OK) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   618
+      /* Report an error */
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   619
+      g_warning("gnome_keyring_md5_digest: C_DigestInit failed - 0x%0x", rv);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   620
+      goto cleanup;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   621
+    }
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   622
+    rv = C_Digest(hSession, (CK_BYTE_PTR)buffer, len, (CK_BYTE_PTR)md5digest, &digestlen);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   623
+    if (rv != CKR_OK) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   624
+      /* Report an error */
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   625
+      g_warning("gnome_keyring_md5_digest: C_Digest failed - 0x%0x", rv);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   626
+      goto cleanup;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   627
+    }
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   628
+  }
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   629
+cleanup:
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   630
+  if (hSession != CK_INVALID_HANDLE)
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   631
+    C_CloseSession(hSession);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   632
+#else
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   633
+  int rv = 0;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   634
   struct GnomeKeyringMD5Context md5_context;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   635
   
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   636
   gnome_keyring_md5_init (&md5_context);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   637
-  gnome_keyring_md5_update (&md5_context, (const unsigned char *)string, strlen (string));
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   638
-  gnome_keyring_md5_final (digest, &md5_context);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   639
+  gnome_keyring_md5_update (&md5_context, buffer, len);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   640
+  gnome_keyring_md5_final (md5digest, &md5_context);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   641
+#endif /* HAVE_PKCS211 */
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   642
+
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   643
+  (void)memcpy(digest, md5digest, digestlen);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   644
+  return (rv);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   645
 }
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   646
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   647
+#ifndef HAVE_PKCS11
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   648
+static void gnome_keyring_md5_transform (guint32                 buf[4],
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   649
+                                         guint32 const           in[16]);
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   650
+
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   651
 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   652
 #define byteReverse(buf, len)	/* Nothing */
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   653
 #else
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   654
@@ -54,26 +107,6 @@ byteReverse(unsigned char *buf, unsigned
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   655
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   656
 #endif
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   657
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   658
-char *
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   659
-gnome_keyring_md5_digest_to_ascii (unsigned char digest[16])
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   660
-{
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   661
-  static char hex_digits[] = "0123456789abcdef";
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   662
-  char *res;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   663
-  int i;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   664
-  
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   665
-  res = g_malloc (33);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   666
-  
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   667
-  for (i = 0; i < 16; i++) {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   668
-    res[2*i] = hex_digits[digest[i] >> 4];
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   669
-    res[2*i+1] = hex_digits[digest[i] & 0xf];
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   670
-  }
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   671
-  
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   672
-  res[32] = 0;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   673
-  
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   674
-  return res;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   675
-}
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   676
-
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   677
-
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   678
 /*
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   679
  * Start MD5 accumulation.  Set bit count to 0 and buffer to mysterious
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   680
  * initialization constants.
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   681
@@ -289,3 +322,4 @@ gnome_keyring_md5_transform (guint32 buf
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   682
     buf[3] += d;
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   683
 }
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   684
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   685
+#endif /* HAVE_PKCS11 */
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   686
diff -urNp gnome-keyring-0.4.5/md5.h gnome-keyring-0.4.5-hacked/md5.h
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   687
--- gnome-keyring-0.4.5/md5.h	2003-12-02 00:25:55.000000000 +1300
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   688
+++ gnome-keyring-0.4.5-hacked/md5.h	2005-09-18 21:14:54.065770008 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   689
@@ -2,14 +2,18 @@
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   690
 #define MD5_H
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   691
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   692
 #include <glib.h>
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   693
+#include "config.h"
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   694
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   695
+char *gnome_keyring_md5_digest_to_ascii (unsigned char *, guint32);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   696
+int gnome_keyring_md5_digest(guchar *, guint32 , guchar *, guint32 );
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   697
+
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   698
+#ifndef HAVE_PKCS11
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   699
 struct GnomeKeyringMD5Context {
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   700
 	guint32 buf[4];
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   701
 	guint32 bits[2];
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   702
 	unsigned char in[64];
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   703
 };
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   704
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   705
-char *gnome_keyring_md5_digest_to_ascii (unsigned char                  digest[16]);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   706
 void  gnome_keyring_md5_string          (const char                    *string,
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   707
 					 unsigned char                  digest[16]);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   708
 void  gnome_keyring_md5_init            (struct GnomeKeyringMD5Context *ctx);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   709
@@ -19,4 +23,6 @@ void  gnome_keyring_md5_update          
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   710
 void  gnome_keyring_md5_final           (unsigned char                  digest[16],
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   711
 					 struct GnomeKeyringMD5Context *ctx);
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   712
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   713
+#endif /* HAVE_PKCS11 */
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   714
+
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   715
 #endif /* MD5_h */
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   716
diff -urNp gnome-keyring-0.4.5/sha256.c gnome-keyring-0.4.5-hacked/sha256.c
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   717
--- gnome-keyring-0.4.5/sha256.c	2003-12-05 23:34:36.000000000 +1300
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   718
+++ gnome-keyring-0.4.5-hacked/sha256.c	2005-09-18 21:14:54.066769856 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   719
@@ -30,6 +30,7 @@
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   720
 # include "config.h"
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   721
 #endif
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   722
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   723
+#ifndef HAVE_PKCS11
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   724
 #include "sha256.h"
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   725
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   726
 static void
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   727
@@ -381,3 +382,5 @@ int sha256Digest(register sha256Param* s
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   728
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   729
 /*!\}
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   730
  */
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   731
+
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   732
+#endif /* !HAVE_PKCS11 */
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   733
diff -urNp gnome-keyring-0.4.5/sha256.h gnome-keyring-0.4.5-hacked/sha256.h
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   734
--- gnome-keyring-0.4.5/sha256.h	2003-12-05 23:34:36.000000000 +1300
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   735
+++ gnome-keyring-0.4.5-hacked/sha256.h	2005-09-18 21:14:54.066769856 +1200
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   736
@@ -26,6 +26,10 @@
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   737
 #ifndef _SHA256_H
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   738
 #define _SHA256_H
4395
b38a84a931a5 2004-10-29 Brian Cameron <[email protected]>
bc99092
parents:
diff changeset
   739
 
5924
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   740
+#include "config.h"
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   741
+
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   742
+#ifndef HAVE_PKCS11
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   743
+
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   744
 #include <glib.h>
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   745
 #include "beecrypt_compat.h"
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   746
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   747
@@ -105,3 +109,5 @@ int  sha256Digest (sha256Param* sp, byte
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   748
 #endif
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   749
 
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   750
 #endif
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   751
+
a6b5861d5ee9 2005-09-18 Glynn Foster <[email protected]>
gman
parents: 4398
diff changeset
   752
+#endif /* !HAVE_PKCS11 */