pkcs11-hmacmd5.c revision e20788e1216ed720aefa84f3295f7899d9f28c22
/*
* Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
*
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/*
* 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-hmacmd5
*
* Prints the MD5 HMAC of the standard input, using the PKCS#11 device.
*
* Usage:
* pkcs11-hmacmd5 [-m module] [-s $slot] [-n] [-p $pin]
* -m: PKCS#11 provider module. This must be the full
* path to a shared library object implementing the
* PKCS#11 API for a device.
* -s: Slot
* -p: PIN
* -n: don't log in to the PKCS#11 device
* -k: key name for the HMAC
*/
/*! \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
/* Define static key template values */
#define BLOCKSIZE 32768
char digest[16];
int
CK_SLOT_ID slot = 0;
{
};
int error = 0;
int c, errflg = 0;
unsigned int i;
switch (c) {
case 'm':
break;
case 's':
break;
case 'n':
break;
case 'p':
break;
case 'k':
break;
case ':':
"Option -%c requires an operand\n",
errflg++;
break;
case '?':
default:
errflg++;
}
}
"\tpkcs11-hmacmd5 [-m module] [-s slot] "
"[-n|-p pin] -k key\n");
exit(1);
}
/* Decode the key */
for (i = 0; i < BLOCKSIZE / 2; i++) {
switch (c = *key++) {
case 0:
goto key_done;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if ((i & 1) == 0)
else
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
if ((i & 1) == 0)
else
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
if ((i & 1) == 0)
else
break;
default:
exit(1);
}
}
if ((i & 1) != 0) {
exit(1);
}
len = i >> 1;
/* Initialize the CRYPTOKI library */
if (result != ISC_R_SUCCESS) {
exit(1);
}
error = 1;
goto exit_session;
}
if (hKey == CK_INVALID_HANDLE) {
error = 1;
goto exit_session;
}
error = 1;
goto exit_sign;
}
for (;;) {
size_t n;
for (;;) {
sum += n;
break;
if (n == 0) {
error = 1;
goto exit_sign;
}
goto partial_block;
}
goto partial_block;
}
"C_SignUpdate: Error = 0x%.8lX\n",
rv);
error = 1;
goto exit_sign;
}
}
if (sum > 0) {
"C_SignUpdate: Error = 0x%.8lX\n",
rv);
error = 1;
goto exit_sign;
}
}
len = 16;
error = 1;
goto exit_sign;
}
if (len != 16) {
error = 1;
}
for (i = 0; i < 16; i++)
printf("\n");
error = 1;
}
}