From owner-p4-projects Thu Jun 13 8:46:23 2002 Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A945337B43E; Thu, 13 Jun 2002 08:46:02 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by hub.freebsd.org (Postfix) with ESMTP id 31E4637B41A for ; Thu, 13 Jun 2002 08:46:01 -0700 (PDT) Received: (from perforce@localhost) by freefall.freebsd.org (8.11.6/8.11.6) id g5DFj9E22711 for perforce@freebsd.org; Thu, 13 Jun 2002 08:45:09 -0700 (PDT) (envelope-from des@freebsd.org) Date: Thu, 13 Jun 2002 08:45:09 -0700 (PDT) Message-Id: <200206131545.g5DFj9E22711@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: perforce set sender to des@freebsd.org using -f From: Dag-Erling Smorgrav Subject: PERFORCE change 12826 for review To: Perforce Change Reviews Sender: owner-p4-projects@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG http://people.freebsd.org/~peter/p4db/chv.cgi?CH=12826 Change 12826 by des@des.at.des.thinksec.com on 2002/06/13 08:44:41 Show (most) token characteristics as well as slot characteristics. Sponsored by: DARPA, NAI Labs Affected files ... ... //depot/projects/cryptoki/bin/slots/slots.c#2 edit Differences ... ==== //depot/projects/cryptoki/bin/slots/slots.c#2 (text+ko) ==== @@ -31,7 +31,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/cryptoki/bin/slots/slots.c#1 $ + * $P4: //depot/projects/cryptoki/bin/slots/slots.c#2 $ */ #include @@ -45,48 +45,135 @@ static int a_flag; /* show all slots */ static int v_flag; /* verbose */ +#define TERMINATE(str) \ + terminate(str, sizeof str) +#define PRINT_FLAG(flags, flag) \ + do { if ((flags) & flag) printf(" %s", #flag); } while (0) + +static void +terminate(char *str, size_t len) +{ + int n; + + for (n = len - 1; n >= 0; --n) + if (isspace(str[n])) + str[n] = '\0'; + else + break; +} + static void +show_token(CK_SLOT_ID ulSlotID) +{ + CK_TOKEN_INFO TokenInfo; + CK_RV rv; + + rv = C_GetTokenInfo(ulSlotID, &TokenInfo); + switch (rv) { + case CKR_OK: + break; + case CKR_FUNCTION_NOT_SUPPORTED: /* XXX */ + case CKR_TOKEN_NOT_PRESENT: + printf(" (no token)"); + return; + case CKR_TOKEN_NOT_RECOGNIZED: + printf(" (unrecognized token)"); + return; + default: + errx(1, "C_GetTokenInfo(%lu): 0x%x", ulSlotID, rv); + } + TERMINATE(TokenInfo.label); + TERMINATE(TokenInfo.manufacturerID); + TERMINATE(TokenInfo.model); + TERMINATE(TokenInfo.serialNumber); + if (v_flag) { + printf(" token label: %.*s\n", + (int)(sizeof TokenInfo.label), + TokenInfo.label); + printf(" token manufacturer: %.*s\n", + (int)(sizeof TokenInfo.manufacturerID), + TokenInfo.manufacturerID); + printf(" token model: %.*s\n", + (int)(sizeof TokenInfo.model), + TokenInfo.model); + printf(" token hardware version: %d.%d\n", + TokenInfo.hardwareVersion.major, + TokenInfo.hardwareVersion.minor); + printf(" token firmware version: %d.%d\n", + TokenInfo.firmwareVersion.major, + TokenInfo.firmwareVersion.minor); + printf(" token serial number: %.*s\n", + (int)(sizeof TokenInfo.serialNumber), + TokenInfo.serialNumber); + printf(" token flags:"); + PRINT_FLAG(TokenInfo.flags, CKF_RNG); + PRINT_FLAG(TokenInfo.flags, CKF_WRITE_PROTECTED); + PRINT_FLAG(TokenInfo.flags, CKF_LOGIN_REQUIRED); + PRINT_FLAG(TokenInfo.flags, CKF_USER_PIN_INITIALIZED); + PRINT_FLAG(TokenInfo.flags, CKF_RESTORE_KEY_NOT_NEEDED); + PRINT_FLAG(TokenInfo.flags, CKF_CLOCK_ON_TOKEN); + PRINT_FLAG(TokenInfo.flags, CKF_PROTECTED_AUTHENTICATION_PATH); + PRINT_FLAG(TokenInfo.flags, CKF_DUAL_CRYPTO_OPERATIONS); + PRINT_FLAG(TokenInfo.flags, CKF_TOKEN_INITIALIZED); + PRINT_FLAG(TokenInfo.flags, CKF_SECONDARY_AUTHENTICATION); + PRINT_FLAG(TokenInfo.flags, CKF_USER_PIN_COUNT_LOW); + PRINT_FLAG(TokenInfo.flags, CKF_USER_PIN_FINAL_TRY); + PRINT_FLAG(TokenInfo.flags, CKF_USER_PIN_LOCKED); + PRINT_FLAG(TokenInfo.flags, CKF_USER_PIN_TO_BE_CHANGED); + PRINT_FLAG(TokenInfo.flags, CKF_SO_PIN_COUNT_LOW); + PRINT_FLAG(TokenInfo.flags, CKF_SO_PIN_FINAL_TRY); + PRINT_FLAG(TokenInfo.flags, CKF_SO_PIN_LOCKED); + PRINT_FLAG(TokenInfo.flags, CKF_SO_PIN_TO_BE_CHANGED); + printf("\n"); + if (TokenInfo.flags & CKF_CLOCK_ON_TOKEN) + printf(" token wall time: %.*s UTC", + (int)(sizeof TokenInfo.utcTime), + TokenInfo.utcTime); + } else { + printf(" \"%.*s\"", + (int)(sizeof TokenInfo.label), + TokenInfo.label); + } +} + +static void show_slot(CK_SLOT_ID ulSlotID) { CK_SLOT_INFO SlotInfo; CK_RV rv; - int n; rv = C_GetSlotInfo(ulSlotID, &SlotInfo); if (rv != CKR_OK) errx(1, "C_GetSlotInfo(%lu): 0x%x", ulSlotID, rv); - for (n = (sizeof SlotInfo.slotDescription) - 1; n >= 0; --n) - if (isspace(SlotInfo.slotDescription[n])) - SlotInfo.slotDescription[n] = '\0'; - else - break; - for (n = (sizeof SlotInfo.manufacturerID) - 1; n >= 0; --n) - if (isspace(SlotInfo.manufacturerID[n])) - SlotInfo.manufacturerID[n] = '\0'; - else - break; - printf("Slot %lu:\n", ulSlotID); - printf(" decription: %s\n", SlotInfo.slotDescription); - printf(" manufacturer: %s\n", SlotInfo.manufacturerID); + TERMINATE(SlotInfo.slotDescription); + TERMINATE(SlotInfo.manufacturerID); if (v_flag) { - printf(" flags:"); - if (SlotInfo.flags & CKF_TOKEN_PRESENT) - printf(" CKF_TOKEN_PRESENT"); - if (SlotInfo.flags & CKF_REMOVABLE_DEVICE) - printf(" CKF_REMOVABLE_DEVICE"); - if (SlotInfo.flags & CKF_HW_SLOT) - printf(" CKF_HW_SLOT"); - printf("\n"); - printf(" hardware version: %d.%d\n", + printf("Slot %lu:\n", ulSlotID); + printf(" decription: %.*s\n", + (int)(sizeof SlotInfo.slotDescription), + SlotInfo.slotDescription); + printf(" manufacturer: %.*s\n", + (int)(sizeof SlotInfo.manufacturerID), + SlotInfo.manufacturerID); + printf(" hardware version: %d.%d\n", SlotInfo.hardwareVersion.major, SlotInfo.hardwareVersion.major); - printf(" firmware version: %d.%d\n", + printf(" firmware version: %d.%d\n", SlotInfo.firmwareVersion.major, SlotInfo.firmwareVersion.major); + printf(" flags:"); + PRINT_FLAG(SlotInfo.flags, CKF_TOKEN_PRESENT); + PRINT_FLAG(SlotInfo.flags, CKF_REMOVABLE_DEVICE); + PRINT_FLAG(SlotInfo.flags, CKF_HW_SLOT); + printf("\n"); + } else { + printf("%.*s (%.*s):", + (int)(sizeof SlotInfo.slotDescription), + SlotInfo.slotDescription, + (int)(sizeof SlotInfo.manufacturerID), + SlotInfo.manufacturerID); } - if (SlotInfo.flags & CKF_TOKEN_PRESENT) { - /* print token information */ - } + show_token(ulSlotID); printf("\n"); } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message