On Thu, 2010-06-24 at 14:47 +0300, Martin Paljak wrote:
> Hello,
> 
> On Jun 24, 2010, at 12:47 , Andre Zepezauer wrote:
> > Ludovic Rousseau wrote:
> >> Why not just remove the lines if they are useless now?
> >>  
> > Because it makes the process of reviewing much easier. One could apply the 
> > patch local and see the hole context of the pieces which are considered 
> > obsolete. Don't forget that the framework code is complex and simply 
> > removing some lines may have subtle effects.
> 
> 
> A patch that can be compared to the original changeset which added the 
> feature [1] would be much easier both to review as well as apply
> 
> [1] http://www.opensc-project.org/opensc/changeset/1038

Well, here is my next attempt.

Regards
Andre

Index: pkcs11/framework-pkcs15.c
===================================================================
--- pkcs11/framework-pkcs15.c	(revision 4460)
+++ pkcs11/framework-pkcs15.c	(working copy)
@@ -89,7 +89,6 @@
 #define prv_flags		base.base.flags
 #define prv_p15obj		base.p15_object
 #define prv_pubkey		base.related_pubkey
-#define prv_next		base.related_privkey
 
 struct pkcs15_pubkey_object {
 	struct pkcs15_any_object	base;
@@ -510,21 +509,6 @@
 	for (i = 0; i < fw_data->num_objects; i++) {
 		struct pkcs15_any_object *obj = fw_data->objects[i];
 
-		if (obj->base.flags & SC_PKCS11_OBJECT_HIDDEN)
-			continue;
-		if (is_privkey(obj) && obj != (struct pkcs15_any_object *) pk) {
-			/* merge private keys with the same ID and
-			 * different usage bits */
-			struct pkcs15_prkey_object *other, **pp;
-
-			other = (struct pkcs15_prkey_object *) obj;
-			if (sc_pkcs15_compare_id(&other->prv_info->id, id)) {
-				obj->base.flags |= SC_PKCS11_OBJECT_HIDDEN;
-				for (pp = &pk->prv_next; *pp; pp = &(*pp)->prv_next)
-					;
-				*pp = (struct pkcs15_prkey_object *) obj;
-			}
-		} else
 		if (is_pubkey(obj) && !pk->prv_pubkey) {
 			struct pkcs15_pubkey_object *pubkey;
 			
@@ -594,9 +578,6 @@
 	for (i = 0; i < fw_data->num_objects; i++) {
 		struct pkcs15_any_object *obj = fw_data->objects[i];
 
-		if (obj->base.flags & SC_PKCS11_OBJECT_HIDDEN)
-			continue;
-
 		sc_debug(context, SC_LOG_DEBUG_NORMAL, "Looking for objects related to object %d", i);
 
 		if (is_privkey(obj)) {
@@ -655,8 +636,7 @@
 	unsigned int i;
 	struct pkcs15_fw_data *card_fw_data;
 
-	if (obj == NULL
-	 || (obj->base.flags & (SC_PKCS11_OBJECT_HIDDEN | SC_PKCS11_OBJECT_RECURS)))
+	if (obj == NULL)
 		return;
 
         
@@ -676,8 +656,6 @@
 	 * XXX prevent infinite recursion when a card specifies two certificates
 	 * referring to each other.
 	 */
-	obj->base.flags |= SC_PKCS11_OBJECT_RECURS;
-
 	switch (__p15_type(obj)) {
 	case SC_PKCS15_TYPE_PRKEY_RSA:
 	case SC_PKCS15_TYPE_PRKEY_GOSTR3410:
@@ -703,8 +681,6 @@
 		pkcs15_add_object(slot, (struct pkcs15_any_object *) obj->related_cert, NULL);
 		break;
 	}
-
-	obj->base.flags &= ~SC_PKCS11_OBJECT_RECURS;
 }
 
 static void pkcs15_init_slot(struct sc_pkcs15_card *p15card,
@@ -2324,10 +2300,7 @@
 	case CKA_VERIFY:
 	case CKA_VERIFY_RECOVER:
 	case CKA_DERIVE:
-		/* Combine the usage bits of all split keys */
-		for (usage = 0; prkey; prkey = prkey->prv_next)
-			usage |= prkey->prv_info->usage;
-		return get_usage_bit(usage, attr);
+		return get_usage_bit(prkey->prv_info->usage, attr);
 	case CKA_MODULUS:
 		return get_modulus(key, attr);
 	/* XXX: this should be removed sometimes as a private key has no
@@ -2376,16 +2349,6 @@
 	sc_debug(context, SC_LOG_DEBUG_NORMAL, "Initiating signing operation, mechanism 0x%x.\n",
 				pMechanism->mechanism);
 
-	/* See which of the alternative keys supports signing */
-	while (prkey
-	 && !(prkey->prv_info->usage
-	     & (SC_PKCS15_PRKEY_USAGE_SIGN|SC_PKCS15_PRKEY_USAGE_SIGNRECOVER|
-	     	SC_PKCS15_PRKEY_USAGE_NONREPUDIATION)))
-		prkey = prkey->prv_next;
-
-	if (prkey == NULL)
-		return CKR_KEY_FUNCTION_NOT_PERMITTED;
-
 	switch (pMechanism->mechanism) {
 	case CKM_RSA_PKCS:
 		flags = SC_ALGORITHM_RSA_PAD_PKCS1 | SC_ALGORITHM_RSA_HASH_NONE;
@@ -2461,22 +2424,12 @@
 		CK_BYTE_PTR pData, CK_ULONG_PTR pulDataLen)
 {
 	struct pkcs15_fw_data *fw_data = (struct pkcs15_fw_data *) ses->slot->card->fw_data;
-	struct pkcs15_prkey_object *prkey;
+	struct pkcs15_prkey_object *prkey = (struct pkcs15_prkey_object *) obj;
 	u8	decrypted[256];
 	int	buff_too_small, rv, flags = 0;
 
 	sc_debug(context, SC_LOG_DEBUG_NORMAL, "Initiating unwrap/decryption.\n");
 
-	/* See which of the alternative keys supports unwrap/decrypt */
-	prkey = (struct pkcs15_prkey_object *) obj;
-	while (prkey
-	 && !(prkey->prv_info->usage
-	     & (SC_PKCS15_PRKEY_USAGE_DECRYPT|SC_PKCS15_PRKEY_USAGE_UNWRAP)))
-		prkey = prkey->prv_next;
-
-	if (prkey == NULL)
-		return CKR_KEY_FUNCTION_NOT_PERMITTED;
-
 	/* Select the proper padding mechanism */
 	switch (pMechanism->mechanism) {
 	case CKM_RSA_PKCS:
Index: pkcs11/sc-pkcs11.h
===================================================================
--- pkcs11/sc-pkcs11.h	(revision 4460)
+++ pkcs11/sc-pkcs11.h	(working copy)
@@ -124,8 +124,6 @@
 };
 
 #define SC_PKCS11_OBJECT_SEEN	0x0001
-#define SC_PKCS11_OBJECT_HIDDEN	0x0002
-#define SC_PKCS11_OBJECT_RECURS	0x8000
 
 
 /*
Index: pkcs15init/pkcs15-lib.c
===================================================================
--- pkcs15init/pkcs15-lib.c	(revision 4460)
+++ pkcs15init/pkcs15-lib.c	(working copy)
@@ -1087,15 +1087,10 @@
 		key_info->native = 0;
 	}
 
-	if (keyargs->id.len != 0 && (keyargs->flags & SC_PKCS15INIT_SPLIT_KEY)) {
-		/* Split key; this ID exists already, don't check for
-		 * the pkcs15 object */
-	} else {
-		/* Select a Key ID if the user didn't specify one,
-		 * otherwise make sure it's compatible with our intended use */
-		r = select_id(p15card, SC_PKCS15_TYPE_PRKEY, &keyargs->id);
-		SC_TEST_RET(ctx, SC_LOG_DEBUG_NORMAL, r, "Cannot select ID for PrKey object");
-	}
+	/* Select a Key ID if the user didn't specify one,
+	 * otherwise make sure it's compatible with our intended use */
+	r = select_id(p15card, SC_PKCS15_TYPE_PRKEY, &keyargs->id);
+	SC_TEST_RET(ctx, SC_LOG_DEBUG_NORMAL, r, "Cannot select ID for PrKey object");
 
 	key_info->id = keyargs->id;
 
Index: pkcs15init/pkcs15-init.h
===================================================================
--- pkcs15init/pkcs15-init.h	(revision 4460)
+++ pkcs15init/pkcs15-init.h	(working copy)
@@ -215,7 +215,6 @@
 };
 
 #define SC_PKCS15INIT_NO_PASSPHRASE	0x0002
-#define SC_PKCS15INIT_SPLIT_KEY		0x0004
 
 struct sc_pkcs15init_pubkeyargs {
 	struct sc_pkcs15_id	id;
@@ -280,11 +279,6 @@
 				struct sc_profile *,
 				struct sc_pkcs15init_prkeyargs *,
 				struct sc_pkcs15_object **);
-extern int	sc_pkcs15init_store_split_key(struct sc_pkcs15_card *,
-				struct sc_profile *,
-				struct sc_pkcs15init_prkeyargs *,
-				struct sc_pkcs15_object **,
-				struct sc_pkcs15_object **);
 extern int	sc_pkcs15init_store_public_key(struct sc_pkcs15_card *,
 				struct sc_profile *,
 				struct sc_pkcs15init_pubkeyargs *,
@@ -351,12 +345,6 @@
 extern int	sc_pkcs15init_rmdir(struct sc_pkcs15_card *, struct sc_profile *,
 				struct sc_file *);
 
-/* Helper function for CardOS */
-extern int	sc_pkcs15init_requires_restrictive_usage(
-				struct sc_pkcs15_card *,
-				struct sc_pkcs15init_prkeyargs *,
-				unsigned int);
-
 extern int	sc_pkcs15_create_pin_domain(struct sc_profile *, struct sc_pkcs15_card *,
 				const struct sc_pkcs15_id *, struct sc_file **);
 

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
opensc-devel mailing list
opensc-devel@lists.opensc-project.org
http://www.opensc-project.org/mailman/listinfo/opensc-devel

Reply via email to