pkcs11-list.c revision 0c27b3fe77ac1d5094ba3521e8142d9e7973133f
/*
* Copyright (C) 2009, 2014-2016 Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/*
* Portions copyright (c) 2008 Nominet UK. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/* $Id: pkcs11-list.c,v 1.7 2009/10/26 23:36:53 each Exp $ */
/* pkcs11-list [-P] [-m module] [-s slot] [-i $id | -l $label] [-p $pin] */
/*! \file */
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <isc/commandline.h>
#define getpassphrase(x) getpass(x)
#endif
int
CK_SLOT_ID slot = 0;
unsigned int i = 0, id = 0;
int c, errflg = 0;
CK_ATTRIBUTE search_template[] = {
};
switch (c) {
case 'P':
break;
case 'm':
break;
case 's':
break;
case 'i':
id &= 0xffff;
break;
case 'l':
break;
case 'p':
break;
case ':':
errflg++;
break;
case '?':
default:
errflg++;
}
}
if (errflg) {
"[-i id | -l label] [-p pin]\n");
exit(1);
}
if (slot)
if (id) {
}
/* Initialize the CRYPTOKI library */
if (result == PK11_R_NORANDOMSERVICE ||
result == PK11_R_NODIGESTSERVICE ||
result == PK11_R_NOAESSERVICE) {
"using native PKCS#11.\n");
} else if (result != ISC_R_SUCCESS) {
exit(1);
}
error = 1;
goto exit_session;
}
ulObjectCount = 1;
while (ulObjectCount) {
"C_FindObjects: Error = 0x%.8lX\n",
rv);
error = 1;
goto exit_search;
}
for (i = 0; i < ulObjectCount; i++) {
unsigned int j, len;
CK_OBJECT_CLASS oclass = 0;
CK_ATTRIBUTE template[] = {
};
CK_ATTRIBUTE priv_template[] = {
};
template, 3);
"C_GetAttributeValue[%u]: "
"rv = 0x%.8lX\n",
i, rv);
if (rv == CKR_BUFFER_TOO_SMALL)
"%u too small: %lu %lu %lu\n",
i,
template[0].ulValueLen,
error = 1;
continue;
}
printf("object[%u]: handle %lu class %lu "
"label[%lu] '%s' id[%lu] ",
if (len == 2) {
} else {
if (len > 8)
len = 8;
if (len > 0)
printf("0x");
for (j = 0; j < len; j++)
printf("...");
}
if ((oclass == CKO_PRIVATE_KEY ||
oclass == CKO_SECRET_KEY) &&
printf(" E:%s",
extract ? "true" :
}
printf("\n");
}
}
error = 1;
}
(void) pk11_finalize();
}