1 /* set_key_id [-s slot] [-p $pin] -n $keytag {-i $id | -l $label} */
11 #include <security/cryptoki.h>
12 #include <security/pkcs11.h>
14 #include <opencryptoki/pkcs11.h>
18 main(int argc, char *argv[])
22 CK_SESSION_HANDLE hSession;
23 CK_UTF8CHAR *pin = NULL;
24 CK_BYTE old_id[2], new_id[2];
25 CK_OBJECT_HANDLE akey;
30 CK_ULONG ulObjectCount;
32 CK_ATTRIBUTE search_template[] = {
33 {CKA_ID, &old_id, sizeof(old_id)}
38 while ((c = getopt(argc, argv, ":s:i:n:l:p:")) != -1) {
46 old_id[0] = (oid >> 8) & 0xff;
47 old_id[1] = oid & 0xff;
52 new_id[0] = (nid >> 8) & 0xff;
53 new_id[1] = nid & 0xff;
59 pin = (CK_UTF8CHAR *)optarg;
62 fprintf(stderr, "Option -%c requires an operand\n", optopt);
67 fprintf(stderr, "Unrecognised option: -%c\n", optopt);
71 if ((errflg) || (!nid) || ((!oid) && (!label))) {
73 "usage: set_key_id [-s slot] [-p pin] -n new_id "
74 "{ -i old_id | -l label }\n");
78 printf("old %i new %i\n", oid, nid);
80 printf("label %s new %i\n", label, nid);
81 search_template[0].type = CKA_LABEL;
82 search_template[0].pValue = label;
83 search_template[0].ulValueLen = strlen(label);
86 /* Initialize the CRYPTOKI library */
87 rv = C_Initialize(NULL_PTR);
89 fprintf(stderr, "C_Initialize: Error = 0x%.8X\n", rv);
93 /* Open a session on the slot found */
94 rv = C_OpenSession(slot, CKF_RW_SESSION+CKF_SERIAL_SESSION,
95 NULL_PTR, NULL_PTR, &hSession);
97 fprintf(stderr, "C_OpenSession: Error = 0x%.8X\n", rv);
102 /* Login to the Token (Keystore) */
105 pin = (CK_UTF8CHAR *)getpassphrase("Enter Pin: ");
107 pin = (CK_UTF8CHAR *)getpass("Enter Pin: ");
109 rv = C_Login(hSession, CKU_USER, pin, strlen((char *)pin));
110 memset(pin, 0, strlen((char *)pin));
112 fprintf(stderr, "C_Login: Error = 0x%.8X\n", rv);
117 rv = C_FindObjectsInit(hSession, search_template, 1);
119 fprintf(stderr, "C_FindObjectsInit: Error = 0x%.8X\n", rv);
125 while(ulObjectCount) {
126 rv = C_FindObjects(hSession, &akey, 1, &ulObjectCount);
128 fprintf(stderr, "C_FindObjects: Error = 0x%.8X\n", rv);
131 } else if (ulObjectCount) {
132 /* Set update template. */
133 CK_ATTRIBUTE new_template[] = {
134 {CKA_ID, &new_id, sizeof(new_id)}
137 rv = C_SetAttributeValue(hSession, akey, new_template, 1);
139 fprintf(stderr, "C_SetAttributeValue: rv = 0x%.8X\n", rv);
146 rv = C_FindObjectsFinal(hSession);
148 fprintf(stderr, "C_FindObjectsFinal: Error = 0x%.8X\n", rv);
153 (void) C_CloseSession(hSession);
156 (void) C_Finalize(NULL_PTR);