static void test_uri_get_set_attribute (void) { CK_ATTRIBUTE attr; CK_ATTRIBUTE_PTR ptr; P11KitUri *uri; int ret; uri = p11_kit_uri_new (); assert_ptr_not_null (uri); ptr = p11_kit_uri_get_attribute (uri, CKA_LABEL); assert_ptr_eq (NULL, ptr); ret = p11_kit_uri_clear_attribute (uri, CKA_LABEL); assert_num_eq (P11_KIT_URI_OK, ret); ret = p11_kit_uri_clear_attribute (uri, CKA_COLOR); assert_num_eq (P11_KIT_URI_NOT_FOUND, ret); attr.type = CKA_LABEL; attr.pValue = "Test"; attr.ulValueLen = 4; ret = p11_kit_uri_set_attribute (uri, &attr); assert_num_eq (P11_KIT_URI_OK, ret); /* We can set other attributes */ attr.type = CKA_COLOR; ret = p11_kit_uri_set_attribute (uri, &attr); assert_num_eq (P11_KIT_URI_OK, ret); /* And get them too */ ptr = p11_kit_uri_get_attribute (uri, CKA_COLOR); assert_ptr_not_null (ptr); ptr = p11_kit_uri_get_attribute (uri, CKA_LABEL); assert_ptr_not_null (ptr); assert (ptr->type == CKA_LABEL); assert (ptr->ulValueLen == 4); assert (memcmp (ptr->pValue, "Test", 4) == 0); ret = p11_kit_uri_clear_attribute (uri, CKA_LABEL); assert_num_eq (P11_KIT_URI_OK, ret); ptr = p11_kit_uri_get_attribute (uri, CKA_LABEL); assert_ptr_eq (NULL, ptr); p11_kit_uri_free (uri); }
static void test_uri_build_object_type_secret (void) { CK_ATTRIBUTE attr; CK_OBJECT_CLASS klass; P11KitUri *uri; char *string; int ret; uri = p11_kit_uri_new (); assert_ptr_not_null (uri); klass = CKO_SECRET_KEY; attr.type = CKA_CLASS; attr.pValue = &klass; attr.ulValueLen = sizeof (klass); p11_kit_uri_set_attribute (uri, &attr); ret = p11_kit_uri_format (uri, P11_KIT_URI_FOR_ANY, &string); assert_num_eq (P11_KIT_URI_OK, ret); assert (strstr (string, "type=secret-key") != NULL); p11_kit_uri_free (uri); free (string); }
int p11_kit_uri_set_attributes (P11KitUri *uri, CK_ATTRIBUTE_PTR attrs, CK_ULONG n_attrs) { CK_ULONG i; int ret; assert (uri); p11_kit_uri_clear_attributes (uri); for (i = 0; i < n_attrs; i++) { ret = p11_kit_uri_set_attribute (uri, &attrs[i]); if (ret != P11_KIT_URI_OK && ret != P11_KIT_URI_NOT_FOUND) return ret; } return P11_KIT_URI_OK; }
static void test_uri_build_with_attributes (void) { char *string = NULL; P11KitUri *uri; P11KitUri *check; CK_OBJECT_CLASS klass; CK_ATTRIBUTE_PTR attr; CK_ATTRIBUTE at; int ret; uri = p11_kit_uri_new (); assert_ptr_not_null (uri); at.type = CKA_LABEL; at.pValue = "The Label"; at.ulValueLen = 9; ret = p11_kit_uri_set_attribute (uri, &at); assert_num_eq (P11_KIT_URI_OK, ret); at.type = CKA_ID; at.pValue = "HELLO"; at.ulValueLen = 5; ret = p11_kit_uri_set_attribute (uri, &at); assert_num_eq (P11_KIT_URI_OK, ret); klass = CKO_DATA; at.type = CKA_CLASS; at.pValue = &klass; at.ulValueLen = sizeof (klass); ret = p11_kit_uri_set_attribute (uri, &at); assert_num_eq (P11_KIT_URI_OK, ret); ret = p11_kit_uri_format (uri, P11_KIT_URI_FOR_ANY, &string); assert_num_eq (P11_KIT_URI_OK, ret); check = p11_kit_uri_new (); assert_ptr_not_null (check); ret = p11_kit_uri_parse (string, P11_KIT_URI_FOR_ANY, check); assert_num_eq (P11_KIT_URI_OK, ret); attr = p11_kit_uri_get_attribute (check, CKA_LABEL); assert_ptr_not_null (attr); assert (attr->ulValueLen == 9); assert (memcmp (attr->pValue, "The Label", attr->ulValueLen) == 0); attr = p11_kit_uri_get_attribute (check, CKA_CLASS); assert_ptr_not_null (attr); assert (attr->ulValueLen == sizeof (klass)); assert (*((CK_OBJECT_CLASS_PTR)attr->pValue) == klass); attr = p11_kit_uri_get_attribute (check, CKA_ID); assert_ptr_not_null (attr); assert (attr->ulValueLen == 5); assert (memcmp (attr->pValue, "HELLO", attr->ulValueLen) == 0); p11_kit_uri_free (check); assert (strstr (string, "object=The%20Label") != NULL); assert (strstr (string, "type=data") != NULL); assert (strstr (string, "id=%48%45%4c%4c%4f") != NULL); free (string); p11_kit_uri_free (uri); }
static void test_uri_get_set_attributes (void) { CK_ATTRIBUTE_PTR attrs; CK_OBJECT_CLASS klass; CK_ATTRIBUTE attr; CK_ULONG n_attrs; P11KitUri *uri; int ret; uri = p11_kit_uri_new (); assert_ptr_not_null (uri); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (0, n_attrs); attr.type = CKA_LABEL; attr.pValue = "Test"; attr.ulValueLen = 4; ret = p11_kit_uri_set_attribute (uri, &attr); assert_num_eq (P11_KIT_URI_OK, ret); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (1, n_attrs); assert (attrs[0].type == CKA_LABEL); assert (attrs[0].ulValueLen == 4); assert (memcmp (attrs[0].pValue, "Test", 4) == 0); attr.type = CKA_LABEL; attr.pValue = "Kablooey"; attr.ulValueLen = 8; ret = p11_kit_uri_set_attribute (uri, &attr); assert_num_eq (P11_KIT_URI_OK, ret); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (1, n_attrs); assert (attrs[0].type == CKA_LABEL); assert (attrs[0].ulValueLen == 8); assert (memcmp (attrs[0].pValue, "Kablooey", 8) == 0); klass = CKO_DATA; attr.type = CKA_CLASS; attr.pValue = &klass; attr.ulValueLen = sizeof (klass); ret = p11_kit_uri_set_attribute (uri, &attr); assert_num_eq (P11_KIT_URI_OK, ret); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (2, n_attrs); assert (attrs[0].type == CKA_LABEL); assert (attrs[0].ulValueLen == 8); assert (memcmp (attrs[0].pValue, "Kablooey", 8) == 0); assert (attrs[1].type == CKA_CLASS); assert (attrs[1].ulValueLen == sizeof (klass)); assert (memcmp (attrs[1].pValue, &klass, sizeof (klass)) == 0); ret = p11_kit_uri_clear_attribute (uri, CKA_LABEL); assert_num_eq (P11_KIT_URI_OK, ret); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (1, n_attrs); assert (attrs[0].type == CKA_CLASS); assert (attrs[0].ulValueLen == sizeof (klass)); assert (memcmp (attrs[0].pValue, &klass, sizeof (klass)) == 0); attr.type = CKA_LABEL; attr.pValue = "Three"; attr.ulValueLen = 5; ret = p11_kit_uri_set_attributes (uri, &attr, 1); assert_num_eq (P11_KIT_URI_OK, ret); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (1, n_attrs); assert (attrs[0].type == CKA_LABEL); assert (attrs[0].ulValueLen == 5); assert (memcmp (attrs[0].pValue, "Three", 5) == 0); p11_kit_uri_clear_attributes (uri); attrs = p11_kit_uri_get_attributes (uri, &n_attrs); assert_ptr_not_null (attrs); assert_num_eq (0, n_attrs); p11_kit_uri_free (uri); }