summaryrefslogtreecommitdiff
path: root/usr/src/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd')
-rw-r--r--usr/src/cmd/cmd-crypto/decrypt/decrypt.c92
-rw-r--r--usr/src/cmd/cmd-crypto/digest/digest.c53
-rw-r--r--usr/src/cmd/cmd-crypto/kmfcfg/create.c70
-rw-r--r--usr/src/cmd/cmd-crypto/kmfcfg/delete.c4
-rw-r--r--usr/src/cmd/cmd-crypto/kmfcfg/export.c9
-rw-r--r--usr/src/cmd/cmd-crypto/kmfcfg/import.c13
-rw-r--r--usr/src/cmd/cmd-crypto/kmfcfg/list.c41
-rw-r--r--usr/src/cmd/cmd-crypto/kmfcfg/modify.c102
-rw-r--r--usr/src/cmd/cmd-crypto/kmfcfg/util.c41
-rw-r--r--usr/src/cmd/cmd-crypto/pktool/common.c107
-rw-r--r--usr/src/cmd/cmd-crypto/pktool/delete.c633
-rw-r--r--usr/src/cmd/cmd-crypto/pktool/download.c32
-rw-r--r--usr/src/cmd/cmd-crypto/pktool/export.c672
-rw-r--r--usr/src/cmd/cmd-crypto/pktool/gencert.c566
-rw-r--r--usr/src/cmd/cmd-crypto/pktool/gencsr.c388
-rw-r--r--usr/src/cmd/cmd-crypto/pktool/genkey.c212
-rw-r--r--usr/src/cmd/cmd-crypto/pktool/import.c810
-rw-r--r--usr/src/cmd/cmd-crypto/pktool/list.c724
-rw-r--r--usr/src/cmd/cmd-crypto/pktool/pktool.c40
-rw-r--r--usr/src/cmd/cmd-crypto/pktool/setpin.c81
-rw-r--r--usr/src/cmd/cmd-inet/usr.sbin/kssl/kssladm/kssladm_create.c416
-rw-r--r--usr/src/cmd/cmd-inet/usr.sbin/kssl/kssladm/ksslutil.c28
22 files changed, 3608 insertions, 1526 deletions
diff --git a/usr/src/cmd/cmd-crypto/decrypt/decrypt.c b/usr/src/cmd/cmd-crypto/decrypt/decrypt.c
index 6119704da3..01282d9028 100644
--- a/usr/src/cmd/cmd-crypto/decrypt/decrypt.c
+++ b/usr/src/cmd/cmd-crypto/decrypt/decrypt.c
@@ -326,9 +326,9 @@ algorithm_list()
mech_aliases[mech].keysize_max != 0)
(void) printf(" %5lu %5lu\n",
(mech_aliases[mech].keysize_min *
- mech_aliases[mech].keysize_unit),
+ mech_aliases[mech].keysize_unit),
(mech_aliases[mech].keysize_max *
- mech_aliases[mech].keysize_unit));
+ mech_aliases[mech].keysize_unit));
else
(void) printf("\n");
@@ -395,7 +395,7 @@ generate_pkcs5_key(CK_SESSION_HANDLE hSession,
mechanism.ulParameterLen = sizeof (params);
rv = C_GenerateKey(hSession, &mechanism, tmpl,
- attrs, hKey);
+ attrs, hKey);
return (rv);
}
@@ -522,7 +522,7 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
if (aflag) {
/* Determine if algorithm is valid */
for (mech_match = 0; mech_match < MECH_ALIASES_COUNT;
- mech_match++) {
+ mech_match++) {
if (strcmp(algo_str,
mech_aliases[mech_match].alias) == 0) {
mech_type = mech_aliases[mech_match].type;
@@ -623,12 +623,12 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
if (info.ulMinKeySize && (info.ulMinKeySize <
mech_aliases[mek].keysize_min))
mech_aliases[mek].keysize_min =
- info.ulMinKeySize;
+ info.ulMinKeySize;
if (info.ulMaxKeySize && (info.ulMaxKeySize >
mech_aliases[mek].keysize_max))
mech_aliases[mek].keysize_max =
- info.ulMaxKeySize;
+ info.ulMaxKeySize;
mech_aliases[mek].available = B_TRUE;
}
@@ -650,7 +650,8 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
*/
i = 0;
if (Kflag) {
- kmfrv = KMF_PK11TokenLookup(NULL, token_label, &token_slot_id);
+ kmfrv = kmf_pk11_token_lookup(NULL, token_label,
+ &token_slot_id);
if (kmfrv != KMF_OK) {
cryptoerror(LOG_STDERR,
gettext("no matching PKCS#11 token"));
@@ -701,7 +702,7 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
/* Open a session */
rv = C_OpenSession(slotID, CKF_SERIAL_SESSION,
- NULL_PTR, NULL, &hSession);
+ NULL_PTR, NULL, &hSession);
if (rv != CKR_OK) {
cryptoerror(LOG_STDERR,
@@ -725,8 +726,8 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
if ((get_random_data(pivbuf,
mech_aliases[mech_match].ivlen)) != 0) {
cryptoerror(LOG_STDERR, gettext(
- "Unable to generate random "
- "data for initialization vector."));
+ "Unable to generate random "
+ "data for initialization vector."));
goto cleanup;
}
}
@@ -737,7 +738,7 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
rv = pkcs11_mech2keytype(mech_type, &keytype);
if (rv != CKR_OK) {
cryptoerror(LOG_STDERR,
- gettext("unable to find key type for algorithm."));
+ gettext("unable to find key type for algorithm."));
goto cleanup;
}
@@ -745,14 +746,14 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
if (iflag) {
if ((infd = open(inputfile, O_RDONLY | O_NONBLOCK)) == -1) {
cryptoerror(LOG_STDERR, gettext(
- "can not open input file %s"), inputfile);
+ "can not open input file %s"), inputfile);
goto cleanup;
}
/* Get info on input file */
if (fstat(infd, &insbuf) == -1) {
cryptoerror(LOG_STDERR, gettext(
- "can not stat input file %s"), inputfile);
+ "can not stat input file %s"), inputfile);
goto cleanup;
}
}
@@ -768,13 +769,13 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
if (oflag) {
outfilename = outputfile;
if ((stat(outputfile, &outsbuf) != -1) &&
- (insbuf.st_ino == outsbuf.st_ino)) {
+ (insbuf.st_ino == outsbuf.st_ino)) {
char *dir;
/* create temp file on same dir */
dir = dirname(outputfile);
(void) snprintf(tmpnam, sizeof (tmpnam),
- "%s/encrXXXXXX", dir);
+ "%s/encrXXXXXX", dir);
outfilename = tmpnam;
if ((outfd = mkstemp(tmpnam)) == -1) {
cryptoerror(LOG_STDERR, gettext(
@@ -785,8 +786,7 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
} else {
/* Create file for output */
if ((outfd = open(outfilename,
- O_CREAT|O_WRONLY|O_TRUNC,
- 0644)) == -1) {
+ O_CREAT|O_WRONLY|O_TRUNC, 0644)) == -1) {
cryptoerror(LOG_STDERR, gettext(
"cannot open output file %s"),
outfilename);
@@ -801,7 +801,7 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
*/
if (cmd->type == CKA_DECRYPT) {
if (read(infd, &version, sizeof (version)) !=
- sizeof (version)) {
+ sizeof (version)) {
cryptoerror(LOG_STDERR, gettext(
"failed to get format version from "
"input file."));
@@ -827,11 +827,10 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
* Read iteration count and salt data.
*/
if (read(infd, &iterations,
- sizeof (iterations)) !=
- sizeof (iterations)) {
+ sizeof (iterations)) != sizeof (iterations)) {
cryptoerror(LOG_STDERR, gettext(
- "failed to get iterations from "
- "input file."));
+ "failed to get iterations from "
+ "input file."));
goto cleanup;
}
/* convert to host byte order */
@@ -844,18 +843,18 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
goto cleanup;
}
if (read(infd, salt, sizeof (salt))
- != sizeof (salt)) {
+ != sizeof (salt)) {
cryptoerror(LOG_STDERR, gettext(
- "failed to get salt data from "
- "input file."));
+ "failed to get salt data from "
+ "input file."));
goto cleanup;
}
break;
default:
cryptoerror(LOG_STDERR, gettext(
- "Unrecognized format version read from "
- "input file - expected %d, got %d."),
- SUNW_ENCRYPT_FILE_VERSION, version);
+ "Unrecognized format version read from "
+ "input file - expected %d, got %d."),
+ SUNW_ENCRYPT_FILE_VERSION, version);
goto cleanup;
break;
}
@@ -884,7 +883,7 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
if (rv != 0) {
cryptoerror(LOG_STDERR,
gettext("unable to generate random "
- "data for key salt."));
+ "data for key salt."));
goto cleanup;
}
}
@@ -926,8 +925,7 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
template[nattr].ulValueLen = keysize;
nattr++;
- rv = C_CreateObject(hSession, template,
- nattr, &key);
+ rv = C_CreateObject(hSession, template, nattr, &key);
} else {
/*
* If the encryption type has a fixed key length,
@@ -945,10 +943,9 @@ execute_cmd(struct CommandInfo *cmd, char *algo_str)
* the passphrase entered by the user.
*/
rv = generate_pkcs5_key(hSession,
- salt, sizeof (salt),
- iterations,
- pkeydata, keytype, keysize,
- keylen, cmd->type, &key);
+ salt, sizeof (salt), iterations,
+ pkeydata, keytype, keysize,
+ keylen, cmd->type, &key);
}
if (rv != CKR_OK) {
@@ -979,10 +976,10 @@ do_crypto:
CK_ULONG netiter;
if (write(outfd, &netversion, sizeof (netversion))
- != sizeof (netversion)) {
+ != sizeof (netversion)) {
cryptoerror(LOG_STDERR, gettext(
- "failed to write version number "
- "to output file."));
+ "failed to write version number "
+ "to output file."));
goto cleanup;
}
/*
@@ -991,16 +988,15 @@ do_crypto:
*/
netiter = htonl(iterations);
if (write(outfd, &netiter,
- sizeof (netiter)) != sizeof (netiter)) {
+ sizeof (netiter)) != sizeof (netiter)) {
cryptoerror(LOG_STDERR, gettext(
"failed to write iterations to output"));
goto cleanup;
}
- if (ivlen > 0 &&
- write(outfd, pivbuf, ivlen) != ivlen) {
+ if (ivlen > 0 && write(outfd, pivbuf, ivlen) != ivlen) {
cryptoerror(LOG_STDERR, gettext(
- "failed to write initialization vector "
- "to output"));
+ "failed to write initialization vector "
+ "to output"));
goto cleanup;
}
if (write(outfd, salt, sizeof (salt)) != sizeof (salt)) {
@@ -1142,7 +1138,7 @@ crypt_multipart(struct CommandInfo *cmd, CK_SESSION_HANDLE hSession,
/* Start with the initial buffer */
resultlen = resultbuflen;
rv = cmd->Update(hSession, databuf, (CK_ULONG)nread,
- resultbuf, &resultlen);
+ resultbuf, &resultlen);
/* Need a bigger buffer? */
if (rv == CKR_BUFFER_TOO_SMALL) {
@@ -1164,7 +1160,7 @@ crypt_multipart(struct CommandInfo *cmd, CK_SESSION_HANDLE hSession,
/* Try again with bigger buffer */
rv = cmd->Update(hSession, databuf, (CK_ULONG)nread,
- resultbuf, &resultlen);
+ resultbuf, &resultlen);
}
if (rv != CKR_OK) {
@@ -1300,21 +1296,21 @@ cryptoreadfile(char *filename, CK_BYTE_PTR *pdata, CK_ULONG_PTR pdatalen)
/* read the file into a buffer */
if ((fd = open(filename, O_RDONLY | O_NONBLOCK)) == -1) {
cryptoerror(LOG_STDERR, gettext(
- "cannot open %s"), filename);
+ "cannot open %s"), filename);
return (-1);
}
if (fstat(fd, &statbuf) == -1) {
cryptoerror(LOG_STDERR, gettext(
- "cannot stat %s"), filename);
+ "cannot stat %s"), filename);
(void) close(fd);
return (-1);
}
if (!S_ISREG(statbuf.st_mode)) {
cryptoerror(LOG_STDERR, gettext(
- "%s not a regular file"), filename);
+ "%s not a regular file"), filename);
(void) close(fd);
return (-1);
}
diff --git a/usr/src/cmd/cmd-crypto/digest/digest.c b/usr/src/cmd/cmd-crypto/digest/digest.c
index 4ef01b23fb..12d2d092ee 100644
--- a/usr/src/cmd/cmd-crypto/digest/digest.c
+++ b/usr/src/cmd/cmd-crypto/digest/digest.c
@@ -171,7 +171,7 @@ main(int argc, char **argv)
mac_cmd = B_FALSE;
else {
cryptoerror(LOG_STDERR, gettext(
- "command name must be either digest or mac\n"));
+ "command name must be either digest or mac\n"));
exit(EXIT_USAGE);
}
@@ -256,7 +256,7 @@ algorithm_list(boolean_t mac_cmd)
if (mac_cmd)
(void) printf(gettext("Algorithm Keysize: Min "
- "Max (bits)\n"
+ "Max (bits)\n"
"------------------------------------------\n"));
for (mech = 0; mech < MECH_ALIASES_COUNT; mech++) {
@@ -271,9 +271,9 @@ algorithm_list(boolean_t mac_cmd)
mech_aliases[mech].keysize_max != 0)
(void) printf(" %5lu %5lu\n",
(mech_aliases[mech].keysize_min *
- mech_aliases[mech].keysize_unit),
+ mech_aliases[mech].keysize_unit),
(mech_aliases[mech].keysize_max *
- mech_aliases[mech].keysize_unit));
+ mech_aliases[mech].keysize_unit));
else
(void) printf("\n");
@@ -337,8 +337,7 @@ generate_pkcs5_key(CK_SESSION_HANDLE hSession,
mechanism.pParameter = &params;
mechanism.ulParameterLen = sizeof (params);
- rv = C_GenerateKey(hSession, &mechanism, tmpl,
- attrs, hKey);
+ rv = C_GenerateKey(hSession, &mechanism, tmpl, attrs, hKey);
return (rv);
}
@@ -461,7 +460,7 @@ execute_cmd(char *algo_str, int filecount, char **filelist, boolean_t mac_cmd)
* Determine if algorithm/mechanism is valid
*/
for (mech_match = 0; mech_match < MECH_ALIASES_COUNT;
- mech_match++) {
+ mech_match++) {
if (strcmp(algo_str,
mech_aliases[mech_match].alias) == 0) {
mech_type = mech_aliases[mech_match].type;
@@ -570,12 +569,12 @@ execute_cmd(char *algo_str, int filecount, char **filelist, boolean_t mac_cmd)
if (info.ulMinKeySize && (info.ulMinKeySize <
mech_aliases[mek].keysize_min))
mech_aliases[mek].keysize_min =
- info.ulMinKeySize;
+ info.ulMinKeySize;
if (info.ulMaxKeySize && (info.ulMaxKeySize >
mech_aliases[mek].keysize_max))
mech_aliases[mek].keysize_max =
- info.ulMaxKeySize;
+ info.ulMaxKeySize;
mech_aliases[mek].available = B_TRUE;
}
@@ -595,7 +594,8 @@ execute_cmd(char *algo_str, int filecount, char **filelist, boolean_t mac_cmd)
*/
i = 0;
if (Kflag) {
- kmfrv = KMF_PK11TokenLookup(NULL, token_label, &token_slot_id);
+ kmfrv = kmf_pk11_token_lookup(NULL, token_label,
+ &token_slot_id);
if (kmfrv != KMF_OK) {
cryptoerror(LOG_STDERR,
gettext("no matching PKCS#11 token"));
@@ -652,7 +652,7 @@ execute_cmd(char *algo_str, int filecount, char **filelist, boolean_t mac_cmd)
/* Mechanism is supported. Go ahead & open a session */
rv = C_OpenSession(slotID, CKF_SERIAL_SESSION,
- NULL_PTR, NULL, &hSession);
+ NULL_PTR, NULL, &hSession);
if (rv != CKR_OK) {
cryptoerror(LOG_STDERR,
@@ -705,8 +705,7 @@ execute_cmd(char *algo_str, int filecount, char **filelist, boolean_t mac_cmd)
template[nattr].ulValueLen = keylen;
nattr++;
- rv = C_CreateObject(hSession, template,
- nattr, &key);
+ rv = C_CreateObject(hSession, template, nattr, &key);
} else if (Kflag) {
@@ -739,10 +738,8 @@ execute_cmd(char *algo_str, int filecount, char **filelist, boolean_t mac_cmd)
*/
(void) memset(salt, 0x0a, sizeof (salt));
rv = generate_pkcs5_key(hSession,
- salt, sizeof (salt),
- iterations, pkeydata,
- keytype, keylen, keysize,
- &key);
+ salt, sizeof (salt), iterations, pkeydata,
+ keytype, keylen, keysize, &key);
}
if (rv != CKR_OK) {
@@ -783,8 +780,8 @@ execute_cmd(char *algo_str, int filecount, char **filelist, boolean_t mac_cmd)
do {
if (filecount > 0 && filelist != NULL) {
filename = filelist[i];
- if ((fd = open(filename, O_RDONLY
- | O_NONBLOCK)) == -1) {
+ if ((fd = open(filename, O_RDONLY | O_NONBLOCK)) ==
+ -1) {
cryptoerror(LOG_STDERR, gettext(
"can not open input file %s\n"), filename);
exitcode = EXIT_USAGE;
@@ -799,16 +796,16 @@ execute_cmd(char *algo_str, int filecount, char **filelist, boolean_t mac_cmd)
*/
if (mac_cmd) {
rv = do_mac(hSession, &mech, fd, key, &resultbuf,
- &resultlen);
+ &resultlen);
} else {
rv = do_digest(hSession, &mech, fd, &resultbuf,
- &resultlen);
+ &resultlen);
}
if (rv != CKR_OK) {
cryptoerror(LOG_STDERR,
gettext("crypto operation failed for "
- "file %s: %s\n"),
+ "file %s: %s\n"),
filename ? filename : "STDIN",
pkcs11_strerror(rv));
exitcode = EXIT_FAILURE;
@@ -937,7 +934,7 @@ do_digest(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pmech,
/* There was a read error */
if (nread == -1) {
cryptoerror(LOG_STDERR, gettext(
- "error reading file: %s"), strerror(saved_errno));
+ "error reading file: %s"), strerror(saved_errno));
return (CKR_GENERAL_ERROR);
} else {
return (rv);
@@ -1003,7 +1000,7 @@ do_mac(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pmech,
/* There was a read error */
if (nread == -1) {
cryptoerror(LOG_STDERR, gettext("error reading file: %s"),
- strerror(saved_errno));
+ strerror(saved_errno));
return (CKR_GENERAL_ERROR);
} else {
return (rv);
@@ -1033,21 +1030,21 @@ getkey(char *filename, CK_BYTE_PTR *pkeydata)
/* read the key file into a buffer */
if ((fd = open(filename, O_RDONLY | O_NONBLOCK)) == -1) {
cryptoerror(LOG_STDERR, gettext(
- "can't open %s\n"), filename);
+ "can't open %s\n"), filename);
return (-1);
}
if (fstat(fd, &statbuf) == -1) {
cryptoerror(LOG_STDERR, gettext(
- "can't stat %s\n"), filename);
+ "can't stat %s\n"), filename);
(void) close(fd);
return (-1);
}
if (!S_ISREG(statbuf.st_mode)) {
cryptoerror(LOG_STDERR, gettext(
- "%s not a regular file\n"), filename);
+ "%s not a regular file\n"), filename);
(void) close(fd);
return (-1);
}
@@ -1066,7 +1063,7 @@ getkey(char *filename, CK_BYTE_PTR *pkeydata)
if (read(fd, keybuf, keylen) != keylen) {
cryptoerror(LOG_STDERR, gettext(
- "can't read %s\n"), filename);
+ "can't read %s\n"), filename);
(void) close(fd);
return (-1);
}
diff --git a/usr/src/cmd/cmd-crypto/kmfcfg/create.c b/usr/src/cmd/cmd-crypto/kmfcfg/create.c
index ceacf5f5d5..3b10424d13 100644
--- a/usr/src/cmd/cmd-crypto/kmfcfg/create.c
+++ b/usr/src/cmd/cmd-crypto/kmfcfg/create.c
@@ -18,7 +18,7 @@
*
* CDDL HEADER END
*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -50,30 +50,30 @@ kc_create(int argc, char *argv[])
(void) memset(&plc, 0, sizeof (KMF_POLICY_RECORD));
while ((opt = getopt_av(argc, argv,
- "i:(dbfile)"
- "p:(policy)"
- "d:(ignore-date)"
- "e:(ignore-unknown-eku)"
- "a:(ignore-trust-anchor)"
- "v:(validity-adjusttime)"
- "t:(ta-name)"
- "s:(ta-serial)"
- "o:(ocsp-responder)"
- "P:(ocsp-proxy)"
- "r:(ocsp-use-cert-responder)"
- "T:(ocsp-response-lifetime)"
- "R:(ocsp-ignore-response-sign)"
- "n:(ocsp-responder-cert-name)"
- "A:(ocsp-responder-cert-serial)"
- "c:(crl-basefilename)"
- "I:(crl-directory)"
- "g:(crl-get-crl-uri)"
- "X:(crl-proxy)"
- "S:(crl-ignore-crl-sign)"
- "D:(crl-ignore-crl-date)"
- "u:(keyusage)"
- "E:(ekunames)"
- "O:(ekuoids)")) != EOF) {
+ "i:(dbfile)"
+ "p:(policy)"
+ "d:(ignore-date)"
+ "e:(ignore-unknown-eku)"
+ "a:(ignore-trust-anchor)"
+ "v:(validity-adjusttime)"
+ "t:(ta-name)"
+ "s:(ta-serial)"
+ "o:(ocsp-responder)"
+ "P:(ocsp-proxy)"
+ "r:(ocsp-use-cert-responder)"
+ "T:(ocsp-response-lifetime)"
+ "R:(ocsp-ignore-response-sign)"
+ "n:(ocsp-responder-cert-name)"
+ "A:(ocsp-responder-cert-serial)"
+ "c:(crl-basefilename)"
+ "I:(crl-directory)"
+ "g:(crl-get-crl-uri)"
+ "X:(crl-proxy)"
+ "S:(crl-ignore-crl-sign)"
+ "D:(crl-ignore-crl-date)"
+ "u:(keyusage)"
+ "E:(ekunames)"
+ "O:(ekuoids)")) != EOF) {
switch (opt) {
case 'i':
filename = get_string(optarg_av, &rv);
@@ -142,14 +142,14 @@ kc_create(int argc, char *argv[])
} else {
KMF_X509_NAME taDN;
/* for syntax checking */
- if (KMF_DNParser(plc.ta_name,
+ if (kmf_dn_parser(plc.ta_name,
&taDN) != KMF_OK) {
(void) fprintf(stderr,
gettext("Error name "
"input.\n"));
rv = KC_ERR_USAGE;
} else {
- KMF_FreeDN(&taDN);
+ kmf_free_dn(&taDN);
}
}
break;
@@ -162,7 +162,7 @@ kc_create(int argc, char *argv[])
uchar_t *bytes = NULL;
size_t bytelen;
- ret = KMF_HexString2Bytes(
+ ret = kmf_hexstr_to_bytes(
(uchar_t *)plc.ta_serial,
&bytes, &bytelen);
if (ret != KMF_OK || bytes == NULL) {
@@ -250,7 +250,7 @@ kc_create(int argc, char *argv[])
} else {
KMF_X509_NAME respDN;
/* for syntax checking */
- if (KMF_DNParser(
+ if (kmf_dn_parser(
plc.VAL_OCSP_RESP_CERT_NAME,
&respDN) != KMF_OK) {
(void) fprintf(stderr,
@@ -258,7 +258,7 @@ kc_create(int argc, char *argv[])
"input.\n"));
rv = KC_ERR_USAGE;
} else {
- KMF_FreeDN(&respDN);
+ kmf_free_dn(&respDN);
ocsp_set_attr++;
}
}
@@ -273,7 +273,7 @@ kc_create(int argc, char *argv[])
uchar_t *bytes = NULL;
size_t bytelen;
- ret = KMF_HexString2Bytes((uchar_t *)
+ ret = kmf_hexstr_to_bytes((uchar_t *)
plc.VAL_OCSP_RESP_CERT_SERIAL,
&bytes, &bytelen);
if (ret != KMF_OK || bytes == NULL) {
@@ -343,7 +343,7 @@ kc_create(int argc, char *argv[])
break;
case 'D':
plc.VAL_CRL_IGNORE_DATE =
- get_boolean(optarg_av);
+ get_boolean(optarg_av);
if (plc.VAL_CRL_IGNORE_DATE == -1) {
(void) fprintf(stderr,
gettext("Error boolean input.\n"));
@@ -471,7 +471,7 @@ kc_create(int argc, char *argv[])
/*
* Does a sanity check on the new policy.
*/
- ret = KMF_VerifyPolicy(&plc);
+ ret = kmf_verify_policy(&plc);
if (ret != KMF_OK) {
print_sanity_error(ret);
rv = KC_ERR_ADD_POLICY;
@@ -481,7 +481,7 @@ kc_create(int argc, char *argv[])
/*
* Add to the DB.
*/
- ret = KMF_AddPolicyToDB(&plc, filename, B_FALSE);
+ ret = kmf_add_policy_to_db(&plc, filename, B_FALSE);
if (ret != KMF_OK) {
(void) fprintf(stderr,
gettext("Error adding policy to database: 0x%04x\n"), ret);
@@ -492,7 +492,7 @@ out:
if (filename != NULL)
free(filename);
- KMF_FreePolicyRecord(&plc);
+ kmf_free_policy_record(&plc);
return (rv);
}
diff --git a/usr/src/cmd/cmd-crypto/kmfcfg/delete.c b/usr/src/cmd/cmd-crypto/kmfcfg/delete.c
index 7e0a1c7d45..318a0df475 100644
--- a/usr/src/cmd/cmd-crypto/kmfcfg/delete.c
+++ b/usr/src/cmd/cmd-crypto/kmfcfg/delete.c
@@ -18,7 +18,7 @@
*
* CDDL HEADER END
*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -117,7 +117,7 @@ kc_delete(int argc, char *argv[])
goto out;
}
- kmfrv = KMF_DeletePolicyFromDB(policyname, filename);
+ kmfrv = kmf_delete_policy_from_db(policyname, filename);
if (kmfrv != KMF_OK)
rv = KC_ERR_DELETE_POLICY;
diff --git a/usr/src/cmd/cmd-crypto/kmfcfg/export.c b/usr/src/cmd/cmd-crypto/kmfcfg/export.c
index c1ddab153c..92cf4336fb 100644
--- a/usr/src/cmd/cmd-crypto/kmfcfg/export.c
+++ b/usr/src/cmd/cmd-crypto/kmfcfg/export.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -49,7 +49,7 @@ kc_export(int argc, char *argv[])
extern char *optarg_av;
while ((opt = getopt_av(argc, argv,
- "d:(dbfile)p:(policy)o:(outfile)")) != EOF) {
+ "d:(dbfile)p:(policy)o:(outfile)")) != EOF) {
switch (opt) {
case 'd':
filename = get_string(optarg_av, &rv);
@@ -133,13 +133,14 @@ kc_export(int argc, char *argv[])
KMF_RETURN ret;
found++;
- ret = KMF_VerifyPolicy(&pnode->plc);
+ ret = kmf_verify_policy(&pnode->plc);
if (ret != KMF_OK) {
print_sanity_error(ret);
rv = KC_ERR_VERIFY_POLICY;
break;
}
- rv = KMF_AddPolicyToDB(&pnode->plc, outfile, B_FALSE);
+ rv = kmf_add_policy_to_db(&pnode->plc, outfile,
+ B_FALSE);
}
pnode = pnode->next;
}
diff --git a/usr/src/cmd/cmd-crypto/kmfcfg/import.c b/usr/src/cmd/cmd-crypto/kmfcfg/import.c
index b55caac068..f47b50fd76 100644
--- a/usr/src/cmd/cmd-crypto/kmfcfg/import.c
+++ b/usr/src/cmd/cmd-crypto/kmfcfg/import.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -50,7 +50,7 @@ kc_import(int argc, char *argv[])
extern char *optarg_av;
while ((opt = getopt_av(argc, argv,
- "d:(dbfile)p:(policy)i:(infile)")) != EOF) {
+ "d:(dbfile)p:(policy)i:(infile)")) != EOF) {
switch (opt) {
case 'd':
filename = get_string(optarg_av, &rv);
@@ -135,21 +135,22 @@ kc_import(int argc, char *argv[])
KMF_RETURN ret;
found++;
- ret = KMF_VerifyPolicy(&pnode->plc);
+ ret = kmf_verify_policy(&pnode->plc);
if (ret != KMF_OK) {
print_sanity_error(ret);
rv = KC_ERR_VERIFY_POLICY;
break;
}
- rv = KMF_AddPolicyToDB(&pnode->plc, filename, B_FALSE);
+ rv = kmf_add_policy_to_db(&pnode->plc, filename,
+ B_FALSE);
}
pnode = pnode->next;
}
if (!found) {
(void) fprintf(stderr,
- gettext("Could not find policy \"%s\" in %s\n"),
- policyname, infile);
+ gettext("Could not find policy \"%s\" in %s\n"),
+ policyname, infile);
rv = KC_ERR_FIND_POLICY;
}
diff --git a/usr/src/cmd/cmd-crypto/kmfcfg/list.c b/usr/src/cmd/cmd-crypto/kmfcfg/list.c
index e68e2b8643..b05400a2fd 100644
--- a/usr/src/cmd/cmd-crypto/kmfcfg/list.c
+++ b/usr/src/cmd/cmd-crypto/kmfcfg/list.c
@@ -18,7 +18,7 @@
*
* CDDL HEADER END
*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -44,32 +44,32 @@ show_policy(KMF_POLICY_RECORD *plc)
(void) printf("Name: %s\n", plc->name);
(void) printf(gettext("Ignore Date: %s\n"),
- plc->ignore_date ? gettext("true") : gettext("false"));
+ plc->ignore_date ? gettext("true") : gettext("false"));
(void) printf(gettext("Ignore Unknown EKUs: %s\n"),
- plc->ignore_unknown_ekus ? gettext("true") : gettext("false"));
+ plc->ignore_unknown_ekus ? gettext("true") : gettext("false"));
(void) printf(gettext("Ignore TA: %s\n"),
- plc->ignore_trust_anchor ? gettext("true") : gettext("false"));
+ plc->ignore_trust_anchor ? gettext("true") : gettext("false"));
(void) printf(gettext("Validity Adjusted Time: %s\n"),
- plc->validity_adjusttime ?
- plc->validity_adjusttime : "<null>");
+ plc->validity_adjusttime ? plc->validity_adjusttime : "<null>");
if (plc->ta_name == NULL && plc->ta_serial == NULL) {
(void) printf(gettext("Trust Anchor Certificate: <null>\n"));
} else {
(void) printf(gettext("Trust Anchor Certificate:\n"));
(void) printf(gettext("\tName: %s\n"),
- plc->ta_name ? plc->ta_name : "<null>");
+ plc->ta_name ? plc->ta_name : "<null>");
(void) printf(gettext("\tSerial Number: %s\n"),
- plc->ta_serial ? plc->ta_serial : "<null>");
+ plc->ta_serial ? plc->ta_serial : "<null>");
}
if (plc->ku_bits != 0) {
(void) printf(gettext("Key Usage Bits: "));
for (i = KULOWBIT; i <= KUHIGHBIT; i++) {
- char *s = ku2str((plc->ku_bits & (1<<i)));
+ char *s = kmf_ku_to_string(
+ (plc->ku_bits & (1<<i)));
if (s != NULL) {
(void) printf("%s ", s);
}
@@ -82,10 +82,11 @@ show_policy(KMF_POLICY_RECORD *plc)
if (plc->eku_set.eku_count > 0) {
(void) printf(gettext("Extended Key Usage Values:\n"));
for (i = 0; i < plc->eku_set.eku_count; i++) {
- char *s = KMF_OID2EKUString(&plc->eku_set.ekulist[i]);
+ char *s = kmf_oid_to_eku_string(
+ &plc->eku_set.ekulist[i]);
(void) printf("\t%s\t(%s)\n",
- KMF_OID2String(&plc->eku_set.ekulist[i]),
- s ? s : "unknown");
+ kmf_oid_to_string(&plc->eku_set.ekulist[i]),
+ s ? s : "unknown");
}
} else {
(void) printf(gettext("Extended Key Usage Values: <null>\n"));
@@ -142,20 +143,20 @@ show_policy(KMF_POLICY_RECORD *plc)
plc->validation_info.crl_info.directory : "<null>");
(void) printf(gettext("\tDownload and cache CRL: %s\n"),
- plc->validation_info.crl_info.get_crl_uri ?
- gettext("true") : gettext("false"));
+ plc->validation_info.crl_info.get_crl_uri ?
+ gettext("true") : gettext("false"));
(void) printf(gettext("\tProxy: %s\n"),
plc->validation_info.crl_info.proxy ?
plc->validation_info.crl_info.proxy : "<null>");
(void) printf(gettext("\tIgnore CRL signature: %s\n"),
- plc->validation_info.crl_info.ignore_crl_sign ?
- gettext("true") : gettext("false"));
+ plc->validation_info.crl_info.ignore_crl_sign ?
+ gettext("true") : gettext("false"));
(void) printf(gettext("\tIgnore CRL validity date: %s\n"),
- plc->validation_info.crl_info.ignore_crl_date ?
- gettext("true") : gettext("false"));
+ plc->validation_info.crl_info.ignore_crl_date ?
+ gettext("true") : gettext("false"));
}
(void) printf("\n");
@@ -234,11 +235,11 @@ kc_list(int argc, char *argv[])
pnode = plclist;
while (pnode != NULL) {
if (policyname == NULL ||
- strcmp(policyname, pnode->plc.name) == 0) {
+ strcmp(policyname, pnode->plc.name) == 0) {
KMF_POLICY_RECORD *plc = &pnode->plc;
found++;
- rv = KMF_VerifyPolicy(plc);
+ rv = kmf_verify_policy(plc);
if (rv != KMF_OK) {
(void) fprintf(stderr, gettext(
"Policy Name: '%s' is invalid\n"),
diff --git a/usr/src/cmd/cmd-crypto/kmfcfg/modify.c b/usr/src/cmd/cmd-crypto/kmfcfg/modify.c
index 413bda3be7..de9f7539ee 100644
--- a/usr/src/cmd/cmd-crypto/kmfcfg/modify.c
+++ b/usr/src/cmd/cmd-crypto/kmfcfg/modify.c
@@ -18,7 +18,7 @@
*
* CDDL HEADER END
*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -82,34 +82,34 @@ kc_modify(int argc, char *argv[])
(void) memset(&oplc, 0, sizeof (KMF_POLICY_RECORD));
while ((opt = getopt_av(argc, argv,
- "i:(dbfile)"
- "p:(policy)"
- "d:(ignore-date)"
- "e:(ignore-unknown-eku)"
- "a:(ignore-trust-anchor)"
- "v:(validity-adjusttime)"
- "t:(ta-name)"
- "s:(ta-serial)"
- "o:(ocsp-responder)"
- "P:(ocsp-proxy)"
- "r:(ocsp-use-cert-responder)"
- "T:(ocsp-response-lifetime)"
- "R:(ocsp-ignore-response-sign)"
- "n:(ocsp-responder-cert-name)"
- "A:(ocsp-responder-cert-serial)"
- "y:(ocsp-none)"
- "c:(crl-basefilename)"
- "I:(crl-directory)"
- "g:(crl-get-crl-uri)"
- "X:(crl-proxy)"
- "S:(crl-ignore-crl-sign)"
- "D:(crl-ignore-crl-date)"
- "z:(crl-none)"
- "u:(keyusage)"
- "Y:(keyusage-none)"
- "E:(ekunames)"
- "O:(ekuoids)"
- "Z:(eku-none)")) != EOF) {
+ "i:(dbfile)"
+ "p:(policy)"
+ "d:(ignore-date)"
+ "e:(ignore-unknown-eku)"
+ "a:(ignore-trust-anchor)"
+ "v:(validity-adjusttime)"
+ "t:(ta-name)"
+ "s:(ta-serial)"
+ "o:(ocsp-responder)"
+ "P:(ocsp-proxy)"
+ "r:(ocsp-use-cert-responder)"
+ "T:(ocsp-response-lifetime)"
+ "R:(ocsp-ignore-response-sign)"
+ "n:(ocsp-responder-cert-name)"
+ "A:(ocsp-responder-cert-serial)"
+ "y:(ocsp-none)"
+ "c:(crl-basefilename)"
+ "I:(crl-directory)"
+ "g:(crl-get-crl-uri)"
+ "X:(crl-proxy)"
+ "S:(crl-ignore-crl-sign)"
+ "D:(crl-ignore-crl-date)"
+ "z:(crl-none)"
+ "u:(keyusage)"
+ "Y:(keyusage-none)"
+ "E:(ekunames)"
+ "O:(ekuoids)"
+ "Z:(eku-none)")) != EOF) {
switch (opt) {
case 'i':
filename = get_string(optarg_av, &rv);
@@ -186,14 +186,14 @@ kc_modify(int argc, char *argv[])
} else {
KMF_X509_NAME taDN;
/* for syntax checking */
- if (KMF_DNParser(plc.ta_name,
+ if (kmf_dn_parser(plc.ta_name,
&taDN) != KMF_OK) {
(void) fprintf(stderr,
gettext("Error name "
"input.\n"));
rv = KC_ERR_USAGE;
} else {
- KMF_FreeDN(&taDN);
+ kmf_free_dn(&taDN);
flags |= KC_TA_NAME;
}
}
@@ -207,7 +207,7 @@ kc_modify(int argc, char *argv[])
uchar_t *bytes = NULL;
size_t bytelen;
- ret = KMF_HexString2Bytes(
+ ret = kmf_hexstr_to_bytes(
(uchar_t *)plc.ta_serial,
&bytes, &bytelen);
if (ret != KMF_OK || bytes == NULL) {
@@ -227,7 +227,7 @@ kc_modify(int argc, char *argv[])
break;
case 'o':
plc.VAL_OCSP_RESPONDER_URI =
- get_string(optarg_av, &rv);
+ get_string(optarg_av, &rv);
if (plc.VAL_OCSP_RESPONDER_URI == NULL) {
(void) fprintf(stderr,
gettext("Error responder "
@@ -302,7 +302,7 @@ kc_modify(int argc, char *argv[])
} else {
KMF_X509_NAME respDN;
/* for syntax checking */
- if (KMF_DNParser(
+ if (kmf_dn_parser(
plc.VAL_OCSP_RESP_CERT_NAME,
&respDN) != KMF_OK) {
(void) fprintf(stderr,
@@ -310,7 +310,7 @@ kc_modify(int argc, char *argv[])
"input.\n"));
rv = KC_ERR_USAGE;
} else {
- KMF_FreeDN(&respDN);
+ kmf_free_dn(&respDN);
flags |= KC_OCSP_RESP_CERT_NAME;
ocsp_set_attr++;
}
@@ -326,7 +326,7 @@ kc_modify(int argc, char *argv[])
uchar_t *bytes = NULL;
size_t bytelen;
- ret = KMF_HexString2Bytes((uchar_t *)
+ ret = kmf_hexstr_to_bytes((uchar_t *)
plc.VAL_OCSP_RESP_CERT_SERIAL,
&bytes, &bytelen);
if (ret != KMF_OK || bytes == NULL) {
@@ -412,7 +412,7 @@ kc_modify(int argc, char *argv[])
break;
case 'D':
plc.VAL_CRL_IGNORE_DATE =
- get_boolean(optarg_av);
+ get_boolean(optarg_av);
if (plc.VAL_CRL_IGNORE_DATE == -1) {
(void) fprintf(stderr,
gettext("Error boolean input.\n"));
@@ -536,7 +536,7 @@ kc_modify(int argc, char *argv[])
}
/* Try to load the named policy from the DB */
- ret = KMF_GetPolicy(filename, plc.name, &oplc);
+ ret = kmf_get_policy(filename, plc.name, &oplc);
if (ret != KMF_OK) {
(void) fprintf(stderr,
gettext("Error loading policy \"%s\" from %s\n"), filename,
@@ -558,7 +558,7 @@ kc_modify(int argc, char *argv[])
if (oplc.validity_adjusttime)
free(oplc.validity_adjusttime);
oplc.validity_adjusttime =
- plc.validity_adjusttime;
+ plc.validity_adjusttime;
}
if (flags & KC_TA_NAME) {
@@ -629,7 +629,7 @@ kc_modify(int argc, char *argv[])
if (oplc.VAL_OCSP_RESPONDER_URI)
free(oplc.VAL_OCSP_RESPONDER_URI);
oplc.VAL_OCSP_RESPONDER_URI =
- plc.VAL_OCSP_RESPONDER_URI;
+ plc.VAL_OCSP_RESPONDER_URI;
}
if (flags & KC_OCSP_PROXY) {
@@ -640,31 +640,31 @@ kc_modify(int argc, char *argv[])
if (flags & KC_OCSP_URI_FROM_CERT)
oplc.VAL_OCSP_URI_FROM_CERT =
- plc.VAL_OCSP_URI_FROM_CERT;
+ plc.VAL_OCSP_URI_FROM_CERT;
if (flags & KC_OCSP_RESP_LIFETIME) {
if (oplc.VAL_OCSP_RESP_LIFETIME)
free(oplc.VAL_OCSP_RESP_LIFETIME);
oplc.VAL_OCSP_RESP_LIFETIME =
- plc.VAL_OCSP_RESP_LIFETIME;
+ plc.VAL_OCSP_RESP_LIFETIME;
}
if (flags & KC_OCSP_IGNORE_RESP_SIGN)
oplc.VAL_OCSP_IGNORE_RESP_SIGN =
- plc.VAL_OCSP_IGNORE_RESP_SIGN;
+ plc.VAL_OCSP_IGNORE_RESP_SIGN;
if (flags & KC_OCSP_RESP_CERT_NAME) {
if (oplc.VAL_OCSP_RESP_CERT_NAME)
free(oplc.VAL_OCSP_RESP_CERT_NAME);
oplc.VAL_OCSP_RESP_CERT_NAME =
- plc.VAL_OCSP_RESP_CERT_NAME;
+ plc.VAL_OCSP_RESP_CERT_NAME;
}
if (flags & KC_OCSP_RESP_CERT_SERIAL) {
if (oplc.VAL_OCSP_RESP_CERT_SERIAL)
free(oplc.VAL_OCSP_RESP_CERT_SERIAL);
oplc.VAL_OCSP_RESP_CERT_SERIAL =
- plc.VAL_OCSP_RESP_CERT_SERIAL;
+ plc.VAL_OCSP_RESP_CERT_SERIAL;
}
if (oplc.VAL_OCSP_RESP_CERT_NAME != NULL &&
@@ -792,7 +792,7 @@ kc_modify(int argc, char *argv[])
/* Release current EKU list (if any) */
if (oplc.eku_set.eku_count > 0) {
- KMF_FreeEKUPolicy(&oplc.eku_set);
+ kmf_free_eku_policy(&oplc.eku_set);
oplc.eku_set.eku_count = 0;
oplc.eku_set.ekulist = NULL;
}
@@ -804,13 +804,13 @@ kc_modify(int argc, char *argv[])
*/
if (flags & KC_EKUS) {
/* Release current EKU list (if any) */
- KMF_FreeEKUPolicy(&oplc.eku_set);
+ kmf_free_eku_policy(&oplc.eku_set);
oplc.eku_set = plc.eku_set;
}
}
/* Do a sanity check on the modified policy */
- ret = KMF_VerifyPolicy(&oplc);
+ ret = kmf_verify_policy(&oplc);
if (ret != KMF_OK) {
print_sanity_error(ret);
rv = KC_ERR_VERIFY_POLICY;
@@ -818,7 +818,7 @@ kc_modify(int argc, char *argv[])
}
/* The modify operation is a delete followed by an add */
- ret = KMF_DeletePolicyFromDB(oplc.name, filename);
+ ret = kmf_delete_policy_from_db(oplc.name, filename);
if (ret != KMF_OK) {
rv = KC_ERR_DELETE_POLICY;
goto out;
@@ -827,7 +827,7 @@ kc_modify(int argc, char *argv[])
/*
* Now add the modified policy back to the DB.
*/
- ret = KMF_AddPolicyToDB(&oplc, filename, B_FALSE);
+ ret = kmf_add_policy_to_db(&oplc, filename, B_FALSE);
if (ret != KMF_OK) {
(void) fprintf(stderr,
gettext("Error adding policy to database: 0x%04x\n"), ret);
@@ -839,7 +839,7 @@ out:
if (filename != NULL)
free(filename);
- KMF_FreePolicyRecord(&oplc);
+ kmf_free_policy_record(&oplc);
return (rv);
}
diff --git a/usr/src/cmd/cmd-crypto/kmfcfg/util.c b/usr/src/cmd/cmd-crypto/kmfcfg/util.c
index f3bdc633f2..3fce0c839d 100644
--- a/usr/src/cmd/cmd-crypto/kmfcfg/util.c
+++ b/usr/src/cmd/cmd-crypto/kmfcfg/util.c
@@ -18,7 +18,7 @@
*
* CDDL HEADER END
*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -61,7 +61,7 @@ free_policy_list(POLICY_LIST *plist)
while (n != NULL) {
old = n;
- KMF_FreePolicyRecord(&n->plc);
+ kmf_free_policy_record(&n->plc);
n = n->next;
free(old);
}
@@ -104,10 +104,10 @@ load_policies(char *file, POLICY_LIST **policy_list)
* Search for the policy that matches the given name.
*/
if (!xmlStrcmp((const xmlChar *)node->name,
- (const xmlChar *)KMF_POLICY_ELEMENT)) {
+ (const xmlChar *)KMF_POLICY_ELEMENT)) {
/* Check the name attribute */
c = (char *)xmlGetProp(node,
- (const xmlChar *)KMF_POLICY_NAME_ATTR);
+ (const xmlChar *)KMF_POLICY_NAME_ATTR);
/* If a match, parse the rest of the data */
if (c != NULL) {
@@ -115,9 +115,9 @@ load_policies(char *file, POLICY_LIST **policy_list)
newitem = malloc(sizeof (POLICY_LIST));
if (newitem != NULL) {
(void) memset(newitem, 0,
- sizeof (POLICY_LIST));
+ sizeof (POLICY_LIST));
kmfrv = parsePolicyElement(node,
- &newitem->plc);
+ &newitem->plc);
} else {
kmfrv = KMF_ERR_MEMORY;
goto end;
@@ -167,7 +167,7 @@ parseKUlist(char *kustring)
p = strtok(kustring, ",");
while (p != NULL) {
- cur_bit = KMF_StringToKeyUsage(p);
+ cur_bit = kmf_string_to_ku(p);
if (cur_bit == 0) {
kubits = 0;
break;
@@ -185,8 +185,7 @@ addToEKUList(KMF_EKU_POLICY *ekus, KMF_OID *newoid)
if (newoid != NULL && ekus != NULL) {
ekus->eku_count++;
ekus->ekulist = realloc(
- ekus->ekulist,
- ekus->eku_count * sizeof (KMF_OID));
+ ekus->ekulist, ekus->eku_count * sizeof (KMF_OID));
if (ekus->ekulist != NULL) {
ekus->ekulist[ekus->eku_count-1] = *newoid;
}
@@ -211,7 +210,7 @@ parseEKUNames(char *ekulist, KMF_POLICY_RECORD *plc)
/* If no tokens found, then maybe its just a single EKU value */
if (p == NULL) {
- newoid = kmf_ekuname2oid(ekulist);
+ newoid = kmf_ekuname_to_oid(ekulist);
if (newoid != NULL) {
addToEKUList(ekus, newoid);
free(newoid);
@@ -221,7 +220,7 @@ parseEKUNames(char *ekulist, KMF_POLICY_RECORD *plc)
}
while (p != NULL) {
- newoid = kmf_ekuname2oid(p);
+ newoid = kmf_ekuname_to_oid(p);
if (newoid != NULL) {
addToEKUList(ekus, newoid);
free(newoid);
@@ -233,7 +232,7 @@ parseEKUNames(char *ekulist, KMF_POLICY_RECORD *plc)
}
if (rv != KC_OK)
- KMF_FreeEKUPolicy(ekus);
+ kmf_free_eku_policy(ekus);
return (rv);
}
@@ -243,7 +242,7 @@ parseEKUOIDs(char *ekulist, KMF_POLICY_RECORD *plc)
{
int rv = KC_OK;
char *p;
- KMF_OID *newoid;
+ KMF_OID newoid = {NULL, 0};
KMF_EKU_POLICY *ekus = &plc->eku_set;
if (ekulist == NULL || !strlen(ekulist))
@@ -254,20 +253,16 @@ parseEKUOIDs(char *ekulist, KMF_POLICY_RECORD *plc)
*/
p = strtok(ekulist, ",");
if (p == NULL) {
- newoid = kmf_string2oid(ekulist);
- if (newoid != NULL) {
- addToEKUList(ekus, newoid);
- free(newoid);
+ if (kmf_string_to_oid(ekulist, &newoid) == KMF_OK) {
+ addToEKUList(ekus, &newoid);
} else {
rv = KC_ERR_USAGE;
}
}
while (p != NULL && rv == 0) {
- newoid = kmf_string2oid(p);
- if (newoid != NULL) {
- addToEKUList(ekus, newoid);
- free(newoid);
+ if (kmf_string_to_oid(p, &newoid) == KMF_OK) {
+ addToEKUList(ekus, &newoid);
} else {
rv = KC_ERR_USAGE;
break;
@@ -276,7 +271,7 @@ parseEKUOIDs(char *ekulist, KMF_POLICY_RECORD *plc)
}
if (rv != KC_OK)
- KMF_FreeEKUPolicy(ekus);
+ kmf_free_eku_policy(ekus);
return (rv);
}
@@ -438,7 +433,7 @@ getopt_av(int argc, char * const *argv, const char *optstring)
/* First time or when optstring changes from previous one */
if (_save_optstr != optstring) {
if (opts_av != NULL)
- free(opts_av);
+ free(opts_av);
opts_av = NULL;
_save_optstr = optstring;
_save_numopts = populate_opts((char *)optstring);
diff --git a/usr/src/cmd/cmd-crypto/pktool/common.c b/usr/src/cmd/cmd-crypto/pktool/common.c
index e4f6feb404..b80e320606 100644
--- a/usr/src/cmd/cmd-crypto/pktool/common.c
+++ b/usr/src/cmd/cmd-crypto/pktool/common.c
@@ -253,7 +253,7 @@ yesno(char *prompt, char *invalid, boolean_t dflt)
/* Indicate invalid input, and try again. */
if (invalid != NULL)
- (void) printf("%s", invalid);
+ (void) printf("%s", invalid);
}
return (dflt);
}
@@ -401,7 +401,7 @@ getopt_av(int argc, char * const *argv, const char *optstring)
/* First time or when optstring changes from previous one */
if (_save_optstr != optstring) {
if (opts_av != NULL)
- free(opts_av);
+ free(opts_av);
opts_av = NULL;
_save_optstr = optstring;
_save_numopts = populate_opts((char *)optstring);
@@ -521,10 +521,10 @@ Str2Lifetime(char *ltimestr, uint32_t *ltime)
!strcasecmp(timetok, "days")) {
*ltime = num * SECSPERDAY;
} else if (!strcasecmp(timetok, "hour") ||
- !strcasecmp(timetok, "hours")) {
+ !strcasecmp(timetok, "hours")) {
*ltime = num * SECSPERHOUR;
} else if (!strcasecmp(timetok, "year") ||
- !strcasecmp(timetok, "years")) {
+ !strcasecmp(timetok, "years")) {
*ltime = num * SECSPERDAY * DAYSPERNYEAR;
} else {
*ltime = 0;
@@ -560,8 +560,7 @@ OT2Int(char *objclass)
if (!strcasecmp(objclass, "public")) {
if (retval)
return (-1);
- return (retval | PK_PUBLIC_OBJ | PK_CERT_OBJ |
- PK_PUBKEY_OBJ);
+ return (retval | PK_PUBLIC_OBJ | PK_CERT_OBJ | PK_PUBKEY_OBJ);
} else if (!strcasecmp(objclass, "private")) {
if (retval)
return (-1);
@@ -604,6 +603,8 @@ Str2Format(char *formstr)
return (KMF_FORMAT_PEM);
if (!strcasecmp(formstr, "pkcs12"))
return (KMF_FORMAT_PKCS12);
+ if (!strcasecmp(formstr, "raw"))
+ return (KMF_FORMAT_RAWKEY);
return (KMF_FORMAT_UNDEF);
}
@@ -613,18 +614,32 @@ KMF_RETURN
select_token(void *kmfhandle, char *token,
int readonly)
{
+ KMF_ATTRIBUTE attlist[10];
+ int i = 0;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_PK11TOKEN;
KMF_RETURN rv = KMF_OK;
- KMF_CONFIG_PARAMS config;
if (token == NULL)
return (KMF_ERR_BAD_PARAMETER);
- (void) memset(&config, 0, sizeof (config));
- config.kstype = KMF_KEYSTORE_PK11TOKEN;
- config.pkcs11config.label = token;
- config.pkcs11config.readonly = readonly;
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype,
+ sizeof (kstype));
+ i++;
- rv = KMF_ConfigureKeystore(kmfhandle, &config);
+ if (token) {
+ kmf_set_attr_at_index(attlist, i,
+ KMF_TOKEN_LABEL_ATTR, token,
+ strlen(token));
+ i++;
+ }
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_READONLY_ATTR, &readonly,
+ sizeof (readonly));
+ i++;
+
+ rv = kmf_configure_keystore(kmfhandle, i, attlist);
if (rv == KMF_ERR_TOKEN_SELECTED)
rv = KMF_OK;
return (rv);
@@ -634,17 +649,37 @@ select_token(void *kmfhandle, char *token,
KMF_RETURN
configure_nss(void *kmfhandle, char *dir, char *prefix)
{
+
+ KMF_ATTRIBUTE attlist[10];
+ int i = 0;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS;
KMF_RETURN rv = KMF_OK;
- KMF_CONFIG_PARAMS config;
- (void) memset(&config, 0, sizeof (config));
- config.kstype = KMF_KEYSTORE_NSS;
- config.nssconfig.configdir = dir;
- config.nssconfig.certPrefix = prefix;
- config.nssconfig.keyPrefix = prefix;
- config.nssconfig.secModName = NULL;
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype,
+ sizeof (kstype));
+ i++;
+
+ if (dir) {
+ kmf_set_attr_at_index(attlist, i,
+ KMF_DIRPATH_ATTR, dir,
+ strlen(dir));
+ i++;
+ }
+
+ if (prefix) {
+ kmf_set_attr_at_index(attlist, i,
+ KMF_CERTPREFIX_ATTR, prefix,
+ strlen(prefix));
+ i++;
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYPREFIX_ATTR, prefix,
+ strlen(prefix));
+ i++;
+ }
- rv = KMF_ConfigureKeystore(kmfhandle, &config);
+ rv = kmf_configure_keystore(kmfhandle, i, attlist);
if (rv == KMF_KEYSTORE_ALREADY_INITIALIZED)
rv = KMF_OK;
@@ -662,12 +697,11 @@ get_pk12_password(KMF_CREDENTIAL *cred)
* Get the password to use for the PK12 encryption.
*/
(void) strlcpy(prompt,
- gettext("Enter password to use for "
- "accessing the PKCS12 file: "),
- sizeof (prompt));
+ gettext("Enter password to use for "
+ "accessing the PKCS12 file: "), sizeof (prompt));
if (get_pin(prompt, NULL, (uchar_t **)&cred->cred,
- (ulong_t *)&cred->credlen) != CKR_OK) {
+ (ulong_t *)&cred->credlen) != CKR_OK) {
cred->cred = NULL;
cred->credlen = 0;
}
@@ -862,7 +896,7 @@ verify_keyusage(char *kustr, uint16_t *kubits, int *critical)
k = strtok(kustr, ",");
while (k != NULL) {
- kuval = KMF_StringToKeyUsage(k);
+ kuval = kmf_string_to_ku(k);
if (kuval == 0) {
*kubits = 0;
return (KMF_ERR_BAD_PARAMETER);
@@ -938,11 +972,10 @@ get_token_password(KMF_KEYSTORE_TYPE kstype,
* Login to the token first.
*/
(void) snprintf(prompt, sizeof (prompt),
- gettext(DEFAULT_TOKEN_PROMPT),
- token_spec);
+ gettext(DEFAULT_TOKEN_PROMPT), token_spec);
if (get_pin(prompt, NULL, (uchar_t **)&cred->cred,
- (ulong_t *)&cred->credlen) != CKR_OK) {
+ (ulong_t *)&cred->credlen) != CKR_OK) {
cred->cred = NULL;
cred->credlen = 0;
}
@@ -983,22 +1016,20 @@ display_error(void *handle, KMF_RETURN errcode, char *prefix)
char *plugin_errmsg = NULL;
char *kmf_errmsg = NULL;
- rv1 = KMF_GetPluginErrorString(handle, &plugin_errmsg);
- rv2 = KMF_GetKMFErrorString(errcode, &kmf_errmsg);
+ rv1 = kmf_get_plugin_error_str(handle, &plugin_errmsg);
+ rv2 = kmf_get_kmf_error_str(errcode, &kmf_errmsg);
cryptoerror(LOG_STDERR, "%s:", prefix);
if (rv1 == KMF_OK && plugin_errmsg) {
- cryptoerror(LOG_STDERR,
- gettext("keystore error: %s"),
- plugin_errmsg);
- KMF_FreeString(plugin_errmsg);
+ cryptoerror(LOG_STDERR, gettext("keystore error: %s"),
+ plugin_errmsg);
+ kmf_free_str(plugin_errmsg);
}
if (rv2 == KMF_OK && kmf_errmsg) {
- cryptoerror(LOG_STDERR,
- gettext("libkmf error: %s"),
- kmf_errmsg);
- KMF_FreeString(kmf_errmsg);
+ cryptoerror(LOG_STDERR, gettext("libkmf error: %s"),
+ kmf_errmsg);
+ kmf_free_str(kmf_errmsg);
}
if (rv1 != KMF_OK && rv2 != KMF_OK)
diff --git a/usr/src/cmd/cmd-crypto/pktool/delete.c b/usr/src/cmd/cmd-crypto/pktool/delete.c
index f2dcfbd8d2..b1a1bcb96b 100644
--- a/usr/src/cmd/cmd-crypto/pktool/delete.c
+++ b/usr/src/cmd/cmd-crypto/pktool/delete.c
@@ -39,71 +39,143 @@
#include <kmfapi.h>
static KMF_RETURN
-pk_destroy_keys(void *handle, KMF_KEY_HANDLE *keys,
- KMF_FINDKEY_PARAMS *fkparams, uint32_t numkeys)
+pk_destroy_keys(void *handle, KMF_ATTRIBUTE *attrlist, int numattr)
{
int i;
KMF_RETURN rv = KMF_OK;
- KMF_DELETEKEY_PARAMS dkparams;
+ uint32_t *numkeys;
+ KMF_KEY_HANDLE *keys = NULL;
+ int del_num = 0;
+ KMF_ATTRIBUTE delete_attlist[16];
+ KMF_KEYSTORE_TYPE kstype;
+ uint32_t len;
+ boolean_t destroy = B_TRUE;
+ KMF_CREDENTIAL cred;
+ char *slotlabel = NULL;
+
+ len = sizeof (kstype);
+ rv = kmf_get_attr(KMF_KEYSTORE_TYPE_ATTR, attrlist, numattr,
+ &kstype, &len);
+ if (rv != KMF_OK)
+ return (rv);
+
+ kmf_set_attr_at_index(delete_attlist, del_num,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ del_num++;
- (void) memset(&dkparams, 0, sizeof (dkparams));
- dkparams.kstype = fkparams->kstype;
+ /* "destroy" is optional. Default is TRUE */
+ (void) kmf_get_attr(KMF_DESTROY_BOOL_ATTR, attrlist, numattr,
+ (void *)&destroy, NULL);
- switch (fkparams->kstype) {
+ kmf_set_attr_at_index(delete_attlist, del_num,
+ KMF_DESTROY_BOOL_ATTR, &destroy, sizeof (boolean_t));
+ del_num++;
+
+ switch (kstype) {
case KMF_KEYSTORE_NSS:
- dkparams.nssparms = fkparams->nssparms;
- dkparams.cred = fkparams->cred;
+ rv = kmf_get_attr(KMF_CREDENTIAL_ATTR, attrlist, numattr,
+ (void *)&cred, NULL);
+ if (rv == KMF_OK) {
+ if (cred.credlen > 0) {
+ kmf_set_attr_at_index(delete_attlist, del_num,
+ KMF_CREDENTIAL_ATTR, &cred,
+ sizeof (KMF_CREDENTIAL));
+ del_num++;
+ }
+ }
+
+ slotlabel = kmf_get_attr_ptr(KMF_TOKEN_LABEL_ATTR, attrlist,
+ numattr);
+ if (slotlabel != NULL) {
+ kmf_set_attr_at_index(delete_attlist, del_num,
+ KMF_TOKEN_LABEL_ATTR, slotlabel,
+ strlen(slotlabel));
+ del_num++;
+ }
break;
case KMF_KEYSTORE_OPENSSL:
break;
case KMF_KEYSTORE_PK11TOKEN:
- dkparams.cred = fkparams->cred;
+ rv = kmf_get_attr(KMF_CREDENTIAL_ATTR, attrlist, numattr,
+ (void *)&cred, NULL);
+ if (rv == KMF_OK) {
+ if (cred.credlen > 0) {
+ kmf_set_attr_at_index(delete_attlist, del_num,
+ KMF_CREDENTIAL_ATTR, &cred,
+ sizeof (KMF_CREDENTIAL));
+ del_num++;
+ }
+ }
break;
default:
return (PK_ERR_USAGE);
}
- for (i = 0; rv == KMF_OK && i < numkeys; i++) {
- rv = KMF_DeleteKeyFromKeystore(handle, &dkparams, &keys[i]);
+ numkeys = kmf_get_attr_ptr(KMF_COUNT_ATTR, attrlist, numattr);
+ if (numkeys == NULL)
+ return (PK_ERR_USAGE);
+
+ keys = kmf_get_attr_ptr(KMF_KEY_HANDLE_ATTR, attrlist, numattr);
+ if (keys == NULL)
+ return (PK_ERR_USAGE);
+
+ for (i = 0; rv == KMF_OK && i < *numkeys; i++) {
+ int num = del_num;
+
+ kmf_set_attr_at_index(delete_attlist, num,
+ KMF_KEY_HANDLE_ATTR, &keys[i], sizeof (KMF_KEY_HANDLE));
+ num++;
+
+ rv = kmf_delete_key_from_keystore(handle, num, delete_attlist);
}
return (rv);
}
static KMF_RETURN
-pk_delete_keys(KMF_HANDLE_T kmfhandle, KMF_FINDKEY_PARAMS *parms, char *desc,
- int *keysdeleted)
+pk_delete_keys(KMF_HANDLE_T kmfhandle, KMF_ATTRIBUTE *attlist, int numattr,
+ char *desc, int *keysdeleted)
{
KMF_RETURN rv = KMF_OK;
uint32_t numkeys = 0;
+ int num = numattr;
*keysdeleted = 0;
numkeys = 0;
- rv = KMF_FindKey(kmfhandle, parms, NULL, &numkeys);
+
+ kmf_set_attr_at_index(attlist, num,
+ KMF_COUNT_ATTR, &numkeys, sizeof (uint32_t));
+ num++;
+
+ rv = kmf_find_key(kmfhandle, num, attlist);
+
if (rv == KMF_OK && numkeys > 0) {
KMF_KEY_HANDLE *keys = NULL;
char prompt[1024];
(void) snprintf(prompt, sizeof (prompt),
- gettext("%d %s key(s) found, do you want "
- "to delete them (y/N) ?"), numkeys,
- (desc != NULL ? desc : ""));
+ gettext("%d %s key(s) found, do you want "
+ "to delete them (y/N) ?"), numkeys,
+ (desc != NULL ? desc : ""));
if (!yesno(prompt,
- gettext("Respond with yes or no.\n"),
- B_FALSE)) {
+ gettext("Respond with yes or no.\n"),
+ B_FALSE)) {
return (KMF_OK);
}
keys = (KMF_KEY_HANDLE *)malloc(numkeys *
- sizeof (KMF_KEY_HANDLE));
+ sizeof (KMF_KEY_HANDLE));
if (keys == NULL)
return (KMF_ERR_MEMORY);
(void) memset(keys, 0, numkeys *
- sizeof (KMF_KEY_HANDLE));
+ sizeof (KMF_KEY_HANDLE));
+
+ kmf_set_attr_at_index(attlist, num,
+ KMF_KEY_HANDLE_ATTR, keys, sizeof (KMF_KEY_HANDLE));
+ num++;
- rv = KMF_FindKey(kmfhandle, parms, keys, &numkeys);
+ rv = kmf_find_key(kmfhandle, num, attlist);
if (rv == KMF_OK) {
- rv = pk_destroy_keys(kmfhandle, keys,
- parms, numkeys);
+ rv = pk_destroy_keys(kmfhandle, attlist, num);
}
free(keys);
@@ -118,26 +190,34 @@ pk_delete_keys(KMF_HANDLE_T kmfhandle, KMF_FINDKEY_PARAMS *parms, char *desc,
}
static KMF_RETURN
-pk_delete_certs(KMF_HANDLE_T kmfhandle, KMF_FINDCERT_PARAMS *fcparms,
- KMF_DELETECERT_PARAMS *dcparms)
+pk_delete_certs(KMF_HANDLE_T kmfhandle, KMF_ATTRIBUTE *attlist, int numattr)
{
KMF_RETURN rv = KMF_OK;
uint32_t numcerts = 0;
+ int num = numattr;
+
+ kmf_set_attr_at_index(attlist, num,
+ KMF_COUNT_ATTR, &numcerts, sizeof (uint32_t));
+ num++;
- rv = KMF_FindCert(kmfhandle, fcparms, NULL, &numcerts);
+ rv = kmf_find_cert(kmfhandle, num, attlist);
if (rv == KMF_OK && numcerts > 0) {
char prompt[1024];
(void) snprintf(prompt, sizeof (prompt),
- gettext("%d certificate(s) found, do you want "
- "to delete them (y/N) ?"), numcerts);
+ gettext("%d certificate(s) found, do you want "
+ "to delete them (y/N) ?"), numcerts);
if (!yesno(prompt,
- gettext("Respond with yes or no.\n"),
- B_FALSE)) {
+ gettext("Respond with yes or no.\n"),
+ B_FALSE)) {
return (KMF_OK);
}
- rv = KMF_DeleteCertFromKeystore(kmfhandle, dcparms);
+ /*
+ * Use numattr because delete cert does not require
+ * KMF_COUNT_ATTR attribute.
+ */
+ rv = kmf_delete_cert_from_keystore(kmfhandle, numattr, attlist);
} else if (rv == KMF_ERR_CERT_NOT_FOUND) {
rv = KMF_OK;
@@ -152,36 +232,73 @@ delete_nss_keys(KMF_HANDLE_T kmfhandle, char *dir, char *prefix,
KMF_CREDENTIAL *tokencred)
{
KMF_RETURN rv = KMF_OK;
- KMF_FINDKEY_PARAMS parms;
char *keytype = NULL;
int nk, numkeys = 0;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
+ KMF_KEY_CLASS keyclass;
rv = configure_nss(kmfhandle, dir, prefix);
if (rv != KMF_OK)
return (rv);
- (void) memset(&parms, 0, sizeof (parms));
- parms.kstype = KMF_KEYSTORE_NSS;
- parms.findLabel = objlabel;
- parms.cred = *tokencred;
- parms.nssparms.slotlabel = token;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (objlabel != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYLABEL_ATTR,
+ objlabel, strlen(objlabel));
+ numattr++;
+ }
+
+ if (tokencred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CREDENTIAL_ATTR,
+ tokencred, sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
+
+ if (token && strlen(token)) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_LABEL_ATTR,
+ token, strlen(token));
+ numattr++;
+ }
if (oclass & PK_PRIKEY_OBJ) {
- parms.keyclass = KMF_ASYM_PRI;
+ int num = numattr;
+
+ keyclass = KMF_ASYM_PRI;
+ kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR,
+ &keyclass, sizeof (keyclass));
+ num++;
+
keytype = "private";
- rv = pk_delete_keys(kmfhandle, &parms, keytype, &nk);
+ rv = pk_delete_keys(kmfhandle, attrlist, num, keytype, &nk);
numkeys += nk;
}
if (rv == KMF_OK && (oclass & PK_SYMKEY_OBJ)) {
- parms.keyclass = KMF_SYMMETRIC;
+ int num = numattr;
+
+ keyclass = KMF_SYMMETRIC;
+ kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR,
+ &keyclass, sizeof (keyclass));
+ num++;
+
keytype = "symmetric";
- rv = pk_delete_keys(kmfhandle, &parms, keytype, &nk);
+ rv = pk_delete_keys(kmfhandle, attrlist, num, keytype, &nk);
numkeys += nk;
}
if (rv == KMF_OK && (oclass & PK_PUBKEY_OBJ)) {
- parms.keyclass = KMF_ASYM_PUB;
+ int num = numattr;
+
+ keyclass = KMF_ASYM_PUB;
+ kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR,
+ &keyclass, sizeof (keyclass));
+ num++;
+
keytype = "public";
- rv = pk_delete_keys(kmfhandle, &parms, keytype, &nk);
+ rv = pk_delete_keys(kmfhandle, attrlist, num, keytype, &nk);
numkeys += nk;
}
if (rv == KMF_OK && numkeys == 0)
@@ -199,32 +316,59 @@ delete_nss_certs(KMF_HANDLE_T kmfhandle,
KMF_CERT_VALIDITY find_criteria_flag)
{
KMF_RETURN rv = KMF_OK;
- KMF_DELETECERT_PARAMS dcparms;
- KMF_FINDCERT_PARAMS fcargs;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
rv = configure_nss(kmfhandle, dir, prefix);
if (rv != KMF_OK)
return (rv);
- (void) memset(&dcparms, 0, sizeof (dcparms));
- dcparms.kstype = KMF_KEYSTORE_NSS;
- dcparms.certLabel = objlabel;
- dcparms.issuer = issuer;
- dcparms.subject = subject;
- dcparms.serial = serno;
- dcparms.find_cert_validity = find_criteria_flag;
- dcparms.nssparms.slotlabel = token;
-
- (void) memset(&fcargs, 0, sizeof (fcargs));
- fcargs.kstype = KMF_KEYSTORE_NSS;
- fcargs.certLabel = objlabel;
- fcargs.issuer = issuer;
- fcargs.subject = subject;
- fcargs.serial = serno;
- fcargs.find_cert_validity = find_criteria_flag;
- fcargs.nssparms.slotlabel = token;
-
- rv = pk_delete_certs(kmfhandle, &fcargs, &dcparms);
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (objlabel != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_LABEL_ATTR, objlabel,
+ strlen(objlabel));
+ numattr++;
+ }
+
+ if (issuer != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ISSUER_NAME_ATTR, issuer,
+ strlen(issuer));
+ numattr++;
+ }
+
+ if (subject != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_SUBJECT_NAME_ATTR, subject,
+ strlen(subject));
+ numattr++;
+ }
+
+ if (serno != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_BIGINT_ATTR, serno,
+ sizeof (KMF_BIGINT));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_VALIDITY_ATTR, &find_criteria_flag,
+ sizeof (KMF_CERT_VALIDITY));
+ numattr++;
+
+ if (token != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_TOKEN_LABEL_ATTR, token,
+ strlen(token));
+ numattr++;
+ }
+
+ rv = pk_delete_certs(kmfhandle, attrlist, numattr);
return (rv);
}
@@ -232,23 +376,38 @@ delete_nss_certs(KMF_HANDLE_T kmfhandle,
static KMF_RETURN
delete_nss_crl(void *kmfhandle,
char *dir, char *prefix, char *token,
- char *issuernickname, char *subject)
+ char *issuer, char *subject)
{
KMF_RETURN rv = KMF_OK;
- KMF_DELETECRL_PARAMS dcrlparms;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[8];
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS;
rv = configure_nss(kmfhandle, dir, prefix);
if (rv != KMF_OK)
return (rv);
- (void) memset(&dcrlparms, 0, sizeof (dcrlparms));
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
- dcrlparms.kstype = KMF_KEYSTORE_NSS;
- dcrlparms.nssparms.slotlabel = token;
- dcrlparms.nssparms.crl_issuerName = issuernickname;
- dcrlparms.nssparms.crl_subjName = subject;
+ if (token != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_LABEL_ATTR,
+ token, strlen(token));
+ numattr++;
+ }
+ if (issuer != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_ISSUER_NAME_ATTR,
+ issuer, strlen(issuer));
+ numattr++;
+ }
+ if (subject != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_SUBJECT_NAME_ATTR,
+ subject, strlen(subject));
+ numattr++;
+ }
- rv = KMF_DeleteCRL(kmfhandle, &dcrlparms);
+ rv = kmf_delete_crl(kmfhandle, numattr, attrlist);
return (rv);
}
@@ -259,9 +418,14 @@ delete_pk11_keys(KMF_HANDLE_T kmfhandle,
KMF_CREDENTIAL *tokencred)
{
KMF_RETURN rv = KMF_OK;
- KMF_FINDKEY_PARAMS parms;
int nk, numkeys = 0;
-
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_PK11TOKEN;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
+ KMF_KEY_CLASS keyclass;
+ boolean_t token_bool = B_TRUE;
+ KMF_KEY_ALG keytype = 0;
+ boolean_t private;
/*
* Symmetric keys and RSA/DSA private keys are always
* created with the "CKA_PRIVATE" field == TRUE, so
@@ -275,30 +439,69 @@ delete_pk11_keys(KMF_HANDLE_T kmfhandle,
return (rv);
}
- (void) memset(&parms, 0, sizeof (parms));
- parms.kstype = KMF_KEYSTORE_PK11TOKEN;
- parms.findLabel = (char *)objlabel;
- parms.keytype = 0;
- parms.pkcs11parms.private = ((oclass & PK_PRIVATE_OBJ) > 0);
- parms.pkcs11parms.token = 1;
- parms.cred.cred = tokencred->cred;
- parms.cred.credlen = tokencred->credlen;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (objlabel != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYLABEL_ATTR,
+ objlabel, strlen(objlabel));
+ numattr++;
+ }
+
+ if (tokencred != NULL && tokencred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CREDENTIAL_ATTR,
+ tokencred, sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
+
+ private = ((oclass & PK_PRIVATE_OBJ) > 0);
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_PRIVATE_BOOL_ATTR,
+ &private, sizeof (private));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYALG_ATTR,
+ &keytype, sizeof (keytype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_BOOL_ATTR,
+ &token_bool, sizeof (token_bool));
+ numattr++;
if (oclass & PK_PRIKEY_OBJ) {
- parms.keyclass = KMF_ASYM_PRI;
- rv = pk_delete_keys(kmfhandle, &parms, "private", &nk);
+ int num = numattr;
+
+ keyclass = KMF_ASYM_PRI;
+ kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR,
+ &keyclass, sizeof (keyclass));
+ num++;
+
+ rv = pk_delete_keys(kmfhandle, attrlist, num, "private", &nk);
numkeys += nk;
}
if (rv == KMF_OK && (oclass & PK_SYMKEY_OBJ)) {
- parms.keyclass = KMF_SYMMETRIC;
- rv = pk_delete_keys(kmfhandle, &parms, "symmetric", &nk);
+ int num = numattr;
+
+ keyclass = KMF_SYMMETRIC;
+ kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR,
+ &keyclass, sizeof (keyclass));
+ num++;
+
+ rv = pk_delete_keys(kmfhandle, attrlist, num, "symmetric", &nk);
numkeys += nk;
}
if (rv == KMF_OK && (oclass & PK_PUBKEY_OBJ)) {
- parms.keyclass = KMF_ASYM_PUB;
- rv = pk_delete_keys(kmfhandle, &parms, "public", &nk);
+ int num = numattr;
+
+ keyclass = KMF_ASYM_PUB;
+ kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR,
+ &keyclass, sizeof (keyclass));
+ num++;
+
+ rv = pk_delete_keys(kmfhandle, attrlist, num, "public", &nk);
numkeys += nk;
}
if (rv == KMF_OK && numkeys == 0)
@@ -314,8 +517,9 @@ delete_pk11_certs(KMF_HANDLE_T kmfhandle,
KMF_CERT_VALIDITY find_criteria_flag)
{
KMF_RETURN kmfrv;
- KMF_DELETECERT_PARAMS dparms;
- KMF_FINDCERT_PARAMS fcargs;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_PK11TOKEN;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
kmfrv = select_token(kmfhandle, token, FALSE);
@@ -323,16 +527,39 @@ delete_pk11_certs(KMF_HANDLE_T kmfhandle,
return (kmfrv);
}
- (void) memset(&dparms, 0, sizeof (dparms));
- dparms.kstype = KMF_KEYSTORE_PK11TOKEN;
- dparms.certLabel = objlabel;
- dparms.issuer = issuer;
- dparms.subject = subject;
- dparms.serial = serno;
- dparms.find_cert_validity = find_criteria_flag;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (objlabel != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_LABEL_ATTR,
+ objlabel, strlen(objlabel));
+ numattr++;
+ }
+
+ if (issuer != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_ISSUER_NAME_ATTR,
+ issuer, strlen(issuer));
+ numattr++;
+ }
+
+ if (subject != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_SUBJECT_NAME_ATTR,
+ subject, strlen(subject));
+ numattr++;
+ }
+
+ if (serno != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_BIGINT_ATTR,
+ serno, sizeof (KMF_BIGINT));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_VALIDITY_ATTR,
+ &find_criteria_flag, sizeof (KMF_CERT_VALIDITY));
+ numattr++;
- fcargs = dparms;
- kmfrv = pk_delete_certs(kmfhandle, &fcargs, &dparms);
+ kmfrv = pk_delete_certs(kmfhandle, attrlist, numattr);
return (kmfrv);
}
@@ -343,24 +570,49 @@ delete_file_certs(KMF_HANDLE_T kmfhandle,
char *subject, KMF_CERT_VALIDITY find_criteria_flag)
{
KMF_RETURN rv;
- KMF_DELETECERT_PARAMS dparms;
- KMF_FINDCERT_PARAMS fcargs;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (issuer != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_ISSUER_NAME_ATTR,
+ issuer, strlen(issuer));
+ numattr++;
+ }
- (void *)memset(&dparms, 0, sizeof (dparms));
- (void *)memset(&fcargs, 0, sizeof (fcargs));
- fcargs.kstype = KMF_KEYSTORE_OPENSSL;
- fcargs.certLabel = NULL;
- fcargs.issuer = issuer;
- fcargs.subject = subject;
- fcargs.serial = serial;
- fcargs.sslparms.dirpath = dir;
- fcargs.sslparms.certfile = filename;
- fcargs.find_cert_validity = find_criteria_flag;
+ if (subject != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_SUBJECT_NAME_ATTR,
+ subject, strlen(subject));
+ numattr++;
+ }
+
+ if (serial != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_BIGINT_ATTR,
+ serial, sizeof (KMF_BIGINT));
+ numattr++;
+ }
- /* For now, delete parameters and find parameters are the same */
- dparms = fcargs;
+ if (dir != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_DIRPATH_ATTR,
+ dir, strlen(dir));
+ numattr++;
+ }
+
+ if (filename != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_FILENAME_ATTR,
+ filename, strlen(filename));
+ numattr++;
+ }
- rv = pk_delete_certs(kmfhandle, &fcargs, &dparms);
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_VALIDITY_ATTR,
+ &find_criteria_flag, sizeof (KMF_CERT_VALIDITY));
+ numattr++;
+
+ rv = pk_delete_certs(kmfhandle, attrlist, numattr);
return (rv);
}
@@ -370,25 +622,51 @@ delete_file_keys(KMF_HANDLE_T kmfhandle, int oclass,
char *dir, char *infile)
{
KMF_RETURN rv = KMF_OK;
- KMF_FINDKEY_PARAMS parms;
char *keytype = "";
int nk, numkeys = 0;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
+ KMF_KEY_CLASS keyclass;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (dir != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_DIRPATH_ATTR,
+ dir, strlen(dir));
+ numattr++;
+ }
- (void) memset(&parms, 0, sizeof (parms));
- parms.kstype = KMF_KEYSTORE_OPENSSL;
- parms.sslparms.dirpath = dir;
- parms.sslparms.keyfile = infile;
+ if (infile != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEY_FILENAME_ATTR,
+ infile, strlen(infile));
+ numattr++;
+ }
if (oclass & (PK_PUBKEY_OBJ | PK_PRIKEY_OBJ)) {
- parms.keyclass = KMF_ASYM_PRI;
+ int num = numattr;
+
+ keyclass = KMF_ASYM_PRI;
+ kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR,
+ &keyclass, sizeof (keyclass));
+ num++;
+
keytype = "Asymmetric";
- rv = pk_delete_keys(kmfhandle, &parms, keytype, &nk);
+ rv = pk_delete_keys(kmfhandle, attrlist, num, keytype, &nk);
numkeys += nk;
}
if (rv == KMF_OK && (oclass & PK_SYMKEY_OBJ)) {
- parms.keyclass = KMF_SYMMETRIC;
+ int num = numattr;
+
+ keyclass = KMF_SYMMETRIC;
+ kmf_set_attr_at_index(attrlist, num, KMF_KEYCLASS_ATTR,
+ &keyclass, sizeof (keyclass));
+ num++;
+
keytype = "symmetric";
- rv = pk_delete_keys(kmfhandle, &parms, keytype, &nk);
+ rv = pk_delete_keys(kmfhandle, attrlist, num, keytype, &nk);
numkeys += nk;
}
if (rv == KMF_OK && numkeys == 0)
@@ -401,15 +679,26 @@ static KMF_RETURN
delete_file_crl(void *kmfhandle, char *dir, char *filename)
{
KMF_RETURN rv;
- KMF_DELETECRL_PARAMS dcrlparms;
-
- (void) memset(&dcrlparms, 0, sizeof (dcrlparms));
-
- dcrlparms.kstype = KMF_KEYSTORE_OPENSSL;
- dcrlparms.sslparms.dirpath = dir;
- dcrlparms.sslparms.crlfile = filename;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[4];
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (dir) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_DIRPATH_ATTR,
+ dir, strlen(dir));
+ numattr++;
+ }
+ if (filename) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CRL_FILENAME_ATTR,
+ filename, strlen(filename));
+ numattr++;
+ }
- rv = KMF_DeleteCRL(kmfhandle, &dcrlparms);
+ rv = kmf_delete_crl(kmfhandle, numattr, attrlist);
return (rv);
}
@@ -444,11 +733,11 @@ pk_delete(int argc, char *argv[])
/* Parse command line options. Do NOT i18n/l10n. */
while ((opt = getopt_av(argc, argv,
- "T:(token)y:(objtype)l:(label)"
- "k:(keystore)s:(subject)n:(nickname)"
- "d:(dir)p:(prefix)S:(serial)i:(issuer)"
- "c:(criteria)"
- "f:(infile)")) != EOF) {
+ "T:(token)y:(objtype)l:(label)"
+ "k:(keystore)s:(subject)n:(nickname)"
+ "d:(dir)p:(prefix)S:(serial)i:(issuer)"
+ "c:(criteria)"
+ "f:(infile)")) != EOF) {
if (EMPTYSTRING(optarg_av))
return (PK_ERR_USAGE);
@@ -498,7 +787,7 @@ pk_delete(int argc, char *argv[])
find_criteria = optarg_av;
if (!strcasecmp(find_criteria, "valid"))
find_criteria_flag =
- KMF_NONEXPIRED_CERTS;
+ KMF_NONEXPIRED_CERTS;
else if (!strcasecmp(find_criteria, "expired"))
find_criteria_flag = KMF_EXPIRED_CERTS;
else if (!strcasecmp(find_criteria, "both"))
@@ -518,17 +807,17 @@ pk_delete(int argc, char *argv[])
/* if PUBLIC or PRIVATE obj was given, the old syntax was used. */
if ((oclass & (PK_PUBLIC_OBJ | PK_PRIVATE_OBJ)) &&
- kstype != KMF_KEYSTORE_PK11TOKEN) {
+ kstype != KMF_KEYSTORE_PK11TOKEN) {
(void) fprintf(stderr, gettext("The objtype parameter "
- "is only relevant if keystore=pkcs11\n"));
+ "is only relevant if keystore=pkcs11\n"));
return (PK_ERR_USAGE);
}
/* If no object class specified, delete everything but CRLs */
if (oclass == 0)
oclass = PK_CERT_OBJ | PK_PUBKEY_OBJ | PK_PRIKEY_OBJ |
- PK_SYMKEY_OBJ;
+ PK_SYMKEY_OBJ;
/* No additional args allowed. */
argc -= optind_av;
@@ -547,11 +836,11 @@ pk_delete(int argc, char *argv[])
uchar_t *bytes = NULL;
size_t bytelen;
- rv = KMF_HexString2Bytes((uchar_t *)serstr, &bytes, &bytelen);
+ rv = kmf_hexstr_to_bytes((uchar_t *)serstr, &bytes, &bytelen);
if (rv != KMF_OK || bytes == NULL) {
(void) fprintf(stderr, gettext("serial number "
- "must be specified as a hex number "
- "(ex: 0x0102030405ffeeddee)\n"));
+ "must be specified as a hex number "
+ "(ex: 0x0102030405ffeeddee)\n"));
return (PK_ERR_USAGE);
}
serial.val = bytes;
@@ -559,94 +848,92 @@ pk_delete(int argc, char *argv[])
}
if ((kstype == KMF_KEYSTORE_PK11TOKEN ||
- kstype == KMF_KEYSTORE_NSS) &&
- (oclass & (PK_KEY_OBJ | PK_PRIVATE_OBJ))) {
+ kstype == KMF_KEYSTORE_NSS) &&
+ (oclass & (PK_KEY_OBJ | PK_PRIVATE_OBJ))) {
(void) get_token_password(kstype, token_spec,
- &tokencred);
+ &tokencred);
}
- if ((kmfrv = KMF_Initialize(&kmfhandle, NULL, NULL)) != KMF_OK)
+ if ((kmfrv = kmf_initialize(&kmfhandle, NULL, NULL)) != KMF_OK)
return (kmfrv);
switch (kstype) {
case KMF_KEYSTORE_PK11TOKEN:
if (oclass & PK_KEY_OBJ) {
kmfrv = delete_pk11_keys(kmfhandle,
- token_spec, oclass,
- object_label,
- &tokencred);
+ token_spec, oclass,
+ object_label, &tokencred);
/*
* If deleting groups of objects, it is OK
* to ignore the "key not found" case so that
* we can continue to find other objects.
*/
if (kmfrv == KMF_ERR_KEY_NOT_FOUND &&
- (oclass != PK_KEY_OBJ))
+ (oclass != PK_KEY_OBJ))
kmfrv = KMF_OK;
if (kmfrv != KMF_OK)
break;
}
if (oclass & (PK_CERT_OBJ | PK_PUBLIC_OBJ)) {
kmfrv = delete_pk11_certs(kmfhandle,
- token_spec,
- object_label,
- &serial, issuer,
- subject, find_criteria_flag);
+ token_spec, object_label,
+ &serial, issuer,
+ subject, find_criteria_flag);
/*
* If cert delete failed, but we are looking at
* other objects, then it is OK.
*/
if (kmfrv == KMF_ERR_CERT_NOT_FOUND &&
- (oclass & (PK_CRL_OBJ | PK_KEY_OBJ)))
+ (oclass & (PK_CRL_OBJ | PK_KEY_OBJ)))
kmfrv = KMF_OK;
if (kmfrv != KMF_OK)
break;
}
if (oclass & PK_CRL_OBJ)
kmfrv = delete_file_crl(kmfhandle,
- dir, infile);
+ dir, infile);
break;
case KMF_KEYSTORE_NSS:
if (oclass & PK_KEY_OBJ) {
kmfrv = delete_nss_keys(kmfhandle,
- dir, prefix, token_spec,
- oclass, (char *)object_label,
- &tokencred);
+ dir, prefix, token_spec,
+ oclass, (char *)object_label,
+ &tokencred);
if (kmfrv != KMF_OK)
break;
}
if (oclass & PK_CERT_OBJ) {
kmfrv = delete_nss_certs(kmfhandle,
- dir, prefix, token_spec,
- (char *)object_label,
- &serial, issuer, subject,
- find_criteria_flag);
+ dir, prefix, token_spec,
+ (char *)object_label,
+ &serial, issuer, subject,
+ find_criteria_flag);
if (kmfrv != KMF_OK)
break;
}
if (oclass & PK_CRL_OBJ)
kmfrv = delete_nss_crl(kmfhandle,
- dir, prefix, token_spec,
- (char *)object_label, subject);
+ dir, prefix, token_spec,
+ (char *)object_label, subject);
break;
case KMF_KEYSTORE_OPENSSL:
if (oclass & PK_KEY_OBJ) {
kmfrv = delete_file_keys(kmfhandle, oclass,
- dir, infile);
+ dir, infile);
if (kmfrv != KMF_OK)
break;
}
if (oclass & (PK_CERT_OBJ)) {
kmfrv = delete_file_certs(kmfhandle,
- dir, infile, &serial, issuer,
- subject, find_criteria_flag);
+ dir, infile, &serial, issuer,
+ subject, find_criteria_flag);
if (kmfrv != KMF_OK)
break;
}
if (oclass & PK_CRL_OBJ)
kmfrv = delete_file_crl(kmfhandle,
- dir, infile);
+ dir, infile);
break;
default:
rv = PK_ERR_USAGE;
@@ -655,11 +942,11 @@ pk_delete(int argc, char *argv[])
if (kmfrv != KMF_OK) {
display_error(kmfhandle, kmfrv,
- gettext("Error deleting objects"));
+ gettext("Error deleting objects"));
}
if (serial.val != NULL)
free(serial.val);
- (void) KMF_Finalize(kmfhandle);
+ (void) kmf_finalize(kmfhandle);
return (kmfrv);
}
diff --git a/usr/src/cmd/cmd-crypto/pktool/download.c b/usr/src/cmd/cmd-crypto/pktool/download.c
index 1eabc85ee3..a0b1591ad5 100644
--- a/usr/src/cmd/cmd-crypto/pktool/download.c
+++ b/usr/src/cmd/cmd-crypto/pktool/download.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -121,8 +121,8 @@ pk_download(int argc, char *argv[])
/* Check if the file exists and might be overwritten. */
if (access(fullpath, F_OK) == 0) {
cryptoerror(LOG_STDERR,
- gettext("Warning: file \"%s\" exists, "
- "will be overwritten."), fullpath);
+ gettext("Warning: file \"%s\" exists, "
+ "will be overwritten."), fullpath);
if (yesno(gettext("Continue with download? "),
gettext("Respond with yes or no.\n"), B_FALSE) == B_FALSE) {
return (0);
@@ -131,7 +131,7 @@ pk_download(int argc, char *argv[])
rv = verify_file(fullpath);
if (rv != KMF_OK) {
cryptoerror(LOG_STDERR, gettext("The file (%s) "
- "cannot be created.\n"), fullpath);
+ "cannot be created.\n"), fullpath);
return (PK_ERR_USAGE);
}
}
@@ -171,7 +171,7 @@ pk_download(int argc, char *argv[])
oclass = PK_CRL_OBJ;
}
- if ((rv = KMF_Initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
+ if ((rv = kmf_initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
cryptoerror(LOG_STDERR, gettext("Error initializing KMF\n"));
rv = PK_ERR_USAGE;
goto end;
@@ -179,10 +179,10 @@ pk_download(int argc, char *argv[])
/* Now we are ready to download */
if (oclass & PK_CRL_OBJ) {
- rv = KMF_DownloadCRL(kmfhandle, url, proxy, proxy_port, 30,
+ rv = kmf_download_crl(kmfhandle, url, proxy, proxy_port, 30,
fullpath, &format);
} else if (oclass & PK_CERT_OBJ) {
- rv = KMF_DownloadCert(kmfhandle, url, proxy, proxy_port, 30,
+ rv = kmf_download_cert(kmfhandle, url, proxy, proxy_port, 30,
fullpath, &format);
}
@@ -231,26 +231,22 @@ pk_download(int argc, char *argv[])
* If the downloaded file is outdated, give a warning.
*/
if (oclass & PK_CRL_OBJ) {
- KMF_CHECKCRLDATE_PARAMS params;
-
- params.crl_name = fullpath;
- ch_rv = KMF_CheckCRLDate(kmfhandle, &params);
-
+ ch_rv = kmf_check_crl_date(kmfhandle, fullpath);
} else { /* certificate */
- ch_rv = KMF_ReadInputFile(kmfhandle, fullpath, &cert);
+ ch_rv = kmf_read_input_file(kmfhandle, fullpath, &cert);
if (ch_rv != KMF_OK)
goto end;
if (format == KMF_FORMAT_PEM) {
int len;
- ch_rv = KMF_Pem2Der(cert.Data, cert.Length,
+ ch_rv = kmf_pem_to_der(cert.Data, cert.Length,
&cert_der.Data, &len);
if (ch_rv != KMF_OK)
goto end;
cert_der.Length = (size_t)len;
}
- ch_rv = KMF_CheckCertDate(kmfhandle,
+ ch_rv = kmf_check_cert_date(kmfhandle,
format == KMF_FORMAT_ASN1 ? &cert : &cert_der);
}
@@ -266,9 +262,9 @@ end:
if (fullpath)
free(fullpath);
- KMF_FreeData(&cert);
- KMF_FreeData(&cert_der);
+ kmf_free_data(&cert);
+ kmf_free_data(&cert_der);
- (void) KMF_Finalize(kmfhandle);
+ (void) kmf_finalize(kmfhandle);
return (rv);
}
diff --git a/usr/src/cmd/cmd-crypto/pktool/export.c b/usr/src/cmd/cmd-crypto/pktool/export.c
index 9170a00468..1d3b36e703 100644
--- a/usr/src/cmd/cmd-crypto/pktool/export.c
+++ b/usr/src/cmd/cmd-crypto/pktool/export.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -44,31 +44,40 @@
#include <kmfapi.h>
static KMF_RETURN
-pk_find_export_cert(KMF_HANDLE_T kmfhandle, KMF_FINDCERT_PARAMS *parms,
- KMF_X509_DER_CERT *cert)
+pk_find_export_cert(KMF_HANDLE_T kmfhandle, KMF_ATTRIBUTE *attrlist,
+ int numattr, KMF_X509_DER_CERT *cert)
{
KMF_RETURN rv = KMF_OK;
uint32_t numcerts = 0;
numcerts = 0;
(void) memset(cert, 0, sizeof (KMF_X509_DER_CERT));
- rv = KMF_FindCert(kmfhandle, parms, NULL, &numcerts);
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_COUNT_ATTR,
+ &numcerts, sizeof (uint32_t));
+ numattr++;
+
+ rv = kmf_find_cert(kmfhandle, numattr, attrlist);
if (rv != KMF_OK) {
return (rv);
}
if (numcerts == 0) {
cryptoerror(LOG_STDERR,
- gettext("No matching certificates found."));
+ gettext("No matching certificates found."));
return (KMF_ERR_CERT_NOT_FOUND);
} else if (numcerts == 1) {
- rv = KMF_FindCert(kmfhandle, parms, cert, &numcerts);
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_X509_DER_CERT_ATTR, cert,
+ sizeof (KMF_X509_DER_CERT));
+ numattr++;
+ rv = kmf_find_cert(kmfhandle, numattr, attrlist);
} else if (numcerts > 1) {
cryptoerror(LOG_STDERR,
- gettext("%d certificates found, refine the "
- "search parameters to eliminate ambiguity\n"),
- numcerts);
+ gettext("%d certificates found, refine the "
+ "search parameters to eliminate ambiguity\n"),
+ numcerts);
return (KMF_ERR_BAD_PARAMETER);
}
return (rv);
@@ -77,36 +86,80 @@ pk_find_export_cert(KMF_HANDLE_T kmfhandle, KMF_FINDCERT_PARAMS *parms,
static KMF_RETURN
pk_export_file_objects(KMF_HANDLE_T kmfhandle, int oclass,
char *issuer, char *subject, KMF_BIGINT *serial,
- KMF_ENCODE_FORMAT ofmt,
char *dir, char *infile, char *filename)
{
KMF_RETURN rv = KMF_OK;
- KMF_STORECERT_PARAMS scparms;
KMF_X509_DER_CERT kmfcert;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
/* If searching for public objects or certificates, find certs now */
if (oclass & (PK_CERT_OBJ | PK_PUBLIC_OBJ)) {
- KMF_FINDCERT_PARAMS fcargs;
-
- (void) memset(&fcargs, 0, sizeof (fcargs));
- fcargs.kstype = KMF_KEYSTORE_OPENSSL;
- fcargs.certLabel = NULL;
- fcargs.issuer = issuer;
- fcargs.subject = subject;
- fcargs.serial = serial;
- fcargs.sslparms.dirpath = dir;
- fcargs.sslparms.certfile = infile;
- fcargs.sslparms.format = ofmt;
-
- rv = pk_find_export_cert(kmfhandle, &fcargs, &kmfcert);
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype,
+ sizeof (kstype));
+ numattr++;
+
+ if (issuer != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ISSUER_NAME_ATTR, issuer,
+ strlen(issuer));
+ numattr++;
+ }
+
+ if (subject != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_SUBJECT_NAME_ATTR, subject,
+ strlen(subject));
+ numattr++;
+ }
+
+ if (serial != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_BIGINT_ATTR, serial,
+ sizeof (KMF_BIGINT));
+ numattr++;
+ }
+
+ if (dir != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_DIRPATH_ATTR, dir,
+ strlen(dir));
+ numattr++;
+ }
+
+ if (infile != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_FILENAME_ATTR, infile,
+ strlen(infile));
+ numattr++;
+ }
+
+ rv = pk_find_export_cert(kmfhandle, attrlist, numattr,
+ &kmfcert);
if (rv == KMF_OK) {
- (void) memset(&scparms, 0, sizeof (scparms));
- scparms.kstype = KMF_KEYSTORE_OPENSSL;
- scparms.sslparms.certfile = filename;
- rv = KMF_StoreCert(kmfhandle, &scparms,
- &kmfcert.certificate);
+ kstype = KMF_KEYSTORE_OPENSSL;
+ numattr = 0;
- KMF_FreeKMFCert(kmfhandle, &kmfcert);
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_DATA_ATTR, &kmfcert.certificate,
+ sizeof (KMF_DATA));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_FILENAME_ATTR, filename,
+ strlen(filename));
+ numattr++;
+
+ rv = kmf_store_cert(kmfhandle, numattr,
+ attrlist);
+
+ kmf_free_kmf_cert(kmfhandle, &kmfcert);
}
}
return (rv);
@@ -120,31 +173,70 @@ pk_export_pk12_nss(KMF_HANDLE_T kmfhandle,
char *filename)
{
KMF_RETURN rv = KMF_OK;
- KMF_EXPORTP12_PARAMS p12parms;
+ KMF_KEYSTORE_TYPE kstype;
+ KMF_CREDENTIAL p12cred = { NULL, 0};
+ KMF_ATTRIBUTE attrlist[16];
+ int numattr = 0;
rv = configure_nss(kmfhandle, dir, prefix);
if (rv != KMF_OK)
return (rv);
- (void) memset(&p12parms, 0, sizeof (p12parms));
if (token_spec == NULL)
token_spec = DEFAULT_NSS_TOKEN;
- p12parms.kstype = KMF_KEYSTORE_NSS;
- p12parms.certLabel = certlabel;
- p12parms.issuer = issuer;
- p12parms.subject = subject;
- p12parms.serial = serial;
- p12parms.idstr = NULL;
- if (tokencred != NULL)
- p12parms.cred = *tokencred;
- p12parms.nssparms.slotlabel = token_spec;
+ kstype = KMF_KEYSTORE_NSS;
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ numattr++;
+
+ if (certlabel != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_LABEL_ATTR, certlabel, strlen(certlabel));
+ numattr++;
+ }
+
+ if (issuer != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ISSUER_NAME_ATTR, issuer, strlen(issuer));
+ numattr++;
+ }
+
+ if (subject != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_SUBJECT_NAME_ATTR, subject, strlen(subject));
+ numattr++;
+ }
- (void) get_pk12_password(&p12parms.p12cred);
+ if (serial != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_BIGINT_ATTR, serial, sizeof (KMF_BIGINT));
+ numattr++;
+ }
- rv = KMF_ExportPK12(kmfhandle, &p12parms, filename);
- if (p12parms.p12cred.cred)
- free(p12parms.p12cred.cred);
+ if (tokencred != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CREDENTIAL_ATTR, tokencred, sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_LABEL_ATTR,
+ token_spec, strlen(token_spec));
+ numattr++;
+
+ (void) get_pk12_password(&p12cred);
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_PK12CRED_ATTR, &p12cred, sizeof (KMF_CREDENTIAL));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_OUTPUT_FILENAME_ATTR, filename, strlen(filename));
+ numattr++;
+
+ rv = kmf_export_pk12(kmfhandle, numattr, attrlist);
+
+ if (p12cred.cred)
+ free(p12cred.cred);
return (rv);
}
@@ -155,26 +247,47 @@ pk_export_pk12_files(KMF_HANDLE_T kmfhandle,
char *outfile)
{
KMF_RETURN rv;
- KMF_EXPORTP12_PARAMS p12parms;
+ KMF_KEYSTORE_TYPE kstype;
+ KMF_CREDENTIAL p12cred = { NULL, 0};
+ KMF_ATTRIBUTE attrlist[16];
+ int numattr = 0;
+
+ kstype = KMF_KEYSTORE_OPENSSL;
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ numattr++;
+
+ if (dir != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_DIRPATH_ATTR, dir, strlen(dir));
+ numattr++;
+ }
- (void) memset(&p12parms, 0, sizeof (p12parms));
+ if (certfile != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_FILENAME_ATTR, certfile, strlen(certfile));
+ numattr++;
+ }
+
+ if (keyfile != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEY_FILENAME_ATTR, keyfile, strlen(keyfile));
+ numattr++;
+ }
- p12parms.kstype = KMF_KEYSTORE_OPENSSL;
- p12parms.certLabel = NULL;
- p12parms.issuer = NULL;
- p12parms.subject = NULL;
- p12parms.serial = 0;
- p12parms.idstr = NULL;
- p12parms.sslparms.dirpath = dir;
- p12parms.sslparms.certfile = certfile;
- p12parms.sslparms.keyfile = keyfile;
+ (void) get_pk12_password(&p12cred);
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_PK12CRED_ATTR, &p12cred, sizeof (KMF_CREDENTIAL));
+ numattr++;
- (void) get_pk12_password(&p12parms.p12cred);
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_OUTPUT_FILENAME_ATTR, outfile, strlen(outfile));
+ numattr++;
- rv = KMF_ExportPK12(kmfhandle, &p12parms, outfile);
+ rv = kmf_export_pk12(kmfhandle, numattr, attrlist);
- if (p12parms.p12cred.cred)
- free(p12parms.p12cred.cred);
+ if (p12cred.cred)
+ free(p12cred.cred);
return (rv);
}
@@ -186,8 +299,10 @@ pk_export_nss_objects(KMF_HANDLE_T kmfhandle, char *token_spec,
char *prefix, char *filename)
{
KMF_RETURN rv = KMF_OK;
- KMF_STORECERT_PARAMS scparms;
KMF_X509_DER_CERT kmfcert;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS;
+ KMF_ATTRIBUTE attrlist[16];
+ int numattr = 0;
rv = configure_nss(kmfhandle, dir, prefix);
if (rv != KMF_OK)
@@ -195,27 +310,73 @@ pk_export_nss_objects(KMF_HANDLE_T kmfhandle, char *token_spec,
/* If searching for public objects or certificates, find certs now */
if (oclass & (PK_CERT_OBJ | PK_PUBLIC_OBJ)) {
- KMF_FINDCERT_PARAMS fcargs;
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype,
+ sizeof (kstype));
+ numattr++;
+
+ if (certlabel != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_LABEL_ATTR, certlabel,
+ strlen(certlabel));
+ numattr++;
+ }
- (void) memset(&fcargs, 0, sizeof (fcargs));
- fcargs.kstype = KMF_KEYSTORE_NSS;
- fcargs.certLabel = certlabel;
- fcargs.issuer = issuer;
- fcargs.subject = subject;
- fcargs.serial = serial;
- fcargs.nssparms.slotlabel = token_spec;
+ if (issuer != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ISSUER_NAME_ATTR, issuer,
+ strlen(issuer));
+ numattr++;
+ }
- rv = pk_find_export_cert(kmfhandle, &fcargs, &kmfcert);
+ if (subject != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_SUBJECT_NAME_ATTR, subject,
+ strlen(subject));
+ numattr++;
+ }
+
+ if (serial != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_BIGINT_ATTR, serial,
+ sizeof (KMF_BIGINT));
+ numattr++;
+ }
+
+ if (token_spec != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_TOKEN_LABEL_ATTR, token_spec,
+ strlen(token_spec));
+ numattr++;
+ }
+
+ rv = pk_find_export_cert(kmfhandle, attrlist, numattr,
+ &kmfcert);
if (rv == KMF_OK) {
- (void) memset(&scparms, 0, sizeof (scparms));
- scparms.kstype = KMF_KEYSTORE_OPENSSL;
- scparms.sslparms.certfile = filename;
- scparms.sslparms.format = kfmt;
+ kstype = KMF_KEYSTORE_OPENSSL;
+ numattr = 0;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ numattr++;
- rv = KMF_StoreCert(kmfhandle, &scparms,
- &kmfcert.certificate);
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_DATA_ATTR, &kmfcert.certificate,
+ sizeof (KMF_DATA));
+ numattr++;
- KMF_FreeKMFCert(kmfhandle, &kmfcert);
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_FILENAME_ATTR, filename,
+ strlen(filename));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ENCODE_FORMAT_ATTR, &kfmt, sizeof (kfmt));
+ numattr++;
+
+ rv = kmf_store_cert(kmfhandle, numattr, attrlist);
+
+ kmf_free_kmf_cert(kmfhandle, &kmfcert);
}
}
return (rv);
@@ -227,29 +388,179 @@ pk_export_pk12_pk11(KMF_HANDLE_T kmfhandle, char *token_spec,
KMF_BIGINT *serial, KMF_CREDENTIAL *tokencred, char *filename)
{
KMF_RETURN rv = KMF_OK;
- KMF_EXPORTP12_PARAMS p12parms;
+ KMF_KEYSTORE_TYPE kstype;
+ KMF_CREDENTIAL p12cred = { NULL, 0};
+ KMF_ATTRIBUTE attrlist[16];
+ int numattr = 0;
rv = select_token(kmfhandle, token_spec, TRUE);
if (rv != KMF_OK) {
return (rv);
}
- (void) memset(&p12parms, 0, sizeof (p12parms));
+ kstype = KMF_KEYSTORE_PK11TOKEN;
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ numattr++;
+
+ if (certlabel != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_LABEL_ATTR, certlabel, strlen(certlabel));
+ numattr++;
+ }
+
+ if (issuer != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ISSUER_NAME_ATTR, issuer, strlen(issuer));
+ numattr++;
+ }
+
+ if (subject != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_SUBJECT_NAME_ATTR, subject, strlen(subject));
+ numattr++;
+ }
+
+ if (serial != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_BIGINT_ATTR, serial, sizeof (KMF_BIGINT));
+ numattr++;
+ }
+
+ if (tokencred != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CREDENTIAL_ATTR, tokencred, sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
+
+ (void) get_pk12_password(&p12cred);
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_PK12CRED_ATTR, &p12cred, sizeof (KMF_CREDENTIAL));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_OUTPUT_FILENAME_ATTR, filename, strlen(filename));
+ numattr++;
+
+ rv = kmf_export_pk12(kmfhandle, numattr, attrlist);
+
+ if (p12cred.cred)
+ free(p12cred.cred);
+
+ return (rv);
+}
+
+static KMF_RETURN
+pk_export_pk11_keys(KMF_HANDLE_T kmfhandle, char *token,
+ KMF_CREDENTIAL *cred, KMF_ENCODE_FORMAT format,
+ char *label, char *filename)
+{
+ KMF_RETURN rv = KMF_OK;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_PK11TOKEN;
+ int numattr = 0;
+ uint32_t numkeys = 1;
+ KMF_ATTRIBUTE attrlist[16];
+ KMF_KEY_HANDLE key;
+ KMF_KEY_CLASS keyclass = KMF_SYMMETRIC;
+ boolean_t is_token = B_TRUE;
+
+ if (EMPTYSTRING(label)) {
+ cryptoerror(LOG_STDERR, gettext("A label "
+ "must be specified to export a key."));
+ return (KMF_ERR_BAD_PARAMETER);
+ }
+
+ rv = select_token(kmfhandle, token, TRUE);
+ if (rv != KMF_OK) {
+ return (rv);
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (cred != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CREDENTIAL_ATTR,
+ cred, sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYLABEL_ATTR,
+ label, strlen(label));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_COUNT_ATTR,
+ &numkeys, sizeof (numkeys));
+ numattr++;
- p12parms.kstype = KMF_KEYSTORE_PK11TOKEN;
- p12parms.certLabel = certlabel;
- p12parms.issuer = issuer;
- p12parms.subject = subject;
- p12parms.serial = serial;
- p12parms.idstr = NULL;
- if (tokencred != NULL)
- p12parms.cred = *tokencred;
- (void) get_pk12_password(&p12parms.p12cred);
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEY_HANDLE_ATTR,
+ &key, sizeof (key));
+ numattr++;
- rv = KMF_ExportPK12(kmfhandle, &p12parms, filename);
+ kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_BOOL_ATTR,
+ &is_token, sizeof (is_token));
+ numattr++;
- if (p12parms.p12cred.cred)
- free(p12parms.p12cred.cred);
+ kmf_set_attr_at_index(attrlist, numattr, KMF_ENCODE_FORMAT_ATTR,
+ &format, sizeof (format));
+ numattr++;
+
+ rv = kmf_find_key(kmfhandle, numattr, attrlist);
+ if (rv == KMF_OK && key.keyclass == KMF_SYMMETRIC) {
+ KMF_RAW_SYM_KEY rkey;
+
+ (void) memset(&rkey, 0, sizeof (KMF_RAW_SYM_KEY));
+ rv = kmf_get_sym_key_value(kmfhandle, &key, &rkey);
+ if (rv == KMF_OK) {
+ int fd, n, total = 0;
+
+ fd = open(filename, O_CREAT | O_RDWR |O_TRUNC, 0600);
+ if (fd == -1) {
+ rv = KMF_ERR_OPEN_FILE;
+ goto done;
+ }
+ do {
+ n = write(fd, rkey.keydata.val + total,
+ rkey.keydata.len - total);
+ if (n < 0) {
+ if (errno == EINTR)
+ continue;
+ close(fd);
+ rv = KMF_ERR_WRITE_FILE;
+ goto done;
+ }
+ total += n;
+
+ } while (total < rkey.keydata.len);
+ close(fd);
+ }
+done:
+ kmf_free_bigint(&rkey.keydata);
+ kmf_free_kmf_key(kmfhandle, &key);
+ } else if (rv == KMF_OK) {
+ KMF_KEYSTORE_TYPE sslks = KMF_KEYSTORE_OPENSSL;
+ printf(gettext("Found %d asymmetric keys\n"), numkeys);
+
+ numattr = 0;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &sslks, sizeof (sslks));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_RAW_KEY_ATTR,
+ key.keyp, sizeof (KMF_RAW_KEY_DATA));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_ENCODE_FORMAT_ATTR,
+ &format, sizeof (format));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEY_FILENAME_ATTR,
+ filename, strlen(filename));
+ numattr++;
+
+ rv = kmf_store_key(kmfhandle, numattr, attrlist);
+ kmf_free_kmf_key(kmfhandle, &key);
+ }
return (rv);
}
@@ -261,9 +572,10 @@ pk_export_pk11_objects(KMF_HANDLE_T kmfhandle, char *token_spec,
char *filename)
{
KMF_RETURN rv = KMF_OK;
- KMF_FINDCERT_PARAMS fcparms;
- KMF_STORECERT_PARAMS scparms;
KMF_X509_DER_CERT kmfcert;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_PK11TOKEN;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
rv = select_token(kmfhandle, token_spec, TRUE);
@@ -271,25 +583,64 @@ pk_export_pk11_objects(KMF_HANDLE_T kmfhandle, char *token_spec,
return (rv);
}
- (void) memset(&fcparms, 0, sizeof (fcparms));
- fcparms.kstype = KMF_KEYSTORE_PK11TOKEN;
- fcparms.certLabel = certlabel;
- fcparms.issuer = issuer;
- fcparms.subject = subject;
- fcparms.serial = serial;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
- rv = pk_find_export_cert(kmfhandle, &fcparms, &kmfcert);
+ if (certlabel != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_LABEL_ATTR, certlabel,
+ strlen(certlabel));
+ numattr++;
+ }
+
+ if (issuer != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ISSUER_NAME_ATTR, issuer,
+ strlen(issuer));
+ numattr++;
+ }
+
+ if (subject != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_SUBJECT_NAME_ATTR, subject,
+ strlen(subject));
+ numattr++;
+ }
+
+ if (serial != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_BIGINT_ATTR, serial,
+ sizeof (KMF_BIGINT));
+ numattr++;
+ }
+
+ rv = pk_find_export_cert(kmfhandle, attrlist, numattr, &kmfcert);
if (rv == KMF_OK) {
- (void) memset(&scparms, 0, sizeof (scparms));
- scparms.kstype = KMF_KEYSTORE_OPENSSL;
- scparms.sslparms.certfile = filename;
- scparms.sslparms.format = kfmt;
+ kstype = KMF_KEYSTORE_OPENSSL;
+ numattr = 0;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_DATA_ATTR, &kmfcert.certificate,
+ sizeof (KMF_DATA));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_FILENAME_ATTR, filename, strlen(filename));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ENCODE_FORMAT_ATTR, &kfmt, sizeof (kfmt));
+ numattr++;
- rv = KMF_StoreCert(kmfhandle, &scparms,
- &kmfcert.certificate);
+ rv = kmf_store_cert(kmfhandle, numattr, attrlist);
- KMF_FreeKMFCert(kmfhandle, &kmfcert);
+ kmf_free_kmf_cert(kmfhandle, &kmfcert);
}
return (rv);
}
@@ -324,13 +675,13 @@ pk_export(int argc, char *argv[])
/* Parse command line options. Do NOT i18n/l10n. */
while ((opt = getopt_av(argc, argv,
- "k:(keystore)y:(objtype)T:(token)"
- "d:(dir)p:(prefix)"
- "l:(label)n:(nickname)s:(subject)"
- "i:(issuer)S:(serial)"
- "K:(keyfile)c:(certfile)"
- "F:(outformat)"
- "I:(infile)o:(outfile)")) != EOF) {
+ "k:(keystore)y:(objtype)T:(token)"
+ "d:(dir)p:(prefix)"
+ "l:(label)n:(nickname)s:(subject)"
+ "i:(issuer)S:(serial)"
+ "K:(keyfile)c:(certfile)"
+ "F:(outformat)"
+ "I:(infile)o:(outfile)")) != EOF) {
if (EMPTYSTRING(optarg_av))
return (PK_ERR_USAGE);
switch (opt) {
@@ -416,7 +767,7 @@ pk_export(int argc, char *argv[])
/* Filename arg is required. */
if (EMPTYSTRING(filename)) {
cryptoerror(LOG_STDERR, gettext("You must specify "
- "an 'outfile' parameter when exporting.\n"));
+ "an 'outfile' parameter when exporting.\n"));
return (PK_ERR_USAGE);
}
@@ -428,10 +779,10 @@ pk_export(int argc, char *argv[])
/* if PUBLIC or PRIVATE obj was given, the old syntax was used. */
if ((oclass & (PK_PUBLIC_OBJ | PK_PRIVATE_OBJ)) &&
- kstype != KMF_KEYSTORE_PK11TOKEN) {
+ kstype != KMF_KEYSTORE_PK11TOKEN) {
(void) fprintf(stderr, gettext("The objtype parameter "
- "is only relevant if keystore=pkcs11\n"));
+ "is only relevant if keystore=pkcs11\n"));
return (PK_ERR_USAGE);
}
@@ -443,16 +794,16 @@ pk_export(int argc, char *argv[])
if (kstype == KMF_KEYSTORE_OPENSSL) {
if (kfmt != KMF_FORMAT_PKCS12) {
cryptoerror(LOG_STDERR, gettext("PKCS12 "
- "is the only export format "
- "supported for the 'file' "
- "keystore.\n"));
+ "is the only export format "
+ "supported for the 'file' "
+ "keystore.\n"));
return (PK_ERR_USAGE);
}
if (EMPTYSTRING(keyfile) || EMPTYSTRING(certfile)) {
cryptoerror(LOG_STDERR, gettext("A cert file"
- "and a key file must be specified "
- "when exporting to PKCS12 from the "
- "'file' keystore.\n"));
+ "and a key file must be specified "
+ "when exporting to PKCS12 from the "
+ "'file' keystore.\n"));
return (PK_ERR_USAGE);
}
}
@@ -460,8 +811,8 @@ pk_export(int argc, char *argv[])
/* Check if the file exists and might be overwritten. */
if (access(filename, F_OK) == 0) {
cryptoerror(LOG_STDERR,
- gettext("Warning: file \"%s\" exists, "
- "will be overwritten."), filename);
+ gettext("Warning: file \"%s\" exists, "
+ "will be overwritten."), filename);
if (yesno(gettext("Continue with export? "),
gettext("Respond with yes or no.\n"), B_FALSE) == B_FALSE) {
return (0);
@@ -470,7 +821,7 @@ pk_export(int argc, char *argv[])
rv = verify_file(filename);
if (rv != KMF_OK) {
cryptoerror(LOG_STDERR, gettext("The file (%s) "
- "cannot be created.\n"), filename);
+ "cannot be created.\n"), filename);
return (PK_ERR_USAGE);
}
}
@@ -479,11 +830,11 @@ pk_export(int argc, char *argv[])
uchar_t *bytes = NULL;
size_t bytelen;
- rv = KMF_HexString2Bytes((uchar_t *)serstr, &bytes, &bytelen);
+ rv = kmf_hexstr_to_bytes((uchar_t *)serstr, &bytes, &bytelen);
if (rv != KMF_OK || bytes == NULL) {
(void) fprintf(stderr, gettext("serial number "
- "must be specified as a hex number "
- "(ex: 0x0102030405ffeeddee)\n"));
+ "must be specified as a hex number "
+ "(ex: 0x0102030405ffeeddee)\n"));
return (PK_ERR_USAGE);
}
serial.val = bytes;
@@ -491,61 +842,62 @@ pk_export(int argc, char *argv[])
}
if ((kstype == KMF_KEYSTORE_PK11TOKEN ||
- kstype == KMF_KEYSTORE_NSS) &&
- (oclass & (PK_KEY_OBJ | PK_PRIVATE_OBJ) ||
- kfmt == KMF_FORMAT_PKCS12)) {
+ kstype == KMF_KEYSTORE_NSS) &&
+ (oclass & (PK_KEY_OBJ | PK_PRIVATE_OBJ) ||
+ kfmt == KMF_FORMAT_PKCS12)) {
(void) get_token_password(kstype, token_spec,
- &tokencred);
+ &tokencred);
}
- if ((rv = KMF_Initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
+ if ((rv = kmf_initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
cryptoerror(LOG_STDERR, gettext("Error initializing "
- "KMF: 0x%02x\n"), rv);
+ "KMF: 0x%02x\n"), rv);
return (rv);
}
switch (kstype) {
case KMF_KEYSTORE_PK11TOKEN:
if (kfmt == KMF_FORMAT_PKCS12)
- rv = pk_export_pk12_pk11(
- kmfhandle,
- token_spec,
- certlabel,
- issuer, subject,
- &serial, &tokencred,
- filename);
+ rv = pk_export_pk12_pk11(kmfhandle,
+ token_spec, certlabel,
+ issuer, subject,
+ &serial, &tokencred,
+ filename);
+ else if ((oclass & PK_KEY_OBJ) ||
+ kfmt == KMF_FORMAT_RAWKEY)
+ rv = pk_export_pk11_keys(kmfhandle,
+ token_spec, &tokencred, kfmt,
+ certlabel, filename);
else
rv = pk_export_pk11_objects(kmfhandle,
- token_spec,
- certlabel,
- issuer, subject,
- &serial, kfmt,
- filename);
+ token_spec, certlabel,
+ issuer, subject, &serial, kfmt,
+ filename);
break;
case KMF_KEYSTORE_NSS:
if (dir == NULL)
dir = PK_DEFAULT_DIRECTORY;
if (kfmt == KMF_FORMAT_PKCS12)
rv = pk_export_pk12_nss(kmfhandle,
- token_spec, dir, prefix,
- certlabel, issuer,
- subject, &serial,
- &tokencred, filename);
+ token_spec, dir, prefix,
+ certlabel, issuer,
+ subject, &serial,
+ &tokencred, filename);
else
rv = pk_export_nss_objects(kmfhandle,
- token_spec,
- oclass, certlabel, issuer, subject,
- &serial, kfmt, dir, prefix, filename);
+ token_spec,
+ oclass, certlabel, issuer, subject,
+ &serial, kfmt, dir, prefix, filename);
break;
case KMF_KEYSTORE_OPENSSL:
if (kfmt == KMF_FORMAT_PKCS12)
rv = pk_export_pk12_files(kmfhandle,
- certfile, keyfile, dir,
- filename);
+ certfile, keyfile, dir,
+ filename);
else
rv = pk_export_file_objects(kmfhandle, oclass,
- issuer, subject, &serial, kfmt,
- dir, infile, filename);
+ issuer, subject, &serial,
+ dir, infile, filename);
break;
default:
rv = PK_ERR_USAGE;
@@ -554,13 +906,13 @@ pk_export(int argc, char *argv[])
if (rv != KMF_OK) {
display_error(kmfhandle, rv,
- gettext("Error exporting objects"));
+ gettext("Error exporting objects"));
}
if (serial.val != NULL)
free(serial.val);
- (void) KMF_Finalize(kmfhandle);
+ (void) kmf_finalize(kmfhandle);
return (rv);
}
diff --git a/usr/src/cmd/cmd-crypto/pktool/gencert.c b/usr/src/cmd/cmd-crypto/pktool/gencert.c
index 5555c5e386..689b547caf 100644
--- a/usr/src/cmd/cmd-crypto/pktool/gencert.c
+++ b/usr/src/cmd/cmd-crypto/pktool/gencert.c
@@ -56,40 +56,38 @@ gencert_pkcs11(KMF_HANDLE_T kmfhandle,
uint16_t kubits, int kucrit, KMF_CREDENTIAL *tokencred)
{
KMF_RETURN kmfrv = KMF_OK;
- KMF_CREATEKEYPAIR_PARAMS kp_params;
- KMF_STORECERT_PARAMS sc_params;
KMF_KEY_HANDLE pubk, prik;
KMF_X509_CERTIFICATE signedCert;
KMF_X509_NAME certSubject;
KMF_X509_NAME certIssuer;
KMF_DATA x509DER;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_PK11TOKEN;
+ KMF_ATTRIBUTE attrlist[16];
+ int numattr = 0;
+ KMF_KEY_ALG keytype;
+ uint32_t keylength;
(void) memset(&signedCert, 0, sizeof (signedCert));
(void) memset(&certSubject, 0, sizeof (certSubject));
(void) memset(&certIssuer, 0, sizeof (certIssuer));
(void) memset(&x509DER, 0, sizeof (x509DER));
- (void) memset(&kp_params, 0, sizeof (kp_params));
/* If the subject name cannot be parsed, flag it now and exit */
- if (KMF_DNParser(subject, &certSubject) != KMF_OK) {
+ if (kmf_dn_parser(subject, &certSubject) != KMF_OK) {
cryptoerror(LOG_STDERR,
- gettext("Subject name cannot be parsed.\n"));
+ gettext("Subject name cannot be parsed.\n"));
return (PK_ERR_USAGE);
}
/* For a self-signed cert, the issuser and subject are the same */
- if (KMF_DNParser(subject, &certIssuer) != KMF_OK) {
+ if (kmf_dn_parser(subject, &certIssuer) != KMF_OK) {
cryptoerror(LOG_STDERR,
- gettext("Subject name cannot be parsed.\n"));
+ gettext("Subject name cannot be parsed.\n"));
return (PK_ERR_USAGE);
}
- kp_params.kstype = KMF_KEYSTORE_PK11TOKEN;
- kp_params.keylabel = certlabel;
- kp_params.keylength = keylen; /* bits */
- kp_params.keytype = keyAlg;
- kp_params.cred.cred = tokencred->cred;
- kp_params.cred.credlen = tokencred->credlen;
+ keylength = keylen; /* bits */
+ keytype = keyAlg;
/* Select a PKCS11 token */
kmfrv = select_token(kmfhandle, token, FALSE);
@@ -98,57 +96,129 @@ gencert_pkcs11(KMF_HANDLE_T kmfhandle,
return (kmfrv);
}
- kmfrv = KMF_CreateKeypair(kmfhandle, &kp_params, &prik, &pubk);
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype,
+ sizeof (kstype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYALG_ATTR, &keytype,
+ sizeof (keytype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYLENGTH_ATTR, &keylength,
+ sizeof (keylength));
+ numattr++;
+
+ if (certlabel != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYLABEL_ATTR, certlabel,
+ strlen(certlabel));
+ numattr++;
+ }
+
+ if (tokencred != NULL && tokencred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CREDENTIAL_ATTR, tokencred,
+ sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_PRIVKEY_HANDLE_ATTR, &prik,
+ sizeof (KMF_KEY_HANDLE));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_PUBKEY_HANDLE_ATTR, &pubk,
+ sizeof (KMF_KEY_HANDLE));
+ numattr++;
+
+ kmfrv = kmf_create_keypair(kmfhandle, numattr, attrlist);
if (kmfrv != KMF_OK) {
return (kmfrv);
}
- SET_VALUE(KMF_SetCertPubKey(kmfhandle, &pubk, &signedCert),
- "keypair");
+ SET_VALUE(kmf_set_cert_pubkey(kmfhandle, &pubk, &signedCert),
+ "keypair");
- SET_VALUE(KMF_SetCertVersion(&signedCert, 2), "version number");
+ SET_VALUE(kmf_set_cert_version(&signedCert, 2), "version number");
- SET_VALUE(KMF_SetCertSerialNumber(&signedCert, serial),
- "serial number");
+ SET_VALUE(kmf_set_cert_serial(&signedCert, serial),
+ "serial number");
- SET_VALUE(KMF_SetCertValidityTimes(&signedCert, NULL, ltime),
- "validity time");
+ SET_VALUE(kmf_set_cert_validity(&signedCert, NULL, ltime),
+ "validity time");
- SET_VALUE(KMF_SetCertSignatureAlgorithm(&signedCert, sigAlg),
- "signature algorithm");
+ SET_VALUE(kmf_set_cert_sig_alg(&signedCert, sigAlg),
+ "signature algorithm");
- SET_VALUE(KMF_SetCertSubjectName(&signedCert, &certSubject),
- "subject name");
+ SET_VALUE(kmf_set_cert_subject(&signedCert, &certSubject),
+ "subject name");
- SET_VALUE(KMF_SetCertIssuerName(&signedCert, &certIssuer),
- "issuer name");
+ SET_VALUE(kmf_set_cert_issuer(&signedCert, &certIssuer),
+ "issuer name");
if (altname != NULL)
- SET_VALUE(KMF_SetCertSubjectAltName(&signedCert, altcrit,
- alttype, altname), "subjectAltName");
+ SET_VALUE(kmf_set_cert_subject_altname(&signedCert, altcrit,
+ alttype, altname), "subjectAltName");
if (kubits != 0)
- SET_VALUE(KMF_SetCertKeyUsage(&signedCert, kucrit, kubits),
- "KeyUsage");
+ SET_VALUE(kmf_set_cert_ku(&signedCert, kucrit, kubits),
+ "KeyUsage");
- if ((kmfrv = KMF_SignCertRecord(kmfhandle, &prik,
- &signedCert, &x509DER)) != KMF_OK) {
+ /*
+ * Construct attributes for the kmf_sign_cert operation.
+ */
+ numattr = 0;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEY_HANDLE_ATTR,
+ &prik, sizeof (KMF_KEY_HANDLE_ATTR));
+ numattr++;
+
+ /* cert data that is to be signed */
+ kmf_set_attr_at_index(attrlist, numattr, KMF_X509_CERTIFICATE_ATTR,
+ &signedCert, sizeof (KMF_X509_CERTIFICATE));
+ numattr++;
+
+ /* output buffer for the signed cert */
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_DATA_ATTR,
+ &x509DER, sizeof (KMF_DATA));
+ numattr++;
+
+ if ((kmfrv = kmf_sign_cert(kmfhandle, numattr, attrlist)) !=
+ KMF_OK) {
goto cleanup;
}
- (void) memset(&sc_params, 0, sizeof (sc_params));
- sc_params.kstype = KMF_KEYSTORE_PK11TOKEN;
- sc_params.certLabel = certlabel;
-
/*
* Store the cert in the DB.
*/
- kmfrv = KMF_StoreCert(kmfhandle, &sc_params, &x509DER);
+ numattr = 0;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_DATA_ATTR,
+ &x509DER, sizeof (KMF_DATA));
+ numattr++;
+
+ if (certlabel != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_LABEL_ATTR,
+ certlabel, strlen(certlabel));
+ numattr++;
+ }
+
+ kmfrv = kmf_store_cert(kmfhandle, numattr, attrlist);
+
cleanup:
- KMF_FreeData(&x509DER);
- KMF_FreeDN(&certSubject);
- KMF_FreeDN(&certIssuer);
+ kmf_free_data(&x509DER);
+ kmf_free_dn(&certSubject);
+ kmf_free_dn(&certIssuer);
return (kmfrv);
}
@@ -162,8 +232,6 @@ gencert_file(KMF_HANDLE_T kmfhandle,
char *dir, char *outcert, char *outkey)
{
KMF_RETURN kmfrv;
- KMF_CREATEKEYPAIR_PARAMS kp_params;
- KMF_STORECERT_PARAMS sc_params;
KMF_KEY_HANDLE pubk, prik;
KMF_X509_CERTIFICATE signedCert;
KMF_X509_NAME certSubject;
@@ -171,26 +239,30 @@ gencert_file(KMF_HANDLE_T kmfhandle,
KMF_DATA x509DER;
char *fullcertpath = NULL;
char *fullkeypath = NULL;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL;
+ KMF_ATTRIBUTE attrlist[10];
+ int numattr = 0;
+ KMF_KEY_ALG keytype;
+ uint32_t keylength;
+ KMF_ENCODE_FORMAT format;
(void) memset(&signedCert, 0, sizeof (signedCert));
(void) memset(&certSubject, 0, sizeof (certSubject));
(void) memset(&certIssuer, 0, sizeof (certIssuer));
(void) memset(&x509DER, 0, sizeof (x509DER));
- (void) memset(&kp_params, 0, sizeof (kp_params));
- (void) memset(&sc_params, 0, sizeof (sc_params));
if (EMPTYSTRING(outcert) || EMPTYSTRING(outkey)) {
cryptoerror(LOG_STDERR,
- gettext("No output file was specified for "
- "the cert or key\n"));
+ gettext("No output file was specified for "
+ "the cert or key\n"));
return (PK_ERR_USAGE);
}
if (dir != NULL) {
fullcertpath = get_fullpath(dir, outcert);
if (fullcertpath == NULL) {
cryptoerror(LOG_STDERR,
- gettext("Cannot create file %s in "
- "directory %s\n"), dir, outcert);
+ gettext("Cannot create file %s in directory %s\n"),
+ dir, outcert);
return (PK_ERR_USAGE);
}
} else {
@@ -198,9 +270,8 @@ gencert_file(KMF_HANDLE_T kmfhandle,
}
if (verify_file(fullcertpath)) {
cryptoerror(LOG_STDERR,
- gettext("Cannot write the indicated output "
- "certificate file (%s).\n"),
- fullcertpath);
+ gettext("Cannot write the indicated output "
+ "certificate file (%s).\n"), fullcertpath);
free(fullcertpath);
return (PK_ERR_USAGE);
}
@@ -208,8 +279,8 @@ gencert_file(KMF_HANDLE_T kmfhandle,
fullkeypath = get_fullpath(dir, outkey);
if (fullkeypath == NULL) {
cryptoerror(LOG_STDERR,
- gettext("Cannot create file %s in "
- "directory %s\n"), dir, outkey);
+ gettext("Cannot create file %s in directory %s\n"),
+ dir, outkey);
free(fullcertpath);
return (PK_ERR_USAGE);
}
@@ -218,83 +289,146 @@ gencert_file(KMF_HANDLE_T kmfhandle,
}
if (verify_file(fullkeypath)) {
cryptoerror(LOG_STDERR,
- gettext("Cannot write the indicated output "
- "key file (%s).\n"),
- fullkeypath);
+ gettext("Cannot write the indicated output "
+ "key file (%s).\n"), fullkeypath);
free(fullkeypath);
free(fullcertpath);
return (PK_ERR_USAGE);
}
/* If the subject name cannot be parsed, flag it now and exit */
- if (KMF_DNParser(subject, &certSubject) != KMF_OK) {
+ if (kmf_dn_parser(subject, &certSubject) != KMF_OK) {
cryptoerror(LOG_STDERR,
- gettext("Subject name cannot be parsed (%s)\n"),
- subject);
+ gettext("Subject name cannot be parsed (%s)\n"), subject);
return (PK_ERR_USAGE);
}
/* For a self-signed cert, the issuser and subject are the same */
- if (KMF_DNParser(subject, &certIssuer) != KMF_OK) {
+ if (kmf_dn_parser(subject, &certIssuer) != KMF_OK) {
cryptoerror(LOG_STDERR,
- gettext("Subject name cannot be parsed (%s)\n"),
- subject);
- KMF_FreeDN(&certSubject);
+ gettext("Subject name cannot be parsed (%s)\n"), subject);
+ kmf_free_dn(&certSubject);
return (PK_ERR_USAGE);
}
- kp_params.kstype = KMF_KEYSTORE_OPENSSL;
- kp_params.keylength = keylen; /* bits */
- kp_params.keytype = keyAlg;
+ keylength = keylen; /* bits */
+ keytype = keyAlg;
+ format = fmt;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype,
+ sizeof (kstype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYALG_ATTR, &keytype,
+ sizeof (keytype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYLENGTH_ATTR, &keylength,
+ sizeof (keylength));
+ numattr++;
+
+ if (fullkeypath != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEY_FILENAME_ATTR, fullkeypath,
+ strlen(fullkeypath));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ENCODE_FORMAT_ATTR, &format,
+ sizeof (format));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_PRIVKEY_HANDLE_ATTR, &prik,
+ sizeof (KMF_KEY_HANDLE));
+ numattr++;
- kp_params.sslparms.keyfile = fullkeypath;
- kp_params.sslparms.format = fmt;
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_PUBKEY_HANDLE_ATTR, &pubk,
+ sizeof (KMF_KEY_HANDLE));
+ numattr++;
- kmfrv = KMF_CreateKeypair(kmfhandle, &kp_params, &prik, &pubk);
+ kmfrv = kmf_create_keypair(kmfhandle, numattr, attrlist);
if (kmfrv != KMF_OK) {
goto cleanup;
}
- SET_VALUE(KMF_SetCertPubKey(kmfhandle, &pubk, &signedCert),
- "keypair");
- SET_VALUE(KMF_SetCertVersion(&signedCert, 2), "version number");
+ SET_VALUE(kmf_set_cert_pubkey(kmfhandle, &pubk, &signedCert),
+ "keypair");
+
+ SET_VALUE(kmf_set_cert_version(&signedCert, 2), "version number");
- SET_VALUE(KMF_SetCertSerialNumber(&signedCert, serial),
- "serial number");
+ SET_VALUE(kmf_set_cert_serial(&signedCert, serial),
+ "serial number");
- SET_VALUE(KMF_SetCertValidityTimes(&signedCert, NULL, ltime),
- "validity time");
+ SET_VALUE(kmf_set_cert_validity(&signedCert, NULL, ltime),
+ "validity time");
- SET_VALUE(KMF_SetCertSignatureAlgorithm(&signedCert, sigAlg),
- "signature algorithm");
+ SET_VALUE(kmf_set_cert_sig_alg(&signedCert, sigAlg),
+ "signature algorithm");
- SET_VALUE(KMF_SetCertSubjectName(&signedCert, &certSubject),
- "subject name");
+ SET_VALUE(kmf_set_cert_subject(&signedCert, &certSubject),
+ "subject name");
- SET_VALUE(KMF_SetCertIssuerName(&signedCert, &certIssuer),
- "issuer name");
+ SET_VALUE(kmf_set_cert_issuer(&signedCert, &certIssuer),
+ "issuer name");
if (altname != NULL)
- SET_VALUE(KMF_SetCertSubjectAltName(&signedCert, altcrit,
- alttype, altname), "subjectAltName");
+ SET_VALUE(kmf_set_cert_subject_altname(&signedCert, altcrit,
+ alttype, altname), "subjectAltName");
if (kubits != 0)
- SET_VALUE(KMF_SetCertKeyUsage(&signedCert, kucrit, kubits),
- "KeyUsage");
-
- if ((kmfrv = KMF_SignCertRecord(kmfhandle, &prik,
- &signedCert, &x509DER)) != KMF_OK) {
+ SET_VALUE(kmf_set_cert_ku(&signedCert, kucrit, kubits),
+ "KeyUsage");
+ /*
+ * Construct attributes for the kmf_sign_cert operation.
+ */
+ numattr = 0;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEY_HANDLE_ATTR,
+ &prik, sizeof (KMF_KEY_HANDLE_ATTR));
+ numattr++;
+
+ /* cert data that is to be signed */
+ kmf_set_attr_at_index(attrlist, numattr, KMF_X509_CERTIFICATE_ATTR,
+ &signedCert, sizeof (KMF_X509_CERTIFICATE));
+ numattr++;
+
+ /* output buffer for the signed cert */
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_DATA_ATTR,
+ &x509DER, sizeof (KMF_DATA));
+ numattr++;
+
+ if ((kmfrv = kmf_sign_cert(kmfhandle, numattr, attrlist)) !=
+ KMF_OK) {
goto cleanup;
}
- sc_params.kstype = KMF_KEYSTORE_OPENSSL;
- sc_params.sslparms.certfile = fullcertpath;
- sc_params.sslparms.keyfile = fullkeypath;
- sc_params.sslparms.format = fmt;
/*
* Store the cert in the DB.
*/
- kmfrv = KMF_StoreCert(kmfhandle, &sc_params, &x509DER);
+ numattr = 0;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_DATA_ATTR,
+ &x509DER, sizeof (KMF_DATA));
+ numattr++;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_FILENAME_ATTR,
+ fullcertpath, strlen(fullcertpath));
+ numattr++;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_ENCODE_FORMAT_ATTR,
+ &fmt, sizeof (fmt));
+ numattr++;
+
+ kmfrv = kmf_store_cert(kmfhandle, numattr, attrlist);
cleanup:
if (fullkeypath != NULL)
@@ -302,9 +436,9 @@ cleanup:
if (fullcertpath != NULL)
free(fullcertpath);
- KMF_FreeData(&x509DER);
- KMF_FreeDN(&certSubject);
- KMF_FreeDN(&certIssuer);
+ kmf_free_data(&x509DER);
+ kmf_free_dn(&certSubject);
+ kmf_free_dn(&certIssuer);
return (kmfrv);
}
@@ -320,13 +454,16 @@ gencert_nss(KMF_HANDLE_T kmfhandle,
int kucrit, KMF_CREDENTIAL *tokencred)
{
KMF_RETURN kmfrv;
- KMF_CREATEKEYPAIR_PARAMS kp_params;
- KMF_STORECERT_PARAMS sc_params;
KMF_KEY_HANDLE pubk, prik;
KMF_X509_CERTIFICATE signedCert;
KMF_X509_NAME certSubject;
KMF_X509_NAME certIssuer;
KMF_DATA x509DER;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS;
+ KMF_ATTRIBUTE attrlist[16];
+ int numattr = 0;
+ KMF_KEY_ALG keytype;
+ uint32_t keylength;
if (token == NULL)
token = DEFAULT_NSS_TOKEN;
@@ -341,81 +478,164 @@ gencert_nss(KMF_HANDLE_T kmfhandle,
(void) memset(&x509DER, 0, sizeof (x509DER));
/* If the subject name cannot be parsed, flag it now and exit */
- if (KMF_DNParser(subject, &certSubject) != KMF_OK) {
+ if (kmf_dn_parser(subject, &certSubject) != KMF_OK) {
cryptoerror(LOG_STDERR,
- gettext("Subject name cannot be parsed.\n"));
+ gettext("Subject name cannot be parsed.\n"));
return (PK_ERR_USAGE);
}
/* For a self-signed cert, the issuser and subject are the same */
- if (KMF_DNParser(subject, &certIssuer) != KMF_OK) {
+ if (kmf_dn_parser(subject, &certIssuer) != KMF_OK) {
cryptoerror(LOG_STDERR,
- gettext("Subject name cannot be parsed.\n"));
+ gettext("Subject name cannot be parsed.\n"));
return (PK_ERR_USAGE);
}
- (void) memset(&kp_params, 0, sizeof (kp_params));
+ keylength = keylen; /* bits */
+ keytype = keyAlg;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype,
+ sizeof (kstype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYALG_ATTR, &keytype,
+ sizeof (keytype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYLENGTH_ATTR, &keylength,
+ sizeof (keylength));
+ numattr++;
+
+ if (nickname != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYLABEL_ATTR, nickname,
+ strlen(nickname));
+ numattr++;
+ }
+
+ if (tokencred != NULL && tokencred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CREDENTIAL_ATTR, tokencred,
+ sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
+
+ if (token != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_TOKEN_LABEL_ATTR, token,
+ strlen(token));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_PRIVKEY_HANDLE_ATTR, &prik,
+ sizeof (KMF_KEY_HANDLE));
+ numattr++;
- kp_params.kstype = KMF_KEYSTORE_NSS;
- kp_params.keylabel = nickname;
- kp_params.keylength = keylen; /* bits */
- kp_params.keytype = keyAlg;
- kp_params.cred.cred = tokencred->cred;
- kp_params.cred.credlen = tokencred->credlen;
- kp_params.nssparms.slotlabel = token;
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_PUBKEY_HANDLE_ATTR, &pubk,
+ sizeof (KMF_KEY_HANDLE));
+ numattr++;
- kmfrv = KMF_CreateKeypair(kmfhandle, &kp_params, &prik, &pubk);
+ kmfrv = kmf_create_keypair(kmfhandle, numattr, attrlist);
if (kmfrv != KMF_OK) {
return (kmfrv);
}
- SET_VALUE(KMF_SetCertPubKey(kmfhandle, &pubk, &signedCert),
- "keypair");
+ SET_VALUE(kmf_set_cert_pubkey(kmfhandle, &pubk, &signedCert),
+ "keypair");
- SET_VALUE(KMF_SetCertVersion(&signedCert, 2), "version number");
+ SET_VALUE(kmf_set_cert_version(&signedCert, 2), "version number");
- SET_VALUE(KMF_SetCertSerialNumber(&signedCert, serial),
- "serial number");
+ SET_VALUE(kmf_set_cert_serial(&signedCert, serial),
+ "serial number");
- SET_VALUE(KMF_SetCertValidityTimes(&signedCert, NULL, ltime),
- "validity time");
+ SET_VALUE(kmf_set_cert_validity(&signedCert, NULL, ltime),
+ "validity time");
- SET_VALUE(KMF_SetCertSignatureAlgorithm(&signedCert, sigAlg),
- "signature algorithm");
+ SET_VALUE(kmf_set_cert_sig_alg(&signedCert, sigAlg),
+ "signature algorithm");
- SET_VALUE(KMF_SetCertSubjectName(&signedCert, &certSubject),
- "subject name");
+ SET_VALUE(kmf_set_cert_subject(&signedCert, &certSubject),
+ "subject name");
- SET_VALUE(KMF_SetCertIssuerName(&signedCert, &certIssuer),
- "issuer name");
+ SET_VALUE(kmf_set_cert_issuer(&signedCert, &certIssuer),
+ "issuer name");
if (altname != NULL)
- SET_VALUE(KMF_SetCertSubjectAltName(&signedCert, altcrit,
- alttype, altname), "subjectAltName");
+ SET_VALUE(kmf_set_cert_subject_altname(&signedCert, altcrit,
+ alttype, altname), "subjectAltName");
if (kubits)
- SET_VALUE(KMF_SetCertKeyUsage(&signedCert, kucrit, kubits),
- "subjectAltName");
+ SET_VALUE(kmf_set_cert_ku(&signedCert, kucrit, kubits),
+ "subjectAltName");
- if ((kmfrv = KMF_SignCertRecord(kmfhandle, &prik,
- &signedCert, &x509DER)) != KMF_OK) {
+ /*
+ * Construct attributes for the kmf_sign_cert operation.
+ */
+ numattr = 0;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEY_HANDLE_ATTR,
+ &prik, sizeof (KMF_KEY_HANDLE_ATTR));
+ numattr++;
+
+ /* cert data that is to be signed */
+ kmf_set_attr_at_index(attrlist, numattr, KMF_X509_CERTIFICATE_ATTR,
+ &signedCert, sizeof (KMF_X509_CERTIFICATE));
+ numattr++;
+
+ /* output buffer for the signed cert */
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_DATA_ATTR,
+ &x509DER, sizeof (KMF_DATA));
+ numattr++;
+
+ if ((kmfrv = kmf_sign_cert(kmfhandle, numattr, attrlist)) !=
+ KMF_OK) {
goto cleanup;
}
- sc_params.kstype = KMF_KEYSTORE_NSS;
- sc_params.certLabel = nickname;
- sc_params.nssparms.trustflag = trust;
- sc_params.nssparms.slotlabel = token;
-
/*
* Store the cert in the DB.
*/
- kmfrv = KMF_StoreCert(kmfhandle, &sc_params, &x509DER);
+ numattr = 0;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_DATA_ATTR,
+ &x509DER, sizeof (KMF_DATA));
+ numattr++;
+
+ if (nickname != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_LABEL_ATTR,
+ nickname, strlen(nickname));
+ numattr++;
+ }
+
+ if (trust != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_TRUSTFLAG_ATTR,
+ trust, strlen(trust));
+ numattr++;
+ }
+
+ if (token != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_LABEL_ATTR,
+ token, strlen(token));
+ numattr++;
+ }
+
+ kmfrv = kmf_store_cert(kmfhandle, numattr, attrlist);
cleanup:
- KMF_FreeData(&x509DER);
- KMF_FreeDN(&certSubject);
- KMF_FreeDN(&certIssuer);
+ kmf_free_data(&x509DER);
+ kmf_free_dn(&certSubject);
+ kmf_free_dn(&certIssuer);
return (kmfrv);
}
@@ -456,10 +676,10 @@ pk_gencert(int argc, char *argv[])
int altcrit = 0, kucrit = 0;
while ((opt = getopt_av(argc, argv,
- "ik:(keystore)s:(subject)n:(nickname)A:(altname)"
- "T:(token)d:(dir)p:(prefix)t:(keytype)y:(keylen)"
- "r:(trust)L:(lifetime)l:(label)c:(outcert)"
- "K:(outkey)S:(serial)F:(format)u:(keyusage)")) != EOF) {
+ "ik:(keystore)s:(subject)n:(nickname)A:(altname)"
+ "T:(token)d:(dir)p:(prefix)t:(keytype)y:(keylen)"
+ "r:(trust)L:(lifetime)l:(label)c:(outcert)"
+ "K:(outkey)S:(serial)F:(format)u:(keyusage)")) != EOF) {
if (opt != 'i' && EMPTYSTRING(optarg_av))
return (PK_ERR_USAGE);
@@ -514,11 +734,11 @@ pk_gencert(int argc, char *argv[])
break;
case 'y':
if (sscanf(optarg_av, "%d",
- &keylen) != 1) {
+ &keylen) != 1) {
cryptoerror(LOG_STDERR,
- gettext("key length must be"
- "a numeric value (%s)\n"),
- optarg_av);
+ gettext("key length must be"
+ "a numeric value (%s)\n"),
+ optarg_av);
return (PK_ERR_USAGE);
}
break;
@@ -562,7 +782,7 @@ pk_gencert(int argc, char *argv[])
return (PK_ERR_USAGE);
}
- if ((rv = KMF_Initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
+ if ((rv = kmf_initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
cryptoerror(LOG_STDERR, gettext("Error initializing KMF\n"));
return (PK_ERR_USAGE);
}
@@ -591,13 +811,13 @@ pk_gencert(int argc, char *argv[])
if (Str2Lifetime(lifetime, &ltime) != 0) {
cryptoerror(LOG_STDERR,
- gettext("Error parsing lifetime string\n"));
+ gettext("Error parsing lifetime string\n"));
return (PK_ERR_USAGE);
}
if (Str2KeyType(keytype, &keyAlg, &sigAlg) != 0) {
cryptoerror(LOG_STDERR, gettext("Unrecognized keytype (%s).\n"),
- keytype);
+ keytype);
return (PK_ERR_USAGE);
}
@@ -630,20 +850,20 @@ pk_gencert(int argc, char *argv[])
if (serstr == NULL) {
(void) fprintf(stderr, gettext("A serial number "
- "must be specified as a hex number when creating"
- " a self-signed certificate "
- "(ex: serial=0x0102030405feedface)\n"));
+ "must be specified as a hex number when creating"
+ " a self-signed certificate "
+ "(ex: serial=0x0102030405feedface)\n"));
rv = PK_ERR_USAGE;
goto end;
} else {
uchar_t *bytes = NULL;
size_t bytelen;
- rv = KMF_HexString2Bytes((uchar_t *)serstr, &bytes, &bytelen);
+ rv = kmf_hexstr_to_bytes((uchar_t *)serstr, &bytes, &bytelen);
if (rv != KMF_OK || bytes == NULL) {
(void) fprintf(stderr, gettext("serial number "
- "must be specified as a hex number "
- "(ex: 0x0102030405ffeeddee)\n"));
+ "must be specified as a hex number "
+ "(ex: 0x0102030405ffeeddee)\n"));
rv = PK_ERR_USAGE;
goto end;
}
@@ -655,8 +875,8 @@ pk_gencert(int argc, char *argv[])
rv = verify_altname(altname, &alttype, &altcrit);
if (rv != KMF_OK) {
(void) fprintf(stderr, gettext("Subject AltName "
- "must be specified as a name=value pair. "
- "See the man page for details.\n"));
+ "must be specified as a name=value pair. "
+ "See the man page for details.\n"));
rv = PK_ERR_USAGE;
goto end;
} else {
@@ -671,8 +891,8 @@ pk_gencert(int argc, char *argv[])
rv = verify_keyusage(keyusagestr, &kubits, &kucrit);
if (rv != KMF_OK) {
(void) fprintf(stderr, gettext("KeyUsage "
- "must be specified as a comma-separated list. "
- "See the man page for details.\n"));
+ "must be specified as a comma-separated list. "
+ "See the man page for details.\n"));
rv = PK_ERR_USAGE;
goto end;
}
@@ -695,26 +915,26 @@ pk_gencert(int argc, char *argv[])
dir = PK_DEFAULT_DIRECTORY;
rv = gencert_nss(kmfhandle,
- tokenname, subname, altname, alttype, altcrit,
- certlabel, dir, prefix, keyAlg, sigAlg, keylen,
- trust, ltime, &serial, kubits, kucrit, &tokencred);
+ tokenname, subname, altname, alttype, altcrit,
+ certlabel, dir, prefix, keyAlg, sigAlg, keylen,
+ trust, ltime, &serial, kubits, kucrit, &tokencred);
} else if (kstype == KMF_KEYSTORE_PK11TOKEN) {
rv = gencert_pkcs11(kmfhandle,
- tokenname, subname, altname, alttype, altcrit,
- certlabel, keyAlg, sigAlg, keylen, ltime,
- &serial, kubits, kucrit, &tokencred);
+ tokenname, subname, altname, alttype, altcrit,
+ certlabel, keyAlg, sigAlg, keylen, ltime,
+ &serial, kubits, kucrit, &tokencred);
} else if (kstype == KMF_KEYSTORE_OPENSSL) {
rv = gencert_file(kmfhandle,
- keyAlg, sigAlg, keylen, fmt,
- ltime, subname, altname, alttype, altcrit,
- &serial, kubits, kucrit, dir, outcert, outkey);
+ keyAlg, sigAlg, keylen, fmt,
+ ltime, subname, altname, alttype, altcrit,
+ &serial, kubits, kucrit, dir, outcert, outkey);
}
if (rv != KMF_OK)
display_error(kmfhandle, rv,
- gettext("Error creating certificate and keypair"));
+ gettext("Error creating certificate and keypair"));
end:
if (subname)
free(subname);
@@ -724,6 +944,6 @@ end:
if (serial.val != NULL)
free(serial.val);
- (void) KMF_Finalize(kmfhandle);
+ (void) kmf_finalize(kmfhandle);
return (rv);
}
diff --git a/usr/src/cmd/cmd-crypto/pktool/gencsr.c b/usr/src/cmd/cmd-crypto/pktool/gencsr.c
index fcc00d01c8..e8bf92de03 100644
--- a/usr/src/cmd/cmd-crypto/pktool/gencsr.c
+++ b/usr/src/cmd/cmd-crypto/pktool/gencsr.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*
*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -57,17 +57,19 @@ gencsr_pkcs11(KMF_HANDLE_T kmfhandle,
KMF_CREDENTIAL *tokencred)
{
KMF_RETURN kmfrv = KMF_OK;
- KMF_CREATEKEYPAIR_PARAMS kp_params;
- KMF_DELETEKEY_PARAMS dk_params;
KMF_KEY_HANDLE pubk, prik;
KMF_X509_NAME csrSubject;
KMF_CSR_DATA csr;
KMF_ALGORITHM_INDEX sigAlg;
KMF_DATA signedCsr = {NULL, 0};
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_PK11TOKEN;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
+ boolean_t storekey = TRUE;
+
(void) memset(&csr, 0, sizeof (csr));
(void) memset(&csrSubject, 0, sizeof (csrSubject));
- (void) memset(&kp_params, 0, sizeof (kp_params));
if (keyAlg == KMF_DSA)
sigAlg = KMF_ALGID_SHA1WithDSA;
@@ -76,61 +78,99 @@ gencsr_pkcs11(KMF_HANDLE_T kmfhandle,
/* If the subject name cannot be parsed, flag it now and exit */
- if ((kmfrv = KMF_DNParser(subject, &csrSubject)) != KMF_OK) {
+ if ((kmfrv = kmf_dn_parser(subject, &csrSubject)) != KMF_OK) {
return (kmfrv);
}
- kp_params.kstype = KMF_KEYSTORE_PK11TOKEN;
- kp_params.keylabel = certlabel;
- kp_params.keylength = keylen; /* bits */
- kp_params.keytype = keyAlg;
- kp_params.cred.cred = tokencred->cred;
- kp_params.cred.credlen = tokencred->credlen;
-
/* Select a PKCS11 token */
kmfrv = select_token(kmfhandle, token, FALSE);
if (kmfrv != KMF_OK) {
return (kmfrv);
}
- kmfrv = KMF_CreateKeypair(kmfhandle, &kp_params, &prik, &pubk);
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (certlabel != NULL && strlen(certlabel)) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYLABEL_ATTR,
+ certlabel, strlen(certlabel));
+ numattr++;
+ }
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYLENGTH_ATTR,
+ &keylen, sizeof (keylen));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYALG_ATTR,
+ &keyAlg, sizeof (keyAlg));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CREDENTIAL_ATTR,
+ tokencred, sizeof (KMF_CREDENTIAL));
+ numattr++;
+
+ if (token && strlen(token)) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_LABEL_ATTR,
+ token, strlen(token));
+ numattr++;
+ }
+ kmf_set_attr_at_index(attrlist, numattr, KMF_PUBKEY_HANDLE_ATTR,
+ &pubk, sizeof (KMF_KEY_HANDLE));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_PRIVKEY_HANDLE_ATTR,
+ &prik, sizeof (KMF_KEY_HANDLE));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_STOREKEY_BOOL_ATTR,
+ &storekey, sizeof (storekey));
+ numattr++;
+
+ kmfrv = kmf_create_keypair(kmfhandle, numattr, attrlist);
if (kmfrv != KMF_OK) {
return (kmfrv);
}
- SET_VALUE(KMF_SetCSRPubKey(kmfhandle, &pubk, &csr), "keypair");
+ SET_VALUE(kmf_set_csr_pubkey(kmfhandle, &pubk, &csr), "keypair");
- SET_VALUE(KMF_SetCSRVersion(&csr, 2), "version number");
+ SET_VALUE(kmf_set_csr_version(&csr, 2), "version number");
- SET_VALUE(KMF_SetCSRSubjectName(&csr, &csrSubject),
- "subject name");
+ SET_VALUE(kmf_set_csr_subject(&csr, &csrSubject), "subject name");
- SET_VALUE(KMF_SetCSRSignatureAlgorithm(&csr, sigAlg),
- "SignatureAlgorithm");
+ SET_VALUE(kmf_set_csr_sig_alg(&csr, sigAlg),
+ "SignatureAlgorithm");
if (altname != NULL) {
- SET_VALUE(KMF_SetCSRSubjectAltName(&csr, altname, altcrit,
- alttype), "SetCSRSubjectAltName");
+ SET_VALUE(kmf_set_csr_subject_altname(&csr, altname, altcrit,
+ alttype), "SetCSRSubjectAltName");
}
if (kubits != 0) {
- SET_VALUE(KMF_SetCSRKeyUsage(&csr, kucrit, kubits),
- "SetCSRKeyUsage");
+ SET_VALUE(kmf_set_csr_ku(&csr, kucrit, kubits),
+ "SetCSRKeyUsage");
}
- if ((kmfrv = KMF_SignCSR(kmfhandle, &csr, &prik, &signedCsr)) ==
- KMF_OK) {
- kmfrv = KMF_CreateCSRFile(&signedCsr, fmt, csrfile);
+ if ((kmfrv = kmf_sign_csr(kmfhandle, &csr, &prik, &signedCsr)) ==
+ KMF_OK) {
+ kmfrv = kmf_create_csr_file(&signedCsr, fmt, csrfile);
}
cleanup:
- (void) KMF_FreeData(&signedCsr);
- (void) KMF_FreeKMFKey(kmfhandle, &prik);
+ (void) kmf_free_data(&signedCsr);
+ (void) kmf_free_kmf_key(kmfhandle, &prik);
/* delete the key */
- (void) memset(&dk_params, 0, sizeof (dk_params));
- dk_params.kstype = KMF_KEYSTORE_PK11TOKEN;
- (void) KMF_DeleteKeyFromKeystore(kmfhandle, &dk_params, &pubk);
- (void) KMF_FreeSignedCSR(&csr);
+ numattr = 0;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_PUBKEY_HANDLE_ATTR,
+ &pubk, sizeof (KMF_KEY_HANDLE));
+ numattr++;
+
+ (void) kmf_delete_key_from_keystore(kmfhandle, numattr, attrlist);
+
+ (void) kmf_free_signed_csr(&csr);
return (kmfrv);
}
@@ -144,7 +184,6 @@ gencsr_file(KMF_HANDLE_T kmfhandle,
char *dir, char *outcsr, char *outkey)
{
KMF_RETURN kmfrv;
- KMF_CREATEKEYPAIR_PARAMS kp_params;
KMF_KEY_HANDLE pubk, prik;
KMF_X509_NAME csrSubject;
KMF_CSR_DATA csr;
@@ -153,22 +192,26 @@ gencsr_file(KMF_HANDLE_T kmfhandle,
char *fullcsrpath = NULL;
char *fullkeypath = NULL;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL;
+ boolean_t storekey = TRUE;
+
(void) memset(&csr, 0, sizeof (csr));
(void) memset(&csrSubject, 0, sizeof (csrSubject));
- (void) memset(&kp_params, 0, sizeof (kp_params));
if (EMPTYSTRING(outcsr) || EMPTYSTRING(outkey)) {
cryptoerror(LOG_STDERR,
- gettext("No output file was specified for "
- "the csr or key\n"));
+ gettext("No output file was specified for "
+ "the csr or key\n"));
return (KMF_ERR_BAD_PARAMETER);
}
if (dir != NULL) {
fullcsrpath = get_fullpath(dir, outcsr);
if (fullcsrpath == NULL) {
cryptoerror(LOG_STDERR,
- gettext("Cannot create file %s in "
- "directory %s\n"), dir, outcsr);
+ gettext("Cannot create file %s in "
+ "directory %s\n"), dir, outcsr);
return (PK_ERR_USAGE);
}
} else {
@@ -176,8 +219,8 @@ gencsr_file(KMF_HANDLE_T kmfhandle,
}
if (verify_file(fullcsrpath)) {
cryptoerror(LOG_STDERR,
- gettext("Cannot write the indicated output "
- "certificate file (%s).\n"), fullcsrpath);
+ gettext("Cannot write the indicated output "
+ "certificate file (%s).\n"), fullcsrpath);
free(fullcsrpath);
return (PK_ERR_USAGE);
}
@@ -185,8 +228,8 @@ gencsr_file(KMF_HANDLE_T kmfhandle,
fullkeypath = get_fullpath(dir, outkey);
if (fullkeypath == NULL) {
cryptoerror(LOG_STDERR,
- gettext("Cannot create file %s in "
- "directory %s\n"), dir, outkey);
+ gettext("Cannot create file %s in "
+ "directory %s\n"), dir, outkey);
free(fullcsrpath);
return (PK_ERR_USAGE);
}
@@ -195,8 +238,8 @@ gencsr_file(KMF_HANDLE_T kmfhandle,
}
if (verify_file(fullcsrpath)) {
cryptoerror(LOG_STDERR,
- gettext("Cannot write the indicated output "
- "key file (%s).\n"), fullkeypath);
+ gettext("Cannot write the indicated output "
+ "key file (%s).\n"), fullkeypath);
free(fullcsrpath);
return (PK_ERR_USAGE);
}
@@ -207,43 +250,69 @@ gencsr_file(KMF_HANDLE_T kmfhandle,
sigAlg = KMF_ALGID_MD5WithRSA;
/* If the subject name cannot be parsed, flag it now and exit */
- if ((kmfrv = KMF_DNParser(subject, &csrSubject)) != KMF_OK) {
+ if ((kmfrv = kmf_dn_parser(subject, &csrSubject)) != KMF_OK) {
return (kmfrv);
}
- kp_params.kstype = KMF_KEYSTORE_OPENSSL;
- kp_params.keylength = keylen; /* bits */
- kp_params.keytype = keyAlg;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEY_FILENAME_ATTR,
+ fullkeypath, strlen(fullkeypath));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYLENGTH_ATTR,
+ &keylen, sizeof (keylen));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYALG_ATTR,
+ &keyAlg, sizeof (keyAlg));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_ENCODE_FORMAT_ATTR,
+ &fmt, sizeof (fmt));
+ numattr++;
- kp_params.sslparms.keyfile = fullkeypath;
- kp_params.sslparms.format = fmt;
+ (void) memset(&prik, 0, sizeof (prik));
+ kmf_set_attr_at_index(attrlist, numattr, KMF_PRIVKEY_HANDLE_ATTR,
+ &prik, sizeof (KMF_KEY_HANDLE));
+ numattr++;
- kmfrv = KMF_CreateKeypair(kmfhandle, &kp_params, &prik, &pubk);
+ (void) memset(&pubk, 0, sizeof (pubk));
+ kmf_set_attr_at_index(attrlist, numattr, KMF_PUBKEY_HANDLE_ATTR,
+ &pubk, sizeof (KMF_KEY_HANDLE));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_STOREKEY_BOOL_ATTR,
+ &storekey, sizeof (storekey));
+ numattr++;
+
+ kmfrv = kmf_create_keypair(kmfhandle, numattr, attrlist);
if (kmfrv != KMF_OK) {
goto cleanup;
}
- SET_VALUE(KMF_SetCSRPubKey(kmfhandle, &pubk, &csr),
- "SetCSRPubKey");
+ SET_VALUE(kmf_set_csr_pubkey(kmfhandle, &pubk, &csr),
+ "SetCSRPubKey");
- SET_VALUE(KMF_SetCSRVersion(&csr, 2), "SetCSRVersion");
+ SET_VALUE(kmf_set_csr_version(&csr, 2), "SetCSRVersion");
- SET_VALUE(KMF_SetCSRSubjectName(&csr, &csrSubject),
- "SetCSRSubjectName");
+ SET_VALUE(kmf_set_csr_subject(&csr, &csrSubject),
+ "kmf_set_csr_subject");
- SET_VALUE(KMF_SetCSRSignatureAlgorithm(&csr, sigAlg),
- "SetCSRSignatureAlgorithm");
+ SET_VALUE(kmf_set_csr_sig_alg(&csr, sigAlg), "kmf_set_csr_sig_alg");
if (altname != NULL) {
- SET_VALUE(KMF_SetCSRSubjectAltName(&csr, altname, altcrit,
- alttype), "SetCSRSubjectAltName");
+ SET_VALUE(kmf_set_csr_subject_altname(&csr, altname, altcrit,
+ alttype), "kmf_set_csr_subject_altname");
}
if (kubits != NULL) {
- SET_VALUE(KMF_SetCSRKeyUsage(&csr, kucrit, kubits),
- "SetCSRKeyUsage");
+ SET_VALUE(kmf_set_csr_ku(&csr, kucrit, kubits),
+ "kmf_set_csr_ku");
}
- if ((kmfrv = KMF_SignCSR(kmfhandle, &csr, &prik, &signedCsr)) ==
- KMF_OK) {
- kmfrv = KMF_CreateCSRFile(&signedCsr, fmt, fullcsrpath);
+ if ((kmfrv = kmf_sign_csr(kmfhandle, &csr, &prik, &signedCsr)) ==
+ KMF_OK) {
+ kmfrv = kmf_create_csr_file(&signedCsr, fmt, fullcsrpath);
}
cleanup:
@@ -252,9 +321,9 @@ cleanup:
if (fullcsrpath)
free(fullcsrpath);
- KMF_FreeData(&signedCsr);
- KMF_FreeKMFKey(kmfhandle, &prik);
- KMF_FreeSignedCSR(&csr);
+ kmf_free_data(&signedCsr);
+ kmf_free_kmf_key(kmfhandle, &prik);
+ kmf_free_signed_csr(&csr);
return (kmfrv);
}
@@ -270,13 +339,16 @@ gencsr_nss(KMF_HANDLE_T kmfhandle,
KMF_CREDENTIAL *tokencred)
{
KMF_RETURN kmfrv;
- KMF_CREATEKEYPAIR_PARAMS kp_params;
KMF_KEY_HANDLE pubk, prik;
KMF_X509_NAME csrSubject;
KMF_CSR_DATA csr;
KMF_ALGORITHM_INDEX sigAlg;
KMF_DATA signedCsr = {NULL, 0};
- KMF_DELETEKEY_PARAMS dk_params;
+
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
+ boolean_t storekey = TRUE;
if (token == NULL)
token = DEFAULT_NSS_TOKEN;
@@ -294,56 +366,104 @@ gencsr_nss(KMF_HANDLE_T kmfhandle,
(void) memset(&csrSubject, 0, sizeof (csrSubject));
/* If the subject name cannot be parsed, flag it now and exit */
- if ((kmfrv = KMF_DNParser(subject, &csrSubject)) != KMF_OK) {
+ if ((kmfrv = kmf_dn_parser(subject, &csrSubject)) != KMF_OK) {
return (kmfrv);
}
- (void) memset(&kp_params, 0, sizeof (kp_params));
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (nickname != NULL && strlen(nickname)) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYLABEL_ATTR,
+ nickname, strlen(nickname));
+ numattr++;
+ }
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYLENGTH_ATTR,
+ &keylen, sizeof (keylen));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYALG_ATTR,
+ &keyAlg, sizeof (keyAlg));
+ numattr++;
+
+ if (tokencred != NULL && tokencred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CREDENTIAL_ATTR,
+ tokencred, sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
+
+ if (token && strlen(token)) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_LABEL_ATTR,
+ token, strlen(token));
+ numattr++;
+ }
+ kmf_set_attr_at_index(attrlist, numattr, KMF_PUBKEY_HANDLE_ATTR,
+ &pubk, sizeof (KMF_KEY_HANDLE));
+ numattr++;
- kp_params.kstype = KMF_KEYSTORE_NSS;
- kp_params.keylabel = nickname;
- kp_params.keylength = keylen; /* bits */
- kp_params.keytype = keyAlg;
- kp_params.cred.cred = tokencred->cred;
- kp_params.cred.credlen = tokencred->credlen;
- kp_params.nssparms.slotlabel = token;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_PRIVKEY_HANDLE_ATTR,
+ &prik, sizeof (KMF_KEY_HANDLE));
+ numattr++;
- kmfrv = KMF_CreateKeypair(kmfhandle, &kp_params, &prik, &pubk);
+ kmf_set_attr_at_index(attrlist, numattr, KMF_STOREKEY_BOOL_ATTR,
+ &storekey, sizeof (storekey));
+ numattr++;
+
+ kmfrv = kmf_create_keypair(kmfhandle, numattr, attrlist);
if (kmfrv != KMF_OK) {
goto cleanup;
}
- SET_VALUE(KMF_SetCSRPubKey(kmfhandle, &pubk, &csr), "SetCSRPubKey");
- SET_VALUE(KMF_SetCSRVersion(&csr, 2), "SetCSRVersion");
- SET_VALUE(KMF_SetCSRSubjectName(&csr, &csrSubject),
- "SetCSRSubjectName");
- SET_VALUE(KMF_SetCSRSignatureAlgorithm(&csr, sigAlg),
- "SetCSRSignatureAlgorithm");
+ SET_VALUE(kmf_set_csr_pubkey(kmfhandle, &pubk, &csr),
+ "kmf_set_csr_pubkey");
+ SET_VALUE(kmf_set_csr_version(&csr, 2), "kmf_set_csr_version");
+ SET_VALUE(kmf_set_csr_subject(&csr, &csrSubject),
+ "kmf_set_csr_subject");
+ SET_VALUE(kmf_set_csr_sig_alg(&csr, sigAlg), "kmf_set_csr_sig_alg");
if (altname != NULL) {
- SET_VALUE(KMF_SetCSRSubjectAltName(&csr, altname, altcrit,
- alttype), "SetCSRSubjectAltName");
+ SET_VALUE(kmf_set_csr_subject_altname(&csr, altname, altcrit,
+ alttype), "kmf_set_csr_subject_altname");
}
if (kubits != NULL) {
- SET_VALUE(KMF_SetCSRKeyUsage(&csr, kucrit, kubits),
- "SetCSRKeyUsage");
+ SET_VALUE(kmf_set_csr_ku(&csr, kucrit, kubits),
+ "kmf_set_csr_ku");
}
- if ((kmfrv = KMF_SignCSR(kmfhandle, &csr, &prik, &signedCsr)) ==
- KMF_OK) {
- kmfrv = KMF_CreateCSRFile(&signedCsr, fmt, csrfile);
+ if ((kmfrv = kmf_sign_csr(kmfhandle, &csr, &prik, &signedCsr)) ==
+ KMF_OK) {
+ kmfrv = kmf_create_csr_file(&signedCsr, fmt, csrfile);
}
cleanup:
- (void) KMF_FreeData(&signedCsr);
- (void) KMF_FreeKMFKey(kmfhandle, &prik);
+ (void) kmf_free_data(&signedCsr);
+ (void) kmf_free_kmf_key(kmfhandle, &prik);
+
/* delete the key */
- (void) memset(&dk_params, 0, sizeof (dk_params));
- dk_params.kstype = KMF_KEYSTORE_NSS;
- dk_params.cred.cred = tokencred->cred;
- dk_params.cred.credlen = tokencred->credlen;
- dk_params.nssparms.slotlabel = token;
- (void) KMF_DeleteKeyFromKeystore(kmfhandle, &dk_params, &pubk);
- (void) KMF_FreeSignedCSR(&csr);
+ numattr = 0;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_PUBKEY_HANDLE_ATTR,
+ &pubk, sizeof (KMF_KEY_HANDLE));
+ numattr++;
+
+ if (tokencred != NULL && tokencred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CREDENTIAL_ATTR,
+ tokencred, sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
+
+ if (token && strlen(token)) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_LABEL_ATTR,
+ token, strlen(token));
+ numattr++;
+ }
+
+ (void) kmf_delete_key_from_keystore(kmfhandle, numattr, attrlist);
+
+ (void) kmf_free_signed_csr(&csr);
return (kmfrv);
}
@@ -380,10 +500,10 @@ pk_gencsr(int argc, char *argv[])
int altcrit = 0, kucrit = 0;
while ((opt = getopt_av(argc, argv,
- "ik:(keystore)s:(subject)n:(nickname)A:(altname)"
- "u:(keyusage)T:(token)d:(dir)p:(prefix)t:(keytype)"
- "y:(keylen)l:(label)c:(outcsr)"
- "K:(outkey)F:(format)")) != EOF) {
+ "ik:(keystore)s:(subject)n:(nickname)A:(altname)"
+ "u:(keyusage)T:(token)d:(dir)p:(prefix)t:(keytype)"
+ "y:(keylen)l:(label)c:(outcsr)"
+ "K:(outkey)F:(format)")) != EOF) {
if (opt != 'i' && EMPTYSTRING(optarg_av))
return (PK_ERR_USAGE);
@@ -436,11 +556,10 @@ pk_gencsr(int argc, char *argv[])
break;
case 'y':
if (sscanf(optarg_av, "%d",
- &keylen) != 1) {
+ &keylen) != 1) {
cryptoerror(LOG_STDERR,
- gettext("Unrecognized "
- "key length (%s)\n"),
- optarg_av);
+ gettext("Unrecognized "
+ "key length (%s)\n"), optarg_av);
return (PK_ERR_USAGE);
}
break;
@@ -461,8 +580,8 @@ pk_gencsr(int argc, char *argv[])
break;
default:
cryptoerror(LOG_STDERR, gettext(
- "unrecognized gencsr option '%s'\n"),
- argv[optind_av]);
+ "unrecognized gencsr option '%s'\n"),
+ argv[optind_av]);
return (PK_ERR_USAGE);
}
}
@@ -473,7 +592,7 @@ pk_gencsr(int argc, char *argv[])
return (PK_ERR_USAGE);
}
- if ((rv = KMF_Initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
+ if ((rv = kmf_initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
cryptoerror(LOG_STDERR, gettext("Error initializing KMF\n"));
return (PK_ERR_USAGE);
}
@@ -484,7 +603,7 @@ pk_gencsr(int argc, char *argv[])
if (EMPTYSTRING(outcsr)) {
(void) printf(gettext("A filename must be specified to hold"
- "the final certificate request data.\n"));
+ "the final certificate request data.\n"));
return (PK_ERR_USAGE);
} else {
/*
@@ -494,7 +613,7 @@ pk_gencsr(int argc, char *argv[])
rv = verify_file(outcsr);
if (rv != KMF_OK) {
cryptoerror(LOG_STDERR, gettext("output file (%s) "
- "cannot be created.\n"), outcsr);
+ "cannot be created.\n"), outcsr);
return (PK_ERR_USAGE);
}
}
@@ -512,13 +631,12 @@ pk_gencsr(int argc, char *argv[])
if (format && (fmt = Str2Format(format)) == KMF_FORMAT_UNDEF) {
cryptoerror(LOG_STDERR,
- gettext("Error parsing format string (%s).\n"),
- format);
+ gettext("Error parsing format string (%s).\n"), format);
return (PK_ERR_USAGE);
}
if (format && fmt != KMF_FORMAT_ASN1 && fmt != KMF_FORMAT_PEM) {
cryptoerror(LOG_STDERR,
- gettext("CSR must be DER or PEM format.\n"));
+ gettext("CSR must be DER or PEM format.\n"));
return (PK_ERR_USAGE);
}
@@ -551,8 +669,8 @@ pk_gencsr(int argc, char *argv[])
rv = verify_altname(altname, &alttype, &altcrit);
if (rv != KMF_OK) {
cryptoerror(LOG_STDERR, gettext("Subject AltName "
- "must be specified as a name=value pair. "
- "See the man page for details."));
+ "must be specified as a name=value pair. "
+ "See the man page for details."));
goto end;
} else {
/* advance the altname past the '=' sign */
@@ -566,14 +684,14 @@ pk_gencsr(int argc, char *argv[])
rv = verify_keyusage(kustr, &kubits, &kucrit);
if (rv != KMF_OK) {
cryptoerror(LOG_STDERR, gettext("KeyUsage "
- "must be specified as a comma-separated list. "
- "See the man page for details."));
+ "must be specified as a comma-separated list. "
+ "See the man page for details."));
goto end;
}
}
if ((rv = Str2KeyType(keytype, &keyAlg, &sigAlg)) != 0) {
cryptoerror(LOG_STDERR, gettext("Unrecognized keytype (%s).\n"),
- keytype);
+ keytype);
goto end;
}
@@ -594,28 +712,28 @@ pk_gencsr(int argc, char *argv[])
dir = PK_DEFAULT_DIRECTORY;
rv = gencsr_nss(kmfhandle,
- tokenname, subname, altname, alttype, altcrit,
- certlabel, dir, prefix,
- keyAlg, keylen, kubits, kucrit,
- fmt, outcsr, &tokencred);
+ tokenname, subname, altname, alttype, altcrit,
+ certlabel, dir, prefix,
+ keyAlg, keylen, kubits, kucrit,
+ fmt, outcsr, &tokencred);
} else if (kstype == KMF_KEYSTORE_PK11TOKEN) {
rv = gencsr_pkcs11(kmfhandle,
- tokenname, subname, altname, alttype, altcrit,
- certlabel, keyAlg, keylen,
- kubits, kucrit, fmt, outcsr, &tokencred);
+ tokenname, subname, altname, alttype, altcrit,
+ certlabel, keyAlg, keylen,
+ kubits, kucrit, fmt, outcsr, &tokencred);
} else if (kstype == KMF_KEYSTORE_OPENSSL) {
rv = gencsr_file(kmfhandle,
- keyAlg, keylen, fmt, subname, altname,
- alttype, altcrit, kubits, kucrit,
- dir, outcsr, outkey);
+ keyAlg, keylen, fmt, subname, altname,
+ alttype, altcrit, kubits, kucrit,
+ dir, outcsr, outkey);
}
end:
if (rv != KMF_OK)
display_error(kmfhandle, rv,
- gettext("Error creating CSR or keypair"));
+ gettext("Error creating CSR or keypair"));
if (subname)
free(subname);
@@ -623,7 +741,7 @@ end:
if (tokencred.cred != NULL)
free(tokencred.cred);
- (void) KMF_Finalize(kmfhandle);
+ (void) kmf_finalize(kmfhandle);
if (rv != KMF_OK)
return (PK_ERR_USAGE);
diff --git a/usr/src/cmd/cmd-crypto/pktool/genkey.c b/usr/src/cmd/cmd-crypto/pktool/genkey.c
index 55890649bb..e9a121ded7 100644
--- a/usr/src/cmd/cmd-crypto/pktool/genkey.c
+++ b/usr/src/cmd/cmd-crypto/pktool/genkey.c
@@ -42,8 +42,12 @@ genkey_nss(KMF_HANDLE_T kmfhandle, char *token, char *dir, char *prefix,
char *keylabel, KMF_KEY_ALG keyAlg, int keylen, KMF_CREDENTIAL *tokencred)
{
KMF_RETURN kmfrv = KMF_OK;
- KMF_CREATESYMKEY_PARAMS csk_params;
KMF_KEY_HANDLE key;
+ KMF_ATTRIBUTE attlist[20];
+ int i = 0;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS;
+ KMF_KEY_ALG keytype;
+ uint32_t keylength;
if (keylabel == NULL) {
cryptoerror(LOG_STDERR,
@@ -56,14 +60,48 @@ genkey_nss(KMF_HANDLE_T kmfhandle, char *token, char *dir, char *prefix,
return (kmfrv);
(void) memset(&key, 0, sizeof (KMF_KEY_HANDLE));
- csk_params.kstype = KMF_KEYSTORE_NSS;
- csk_params.nssparms.slotlabel = token;
- csk_params.keytype = keyAlg;
- csk_params.keylength = keylen;
- csk_params.keylabel = keylabel;
- csk_params.cred.cred = tokencred->cred;
- csk_params.cred.credlen = tokencred->credlen;
- kmfrv = KMF_CreateSymKey(kmfhandle, &csk_params, &key);
+
+ keytype = keyAlg;
+ keylength = keylen;
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ i++;
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEY_HANDLE_ATTR, &key, sizeof (KMF_KEY_HANDLE));
+ i++;
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYALG_ATTR, &keytype, sizeof (keytype));
+ i++;
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYLENGTH_ATTR, &keylength, sizeof (keylength));
+ i++;
+
+ if (keylabel != NULL) {
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYLABEL_ATTR, keylabel,
+ strlen(keylabel));
+ i++;
+ }
+
+ if (tokencred != NULL && tokencred->credlen > 0) {
+ kmf_set_attr_at_index(attlist, i,
+ KMF_CREDENTIAL_ATTR, tokencred,
+ sizeof (KMF_CREDENTIAL));
+ i++;
+ }
+
+ if (token != NULL) {
+ kmf_set_attr_at_index(attlist, i,
+ KMF_TOKEN_LABEL_ATTR, token,
+ strlen(token));
+ i++;
+ }
+
+ kmfrv = kmf_create_sym_key(kmfhandle, i, attlist);
return (kmfrv);
}
@@ -75,13 +113,17 @@ genkey_pkcs11(KMF_HANDLE_T kmfhandle, char *token,
KMF_CREDENTIAL *tokencred)
{
KMF_RETURN kmfrv = KMF_OK;
- KMF_CREATESYMKEY_PARAMS params;
KMF_KEY_HANDLE key;
KMF_RAW_SYM_KEY *rkey = NULL;
boolean_t sensitive = B_FALSE;
boolean_t not_extractable = B_FALSE;
char *hexstr = NULL;
int hexstrlen;
+ KMF_ATTRIBUTE attlist[20];
+ int i = 0;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_PK11TOKEN;
+ KMF_KEY_ALG keytype;
+ uint32_t keylength;
if (keylabel == NULL) {
cryptoerror(LOG_STDERR,
@@ -122,15 +164,51 @@ genkey_pkcs11(KMF_HANDLE_T kmfhandle, char *token,
}
(void) memset(&key, 0, sizeof (KMF_KEY_HANDLE));
- params.kstype = KMF_KEYSTORE_PK11TOKEN;
- params.keytype = keyAlg;
- params.keylength = keylen; /* bits */
- params.keylabel = keylabel;
- params.pkcs11parms.sensitive = sensitive;
- params.pkcs11parms.not_extractable = not_extractable;
- params.cred.cred = tokencred->cred;
- params.cred.credlen = tokencred->credlen;
- kmfrv = KMF_CreateSymKey(kmfhandle, &params, &key);
+
+ keytype = keyAlg;
+ keylength = keylen; /* bits */
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ i++;
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEY_HANDLE_ATTR, &key, sizeof (KMF_KEY_HANDLE));
+ i++;
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYALG_ATTR, &keytype, sizeof (keytype));
+ i++;
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYLENGTH_ATTR, &keylength, sizeof (keylength));
+ i++;
+
+ if (keylabel != NULL) {
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYLABEL_ATTR, keylabel,
+ strlen(keylabel));
+ i++;
+ }
+
+ if (tokencred != NULL && tokencred->credlen > 0) {
+ kmf_set_attr_at_index(attlist, i,
+ KMF_CREDENTIAL_ATTR, tokencred,
+ sizeof (KMF_CREDENTIAL));
+ i++;
+ }
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_SENSITIVE_BOOL_ATTR, &sensitive,
+ sizeof (sensitive));
+ i++;
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_NON_EXTRACTABLE_BOOL_ATTR, &not_extractable,
+ sizeof (not_extractable));
+ i++;
+
+ kmfrv = kmf_create_sym_key(kmfhandle, i, attlist);
if (kmfrv != KMF_OK) {
goto out;
}
@@ -148,7 +226,7 @@ genkey_pkcs11(KMF_HANDLE_T kmfhandle, char *token,
goto out;
}
(void) memset(rkey, 0, sizeof (KMF_RAW_SYM_KEY));
- kmfrv = KMF_GetSymKeyValue(kmfhandle, &key, rkey);
+ kmfrv = kmf_get_sym_key_value(kmfhandle, &key, rkey);
if (kmfrv != KMF_OK) {
goto out;
}
@@ -166,7 +244,7 @@ genkey_pkcs11(KMF_HANDLE_T kmfhandle, char *token,
}
out:
- KMF_FreeRawSymKey(rkey);
+ kmf_free_raw_sym_key(rkey);
if (hexstr != NULL)
free(hexstr);
@@ -180,11 +258,16 @@ genkey_file(KMF_HANDLE_T kmfhandle, KMF_KEY_ALG keyAlg, int keylen, char *dir,
char *outkey, boolean_t print_hex)
{
KMF_RETURN kmfrv = KMF_OK;
- KMF_CREATESYMKEY_PARAMS csk_params;
KMF_KEY_HANDLE key;
KMF_RAW_SYM_KEY *rkey = NULL;
char *hexstr = NULL;
int hexstrlen;
+ KMF_ATTRIBUTE attlist[20];
+ int i = 0;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL;
+ KMF_KEY_ALG keytype;
+ uint32_t keylength;
+ char *dirpath;
if (EMPTYSTRING(outkey)) {
cryptoerror(LOG_STDERR,
@@ -194,21 +277,50 @@ genkey_file(KMF_HANDLE_T kmfhandle, KMF_KEY_ALG keyAlg, int keylen, char *dir,
if (verify_file(outkey)) {
cryptoerror(LOG_STDERR,
- gettext("Cannot write the indicated output "
- "key file (%s).\n"), outkey);
+ gettext("Cannot write the indicated output "
+ "key file (%s).\n"), outkey);
return (KMF_ERR_BAD_PARAMETER);
}
(void) memset(&key, 0, sizeof (KMF_KEY_HANDLE));
- csk_params.kstype = KMF_KEYSTORE_OPENSSL;
- csk_params.keytype = keyAlg;
- csk_params.keylength = keylen;
- csk_params.cred.cred = NULL;
- csk_params.cred.credlen = 0;
- csk_params.sslparms.dirpath = (dir == NULL) ? "." : dir;
- csk_params.sslparms.keyfile = outkey;
-
- kmfrv = KMF_CreateSymKey(kmfhandle, &csk_params, &key);
+
+ keytype = keyAlg;
+ keylength = keylen;
+
+ dirpath = (dir == NULL) ? "." : dir;
+
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ i++;
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEY_HANDLE_ATTR, &key, sizeof (KMF_KEY_HANDLE));
+ i++;
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYALG_ATTR, &keytype, sizeof (keytype));
+ i++;
+
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEYLENGTH_ATTR, &keylength, sizeof (keylength));
+ i++;
+
+ if (dirpath != NULL) {
+ kmf_set_attr_at_index(attlist, i,
+ KMF_DIRPATH_ATTR, dirpath,
+ strlen(dirpath));
+ i++;
+ }
+
+ if (outkey != NULL) {
+ kmf_set_attr_at_index(attlist, i,
+ KMF_KEY_FILENAME_ATTR, outkey,
+ strlen(outkey));
+ i++;
+ }
+
+ kmfrv = kmf_create_sym_key(kmfhandle, i, attlist);
if (kmfrv != KMF_OK) {
goto out;
}
@@ -220,7 +332,7 @@ genkey_file(KMF_HANDLE_T kmfhandle, KMF_KEY_ALG keyAlg, int keylen, char *dir,
goto out;
}
(void) memset(rkey, 0, sizeof (KMF_RAW_SYM_KEY));
- kmfrv = KMF_GetSymKeyValue(kmfhandle, &key, rkey);
+ kmfrv = kmf_get_sym_key_value(kmfhandle, &key, rkey);
if (kmfrv != KMF_OK) {
goto out;
}
@@ -237,7 +349,7 @@ genkey_file(KMF_HANDLE_T kmfhandle, KMF_KEY_ALG keyAlg, int keylen, char *dir,
}
out:
- KMF_FreeRawSymKey(rkey);
+ kmf_free_raw_sym_key(rkey);
if (hexstr != NULL)
free(hexstr);
@@ -256,7 +368,7 @@ pk_genkey(int argc, char *argv[])
char *tokenname = NULL;
char *dir = NULL;
char *prefix = NULL;
- char *keytype = "AES";
+ char *keytype = "generic";
char *keylenstr = NULL;
int keylen = 0;
char *keylabel = NULL;
@@ -265,14 +377,14 @@ pk_genkey(int argc, char *argv[])
char *extstr = NULL;
char *printstr = NULL;
KMF_HANDLE_T kmfhandle = NULL;
- KMF_KEY_ALG keyAlg = KMF_AES;
+ KMF_KEY_ALG keyAlg = KMF_GENERIC_SECRET;
boolean_t print_hex = B_FALSE;
KMF_CREDENTIAL tokencred = {NULL, 0};
while ((opt = getopt_av(argc, argv,
- "k:(keystore)l:(label)T:(token)d:(dir)p:(prefix)"
- "t:(keytype)y:(keylen)K:(outkey)P:(print)"
- "s:(sensitive)e:(extractable)")) != EOF) {
+ "k:(keystore)l:(label)T:(token)d:(dir)p:(prefix)"
+ "t:(keytype)y:(keylen)K:(outkey)P:(print)"
+ "s:(sensitive)e:(extractable)")) != EOF) {
if (EMPTYSTRING(optarg_av))
return (PK_ERR_USAGE);
switch (opt) {
@@ -344,7 +456,7 @@ pk_genkey(int argc, char *argv[])
/* Check keytype. If not specified, default to AES */
if (keytype != NULL && Str2SymKeyType(keytype, &keyAlg) != 0) {
cryptoerror(LOG_STDERR, gettext("Unrecognized keytype(%s).\n"),
- keytype);
+ keytype);
return (PK_ERR_USAGE);
}
@@ -362,20 +474,20 @@ pk_genkey(int argc, char *argv[])
else /* AES, ARCFOUR, or GENERIC SECRET */ {
if (keylenstr == NULL) {
cryptoerror(LOG_STDERR,
- gettext("Key length must be specified for "
- "AES, ARCFOUR or GENERIC symmetric keys.\n"));
+ gettext("Key length must be specified for "
+ "AES, ARCFOUR or GENERIC symmetric keys.\n"));
return (PK_ERR_USAGE);
}
if (sscanf(keylenstr, "%d", &keylen) != 1) {
cryptoerror(LOG_STDERR,
- gettext("Unrecognized key length (%s).\n"),
- keytype);
+ gettext("Unrecognized key length (%s).\n"),
+ keytype);
return (PK_ERR_USAGE);
}
if (keylen == 0 || (keylen % 8) != 0) {
cryptoerror(LOG_STDERR,
- gettext("Key length bitlength must be a "
- "multiple of 8.\n"));
+ gettext("Key length bitlength must be a "
+ "multiple of 8.\n"));
return (PK_ERR_USAGE);
}
}
@@ -418,7 +530,7 @@ pk_genkey(int argc, char *argv[])
if (kstype == KMF_KEYSTORE_PK11TOKEN || kstype == KMF_KEYSTORE_NSS)
(void) get_token_password(kstype, tokenname, &tokencred);
- if ((rv = KMF_Initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
+ if ((rv = kmf_initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
cryptoerror(LOG_STDERR, gettext("Error initializing KMF\n"));
goto end;
}
@@ -437,12 +549,12 @@ pk_genkey(int argc, char *argv[])
end:
if (rv != KMF_OK)
display_error(kmfhandle, rv,
- gettext("Error generating key"));
+ gettext("Error generating key"));
if (tokencred.cred != NULL)
free(tokencred.cred);
- (void) KMF_Finalize(kmfhandle);
+ (void) kmf_finalize(kmfhandle);
if (rv != KMF_OK)
return (PK_ERR_USAGE);
diff --git a/usr/src/cmd/cmd-crypto/pktool/import.c b/usr/src/cmd/cmd-crypto/pktool/import.c
index ac706b82ab..0efe59abb0 100644
--- a/usr/src/cmd/cmd-crypto/pktool/import.c
+++ b/usr/src/cmd/cmd-crypto/pktool/import.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -56,25 +56,38 @@ pk_import_pk12_files(KMF_HANDLE_T kmfhandle, KMF_CREDENTIAL *cred,
int ncerts = 0;
int nkeys = 0;
int i;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL;
+ KMF_ATTRIBUTE attrlist[16];
+ int numattr = 0;
- rv = KMF_ImportPK12(kmfhandle, outfile, cred,
- &certs, &ncerts, &keys, &nkeys);
+ rv = kmf_import_objects(kmfhandle, outfile, cred,
+ &certs, &ncerts, &keys, &nkeys);
if (rv == KMF_OK) {
(void) printf(gettext("Found %d certificate(s) and %d "
- "key(s) in %s\n"), ncerts, nkeys, outfile);
+ "key(s) in %s\n"), ncerts, nkeys, outfile);
}
if (rv == KMF_OK && ncerts > 0) {
- KMF_STORECERT_PARAMS params;
char newcertfile[MAXPATHLEN];
- (void) memset(&params, 0, sizeof (KMF_STORECERT_PARAMS));
- params.kstype = KMF_KEYSTORE_OPENSSL;
- params.sslparms.dirpath = dir;
- params.sslparms.format = outformat;
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ numattr++;
+
+ if (dir != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_DIRPATH_ATTR, dir, strlen(dir));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ENCODE_FORMAT_ATTR, &outformat, sizeof (outformat));
+ numattr++;
for (i = 0; rv == KMF_OK && i < ncerts; i++) {
+ int num = numattr;
+
/*
* If storing more than 1 cert, gotta change
* the name so we don't overwrite the previous one.
@@ -82,40 +95,84 @@ pk_import_pk12_files(KMF_HANDLE_T kmfhandle, KMF_CREDENTIAL *cred,
*/
if (i > 0) {
(void) snprintf(newcertfile,
- sizeof (newcertfile),
- "%s_%d", certfile, i);
- params.sslparms.certfile = newcertfile;
+ sizeof (newcertfile), "%s_%d", certfile, i);
+
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_CERT_FILENAME_ATTR, newcertfile,
+ strlen(newcertfile));
+ num++;
} else {
- params.sslparms.certfile = certfile;
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_CERT_FILENAME_ATTR, certfile,
+ strlen(certfile));
+ num++;
}
- rv = KMF_StoreCert(kmfhandle, &params, &certs[i]);
+
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_CERT_DATA_ATTR, &certs[i], sizeof (KMF_DATA));
+ num++;
+ rv = kmf_store_cert(kmfhandle, num, attrlist);
}
}
if (rv == KMF_OK && nkeys > 0) {
- KMF_STOREKEY_PARAMS skparms;
char newkeyfile[MAXPATHLEN];
- (void) memset(&skparms, 0, sizeof (skparms));
+ numattr = 0;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype,
+ sizeof (kstype));
+ numattr++;
+
+ if (keydir != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_DIRPATH_ATTR, keydir,
+ strlen(keydir));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ENCODE_FORMAT_ATTR, &outformat,
+ sizeof (outformat));
+ numattr++;
+
+ if (cred != NULL && cred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CREDENTIAL_ATTR, cred,
+ sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
/* The order of certificates and keys should match */
for (i = 0; rv == KMF_OK && i < nkeys; i++) {
- skparms.kstype = KMF_KEYSTORE_OPENSSL;
- skparms.sslparms.dirpath = keydir;
- skparms.sslparms.format = outformat;
- skparms.cred = *cred;
- skparms.certificate = &certs[i];
+ int num = numattr;
if (i > 0) {
(void) snprintf(newkeyfile,
- sizeof (newkeyfile),
- "%s_%d", keyfile, i);
- skparms.sslparms.keyfile = newkeyfile;
+ sizeof (newkeyfile), "%s_%d", keyfile, i);
+
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_KEY_FILENAME_ATTR, newkeyfile,
+ strlen(newkeyfile));
+ num++;
} else {
- skparms.sslparms.keyfile = keyfile;
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_KEY_FILENAME_ATTR, keyfile,
+ strlen(keyfile));
+ num++;
}
- rv = KMF_StorePrivateKey(kmfhandle, &skparms,
- &keys[i]);
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_CERT_DATA_ATTR, &certs[i],
+ sizeof (KMF_DATA));
+ num++;
+
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_RAW_KEY_ATTR, &keys[i],
+ sizeof (KMF_RAW_KEY_DATA));
+ num++;
+
+ rv = kmf_store_key(kmfhandle, num, attrlist);
}
}
/*
@@ -123,12 +180,12 @@ pk_import_pk12_files(KMF_HANDLE_T kmfhandle, KMF_CREDENTIAL *cred,
*/
if (certs) {
for (i = 0; i < ncerts; i++)
- KMF_FreeData(&certs[i]);
+ kmf_free_data(&certs[i]);
free(certs);
}
if (keys) {
for (i = 0; i < nkeys; i++)
- KMF_FreeRawKey(&keys[i]);
+ kmf_free_raw_key(&keys[i]);
free(keys);
}
@@ -150,55 +207,105 @@ pk_import_pk12_nss(
int ncerts = 0;
int nkeys = 0;
int i;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS;
+ KMF_ATTRIBUTE attrlist[16];
+ int numattr = 0;
rv = configure_nss(kmfhandle, dir, prefix);
if (rv != KMF_OK)
return (rv);
- rv = KMF_ImportPK12(kmfhandle, filename, kmfcred,
- &certs, &ncerts, &keys, &nkeys);
+ rv = kmf_import_objects(kmfhandle, filename, kmfcred,
+ &certs, &ncerts, &keys, &nkeys);
if (rv == KMF_OK)
(void) printf(gettext("Found %d certificate(s) and %d "
- "key(s) in %s\n"), ncerts, nkeys, filename);
+ "key(s) in %s\n"), ncerts, nkeys, filename);
if (rv == KMF_OK) {
- KMF_STORECERT_PARAMS params;
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ numattr++;
+
+ if (token_spec != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_TOKEN_LABEL_ATTR, token_spec,
+ strlen(token_spec));
+ numattr++;
+ }
- (void) memset(&params, 0, sizeof (KMF_STORECERT_PARAMS));
- params.kstype = KMF_KEYSTORE_NSS;
- params.nssparms.slotlabel = token_spec;
- params.nssparms.trustflag = trustflags;
+ if (trustflags != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_TRUSTFLAG_ATTR, trustflags,
+ strlen(trustflags));
+ numattr++;
+ }
for (i = 0; rv == KMF_OK && i < ncerts; i++) {
- if (i == 0)
- params.certLabel = nickname;
- else
- params.certLabel = NULL;
+ int num = numattr;
- rv = KMF_StoreCert(kmfhandle, &params, &certs[i]);
+ if (i == 0 && nickname != NULL) {
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_CERT_LABEL_ATTR, nickname,
+ strlen(nickname));
+ num++;
+ }
+
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_CERT_DATA_ATTR, &certs[i], sizeof (KMF_DATA));
+ num++;
+ rv = kmf_store_cert(kmfhandle, num, attrlist);
}
if (rv != KMF_OK) {
display_error(kmfhandle, rv,
- gettext("Error storing certificate "
- "in PKCS11 token"));
+ gettext("Error storing certificate in NSS token"));
}
}
if (rv == KMF_OK) {
- KMF_STOREKEY_PARAMS skparms;
+ numattr = 0;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype,
+ sizeof (kstype));
+ numattr++;
+
+ if (token_spec != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_TOKEN_LABEL_ATTR, token_spec,
+ strlen(token_spec));
+ numattr++;
+ }
+
+ if (nickname != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYLABEL_ATTR, nickname,
+ strlen(nickname));
+ numattr++;
+ }
+
+ if (tokencred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CREDENTIAL_ATTR, tokencred,
+ sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
/* The order of certificates and keys should match */
for (i = 0; i < nkeys; i++) {
- (void) memset(&skparms, 0,
- sizeof (KMF_STOREKEY_PARAMS));
- skparms.kstype = KMF_KEYSTORE_NSS;
- skparms.cred = *tokencred;
- skparms.label = nickname;
- skparms.certificate = &certs[i];
- skparms.nssparms.slotlabel = token_spec;
+ int num = numattr;
+
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_CERT_DATA_ATTR, &certs[i],
+ sizeof (KMF_DATA));
+ num++;
+
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_RAW_KEY_ATTR, &keys[i],
+ sizeof (KMF_RAW_KEY_DATA));
+ num++;
- rv = KMF_StorePrivateKey(kmfhandle, &skparms, &keys[i]);
+ rv = kmf_store_key(kmfhandle, num, attrlist);
}
}
@@ -207,12 +314,12 @@ pk_import_pk12_nss(
*/
if (certs) {
for (i = 0; i < ncerts; i++)
- KMF_FreeData(&certs[i]);
+ kmf_free_data(&certs[i]);
free(certs);
}
if (keys) {
for (i = 0; i < nkeys; i++)
- KMF_FreeRawKey(&keys[i]);
+ kmf_free_raw_key(&keys[i]);
free(keys);
}
@@ -227,31 +334,47 @@ pk_import_cert(
char *dir, char *prefix, char *trustflags)
{
KMF_RETURN rv = KMF_OK;
- KMF_IMPORTCERT_PARAMS params;
+ KMF_ATTRIBUTE attrlist[32];
+ int i = 0;
if (kstype == KMF_KEYSTORE_PK11TOKEN) {
rv = select_token(kmfhandle, token_spec, FALSE);
-
- if (rv != KMF_OK) {
- return (rv);
- }
+ } else if (kstype == KMF_KEYSTORE_NSS) {
+ rv = configure_nss(kmfhandle, dir, prefix);
}
+ if (rv != KMF_OK)
+ return (rv);
- (void) memset(&params, 0, sizeof (params));
- params.kstype = kstype;
- params.certfile = filename;
- params.certLabel = label;
+ kmf_set_attr_at_index(attrlist, i,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (KMF_KEYSTORE_TYPE));
+ i++;
- if (kstype == KMF_KEYSTORE_NSS) {
- rv = configure_nss(kmfhandle, dir, prefix);
- if (rv != KMF_OK)
- return (rv);
- params.nssparms.trustflag = trustflags;
- params.nssparms.slotlabel = token_spec;
+ kmf_set_attr_at_index(attrlist, i, KMF_CERT_FILENAME_ATTR,
+ filename, strlen(filename));
+ i++;
+
+ if (label != NULL) {
+ kmf_set_attr_at_index(attrlist, i, KMF_CERT_LABEL_ATTR,
+ label, strlen(label));
+ i++;
}
- rv = KMF_ImportCert(kmfhandle, &params);
+ if (kstype == KMF_KEYSTORE_NSS) {
+ if (trustflags != NULL) {
+ kmf_set_attr_at_index(attrlist, i, KMF_TRUSTFLAG_ATTR,
+ trustflags, strlen(trustflags));
+ i++;
+ }
+ if (token_spec != NULL) {
+ kmf_set_attr_at_index(attrlist, i,
+ KMF_TOKEN_LABEL_ATTR,
+ token_spec, strlen(token_spec));
+ i++;
+ }
+ }
+
+ rv = kmf_import_cert(kmfhandle, i, attrlist);
return (rv);
}
@@ -262,20 +385,33 @@ pk_import_file_crl(void *kmfhandle,
char *outdir,
KMF_ENCODE_FORMAT outfmt)
{
- KMF_IMPORTCRL_PARAMS icrl_params;
- KMF_OPENSSL_PARAMS sslparams;
-
- sslparams.crlfile = infile;
- sslparams.dirpath = outdir;
- sslparams.outcrlfile = outfile;
- sslparams.format = outfmt;
- sslparams.crl_check = B_FALSE;
-
- icrl_params.kstype = KMF_KEYSTORE_OPENSSL;
- icrl_params.sslparms = sslparams;
-
- return (KMF_ImportCRL(kmfhandle, &icrl_params));
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[8];
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+ if (infile) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CRL_FILENAME_ATTR, infile, strlen(infile));
+ numattr++;
+ }
+ if (outdir) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_DIRPATH_ATTR, outdir, strlen(outdir));
+ numattr++;
+ }
+ if (outfile) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CRL_OUTFILE_ATTR, outfile, strlen(outfile));
+ numattr++;
+ }
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ENCODE_FORMAT_ATTR, &outfmt, sizeof (outfmt));
+ numattr++;
+ return (kmf_import_crl(kmfhandle, numattr, attrlist));
}
static KMF_RETURN
@@ -285,19 +421,28 @@ pk_import_nss_crl(void *kmfhandle,
char *outdir,
char *prefix)
{
- KMF_IMPORTCRL_PARAMS icrl_params;
KMF_RETURN rv;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[4];
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS;
rv = configure_nss(kmfhandle, outdir, prefix);
if (rv != KMF_OK)
return (rv);
- icrl_params.kstype = KMF_KEYSTORE_NSS;
- icrl_params.nssparms.slotlabel = NULL;
- icrl_params.nssparms.crlfile = infile;
- icrl_params.nssparms.crl_check = verify_crl_flag;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+ if (infile) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CRL_FILENAME_ATTR,
+ infile, strlen(infile));
+ numattr++;
+ }
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CRL_CHECK_ATTR,
+ &verify_crl_flag, sizeof (verify_crl_flag));
+ numattr++;
- return (KMF_ImportCRL(kmfhandle, &icrl_params));
+ return (kmf_import_crl(kmfhandle, numattr, attrlist));
}
@@ -315,6 +460,9 @@ pk_import_pk12_pk11(
int ncerts = 0;
int nkeys = 0;
int i;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_PK11TOKEN;
+ KMF_ATTRIBUTE attrlist[16];
+ int numattr = 0;
rv = select_token(kmfhandle, token_spec, FALSE);
@@ -322,46 +470,72 @@ pk_import_pk12_pk11(
return (rv);
}
- rv = KMF_ImportPK12(kmfhandle, filename, p12cred,
- &certs, &ncerts, &keys, &nkeys);
+ rv = kmf_import_objects(kmfhandle, filename, p12cred,
+ &certs, &ncerts, &keys, &nkeys);
if (rv == KMF_OK) {
- KMF_STOREKEY_PARAMS skparms;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype,
+ sizeof (kstype));
+ numattr++;
+
+ if (label != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYLABEL_ATTR, label,
+ strlen(label));
+ numattr++;
+ }
+
+ if (tokencred != NULL && tokencred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CREDENTIAL_ATTR, tokencred,
+ sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
/* The order of certificates and keys should match */
for (i = 0; i < nkeys; i++) {
- (void) memset(&skparms, 0,
- sizeof (KMF_STOREKEY_PARAMS));
- skparms.kstype = KMF_KEYSTORE_PK11TOKEN;
- skparms.certificate = &certs[i];
- if (tokencred != NULL)
- skparms.cred = *tokencred;
- if (i == 0)
- skparms.label = label;
- else
- skparms.label = NULL;
+ int num = numattr;
+
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_CERT_DATA_ATTR, &certs[i],
+ sizeof (KMF_DATA));
+ num++;
+
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_RAW_KEY_ATTR, &keys[i],
+ sizeof (KMF_RAW_KEY_DATA));
+ num++;
+
+ rv = kmf_store_key(kmfhandle, num, attrlist);
- rv = KMF_StorePrivateKey(kmfhandle, &skparms,
- &keys[i]);
}
}
if (rv == KMF_OK) {
- KMF_STORECERT_PARAMS params;
(void) printf(gettext("Found %d certificate(s) and %d "
- "key(s) in %s\n"), ncerts, nkeys, filename);
- (void) memset(&params, 0, sizeof (KMF_STORECERT_PARAMS));
-
- params.kstype = KMF_KEYSTORE_PK11TOKEN;
+ "key(s) in %s\n"), ncerts, nkeys, filename);
+ numattr = 0;
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ numattr++;
for (i = 0; rv == KMF_OK && i < ncerts; i++) {
- if (i == 0)
- params.certLabel = label;
- else
- params.certLabel = NULL;
+ int num = numattr;
+
+ if (i == 0 && label != NULL) {
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_CERT_LABEL_ATTR, label, strlen(label));
+ num++;
+ }
- rv = KMF_StoreCert(kmfhandle, &params, &certs[i]);
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_CERT_DATA_ATTR, &certs[i], sizeof (KMF_DATA));
+ num++;
+
+ rv = kmf_store_cert(kmfhandle, num, attrlist);
}
}
@@ -370,18 +544,199 @@ pk_import_pk12_pk11(
*/
if (certs) {
for (i = 0; i < ncerts; i++)
- KMF_FreeData(&certs[i]);
+ kmf_free_data(&certs[i]);
free(certs);
}
if (keys) {
for (i = 0; i < nkeys; i++)
- KMF_FreeRawKey(&keys[i]);
+ kmf_free_raw_key(&keys[i]);
free(keys);
}
return (rv);
}
+static KMF_RETURN
+pk_import_keys(KMF_HANDLE_T kmfhandle,
+ KMF_KEYSTORE_TYPE kstype, char *token_spec,
+ KMF_CREDENTIAL *cred, char *filename,
+ char *label, char *senstr, char *extstr)
+{
+ KMF_RETURN rv = KMF_OK;
+ KMF_ATTRIBUTE attrlist[16];
+ KMF_KEYSTORE_TYPE fileks = KMF_KEYSTORE_OPENSSL;
+ int numattr = 0;
+ KMF_KEY_HANDLE key;
+ KMF_RAW_KEY_DATA rawkey;
+ KMF_KEY_CLASS class = KMF_ASYM_PRI;
+ int numkeys = 1;
+
+ if (kstype == KMF_KEYSTORE_PK11TOKEN) {
+ rv = select_token(kmfhandle, token_spec, FALSE);
+ }
+ if (rv != KMF_OK)
+ return (rv);
+ /*
+ * First, set up to read the keyfile using the FILE plugin
+ * mechanisms.
+ */
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &fileks, sizeof (fileks));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_COUNT_ATTR,
+ &numkeys, sizeof (numkeys));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEY_HANDLE_ATTR,
+ &key, sizeof (key));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_RAW_KEY_ATTR,
+ &rawkey, sizeof (rawkey));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYCLASS_ATTR,
+ &class, sizeof (class));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEY_FILENAME_ATTR,
+ filename, strlen(filename));
+ numattr++;
+
+ rv = kmf_find_key(kmfhandle, numattr, attrlist);
+ if (rv == KMF_OK) {
+ numattr = 0;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (cred != NULL && cred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CREDENTIAL_ATTR, cred, sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
+
+ if (label != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYLABEL_ATTR, label, strlen(label));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_RAW_KEY_ATTR, &rawkey, sizeof (rawkey));
+ numattr++;
+
+ rv = kmf_store_key(kmfhandle, numattr, attrlist);
+ if (rv == KMF_OK) {
+ printf(gettext("Importing %d keys\n"), numkeys);
+ }
+
+ kmf_free_kmf_key(kmfhandle, &key);
+ kmf_free_raw_key(&rawkey);
+ } else {
+ cryptoerror(LOG_STDERR,
+ gettext("Failed to load key from file (%s)\n"),
+ filename);
+ }
+ return (rv);
+}
+
+static KMF_RETURN
+pk_import_rawkey(KMF_HANDLE_T kmfhandle,
+ KMF_KEYSTORE_TYPE kstype, char *token,
+ KMF_CREDENTIAL *cred,
+ char *filename, char *label, KMF_KEY_ALG keyAlg,
+ char *senstr, char *extstr)
+{
+ KMF_RETURN rv = KMF_OK;
+ KMF_ATTRIBUTE attrlist[16];
+ int numattr = 0;
+ uint32_t keylen;
+ boolean_t sensitive = B_FALSE;
+ boolean_t not_extractable = B_FALSE;
+ KMF_DATA keydata = {NULL, 0};
+ KMF_KEY_HANDLE rawkey;
+
+ rv = kmf_read_input_file(kmfhandle, filename, &keydata);
+ if (rv != KMF_OK)
+ return (rv);
+
+ rv = select_token(kmfhandle, token, FALSE);
+
+ if (rv != KMF_OK) {
+ return (rv);
+ }
+ if (senstr != NULL) {
+ if (tolower(senstr[0]) == 'y')
+ sensitive = B_TRUE;
+ else if (tolower(senstr[0]) == 'n')
+ sensitive = B_FALSE;
+ else {
+ cryptoerror(LOG_STDERR,
+ gettext("Incorrect sensitive option value.\n"));
+ return (KMF_ERR_BAD_PARAMETER);
+ }
+ }
+
+ if (extstr != NULL) {
+ if (tolower(extstr[0]) == 'y')
+ not_extractable = B_FALSE;
+ else if (tolower(extstr[0]) == 'n')
+ not_extractable = B_TRUE;
+ else {
+ cryptoerror(LOG_STDERR,
+ gettext("Incorrect extractable option value.\n"));
+ return (KMF_ERR_BAD_PARAMETER);
+ }
+ }
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype, sizeof (kstype));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEY_HANDLE_ATTR, &rawkey, sizeof (rawkey));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYALG_ATTR, &keyAlg, sizeof (KMF_KEY_ALG));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEY_DATA_ATTR, keydata.Data, keydata.Length);
+ numattr++;
+
+ /* Key length is given in bits not bytes */
+ keylen = keydata.Length * 8;
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYLENGTH_ATTR, &keylen, sizeof (keydata.Length));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_SENSITIVE_BOOL_ATTR, &sensitive, sizeof (sensitive));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_NON_EXTRACTABLE_BOOL_ATTR, &not_extractable,
+ sizeof (not_extractable));
+ numattr++;
+
+ if (label != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYLABEL_ATTR, label, strlen(label));
+ numattr++;
+ }
+ if (cred != NULL && cred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CREDENTIAL_ATTR, cred, sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
+ rv = kmf_create_sym_key(kmfhandle, numattr, attrlist);
+
+ return (rv);
+}
+
/*
* Import objects from into KMF repositories.
*/
@@ -396,12 +751,15 @@ pk_import(int argc, char *argv[])
char *keyfile = NULL;
char *certfile = NULL;
char *crlfile = NULL;
- char *certlabel = NULL;
+ char *label = NULL;
char *dir = NULL;
char *keydir = NULL;
char *prefix = NULL;
char *trustflags = NULL;
char *verify_crl = NULL;
+ char *keytype = "generic";
+ char *senstr = NULL;
+ char *extstr = NULL;
boolean_t verify_crl_flag = B_FALSE;
int oclass = 0;
KMF_KEYSTORE_TYPE kstype = 0;
@@ -411,16 +769,18 @@ pk_import(int argc, char *argv[])
KMF_CREDENTIAL pk12cred = { NULL, 0 };
KMF_CREDENTIAL tokencred = { NULL, 0 };
KMF_HANDLE_T kmfhandle = NULL;
+ KMF_KEY_ALG keyAlg = KMF_GENERIC_SECRET;
/* Parse command line options. Do NOT i18n/l10n. */
while ((opt = getopt_av(argc, argv,
- "T:(token)i:(infile)"
- "k:(keystore)y:(objtype)"
- "d:(dir)p:(prefix)"
- "n:(certlabel)N:(label)"
- "K:(outkey)c:(outcert)"
- "v:(verifycrl)l:(outcrl)"
- "t:(trust)D:(keydir)F:(outformat)")) != EOF) {
+ "T:(token)i:(infile)"
+ "k:(keystore)y:(objtype)"
+ "d:(dir)p:(prefix)"
+ "n:(certlabel)N:(label)"
+ "K:(outkey)c:(outcert)"
+ "v:(verifycrl)l:(outcrl)"
+ "E:(keytype)s:(sensitive)x:(extractable)"
+ "t:(trust)D:(keydir)F:(outformat)")) != EOF) {
if (EMPTYSTRING(optarg_av))
return (PK_ERR_USAGE);
switch (opt) {
@@ -472,9 +832,9 @@ pk_import(int argc, char *argv[])
break;
case 'n':
case 'N':
- if (certlabel)
+ if (label)
return (PK_ERR_USAGE);
- certlabel = optarg_av;
+ label = optarg_av;
break;
case 'F':
okfmt = Str2Format(optarg_av);
@@ -495,6 +855,19 @@ pk_import(int argc, char *argv[])
else
return (PK_ERR_USAGE);
break;
+ case 'E':
+ keytype = optarg_av;
+ break;
+ case 's':
+ if (senstr)
+ return (PK_ERR_USAGE);
+ senstr = optarg_av;
+ break;
+ case 'x':
+ if (extstr)
+ return (PK_ERR_USAGE);
+ extstr = optarg_av;
+ break;
default:
return (PK_ERR_USAGE);
break;
@@ -508,7 +881,7 @@ pk_import(int argc, char *argv[])
/* Filename arg is required. */
if (EMPTYSTRING(filename)) {
cryptoerror(LOG_STDERR, gettext("The 'infile' parameter"
- "is required for the import operation.\n"));
+ "is required for the import operation.\n"));
return (PK_ERR_USAGE);
}
@@ -520,10 +893,10 @@ pk_import(int argc, char *argv[])
/* if PUBLIC or PRIVATE obj was given, the old syntax was used. */
if ((oclass & (PK_PUBLIC_OBJ | PK_PRIVATE_OBJ)) &&
- kstype != KMF_KEYSTORE_PK11TOKEN) {
+ kstype != KMF_KEYSTORE_PK11TOKEN) {
(void) fprintf(stderr, gettext("The objtype parameter "
- "is only relevant if keystore=pkcs11\n"));
+ "is only relevant if keystore=pkcs11\n"));
return (PK_ERR_USAGE);
}
@@ -532,57 +905,85 @@ pk_import(int argc, char *argv[])
* into NSS or PKCS#11.
*/
if (kstype == KMF_KEYSTORE_NSS &&
- (oclass != PK_CRL_OBJ) && EMPTYSTRING(certlabel)) {
+ (oclass != PK_CRL_OBJ) && EMPTYSTRING(label)) {
cryptoerror(LOG_STDERR, gettext("The 'label' argument "
- "is required for this operation\n"));
+ "is required for this operation\n"));
return (PK_ERR_USAGE);
}
- /*
- * PKCS11 only imports PKCS#12 files or PEM/DER Cert files.
- */
- if (kstype == KMF_KEYSTORE_PK11TOKEN) {
- /* we do not import private keys except in PKCS12 bundles */
- if (oclass & (PK_PRIVATE_OBJ | PK_PRIKEY_OBJ)) {
- cryptoerror(LOG_STDERR, gettext(
- "The PKCS11 keystore only imports PKCS12 "
- "files or raw certificate data files "
- " or CRL file.\n"));
- return (PK_ERR_USAGE);
+ if ((rv = kmf_get_file_format(filename, &kfmt)) != KMF_OK) {
+ /*
+ * Allow for raw key data to be imported.
+ */
+ if (rv == KMF_ERR_ENCODING) {
+ rv = KMF_OK;
+ kfmt = KMF_FORMAT_RAWKEY;
+ /*
+ * Set the object class only if it was not
+ * given on the command line or if it was
+ * specified as a symmetric key object.
+ */
+ if (oclass == 0 || (oclass & PK_SYMKEY_OBJ)) {
+ oclass = PK_SYMKEY_OBJ;
+ } else {
+ cryptoerror(LOG_STDERR, gettext(
+ "The input file does not contain the "
+ "object type indicated on command "
+ "line."));
+ return (KMF_ERR_BAD_PARAMETER);
+ }
+ } else {
+ cryptoerror(LOG_STDERR,
+ gettext("File format not recognized."));
+ return (rv);
}
}
- if ((rv = KMF_GetFileFormat(filename, &kfmt)) != KMF_OK) {
- cryptoerror(LOG_STDERR,
- gettext("File format not recognized."));
- return (rv);
+ /* Check parameters for raw key import operation */
+ if (kfmt == KMF_FORMAT_RAWKEY) {
+ if (keytype != NULL &&
+ Str2SymKeyType(keytype, &keyAlg) != 0) {
+ cryptoerror(LOG_STDERR,
+ gettext("Unrecognized keytype(%s).\n"), keytype);
+ return (PK_ERR_USAGE);
+ }
+ if (senstr != NULL && extstr != NULL &&
+ kstype != KMF_KEYSTORE_PK11TOKEN) {
+ cryptoerror(LOG_STDERR,
+ gettext("The sensitive or extractable option "
+ "applies only when importing a key from a file "
+ "into a PKCS#11 keystore.\n"));
+ return (PK_ERR_USAGE);
+ }
}
+
+ /* If no objtype was given, treat it as a certificate */
if (oclass == 0 && (kfmt == KMF_FORMAT_ASN1 ||
- kfmt == KMF_FORMAT_PEM))
+ kfmt == KMF_FORMAT_PEM))
oclass = PK_CERT_OBJ;
if (kstype == KMF_KEYSTORE_NSS) {
if (oclass == PK_CRL_OBJ &&
- (kfmt != KMF_FORMAT_ASN1 && kfmt != KMF_FORMAT_PEM)) {
+ (kfmt != KMF_FORMAT_ASN1 && kfmt != KMF_FORMAT_PEM)) {
cryptoerror(LOG_STDERR, gettext(
- "CRL data can only be imported as DER or "
- "PEM format"));
+ "CRL data can only be imported as DER or "
+ "PEM format"));
return (PK_ERR_USAGE);
}
if (oclass == PK_CERT_OBJ &&
- (kfmt != KMF_FORMAT_ASN1 && kfmt != KMF_FORMAT_PEM)) {
+ (kfmt != KMF_FORMAT_ASN1 && kfmt != KMF_FORMAT_PEM)) {
cryptoerror(LOG_STDERR, gettext(
- "Certificates can only be imported as DER or "
- "PEM format"));
+ "Certificates can only be imported as DER or "
+ "PEM format"));
return (PK_ERR_USAGE);
}
/* we do not import private keys except in PKCS12 bundles */
if (oclass & (PK_PRIVATE_OBJ | PK_PRIKEY_OBJ)) {
cryptoerror(LOG_STDERR, gettext(
- "Private key data can only be imported as part "
- "of a PKCS12 file.\n"));
+ "Private key data can only be imported as part "
+ "of a PKCS12 file.\n"));
return (PK_ERR_USAGE);
}
}
@@ -590,9 +991,9 @@ pk_import(int argc, char *argv[])
if (kstype == KMF_KEYSTORE_OPENSSL && oclass != PK_CRL_OBJ) {
if (EMPTYSTRING(keyfile) || EMPTYSTRING(certfile)) {
cryptoerror(LOG_STDERR, gettext(
- "The 'outkey' and 'outcert' parameters "
- "are required for the import operation "
- "when the 'file' keystore is used.\n"));
+ "The 'outkey' and 'outcert' parameters "
+ "are required for the import operation "
+ "when the 'file' keystore is used.\n"));
return (PK_ERR_USAGE);
}
}
@@ -604,16 +1005,17 @@ pk_import(int argc, char *argv[])
if (kfmt == KMF_FORMAT_PKCS12) {
(void) get_pk12_password(&pk12cred);
+ }
- if (kstype == KMF_KEYSTORE_PK11TOKEN ||
- kstype == KMF_KEYSTORE_NSS)
- (void) get_token_password(kstype, token_spec,
- &tokencred);
+ if ((kfmt == KMF_FORMAT_PKCS12 || kfmt == KMF_FORMAT_RAWKEY ||
+ (kfmt == KMF_FORMAT_PEM && (oclass & PK_KEY_OBJ))) &&
+ (kstype == KMF_KEYSTORE_PK11TOKEN || kstype == KMF_KEYSTORE_NSS)) {
+ (void) get_token_password(kstype, token_spec, &tokencred);
}
- if ((rv = KMF_Initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
+ if ((rv = kmf_initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
cryptoerror(LOG_STDERR, gettext("Error initializing "
- "KMF: 0x%02x\n"), rv);
+ "KMF: 0x%02x\n"), rv);
goto end;
}
@@ -621,64 +1023,64 @@ pk_import(int argc, char *argv[])
case KMF_KEYSTORE_PK11TOKEN:
if (kfmt == KMF_FORMAT_PKCS12)
rv = pk_import_pk12_pk11(
- kmfhandle,
- &pk12cred,
- &tokencred,
- certlabel,
- token_spec,
- filename);
+ kmfhandle, &pk12cred,
+ &tokencred, label,
+ token_spec, filename);
else if (oclass == PK_CERT_OBJ)
rv = pk_import_cert(
- kmfhandle,
- kstype,
- certlabel,
- token_spec,
- filename,
- NULL, NULL, NULL);
+ kmfhandle, kstype,
+ label, token_spec,
+ filename,
+ NULL, NULL, NULL);
else if (oclass == PK_CRL_OBJ)
rv = pk_import_file_crl(
- kmfhandle,
- filename,
- crlfile,
- dir,
- okfmt);
+ kmfhandle, filename,
+ crlfile, dir, okfmt);
+ else if (kfmt == KMF_FORMAT_RAWKEY &&
+ oclass == PK_SYMKEY_OBJ) {
+ rv = pk_import_rawkey(kmfhandle,
+ kstype, token_spec, &tokencred,
+ filename, label,
+ keyAlg, senstr, extstr);
+ } else if (kfmt == KMF_FORMAT_PEM ||
+ kfmt == KMF_FORMAT_PEM_KEYPAIR) {
+ rv = pk_import_keys(kmfhandle,
+ kstype, token_spec, &tokencred,
+ filename, label, senstr, extstr);
+ } else {
+ rv = PK_ERR_USAGE;
+ }
break;
case KMF_KEYSTORE_NSS:
if (dir == NULL)
dir = PK_DEFAULT_DIRECTORY;
if (kfmt == KMF_FORMAT_PKCS12)
rv = pk_import_pk12_nss(
- kmfhandle, &pk12cred,
- &tokencred,
- token_spec, dir, prefix,
- certlabel, trustflags, filename);
+ kmfhandle, &pk12cred,
+ &tokencred,
+ token_spec, dir, prefix,
+ label, trustflags, filename);
else if (oclass == PK_CERT_OBJ) {
rv = pk_import_cert(
- kmfhandle, kstype,
- certlabel, token_spec,
- filename, dir, prefix, trustflags);
+ kmfhandle, kstype,
+ label, token_spec,
+ filename, dir, prefix, trustflags);
} else if (oclass == PK_CRL_OBJ) {
rv = pk_import_nss_crl(
- kmfhandle,
- verify_crl_flag,
- filename,
- dir,
- prefix);
+ kmfhandle, verify_crl_flag,
+ filename, dir, prefix);
}
break;
case KMF_KEYSTORE_OPENSSL:
if (kfmt == KMF_FORMAT_PKCS12)
rv = pk_import_pk12_files(
- kmfhandle, &pk12cred,
- filename, certfile, keyfile,
- dir, keydir, okfmt);
+ kmfhandle, &pk12cred,
+ filename, certfile, keyfile,
+ dir, keydir, okfmt);
else if (oclass == PK_CRL_OBJ) {
rv = pk_import_file_crl(
- kmfhandle,
- filename,
- crlfile,
- dir,
- okfmt);
+ kmfhandle, filename,
+ crlfile, dir, okfmt);
} else
/*
* It doesn't make sense to import anything
@@ -694,7 +1096,7 @@ pk_import(int argc, char *argv[])
end:
if (rv != KMF_OK)
display_error(kmfhandle, rv,
- gettext("Error importing objects"));
+ gettext("Error importing objects"));
if (tokencred.cred != NULL)
free(tokencred.cred);
@@ -702,7 +1104,7 @@ end:
if (pk12cred.cred != NULL)
free(pk12cred.cred);
- (void) KMF_Finalize(kmfhandle);
+ (void) kmf_finalize(kmfhandle);
if (rv != KMF_OK)
return (PK_ERR_USAGE);
diff --git a/usr/src/cmd/cmd-crypto/pktool/list.c b/usr/src/cmd/cmd-crypto/pktool/list.c
index 0317da28b7..01dc537c8b 100644
--- a/usr/src/cmd/cmd-crypto/pktool/list.c
+++ b/usr/src/cmd/cmd-crypto/pktool/list.c
@@ -46,6 +46,7 @@ pk_show_certs(KMF_HANDLE_T kmfhandle, KMF_X509_DER_CERT *certs, int num_certs)
{
int i;
char *subject, *issuer, *serial, *id, *altname;
+ char *start, *end, *keyusage, *extkeyusage;
for (i = 0; i < num_certs; i++) {
subject = NULL;
@@ -53,42 +54,66 @@ pk_show_certs(KMF_HANDLE_T kmfhandle, KMF_X509_DER_CERT *certs, int num_certs)
serial = NULL;
id = NULL;
altname = NULL;
+ start = end = NULL;
+ keyusage = extkeyusage = NULL;
(void) fprintf(stdout,
- gettext("%d. (X.509 certificate)\n"), i + 1);
+ gettext("%d. (X.509 certificate)\n"), i + 1);
if (certs[i].kmf_private.label != NULL)
(void) fprintf(stdout, gettext("\t%s: %s\n"),
- (certs[i].kmf_private.keystore_type ==
- KMF_KEYSTORE_OPENSSL ? "Filename" : "Label"),
- certs[i].kmf_private.label);
- if (KMF_GetCertIDString(&certs[i].certificate,
- &id) == KMF_OK)
+ (certs[i].kmf_private.keystore_type ==
+ KMF_KEYSTORE_OPENSSL ? "Filename" : "Label"),
+ certs[i].kmf_private.label);
+ if (kmf_get_cert_id_str(&certs[i].certificate,
+ &id) == KMF_OK)
(void) fprintf(stdout, gettext("\tID: %s\n"), id);
- if (KMF_GetCertSubjectNameString(kmfhandle,
- &certs[i].certificate, &subject) == KMF_OK)
+ if (kmf_get_cert_subject_str(kmfhandle,
+ &certs[i].certificate, &subject) == KMF_OK)
(void) fprintf(stdout, gettext("\tSubject: %s\n"),
- subject);
- if (KMF_GetCertIssuerNameString(kmfhandle,
- &certs[i].certificate, &issuer) == KMF_OK)
+ subject);
+ if (kmf_get_cert_issuer_str(kmfhandle,
+ &certs[i].certificate, &issuer) == KMF_OK)
(void) fprintf(stdout, gettext("\tIssuer: %s\n"),
- issuer);
- if (KMF_GetCertSerialNumberString(kmfhandle,
- &certs[i].certificate, &serial) == KMF_OK)
+ issuer);
+ if (kmf_get_cert_start_date_str(kmfhandle,
+ &certs[i].certificate, &start) == KMF_OK)
+ (void) fprintf(stdout, gettext("\tNot Before: %s\n"),
+ start);
+ if (kmf_get_cert_end_date_str(kmfhandle,
+ &certs[i].certificate, &end) == KMF_OK)
+ (void) fprintf(stdout, gettext("\tNot After: %s\n"),
+ end);
+ if (kmf_get_cert_serial_str(kmfhandle,
+ &certs[i].certificate, &serial) == KMF_OK)
(void) fprintf(stdout, gettext("\tSerial: %s\n"),
- serial);
-
- if (KMF_GetCertExtensionString(kmfhandle,
- &certs[i].certificate, KMF_X509_EXT_SUBJ_ALTNAME,
- &altname) == KMF_OK) {
+ serial);
+ if (kmf_get_cert_extn_str(kmfhandle,
+ &certs[i].certificate, KMF_X509_EXT_SUBJ_ALTNAME,
+ &altname) == KMF_OK) {
(void) fprintf(stdout, gettext("\t%s\n"),
- altname);
+ altname);
}
-
- KMF_FreeString(subject);
- KMF_FreeString(issuer);
- KMF_FreeString(serial);
- KMF_FreeString(id);
- KMF_FreeString(altname);
+ if (kmf_get_cert_extn_str(kmfhandle,
+ &certs[i].certificate, KMF_X509_EXT_KEY_USAGE,
+ &keyusage) == KMF_OK) {
+ (void) fprintf(stdout, gettext("\t%s\n"),
+ keyusage);
+ }
+ if (kmf_get_cert_extn_str(kmfhandle,
+ &certs[i].certificate, KMF_X509_EXT_EXT_KEY_USAGE,
+ &extkeyusage) == KMF_OK) {
+ (void) fprintf(stdout, gettext("\t%s\n"),
+ extkeyusage);
+ }
+ kmf_free_str(subject);
+ kmf_free_str(issuer);
+ kmf_free_str(serial);
+ kmf_free_str(id);
+ kmf_free_str(altname);
+ kmf_free_str(keyusage);
+ kmf_free_str(extkeyusage);
+ kmf_free_str(start);
+ kmf_free_str(end);
(void) fprintf(stdout, "\n");
}
}
@@ -140,20 +165,36 @@ pk_show_keys(void *handle, KMF_KEY_HANDLE *keys, int numkeys)
for (i = 0; i < numkeys; i++) {
(void) fprintf(stdout, gettext("Key #%d - %s: %s"),
- i+1, describeKey(&keys[i]),
- keys[i].keylabel ? keys[i].keylabel :
- gettext("No label"));
+ i+1, describeKey(&keys[i]),
+ keys[i].keylabel ? keys[i].keylabel :
+ gettext("No label"));
if (keys[i].keyclass == KMF_SYMMETRIC) {
KMF_RETURN rv;
KMF_RAW_SYM_KEY rkey;
- rv = KMF_GetSymKeyValue(handle, &keys[i],
- &rkey);
+ (void) memset(&rkey, 0, sizeof (rkey));
+ rv = kmf_get_sym_key_value(handle, &keys[i],
+ &rkey);
if (rv == KMF_OK) {
(void) fprintf(stdout, " (%d bits)",
- rkey.keydata.len * 8);
- KMF_FreeRawSymKey(&rkey);
+ rkey.keydata.len * 8);
+ kmf_free_bigint(&rkey.keydata);
+ } else if (keys[i].kstype == KMF_KEYSTORE_PK11TOKEN) {
+ if (rv == KMF_ERR_SENSITIVE_KEY) {
+ (void) fprintf(stdout, " (sensitive)");
+ } else if (rv == KMF_ERR_UNEXTRACTABLE_KEY) {
+ (void) fprintf(stdout,
+ " (non-extractable)");
+ } else {
+ char *err = NULL;
+ if (kmf_get_kmf_error_str(rv, &err) ==
+ KMF_OK)
+ (void) fprintf(stdout,
+ " (error: %s)", err);
+ if (err != NULL)
+ free(err);
+ }
}
}
(void) fprintf(stdout, "\n");
@@ -165,69 +206,97 @@ pk_show_keys(void *handle, KMF_KEY_HANDLE *keys, int numkeys)
* all matching certificates.
*/
static KMF_RETURN
-pk_find_certs(KMF_HANDLE_T kmfhandle, KMF_FINDCERT_PARAMS *params)
+pk_find_certs(KMF_HANDLE_T kmfhandle, KMF_ATTRIBUTE *attrlist, int numattr)
{
KMF_RETURN rv = KMF_OK;
KMF_X509_DER_CERT *certlist = NULL;
uint32_t numcerts = 0;
+ KMF_KEYSTORE_TYPE kstype;
+
+ rv = kmf_get_attr(KMF_KEYSTORE_TYPE_ATTR, attrlist, numattr,
+ &kstype, NULL);
+ if (rv != KMF_OK)
+ return (rv);
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_COUNT_ATTR,
+ &numcerts, sizeof (uint32_t));
+ numattr++;
- numcerts = 0;
- rv = KMF_FindCert(kmfhandle, params, NULL, &numcerts);
+ rv = kmf_find_cert(kmfhandle, numattr, attrlist);
if (rv == KMF_OK && numcerts > 0) {
(void) printf(gettext("Found %d certificates.\n"),
- numcerts);
+ numcerts);
certlist = (KMF_X509_DER_CERT *)malloc(numcerts *
- sizeof (KMF_X509_DER_CERT));
+ sizeof (KMF_X509_DER_CERT));
if (certlist == NULL)
return (KMF_ERR_MEMORY);
(void) memset(certlist, 0, numcerts *
- sizeof (KMF_X509_DER_CERT));
+ sizeof (KMF_X509_DER_CERT));
- rv = KMF_FindCert(kmfhandle, params, certlist, &numcerts);
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_X509_DER_CERT_ATTR, certlist,
+ sizeof (KMF_X509_DER_CERT));
+ numattr++;
+
+ rv = kmf_find_cert(kmfhandle, numattr, attrlist);
if (rv == KMF_OK) {
int i;
(void) pk_show_certs(kmfhandle, certlist,
- numcerts);
+ numcerts);
for (i = 0; i < numcerts; i++)
- KMF_FreeKMFCert(kmfhandle, &certlist[i]);
+ kmf_free_kmf_cert(kmfhandle, &certlist[i]);
}
free(certlist);
}
if (rv == KMF_ERR_CERT_NOT_FOUND &&
- params->kstype != KMF_KEYSTORE_OPENSSL)
+ kstype != KMF_KEYSTORE_OPENSSL)
rv = KMF_OK;
return (rv);
}
static KMF_RETURN
-pk_list_keys(void *handle, KMF_FINDKEY_PARAMS *parms)
+pk_list_keys(void *handle, KMF_ATTRIBUTE *attrlist, int numattr)
{
KMF_RETURN rv;
KMF_KEY_HANDLE *keys;
uint32_t numkeys = 0;
+ KMF_KEYSTORE_TYPE kstype;
+
+ rv = kmf_get_attr(KMF_KEYSTORE_TYPE_ATTR, attrlist, numattr,
+ &kstype, NULL);
+ if (rv != KMF_OK)
+ return (rv);
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_COUNT_ATTR,
+ &numkeys, sizeof (uint32_t));
+ numattr++;
- numkeys = 0;
- rv = KMF_FindKey(handle, parms, NULL, &numkeys);
+ rv = kmf_find_key(handle, numattr, attrlist);
if (rv == KMF_OK && numkeys > 0) {
int i;
(void) printf(gettext("Found %d keys.\n"), numkeys);
keys = (KMF_KEY_HANDLE *)malloc(numkeys *
- sizeof (KMF_KEY_HANDLE));
+ sizeof (KMF_KEY_HANDLE));
if (keys == NULL)
return (KMF_ERR_MEMORY);
(void) memset(keys, 0, numkeys *
- sizeof (KMF_KEY_HANDLE));
+ sizeof (KMF_KEY_HANDLE));
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEY_HANDLE_ATTR,
+ keys, sizeof (KMF_KEY_HANDLE));
+ numattr++;
- rv = KMF_FindKey(handle, parms, keys, &numkeys);
+ rv = kmf_find_key(handle, numattr, attrlist);
if (rv == KMF_OK)
pk_show_keys(handle, keys, numkeys);
for (i = 0; i < numkeys; i++)
- KMF_FreeKMFKey(handle, &keys[i]);
+ kmf_free_kmf_key(handle, &keys[i]);
free(keys);
}
if (rv == KMF_ERR_KEY_NOT_FOUND &&
- parms->kstype != KMF_KEYSTORE_OPENSSL)
+ kstype != KMF_KEYSTORE_OPENSSL)
rv = KMF_OK;
return (rv);
}
@@ -239,7 +308,13 @@ list_pk11_objects(KMF_HANDLE_T kmfhandle, char *token, int oclass,
KMF_CERT_VALIDITY find_criteria_flag)
{
KMF_RETURN rv;
- KMF_LISTCRL_PARAMS lcrlargs;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_PK11TOKEN;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
+ boolean_t token_bool = B_TRUE;
+ boolean_t private = B_FALSE;
+ KMF_KEY_CLASS keyclass;
+ KMF_ENCODE_FORMAT format;
/*
* Symmetric keys and RSA/DSA private keys are always
@@ -250,85 +325,176 @@ list_pk11_objects(KMF_HANDLE_T kmfhandle, char *token, int oclass,
oclass |= PK_PRIVATE_OBJ;
rv = select_token(kmfhandle, token,
- !(oclass & (PK_PRIVATE_OBJ | PK_PRIKEY_OBJ)));
+ !(oclass & (PK_PRIVATE_OBJ | PK_PRIKEY_OBJ)));
if (rv != KMF_OK) {
return (rv);
}
if (oclass & (PK_KEY_OBJ | PK_PRIVATE_OBJ)) {
- KMF_FINDKEY_PARAMS parms;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (objlabel != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYLABEL_ATTR, objlabel,
+ strlen(objlabel));
+ numattr++;
+ }
+
+ private = ((oclass & PK_PRIVATE_OBJ) > 0);
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_PRIVATE_BOOL_ATTR, &private,
+ sizeof (private));
+ numattr++;
- (void) memset(&parms, 0, sizeof (parms));
- parms.kstype = KMF_KEYSTORE_PK11TOKEN;
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_TOKEN_BOOL_ATTR, &token_bool,
+ sizeof (token_bool));
+ numattr++;
if (oclass & PK_PRIKEY_OBJ) {
- parms.keyclass = KMF_ASYM_PRI;
- parms.findLabel = objlabel;
- parms.cred = *tokencred;
- parms.pkcs11parms.private =
- ((oclass & PK_PRIVATE_OBJ) > 0);
- parms.pkcs11parms.token = 1;
+ int num = numattr;
+
+ keyclass = KMF_ASYM_PRI;
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_KEYCLASS_ATTR, &keyclass,
+ sizeof (keyclass));
+ num++;
+
+ if (tokencred != NULL &&
+ tokencred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_CREDENTIAL_ATTR, tokencred,
+ sizeof (KMF_CREDENTIAL));
+ num++;
+ }
/* list asymmetric private keys */
- rv = pk_list_keys(kmfhandle, &parms);
+ rv = pk_list_keys(kmfhandle, attrlist, num);
}
if (rv == KMF_OK && (oclass & PK_SYMKEY_OBJ)) {
- parms.keyclass = KMF_SYMMETRIC;
- parms.findLabel = objlabel;
- parms.cred = *tokencred;
- parms.format = KMF_FORMAT_RAWKEY;
- parms.pkcs11parms.private =
- ((oclass & PK_PRIVATE_OBJ) > 0);
- parms.pkcs11parms.token = 1;
+ int num = numattr;
+
+ keyclass = KMF_SYMMETRIC;
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_KEYCLASS_ATTR, &keyclass,
+ sizeof (keyclass));
+ num++;
+
+ if (tokencred != NULL &&
+ tokencred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_CREDENTIAL_ATTR, tokencred,
+ sizeof (KMF_CREDENTIAL));
+ num++;
+ }
+
+ format = KMF_FORMAT_RAWKEY;
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_ENCODE_FORMAT_ATTR, &format,
+ sizeof (format));
+ num++;
/* list symmetric keys */
- rv = pk_list_keys(kmfhandle, &parms);
+ rv = pk_list_keys(kmfhandle, attrlist, num);
}
if (rv == KMF_OK && (oclass & PK_PUBKEY_OBJ)) {
- parms.keyclass = KMF_ASYM_PUB;
- parms.findLabel = objlabel;
- parms.pkcs11parms.private =
- ((oclass & PK_PRIVATE_OBJ) > 0);
- parms.pkcs11parms.token = 1;
+ int num = numattr;
+
+ keyclass = KMF_ASYM_PUB;
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_KEYCLASS_ATTR, &keyclass,
+ sizeof (keyclass));
+ num++;
/* list asymmetric public keys (if any) */
- rv = pk_list_keys(kmfhandle, &parms);
+ rv = pk_list_keys(kmfhandle, attrlist, num);
}
if (rv != KMF_OK)
return (rv);
}
+ numattr = 0;
if (oclass & (PK_CERT_OBJ | PK_PUBLIC_OBJ)) {
- KMF_FINDCERT_PARAMS parms;
-
- (void) memset(&parms, 0, sizeof (parms));
- parms.kstype = KMF_KEYSTORE_PK11TOKEN;
- parms.certLabel = objlabel;
- parms.issuer = issuer;
- parms.subject = subject;
- parms.serial = serial;
- parms.pkcs11parms.private = FALSE;
- parms.find_cert_validity = find_criteria_flag;
-
- rv = pk_find_certs(kmfhandle, &parms);
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (objlabel != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_LABEL_ATTR, objlabel,
+ strlen(objlabel));
+ numattr++;
+ }
+
+ if (issuer != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ISSUER_NAME_ATTR, issuer,
+ strlen(issuer));
+ numattr++;
+ }
+
+ if (subject != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_SUBJECT_NAME_ATTR, subject,
+ strlen(subject));
+ numattr++;
+ }
+
+ if (serial != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_BIGINT_ATTR, serial,
+ sizeof (KMF_BIGINT));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_PRIVATE_BOOL_ATTR, &private,
+ sizeof (private));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_VALIDITY_ATTR, &find_criteria_flag,
+ sizeof (KMF_CERT_VALIDITY));
+ numattr++;
+
+ rv = pk_find_certs(kmfhandle, attrlist, numattr);
if (rv != KMF_OK)
return (rv);
}
+ numattr = 0;
+ kstype = KMF_KEYSTORE_OPENSSL; /* CRL is file-based */
if (oclass & PK_CRL_OBJ) {
- char *crldata;
+ char *crldata = NULL;
- (void) memset(&lcrlargs, 0, sizeof (lcrlargs));
- lcrlargs.kstype = KMF_KEYSTORE_OPENSSL;
- lcrlargs.sslparms.dirpath = dir;
- lcrlargs.sslparms.crlfile = filename;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
- rv = KMF_ListCRL(kmfhandle, &lcrlargs, &crldata);
- if (rv == KMF_OK) {
+ if (dir != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_DIRPATH_ATTR, dir, strlen(dir));
+ numattr++;
+ }
+ if (filename != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CRL_FILENAME_ATTR,
+ filename, strlen(filename));
+ numattr++;
+ }
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CRL_DATA_ATTR,
+ &crldata, sizeof (char *));
+ numattr++;
+
+ rv = kmf_list_crl(kmfhandle, numattr, attrlist);
+ if (rv == KMF_OK && crldata != NULL) {
(void) printf("%s\n", crldata);
free(crldata);
}
@@ -344,28 +510,67 @@ list_file_objects(KMF_HANDLE_T kmfhandle, int oclass,
KMF_CERT_VALIDITY find_criteria_flag)
{
int rv;
- KMF_FINDCERT_PARAMS fcargs;
- KMF_FINDKEY_PARAMS fkargs;
- KMF_LISTCRL_PARAMS lcrlargs;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
+ KMF_KEY_CLASS keyclass;
+ KMF_ENCODE_FORMAT format;
+ char *defaultdir = ".";
if (oclass & PK_KEY_OBJ) {
- (void) memset(&fkargs, 0, sizeof (fkargs));
- fkargs.kstype = KMF_KEYSTORE_OPENSSL;
- fkargs.sslparms.dirpath = dir;
- fkargs.sslparms.keyfile = filename;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (dir == NULL && filename == NULL)
+ dir = defaultdir;
+
+ if (dir != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_DIRPATH_ATTR, dir,
+ strlen(dir));
+ numattr++;
+ }
+
+ if (filename != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEY_FILENAME_ATTR, filename,
+ strlen(filename));
+ numattr++;
+ }
+
if (oclass & PK_PRIKEY_OBJ) {
- fkargs.keyclass = KMF_ASYM_PRI;
+ int num = numattr;
- rv = pk_list_keys(kmfhandle, &fkargs);
+ keyclass = KMF_ASYM_PRI;
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_KEYCLASS_ATTR, &keyclass,
+ sizeof (keyclass));
+ num++;
+
+ /* list asymmetric private keys */
+ rv = pk_list_keys(kmfhandle, attrlist, num);
}
if (rv == KMF_ERR_KEY_NOT_FOUND)
rv = KMF_OK;
if (rv == KMF_OK && (oclass & PK_SYMKEY_OBJ)) {
- fkargs.keyclass = KMF_SYMMETRIC;
- fkargs.format = KMF_FORMAT_RAWKEY;
+ int num = numattr;
- rv = pk_list_keys(kmfhandle, &fkargs);
+ keyclass = KMF_SYMMETRIC;
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_KEYCLASS_ATTR, &keyclass,
+ sizeof (keyclass));
+ num++;
+
+ format = KMF_FORMAT_RAWKEY;
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_ENCODE_FORMAT_ATTR, &format,
+ sizeof (format));
+ num++;
+
+ /* list symmetric keys */
+ rv = pk_list_keys(kmfhandle, attrlist, num);
}
if (rv == KMF_ERR_KEY_NOT_FOUND)
rv = KMF_OK;
@@ -373,32 +578,83 @@ list_file_objects(KMF_HANDLE_T kmfhandle, int oclass,
return (rv);
}
+ numattr = 0;
if (oclass & PK_CERT_OBJ) {
- (void) memset(&fcargs, 0, sizeof (fcargs));
- fcargs.kstype = KMF_KEYSTORE_OPENSSL;
- fcargs.certLabel = NULL;
- fcargs.issuer = issuer;
- fcargs.subject = subject;
- fcargs.serial = serial;
- fcargs.sslparms.dirpath = dir;
- fcargs.sslparms.certfile = filename;
- fcargs.find_cert_validity = find_criteria_flag;
-
- rv = pk_find_certs(kmfhandle, &fcargs);
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype,
+ sizeof (kstype));
+ numattr++;
+
+ if (issuer != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ISSUER_NAME_ATTR, issuer,
+ strlen(issuer));
+ numattr++;
+ }
+
+ if (subject != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_SUBJECT_NAME_ATTR, subject,
+ strlen(subject));
+ numattr++;
+ }
+
+ if (serial != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_BIGINT_ATTR, serial,
+ sizeof (KMF_BIGINT));
+ numattr++;
+ }
+
+ if (filename != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_FILENAME_ATTR, filename,
+ strlen(filename));
+ numattr++;
+ }
+
+ if (dir != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_DIRPATH_ATTR, dir,
+ strlen(dir));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_VALIDITY_ATTR, &find_criteria_flag,
+ sizeof (KMF_CERT_VALIDITY));
+ numattr++;
+
+ rv = pk_find_certs(kmfhandle, attrlist, numattr);
if (rv != KMF_OK)
return (rv);
}
+ numattr = 0;
if (oclass & PK_CRL_OBJ) {
- char *crldata;
+ char *crldata = NULL;
- (void) memset(&lcrlargs, 0, sizeof (lcrlargs));
- lcrlargs.kstype = KMF_KEYSTORE_OPENSSL;
- lcrlargs.sslparms.dirpath = dir;
- lcrlargs.sslparms.crlfile = filename;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
- rv = KMF_ListCRL(kmfhandle, &lcrlargs, &crldata);
- if (rv == KMF_OK) {
+ if (dir != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_DIRPATH_ATTR, dir, strlen(dir));
+ numattr++;
+ }
+ if (filename != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CRL_FILENAME_ATTR,
+ filename, strlen(filename));
+ numattr++;
+ }
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CRL_DATA_ATTR,
+ &crldata, sizeof (char *));
+ numattr++;
+
+ rv = kmf_list_crl(kmfhandle, numattr, attrlist);
+ if (rv == KMF_OK && crldata != NULL) {
(void) printf("%s\n", crldata);
free(crldata);
}
@@ -415,64 +671,163 @@ list_nss_objects(KMF_HANDLE_T kmfhandle,
KMF_CERT_VALIDITY find_criteria_flag)
{
KMF_RETURN rv = KMF_OK;
- KMF_FINDKEY_PARAMS fkargs;
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
+ KMF_KEY_CLASS keyclass;
+ KMF_ENCODE_FORMAT format;
rv = configure_nss(kmfhandle, dir, prefix);
if (rv != KMF_OK)
return (rv);
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
if (oclass & PK_KEY_OBJ) {
- (void) memset(&fkargs, 0, sizeof (fkargs));
- fkargs.kstype = KMF_KEYSTORE_NSS;
- fkargs.findLabel = nickname;
- fkargs.cred = *tokencred;
- fkargs.nssparms.slotlabel = token_spec;
+ if (tokencred != NULL && tokencred->credlen > 0) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CREDENTIAL_ATTR, tokencred,
+ sizeof (KMF_CREDENTIAL));
+ numattr++;
+ }
+
+ if (token_spec && strlen(token_spec)) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_TOKEN_LABEL_ATTR, token_spec,
+ strlen(token_spec));
+ numattr++;
+ }
+
+ if (nickname != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYLABEL_ATTR, nickname,
+ strlen(nickname));
+ numattr++;
+ }
}
if (oclass & PK_PRIKEY_OBJ) {
- fkargs.keyclass = KMF_ASYM_PRI;
- rv = pk_list_keys(kmfhandle, &fkargs);
+ int num = numattr;
+
+ keyclass = KMF_ASYM_PRI;
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_KEYCLASS_ATTR, &keyclass,
+ sizeof (keyclass));
+ num++;
+
+ /* list asymmetric private keys */
+ rv = pk_list_keys(kmfhandle, attrlist, num);
}
+
if (rv == KMF_OK && (oclass & PK_SYMKEY_OBJ)) {
- fkargs.keyclass = KMF_SYMMETRIC;
- fkargs.format = KMF_FORMAT_RAWKEY;
- rv = pk_list_keys(kmfhandle, &fkargs);
+ int num = numattr;
+
+ keyclass = KMF_SYMMETRIC;
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_KEYCLASS_ATTR, &keyclass,
+ sizeof (keyclass));
+ num++;
+
+ format = KMF_FORMAT_RAWKEY;
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_ENCODE_FORMAT_ATTR, &format,
+ sizeof (format));
+ num++;
+
+ /* list symmetric keys */
+ rv = pk_list_keys(kmfhandle, attrlist, num);
}
+
if (rv == KMF_OK && (oclass & PK_PUBKEY_OBJ)) {
- fkargs.keyclass = KMF_ASYM_PUB;
- rv = pk_list_keys(kmfhandle, &fkargs);
+ int num = numattr;
+
+ keyclass = KMF_ASYM_PUB;
+ kmf_set_attr_at_index(attrlist, num,
+ KMF_KEYCLASS_ATTR, &keyclass,
+ sizeof (keyclass));
+ num++;
+
+ /* list asymmetric public keys */
+ rv = pk_list_keys(kmfhandle, attrlist, num);
}
/* If searching for public objects or certificates, find certs now */
+ numattr = 0;
if (rv == KMF_OK && (oclass & PK_CERT_OBJ)) {
- KMF_FINDCERT_PARAMS fcargs;
-
- (void) memset(&fcargs, 0, sizeof (fcargs));
- fcargs.kstype = KMF_KEYSTORE_NSS;
- fcargs.certLabel = nickname;
- fcargs.issuer = issuer;
- fcargs.subject = subject;
- fcargs.serial = serial;
- fcargs.nssparms.slotlabel = token_spec;
- fcargs.find_cert_validity = find_criteria_flag;
-
- rv = pk_find_certs(kmfhandle, &fcargs);
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_KEYSTORE_TYPE_ATTR, &kstype,
+ sizeof (kstype));
+ numattr++;
+
+ if (nickname != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_LABEL_ATTR, nickname,
+ strlen(nickname));
+ numattr++;
+ }
+
+ if (issuer != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_ISSUER_NAME_ATTR, issuer,
+ strlen(issuer));
+ numattr++;
+ }
+
+ if (subject != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_SUBJECT_NAME_ATTR, subject,
+ strlen(subject));
+ numattr++;
+ }
+
+ if (serial != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_BIGINT_ATTR, serial,
+ sizeof (KMF_BIGINT));
+ numattr++;
+ }
+
+ if (token_spec != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_TOKEN_LABEL_ATTR, token_spec,
+ strlen(token_spec));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CERT_VALIDITY_ATTR, &find_criteria_flag,
+ sizeof (KMF_CERT_VALIDITY));
+ numattr++;
+
+ rv = pk_find_certs(kmfhandle, attrlist, numattr);
}
+ numattr = 0;
if (rv == KMF_OK && (oclass & PK_CRL_OBJ)) {
int numcrls;
- KMF_FINDCRL_PARAMS fcrlargs;
- (void) memset(&fcrlargs, 0, sizeof (fcrlargs));
- fcrlargs.kstype = KMF_KEYSTORE_NSS;
- fcrlargs.nssparms.slotlabel = token_spec;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
- rv = KMF_FindCRL(kmfhandle, &fcrlargs, NULL, &numcrls);
+ if (token_spec != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_TOKEN_LABEL_ATTR,
+ token_spec, strlen(token_spec));
+ numattr++;
+ }
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CRL_COUNT_ATTR,
+ &numcrls, sizeof (int));
+ numattr++;
+
+ rv = kmf_find_crl(kmfhandle, numattr, attrlist);
if (rv == KMF_OK) {
char **p;
if (numcrls == 0) {
(void) printf(gettext("No CRLs found in "
- "NSS keystore.\n"));
+ "NSS keystore.\n"));
return (KMF_OK);
}
@@ -481,13 +836,16 @@ list_nss_objects(KMF_HANDLE_T kmfhandle,
return (KMF_ERR_MEMORY);
}
(void) memset(p, 0, numcrls * sizeof (char *));
- rv = KMF_FindCRL(kmfhandle, &fcrlargs,
- p, &numcrls);
+
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_CRL_NAMELIST_ATTR, p, sizeof (char *));
+ numattr++;
+ rv = kmf_find_crl(kmfhandle, numattr, attrlist);
if (rv == KMF_OK) {
int i;
for (i = 0; i < numcrls; i++) {
(void) printf("%d. Name = %s\n",
- i + 1, p[i]);
+ i + 1, p[i]);
free(p[i]);
}
}
@@ -526,10 +884,10 @@ pk_list(int argc, char *argv[])
/* Parse command line options. Do NOT i18n/l10n. */
while ((opt = getopt_av(argc, argv,
- "k:(keystore)t:(objtype)T:(token)d:(dir)"
- "p:(prefix)n:(nickname)S:(serial)s:(subject)"
- "c:(criteria)"
- "i:(issuer)l:(label)f:(infile)")) != EOF) {
+ "k:(keystore)t:(objtype)T:(token)d:(dir)"
+ "p:(prefix)n:(nickname)S:(serial)s:(subject)"
+ "c:(criteria)"
+ "i:(issuer)l:(label)f:(infile)")) != EOF) {
if (EMPTYSTRING(optarg_av))
return (PK_ERR_USAGE);
switch (opt) {
@@ -608,7 +966,7 @@ pk_list(int argc, char *argv[])
if (argc)
return (PK_ERR_USAGE);
- if ((rv = KMF_Initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
+ if ((rv = kmf_initialize(&kmfhandle, NULL, NULL)) != KMF_OK) {
/* Error message ? */
return (rv);
}
@@ -619,10 +977,10 @@ pk_list(int argc, char *argv[])
/* if PUBLIC or PRIVATE obj was given, the old syntax was used. */
if ((oclass & (PK_PUBLIC_OBJ | PK_PRIVATE_OBJ)) &&
- kstype != KMF_KEYSTORE_PK11TOKEN) {
+ kstype != KMF_KEYSTORE_PK11TOKEN) {
(void) fprintf(stderr, gettext("The objtype parameter "
- "is only relevant if keystore=pkcs11\n"));
+ "is only relevant if keystore=pkcs11\n"));
return (PK_ERR_USAGE);
}
@@ -640,11 +998,11 @@ pk_list(int argc, char *argv[])
uchar_t *bytes = NULL;
size_t bytelen;
- rv = KMF_HexString2Bytes((uchar_t *)serstr, &bytes, &bytelen);
+ rv = kmf_hexstr_to_bytes((uchar_t *)serstr, &bytes, &bytelen);
if (rv != KMF_OK || bytes == NULL) {
(void) fprintf(stderr, gettext("serial number "
- "must be specified as a hex number "
- "(ex: 0x0102030405ffeeddee)\n"));
+ "must be specified as a hex number "
+ "(ex: 0x0102030405ffeeddee)\n"));
return (PK_ERR_USAGE);
}
serial.val = bytes;
@@ -652,36 +1010,36 @@ pk_list(int argc, char *argv[])
}
if ((kstype == KMF_KEYSTORE_PK11TOKEN ||
- kstype == KMF_KEYSTORE_NSS) &&
- (oclass & (PK_PRIKEY_OBJ | PK_PRIVATE_OBJ))) {
+ kstype == KMF_KEYSTORE_NSS) &&
+ (oclass & (PK_PRIKEY_OBJ | PK_PRIVATE_OBJ))) {
(void) get_token_password(kstype, token_spec,
- &tokencred);
+ &tokencred);
}
if (kstype == KMF_KEYSTORE_PK11TOKEN) {
rv = list_pk11_objects(kmfhandle, token_spec,
- oclass, list_label, &serial,
- issuer, subject, dir, filename,
- &tokencred, find_criteria_flag);
+ oclass, list_label, &serial,
+ issuer, subject, dir, filename,
+ &tokencred, find_criteria_flag);
} else if (kstype == KMF_KEYSTORE_NSS) {
if (dir == NULL)
dir = PK_DEFAULT_DIRECTORY;
rv = list_nss_objects(kmfhandle,
- oclass, token_spec, dir, prefix,
- list_label, &serial, issuer, subject,
- &tokencred, find_criteria_flag);
+ oclass, token_spec, dir, prefix,
+ list_label, &serial, issuer, subject,
+ &tokencred, find_criteria_flag);
} else if (kstype == KMF_KEYSTORE_OPENSSL) {
rv = list_file_objects(kmfhandle,
- oclass, dir, filename,
- &serial, issuer, subject, find_criteria_flag);
+ oclass, dir, filename,
+ &serial, issuer, subject, find_criteria_flag);
}
if (rv != KMF_OK) {
display_error(kmfhandle, rv,
- gettext("Error listing objects"));
+ gettext("Error listing objects"));
}
if (serial.val != NULL)
@@ -690,6 +1048,6 @@ pk_list(int argc, char *argv[])
if (tokencred.cred != NULL)
free(tokencred.cred);
- (void) KMF_Finalize(kmfhandle);
+ (void) kmf_finalize(kmfhandle);
return (rv);
}
diff --git a/usr/src/cmd/cmd-crypto/pktool/pktool.c b/usr/src/cmd/cmd-crypto/pktool/pktool.c
index 33e7441bf2..3ca028cd28 100644
--- a/usr/src/cmd/cmd-crypto/pktool/pktool.c
+++ b/usr/src/cmd/cmd-crypto/pktool/pktool.c
@@ -94,7 +94,7 @@ static verbcmd cmds[] = {
"[ subject=subject-DN ]\n\t\t"
"[ keystore=pkcs11 ]\n\t\t"
"[ issuer=issuer-DN ]\n\t\t"
- "[ serial=serial number]\n\t\t"
+ "[ serial=serial number ]\n\t\t"
"[ label=cert-label ]\n\t\t"
"[ token=token[:manuf[:serial]]]\n\t\t"
"[ criteria=valid|expired|both ]\n\t"
@@ -112,7 +112,7 @@ static verbcmd cmds[] = {
"list keystore=nss objtype=cert\n\t\t"
"[ subject=subject-DN ]\n\t\t"
"[ issuer=issuer-DN ]\n\t\t"
- "[ serial=serial number]\n\t\t"
+ "[ serial=serial number ]\n\t\t"
"[ nickname=cert-nickname ]\n\t\t"
"[ token=token[:manuf[:serial]]]\n\t\t"
"[ dir=directory-path ]\n\t\t"
@@ -128,7 +128,7 @@ static verbcmd cmds[] = {
"list keystore=file objtype=cert\n\t\t"
"[ subject=subject-DN ]\n\t\t"
"[ issuer=issuer-DN ]\n\t\t"
- "[ serial=serial number]\n\t\t"
+ "[ serial=serial number ]\n\t\t"
"[ infile=cert-fn ]\n\t\t"
"[ dir=directory-path ]\n\t\t"
"[ criteria=valid|expired|both ]\n\t"
@@ -152,8 +152,8 @@ static verbcmd cmds[] = {
"delete keystore=nss objtype=cert\n\t\t"
"[ subject=subject-DN ]\n\t\t"
"[ issuer=issuer-DN ]\n\t\t"
- "[ serial=serial number]\n\t\t"
- "[ nickname=cert-nickname ]\n\t\t"
+ "[ serial=serial number ]\n\t\t"
+ "[ label=cert-label ]\n\t\t"
"[ token=token[:manuf[:serial]]]\n\t\t"
"[ dir=directory-path ]\n\t\t"
"[ prefix=DBprefix ]\n\t\t"
@@ -175,7 +175,7 @@ static verbcmd cmds[] = {
"delete keystore=pkcs11 objtype=cert[:[public | private | both]]\n\t\t"
"[ subject=subject-DN ]\n\t\t"
"[ issuer=issuer-DN ]\n\t\t"
- "[ serial=serial number]\n\t\t"
+ "[ serial=serial number ]\n\t\t"
"[ label=cert-label ]\n\t\t"
"[ token=token[:manuf[:serial]]]\n\t\t"
"[ criteria=valid|expired|both ]\n\t"
@@ -192,7 +192,7 @@ static verbcmd cmds[] = {
"delete keystore=file objtype=cert\n\t\t"
"[ subject=subject-DN ]\n\t\t"
"[ issuer=issuer-DN ]\n\t\t"
- "[ serial=serial number]\n\t\t"
+ "[ serial=serial number ]\n\t\t"
"[ infile=cert-fn ]\n\t\t"
"[ dir=directory-path ]\n\t\t"
"[ criteria=valid|expired|both ]\n\t"
@@ -228,7 +228,11 @@ static verbcmd cmds[] = {
"import keystore=pkcs11\n\t\t"
"infile=input-fn\n\t\t"
- "label=cert-label\n\t\t"
+ "label=label\n\t\t"
+ "[ objtype=cert|key ]\n\t\t"
+ "[ keytype=aes|arcfour|des|3des|generic ]\n\t\t"
+ "[ sensitive=y|n ]\n\t\t"
+ "[ extractable=y|n ]\n\t\t"
"[ token=token[:manuf[:serial]]]\n\t"
"import keystore=pkcs11 objtype=crl\n\t\t"
@@ -263,8 +267,8 @@ static verbcmd cmds[] = {
"[ objtype=cert|key ]\n\t\t"
"[ subject=subject-DN ]\n\t\t"
"[ issuer=issuer-DN ]\n\t\t"
- "[ serial=serial number]\n\t\t"
- "[ nickname=cert-nickname]\n\t\t"
+ "[ serial=serial number ]\n\t\t"
+ "[ nickname=cert-nickname ]\n\t\t"
"[ token=token[:manuf[:serial]]]\n\t\t"
"[ dir=directory-path ]\n\t\t"
"[ prefix=DBPrefix ]\n\t\t"
@@ -272,11 +276,12 @@ static verbcmd cmds[] = {
"export keystore=pkcs11\n\t\t"
"outfile=output-fn\n\t\t"
- "[ label=cert-label]\n\t\t"
+ "[ objtype=cert|key ]\n\t\t"
+ "[ label=label ]\n\t\t"
"[ subject=subject-DN ]\n\t\t"
"[ issuer=issuer-DN ]\n\t\t"
- "[ serial=serial number]\n\t\t"
- "[ outformat=pem|der|pkcs12]\n\t\t"
+ "[ serial=serial number ]\n\t\t"
+ "[ outformat=pem|der|pkcs12|raw ]\n\t\t"
"[ token=token[:manuf[:serial]]]\n\t"
"export keystore=file\n\t\t"
@@ -341,7 +346,7 @@ static verbcmd cmds[] = {
"[ prefix=DBprefix ]\n\t\t"
"[ keytype=rsa|dsa ]\n\t\t"
"[ keylen=key-size ]\n\t\t"
- "[ format=pem|der]\n\t"
+ "[ format=pem|der ]\n\t"
"gencsr [-i] [ keystore=pkcs11 ]\n\t\t"
"label=key-label\n\t\t"
"outcsr=csr-fn\n\t\t"
@@ -351,7 +356,7 @@ static verbcmd cmds[] = {
"[ token=token[:manuf[:serial]]]\n\t\t"
"[ keytype=rsa|dsa ]\n\t\t"
"[ keylen=key-size ]\n\t\t"
- "[ format=pem|der]\n\t"
+ "[ format=pem|der ]]\n\t"
"gencsr [-i] keystore=file\n\t\t"
"outcsr=csr-fn\n\t\t"
"outkey=key-fn\n\t\t"
@@ -361,7 +366,7 @@ static verbcmd cmds[] = {
"[ keytype=rsa|dsa ]\n\t\t"
"[ keylen=key-size ]\n\t\t"
"[ dir=directory-path ]\n\t\t"
- "[ format=pem|der]\n\t"
+ "[ format=pem|der ]\n\t"
},
{ "download", pk_download, 0,
@@ -486,7 +491,8 @@ process_arg_file(char *argfile, char ***argv, int *argc)
if (!strlen(argline))
continue;
- (*argv) = realloc((*argv), (nargs + 1) * sizeof (char *));
+ (*argv) = realloc((*argv),
+ (nargs + 1) * sizeof (char *));
if ((*argv) == NULL) {
perror("memory error");
(void) fclose(fp);
diff --git a/usr/src/cmd/cmd-crypto/pktool/setpin.c b/usr/src/cmd/cmd-crypto/pktool/setpin.c
index 62416e8c7d..d7538566bd 100644
--- a/usr/src/cmd/cmd-crypto/pktool/setpin.c
+++ b/usr/src/cmd/cmd-crypto/pktool/setpin.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -45,23 +45,30 @@ setpin_nss(KMF_HANDLE_T handle,
char *token_spec, char *dir, char *prefix)
{
int rv = 0;
- KMF_SETPIN_PARAMS params;
- KMF_CREDENTIAL newpincred = { NULL, 0 };
+ KMF_CREDENTIAL oldcred = {NULL, 0};
+ KMF_CREDENTIAL newpincred = {NULL, 0};
CK_UTF8CHAR_PTR old_pin = NULL, new_pin = NULL;
CK_ULONG old_pinlen = 0, new_pinlen = 0;
+ KMF_ATTRIBUTE setpinattrs[6];
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_NSS;
+ int numattrs = 0;
rv = configure_nss(handle, dir, prefix);
if (rv != KMF_OK)
return (rv);
- (void) memset(&params, 0, sizeof (params));
- params.kstype = KMF_KEYSTORE_NSS;
- params.tokenname = token_spec;
- params.nssparms.slotlabel = token_spec;
+ kmf_set_attr_at_index(setpinattrs, numattrs, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattrs++;
+ if (token_spec != NULL) {
+ kmf_set_attr_at_index(setpinattrs, numattrs,
+ KMF_TOKEN_LABEL_ATTR,
+ token_spec, strlen(token_spec));
+ numattrs++;
+ }
if ((rv = get_pin(gettext("Enter current token passphrase "
- "(<CR> if not set):"), NULL, &old_pin, &old_pinlen)) !=
- CKR_OK) {
+ "(<CR> if not set):"), NULL, &old_pin, &old_pinlen)) != CKR_OK) {
cryptoerror(LOG_STDERR,
gettext("Unable to get token passphrase."));
return (PK_ERR_NSS);
@@ -80,13 +87,20 @@ setpin_nss(KMF_HANDLE_T handle,
return (PK_ERR_NSS);
}
- params.cred.cred = (char *)old_pin;
- params.cred.credlen = old_pinlen;
+ oldcred.cred = (char *)old_pin;
+ oldcred.credlen = old_pinlen;
+
+ kmf_set_attr_at_index(setpinattrs, numattrs, KMF_CREDENTIAL_ATTR,
+ &oldcred, sizeof (oldcred));
+ numattrs++;
newpincred.cred = (char *)new_pin;
newpincred.credlen = new_pinlen;
+ kmf_set_attr_at_index(setpinattrs, numattrs, KMF_NEWPIN_ATTR,
+ &newpincred, sizeof (newpincred));
+ numattrs++;
- rv = KMF_SetTokenPin(handle, &params, &newpincred);
+ rv = kmf_set_token_pin(handle, numattrs, setpinattrs);
if (new_pin)
free(new_pin);
@@ -105,9 +119,12 @@ setpin_pkcs11(KMF_HANDLE_T handle, char *token_spec)
CK_ULONG old_pinlen = 0, new_pinlen = 0;
CK_RV rv = CKR_OK;
char *token_name = NULL;
- KMF_SETPIN_PARAMS params;
CK_TOKEN_INFO token_info;
- KMF_CREDENTIAL newpincred = { NULL, 0 };
+ KMF_CREDENTIAL newpincred = {NULL, 0};
+ KMF_CREDENTIAL oldcred = {NULL, 0};
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_PK11TOKEN;
+ KMF_ATTRIBUTE attrlist[6];
+ int numattr = 0;
/* If nothing is specified, default is to use softtoken. */
if (token_spec == NULL) {
@@ -115,7 +132,7 @@ setpin_pkcs11(KMF_HANDLE_T handle, char *token_spec)
token_name = SOFT_TOKEN_LABEL;
}
- rv = KMF_PK11TokenLookup(NULL, token_spec, &slot_id);
+ rv = kmf_pk11_token_lookup(NULL, token_spec, &slot_id);
if (rv == KMF_OK) {
/* find the pin state for the selected token */
if (C_GetTokenInfo(slot_id, &token_info) != CKR_OK)
@@ -167,17 +184,31 @@ setpin_pkcs11(KMF_HANDLE_T handle, char *token_spec)
return (PK_ERR_PK11);
}
- (void) memset(&params, 0, sizeof (params));
- params.kstype = KMF_KEYSTORE_PK11TOKEN;
- params.tokenname = (char *)token_info.label;
- params.cred.cred = (char *)old_pin;
- params.cred.credlen = old_pinlen;
- params.pkcs11parms.slot = slot_id;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+ if (token_name != NULL) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_LABEL_ATTR,
+ token_name, strlen(token_name));
+ numattr++;
+ }
+ oldcred.cred = (char *)old_pin;
+ oldcred.credlen = old_pinlen;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CREDENTIAL_ATTR,
+ &oldcred, sizeof (oldcred));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_SLOT_ID_ATTR,
+ &slot_id, sizeof (slot_id));
+ numattr++;
newpincred.cred = (char *)new_pin;
newpincred.credlen = new_pinlen;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_NEWPIN_ATTR,
+ &newpincred, sizeof (newpincred));
+ numattr++;
- rv = KMF_SetTokenPin(handle, &params, &newpincred);
+ rv = kmf_set_token_pin(handle, numattr, attrlist);
/* Clean up. */
if (old_pin != NULL)
@@ -250,7 +281,7 @@ pk_setpin(int argc, char *argv[])
token_spec = DEFAULT_NSS_TOKEN;
}
- if ((rv = KMF_Initialize(&handle, NULL, NULL)) != KMF_OK)
+ if ((rv = kmf_initialize(&handle, NULL, NULL)) != KMF_OK)
return (rv);
switch (kstype) {
@@ -262,11 +293,11 @@ pk_setpin(int argc, char *argv[])
break;
default:
cryptoerror(LOG_STDERR,
- gettext("incorrect keystore."));
+ gettext("incorrect keystore."));
return (PK_ERR_USAGE);
}
- (void) KMF_Finalize(handle);
+ (void) kmf_finalize(handle);
if (rv == KMF_ERR_AUTH_FAILED) {
cryptoerror(LOG_STDERR,
diff --git a/usr/src/cmd/cmd-inet/usr.sbin/kssl/kssladm/kssladm_create.c b/usr/src/cmd/cmd-inet/usr.sbin/kssl/kssladm/kssladm_create.c
index bc1b2181ed..670fea791c 100644
--- a/usr/src/cmd/cmd-inet/usr.sbin/kssl/kssladm/kssladm_create.c
+++ b/usr/src/cmd/cmd-inet/usr.sbin/kssl/kssladm/kssladm_create.c
@@ -52,25 +52,25 @@ usage_create(boolean_t do_print)
if (do_print)
(void) fprintf(stderr, "Usage:\n");
(void) fprintf(stderr, "kssladm create"
- " -f pkcs11 [-d softtoken_directory] -T <token_label>"
- " -C <certificate_label> -x <proxy_port>"
- " [-h <ca_certchain_file>]"
- " [options] [<server_address>] [<server_port>]\n");
+ " -f pkcs11 [-d softtoken_directory] -T <token_label>"
+ " -C <certificate_label> -x <proxy_port>"
+ " [-h <ca_certchain_file>]"
+ " [options] [<server_address>] [<server_port>]\n");
(void) fprintf(stderr, "kssladm create"
- " -f pkcs12 -i <cert_and_key_pk12file> -x <proxy_port>"
- " [options] [<server_address>] [<server_port>]\n");
+ " -f pkcs12 -i <cert_and_key_pk12file> -x <proxy_port>"
+ " [options] [<server_address>] [<server_port>]\n");
(void) fprintf(stderr, "kssladm create"
- " -f pem -i <cert_and_key_pemfile> -x <proxy_port>"
- " [options] [<server_address>] [<server_port>]\n");
+ " -f pem -i <cert_and_key_pemfile> -x <proxy_port>"
+ " [options] [<server_address>] [<server_port>]\n");
(void) fprintf(stderr, "options are:\n"
- "\t[-c <ciphersuites>]\n"
- "\t[-p <password_file>]\n"
- "\t[-t <ssl_session_cache_timeout>]\n"
- "\t[-z <ssl_session_cache_size>]\n"
- "\t[-v]\n");
+ "\t[-c <ciphersuites>]\n"
+ "\t[-p <password_file>]\n"
+ "\t[-t <ssl_session_cache_timeout>]\n"
+ "\t[-z <ssl_session_cache_size>]\n"
+ "\t[-v]\n");
}
/*
@@ -135,7 +135,7 @@ kmf_to_kssl(int nxkey, KMF_RAW_KEY_DATA *rsa, int ncerts,
if (!nxkey) {
bzero(priv_key_bignums, sizeof (KMF_BIGINT) *
- MAX_ATTR_CNT);
+ MAX_ATTR_CNT);
/* and the key attributes */
priv_key_bignums[0] = rsa->rawdata.rsa.mod;
priv_key_bignums[1] = rsa->rawdata.rsa.pubexp;
@@ -147,9 +147,9 @@ kmf_to_kssl(int nxkey, KMF_RAW_KEY_DATA *rsa, int ncerts,
priv_key_bignums[7] = rsa->rawdata.rsa.coef;
if (rsa->rawdata.rsa.mod.val == NULL ||
- rsa->rawdata.rsa.priexp.val == NULL) {
+ rsa->rawdata.rsa.priexp.val == NULL) {
(void) fprintf(stderr,
- "missing required attributes in private key.\n");
+ "missing required attributes in private key.\n");
return (NULL);
}
@@ -158,9 +158,9 @@ kmf_to_kssl(int nxkey, KMF_RAW_KEY_DATA *rsa, int ncerts,
if (priv_key_bignums[i].val == NULL)
continue;
kssl_attrs[attr_cnt].ka_type =
- kssl_tmpl_attrs[i].ka_type;
+ kssl_tmpl_attrs[i].ka_type;
kssl_attrs[attr_cnt].ka_value_len =
- priv_key_bignums[i].len;
+ priv_key_bignums[i].len;
bufsize += sizeof (crypto_object_attribute_t) +
kssl_attrs[attr_cnt].ka_value_len;
attr_cnt++;
@@ -173,7 +173,7 @@ kmf_to_kssl(int nxkey, KMF_RAW_KEY_DATA *rsa, int ncerts,
*/
for (attr_cnt = 0; attr_cnt < 5; attr_cnt++) {
bufsize += sizeof (crypto_object_attribute_t) +
- exkey_attrs[attr_cnt].ulValueLen;
+ exkey_attrs[attr_cnt].ulValueLen;
}
if (creds)
bufsize += creds->credlen;
@@ -209,7 +209,7 @@ kmf_to_kssl(int nxkey, KMF_RAW_KEY_DATA *rsa, int ncerts,
if (priv_key_bignums[i].val == NULL)
continue;
(void) memcpy(buf, priv_key_bignums[i].val,
- priv_key_bignums[i].len);
+ priv_key_bignums[i].len);
kssl_attrs[attr_cnt].ka_value_offset =
buf - (char *)kssl_params;
buf += kssl_attrs[attr_cnt].ka_value_len;
@@ -227,10 +227,10 @@ kmf_to_kssl(int nxkey, KMF_RAW_KEY_DATA *rsa, int ncerts,
*/
kssl_params->kssl_is_nxkey = 1;
bcopy(tlabel, kssl_params->kssl_token.toklabel,
- CRYPTO_EXT_SIZE_LABEL);
+ CRYPTO_EXT_SIZE_LABEL);
kssl_params->kssl_token.pinlen = creds->credlen;
kssl_params->kssl_token.tokpin_offset =
- buf - (char *)kssl_params;
+ buf - (char *)kssl_params;
kssl_params->kssl_token.ck_rv = 0;
bcopy(creds->cred, buf, creds->credlen);
buf += creds->credlen;
@@ -248,11 +248,11 @@ kmf_to_kssl(int nxkey, KMF_RAW_KEY_DATA *rsa, int ncerts,
buf += attr_cnt * sizeof (kssl_object_attribute_t);
for (i = 0; i < attr_cnt; i++) {
bcopy(exkey_attrs[i].pValue, buf,
- exkey_attrs[i].ulValueLen);
+ exkey_attrs[i].ulValueLen);
kssl_attrs[i].ka_type = exkey_attrs[i].type;
kssl_attrs[i].ka_value_offset =
- buf - (char *)kssl_params;
+ buf - (char *)kssl_params;
kssl_attrs[i].ka_value_len = exkey_attrs[i].ulValueLen;
buf += exkey_attrs[i].ulValueLen;
@@ -260,7 +260,7 @@ kmf_to_kssl(int nxkey, KMF_RAW_KEY_DATA *rsa, int ncerts,
}
/* Copy the key attributes array here */
bcopy(kssl_attrs, ((char *)kssl_params) + key->ks_attrs_offset,
- attr_cnt * sizeof (kssl_object_attribute_t));
+ attr_cnt * sizeof (kssl_object_attribute_t));
buf = (char *)P2ROUNDUP((uintptr_t)buf, sizeof (uint32_t));
@@ -301,8 +301,9 @@ kmf_to_kssl(int nxkey, KMF_RAW_KEY_DATA *rsa, int ncerts,
* KMF_RAW_KEY format which is then passed along to KSSL by the caller.
*/
static KMF_RETURN
-get_sensitive_key_data(KMF_HANDLE_T kmfh, KMF_FINDKEY_PARAMS *fkparams,
- KMF_KEY_HANDLE *key, KMF_KEY_HANDLE *rawkey)
+get_sensitive_key_data(KMF_HANDLE_T kmfh,
+ KMF_CREDENTIAL *creds, char *keylabel,
+ char *idstr, KMF_KEY_HANDLE *key, KMF_KEY_HANDLE *rawkey)
{
KMF_RETURN rv = KMF_OK;
static CK_BYTE aes_param[16];
@@ -310,6 +311,8 @@ get_sensitive_key_data(KMF_HANDLE_T kmfh, KMF_FINDKEY_PARAMS *fkparams,
static CK_KEY_TYPE privkey_type = CKK_RSA;
static CK_BBOOL true = TRUE;
static CK_BBOOL false = FALSE;
+ boolean_t kmftrue = B_TRUE;
+ boolean_t kmffalse = B_FALSE;
char *err = NULL;
char wrapkey_label[BUFSIZ];
int fd;
@@ -317,6 +320,12 @@ get_sensitive_key_data(KMF_HANDLE_T kmfh, KMF_FINDKEY_PARAMS *fkparams,
CK_RV ckrv;
CK_SESSION_HANDLE pk11session;
CK_BYTE aes_key_val[16];
+ int numattr = 0;
+ int idx;
+ KMF_ATTRIBUTE attrlist[16];
+ KMF_KEYSTORE_TYPE kstype;
+ KMF_KEY_CLASS kclass;
+ KMF_ENCODE_FORMAT format;
CK_MECHANISM aes_cbc_pad_mech = {CKM_AES_CBC_PAD, aes_param,
sizeof (aes_param)};
@@ -344,25 +353,24 @@ get_sensitive_key_data(KMF_HANDLE_T kmfh, KMF_FINDKEY_PARAMS *fkparams,
return (KMF_ERR_INTERNAL);
}
if (read(fd, aes_key_val, sizeof (aes_key_val)) !=
- sizeof (aes_key_val)) {
+ sizeof (aes_key_val)) {
perror("Error reading from /dev/urandom");
(void) close(fd);
return (KMF_ERR_INTERNAL);
}
(void) close(fd);
- pk11session = KMF_GetPK11Handle(kmfh);
+ pk11session = kmf_get_pk11_handle(kmfh);
/*
* Login to create the wrap key stuff.
*/
ckrv = C_Login(pk11session, CKU_USER,
- (CK_UTF8CHAR_PTR)fkparams->cred.cred,
- fkparams->cred.credlen);
+ (CK_UTF8CHAR_PTR)creds->cred, creds->credlen);
if (ckrv != CKR_OK && ckrv != CKR_USER_ALREADY_LOGGED_IN) {
(void) fprintf(stderr,
- "Cannot login to the token. error = %s\n",
- pkcs11_strerror(ckrv));
+ "Cannot login to the token. error = %s\n",
+ pkcs11_strerror(ckrv));
return (KMF_ERR_INTERNAL);
}
@@ -370,18 +378,64 @@ get_sensitive_key_data(KMF_HANDLE_T kmfh, KMF_FINDKEY_PARAMS *fkparams,
* Turn the random key into a PKCS#11 session object.
*/
ckrv = SUNW_C_KeyToObject(pk11session, CKM_AES_CBC_PAD, aes_key_val,
- sizeof (aes_key_val), &aes_key_obj);
+ sizeof (aes_key_val), &aes_key_obj);
if (ckrv != CKR_OK) {
(void) fprintf(stderr,
- "Cannot create wrapping key. error = %s\n",
- pkcs11_strerror(ckrv));
+ "Cannot create wrapping key. error = %s\n",
+ pkcs11_strerror(ckrv));
return (KMF_ERR_INTERNAL);
}
/*
* Find the original private key that we are going to wrap.
*/
- rv = KMF_FindKey(kmfh, fkparams, key, &nkeys);
+ kstype = KMF_KEYSTORE_PK11TOKEN;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ kclass = KMF_ASYM_PRI;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYCLASS_ATTR,
+ &kclass, sizeof (kclass));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CREDENTIAL_ATTR,
+ creds, sizeof (KMF_CREDENTIAL));
+ numattr++;
+
+ if (keylabel) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYLABEL_ATTR,
+ keylabel, strlen(keylabel));
+ numattr++;
+ }
+ if (idstr) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_IDSTR_ATTR,
+ idstr, strlen(idstr));
+ numattr++;
+ }
+ format = KMF_FORMAT_NATIVE;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_ENCODE_FORMAT_ATTR,
+ &format, sizeof (format));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_BOOL_ATTR,
+ &kmftrue, sizeof (kmftrue));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_PRIVATE_BOOL_ATTR,
+ &kmftrue, sizeof (kmftrue));
+ numattr++;
+
+ nkeys = 1;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_COUNT_ATTR,
+ &nkeys, sizeof (nkeys));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEY_HANDLE_ATTR,
+ key, sizeof (KMF_KEY_HANDLE));
+ numattr++;
+
+ rv = kmf_find_key(kmfh, numattr, attrlist);
if (rv != KMF_OK) {
REPORT_KMF_ERROR(rv, "Error finding private key", err);
goto out;
@@ -392,8 +446,8 @@ get_sensitive_key_data(KMF_HANDLE_T kmfh, KMF_FINDKEY_PARAMS *fkparams,
*/
bzero(aes_param, sizeof (aes_param));
ckrv = C_WrapKey(pk11session, &aes_cbc_pad_mech,
- aes_key_obj, (CK_OBJECT_HANDLE)key->keyp,
- NULL, &wrapped_privkey_len);
+ aes_key_obj, (CK_OBJECT_HANDLE)key->keyp,
+ NULL, &wrapped_privkey_len);
if (ckrv != CKR_OK) {
/*
* Most common error here is that the token doesn't
@@ -402,8 +456,8 @@ get_sensitive_key_data(KMF_HANDLE_T kmfh, KMF_FINDKEY_PARAMS *fkparams,
* the caller deal with it gracefully.
*/
(void) fprintf(stderr,
- "Cannot get wrap key size. error = %s\n",
- pkcs11_strerror(ckrv));
+ "Cannot get wrap key size. error = %s\n",
+ pkcs11_strerror(ckrv));
rv = KMF_ERR_INTERNAL;
goto out;
}
@@ -416,12 +470,12 @@ get_sensitive_key_data(KMF_HANDLE_T kmfh, KMF_FINDKEY_PARAMS *fkparams,
* Now get the actual wrapped key data.
*/
ckrv = C_WrapKey(pk11session, &aes_cbc_pad_mech,
- aes_key_obj, (CK_OBJECT_HANDLE)key->keyp,
- wrapped_privkey, &wrapped_privkey_len);
+ aes_key_obj, (CK_OBJECT_HANDLE)key->keyp,
+ wrapped_privkey, &wrapped_privkey_len);
if (ckrv != CKR_OK) {
(void) fprintf(stderr,
- "Cannot wrap private key. error = %s\n",
- pkcs11_strerror(ckrv));
+ "Cannot wrap private key. error = %s\n",
+ pkcs11_strerror(ckrv));
rv = KMF_ERR_INTERNAL;
goto out;
}
@@ -430,7 +484,7 @@ get_sensitive_key_data(KMF_HANDLE_T kmfh, KMF_FINDKEY_PARAMS *fkparams,
* it easier later.
*/
snprintf(wrapkey_label, sizeof (wrapkey_label), "ksslprikey_%d",
- getpid());
+ getpid());
unwrap_tmpl[5].pValue = wrapkey_label;
unwrap_tmpl[5].ulValueLen = strlen(wrapkey_label);
@@ -440,12 +494,12 @@ get_sensitive_key_data(KMF_HANDLE_T kmfh, KMF_FINDKEY_PARAMS *fkparams,
* session private key.
*/
ckrv = C_UnwrapKey(pk11session, &aes_cbc_pad_mech, aes_key_obj,
- wrapped_privkey, wrapped_privkey_len,
- unwrap_tmpl, 6, &sess_privkey_obj);
+ wrapped_privkey, wrapped_privkey_len,
+ unwrap_tmpl, 6, &sess_privkey_obj);
if (ckrv != CKR_OK) {
(void) fprintf(stderr,
- "Cannot unwrap private key. error = %s\n",
- pkcs11_strerror(ckrv));
+ "Cannot unwrap private key. error = %s\n",
+ pkcs11_strerror(ckrv));
rv = KMF_ERR_INTERNAL;
goto out;
}
@@ -454,15 +508,51 @@ get_sensitive_key_data(KMF_HANDLE_T kmfh, KMF_FINDKEY_PARAMS *fkparams,
* Use KMF to find the session key and return it as RAW data
* so we can pass it along to KSSL.
*/
- fkparams->kstype = KMF_KEYSTORE_PK11TOKEN;
- fkparams->keyclass = KMF_ASYM_PRI;
- fkparams->format = KMF_FORMAT_RAWKEY;
- fkparams->findLabel = wrapkey_label;
- fkparams->pkcs11parms.sensitive = FALSE;
- fkparams->pkcs11parms.private = FALSE;
- fkparams->pkcs11parms.token = FALSE; /* <-- very important! */
-
- rv = KMF_FindKey(kmfh, fkparams, rawkey, &nkeys);
+ kclass = KMF_ASYM_PRI;
+ if ((idx = kmf_find_attr(KMF_KEYCLASS_ATTR, attrlist, numattr)) != -1) {
+ attrlist[idx].pValue = &kclass;
+ }
+
+ format = KMF_FORMAT_RAWKEY;
+ if ((idx = kmf_find_attr(KMF_ENCODE_FORMAT_ATTR, attrlist,
+ numattr)) != -1) {
+ attrlist[idx].pValue = &format;
+ }
+ if (wrapkey_label != NULL &&
+ (idx = kmf_find_attr(KMF_KEYLABEL_ATTR, attrlist, numattr)) != -1) {
+ attrlist[idx].pValue = wrapkey_label;
+ attrlist[idx].valueLen = strlen(wrapkey_label);
+ }
+
+ if ((idx = kmf_find_attr(KMF_PRIVATE_BOOL_ATTR, attrlist,
+ numattr)) != -1) {
+ attrlist[idx].pValue = &kmffalse;
+ }
+ if ((idx = kmf_find_attr(KMF_TOKEN_BOOL_ATTR, attrlist,
+ numattr)) != -1) {
+ attrlist[idx].pValue = &kmffalse;
+ }
+
+ if ((idx = kmf_find_attr(KMF_KEY_HANDLE_ATTR, attrlist,
+ numattr)) != -1) {
+ attrlist[idx].pValue = rawkey;
+ }
+ /*
+ * Clear the IDSTR attribute since it is not part of the
+ * wrapped session key.
+ */
+ if ((idx = kmf_find_attr(KMF_IDSTR_ATTR, attrlist,
+ numattr)) != -1) {
+ attrlist[idx].pValue = NULL;
+ attrlist[idx].valueLen = 0;
+ }
+
+ /* The wrapped key should not be sensitive. */
+ kmf_set_attr_at_index(attrlist, numattr, KMF_SENSITIVE_BOOL_ATTR,
+ &false, sizeof (false));
+ numattr++;
+
+ rv = kmf_find_key(kmfh, numattr, attrlist);
if (rv != KMF_OK) {
REPORT_KMF_ERROR(rv, "Error finding raw private key", err);
goto out;
@@ -489,38 +579,53 @@ load_from_pkcs11(const char *token_label, const char *password_file,
KMF_X509_DER_CERT cert;
KMF_KEY_HANDLE key, rawkey;
KMF_CREDENTIAL creds;
- KMF_FINDCERT_PARAMS fcparams;
- KMF_FINDKEY_PARAMS fkparams;
- KMF_CONFIG_PARAMS cfgparams;
KMF_DATA iddata = { NULL, 0 };
kssl_params_t *kssl_params = NULL;
uint32_t ncerts, nkeys;
char *err, *idstr = NULL;
char password_buf[1024];
int nxkey = 0;
-
- rv = KMF_Initialize(&kmfh, NULL, NULL);
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
+ KMF_KEYSTORE_TYPE kstype;
+ KMF_KEY_CLASS kclass;
+ KMF_ENCODE_FORMAT format;
+ boolean_t false = B_FALSE;
+ boolean_t true = B_TRUE;
+
+ rv = kmf_initialize(&kmfh, NULL, NULL);
if (rv != KMF_OK) {
REPORT_KMF_ERROR(rv, "Error initializing KMF", err);
return (0);
}
if (get_passphrase(password_file, password_buf,
- sizeof (password_buf)) <= 0) {
+ sizeof (password_buf)) <= 0) {
perror("Unable to read passphrase");
goto done;
}
creds.cred = password_buf;
creds.credlen = strlen(password_buf);
- bzero(&cfgparams, sizeof (cfgparams));
- bzero(&fcparams, sizeof (fcparams));
- bzero(&fkparams, sizeof (fkparams));
+ (void) memset(&key, 0, sizeof (KMF_KEY_HANDLE));
+ (void) memset(&rawkey, 0, sizeof (KMF_KEY_HANDLE));
- cfgparams.kstype = KMF_KEYSTORE_PK11TOKEN;
- cfgparams.pkcs11config.label = (char *)token_label;
- cfgparams.pkcs11config.readonly = B_FALSE;
+ kstype = KMF_KEYSTORE_PK11TOKEN;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
- rv = KMF_ConfigureKeystore(kmfh, &cfgparams);
+ if (token_label && strlen(token_label)) {
+ kmf_set_attr_at_index(attrlist, numattr,
+ KMF_TOKEN_LABEL_ATTR,
+ (void *)token_label, strlen(token_label));
+ numattr++;
+ }
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_READONLY_ATTR,
+ &false, sizeof (false));
+ numattr++;
+
+ rv = kmf_configure_keystore(kmfh, numattr, attrlist);
if (rv != KMF_OK) {
REPORT_KMF_ERROR(rv, "Error configuring KMF keystore", err);
goto done;
@@ -529,9 +634,28 @@ load_from_pkcs11(const char *token_label, const char *password_file,
/*
* Find the certificate matching the given label.
*/
- fcparams.kstype = KMF_KEYSTORE_PK11TOKEN;
- fcparams.certLabel = (char *)certname;
- rv = KMF_FindCert(kmfh, &fcparams, &cert, &ncerts);
+ numattr = 0;
+ kstype = KMF_KEYSTORE_PK11TOKEN;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (kstype));
+ numattr++;
+
+ if (certname) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_LABEL_ATTR,
+ (void *)certname, strlen(certname));
+ numattr++;
+ }
+ ncerts = 1;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_COUNT_ATTR,
+ &ncerts, sizeof (ncerts));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_X509_DER_CERT_ATTR,
+ &cert, sizeof (cert));
+ numattr++;
+
+ rv = kmf_find_cert(kmfh, numattr, attrlist);
if (rv != KMF_OK || ncerts == 0)
goto done;
@@ -539,64 +663,100 @@ load_from_pkcs11(const char *token_label, const char *password_file,
* Find the associated private key for this cert by
* keying off of the label and the ASCII ID string.
*/
- rv = KMF_GetCertIDString(&cert.certificate, &idstr);
+ rv = kmf_get_cert_id_str(&cert.certificate, &idstr);
if (rv != KMF_OK)
goto done;
- fkparams.kstype = KMF_KEYSTORE_PK11TOKEN;
- fkparams.keyclass = KMF_ASYM_PRI;
- fkparams.cred = creds;
- fkparams.format = KMF_FORMAT_RAWKEY;
- fkparams.findLabel = (char *)certname;
- fkparams.idstr = idstr;
- fkparams.pkcs11parms.private = TRUE;
- fkparams.pkcs11parms.token = TRUE;
+ numattr = 1; /* attrlist[0] is already set to kstype */
+
+ kclass = KMF_ASYM_PRI;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYCLASS_ATTR,
+ &kclass, sizeof (kclass));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CREDENTIAL_ATTR,
+ &creds, sizeof (KMF_CREDENTIAL));
+ numattr++;
- rv = KMF_FindKey(kmfh, &fkparams, &key, &nkeys);
+ format = KMF_FORMAT_RAWKEY;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_ENCODE_FORMAT_ATTR,
+ &format, sizeof (format));
+ numattr++;
+
+ if (certname) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYLABEL_ATTR,
+ (void *)certname, strlen(certname));
+ numattr++;
+ }
+ if (idstr) {
+ kmf_set_attr_at_index(attrlist, numattr, KMF_IDSTR_ATTR,
+ (void *)idstr, strlen(idstr));
+ numattr++;
+ }
+ kmf_set_attr_at_index(attrlist, numattr, KMF_TOKEN_BOOL_ATTR,
+ &true, sizeof (true));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_PRIVATE_BOOL_ATTR,
+ &true, sizeof (true));
+ numattr++;
+
+ /* We only expect to find 1 key at most */
+ nkeys = 1;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_COUNT_ATTR,
+ &nkeys, sizeof (nkeys));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEY_HANDLE_ATTR,
+ &key, sizeof (KMF_KEY_HANDLE));
+ numattr++;
+
+ rv = kmf_find_key(kmfh, numattr, attrlist);
if (rv == KMF_ERR_SENSITIVE_KEY) {
- KMF_FreeKMFKey(kmfh, &key);
+ kmf_free_kmf_key(kmfh, &key);
/*
* Get a normal key handle and then do a wrap/unwrap
* in order to get the necessary raw data fields needed
* to send to KSSL.
*/
- fkparams.format = KMF_FORMAT_NATIVE;
- rv = get_sensitive_key_data(kmfh, &fkparams, &key, &rawkey);
+ format = KMF_FORMAT_NATIVE;
+ rv = get_sensitive_key_data(kmfh, &creds,
+ (char *)certname, idstr, &key, &rawkey);
if (rv == KMF_OK) {
/* Swap "key" for "rawkey" */
- KMF_FreeKMFKey(kmfh, &key);
+ kmf_free_kmf_key(kmfh, &key);
key = rawkey;
} else {
- KMF_FreeKMFKey(kmfh, &key);
+ kmf_free_kmf_key(kmfh, &key);
/* Let kssl try to find the key. */
nxkey = 1;
- rv = KMF_GetCertIDData(&cert.certificate, &iddata);
+ rv = kmf_get_cert_id_data(&cert.certificate, &iddata);
}
} else if (rv == KMF_ERR_UNEXTRACTABLE_KEY) {
- KMF_FreeKMFKey(kmfh, &key);
+ kmf_free_kmf_key(kmfh, &key);
- /* Let kssl try to find the key. */
- nxkey = 1;
- rv = KMF_GetCertIDData(&cert.certificate, &iddata);
+ /* Let kssl try to find the key. */
+ nxkey = 1;
+ rv = kmf_get_cert_id_data(&cert.certificate, &iddata);
} else if (rv != KMF_OK || nkeys == 0)
goto done;
if (rv == KMF_OK)
kssl_params = kmf_to_kssl(nxkey, (KMF_RAW_KEY_DATA *)key.keyp,
- 1, &cert.certificate, bufsize,
- (char *)token_label, &iddata, &creds);
+ 1, &cert.certificate, bufsize,
+ (char *)token_label, &iddata, &creds);
done:
if (ncerts != 0)
- KMF_FreeKMFCert(kmfh, &cert);
+ kmf_free_kmf_cert(kmfh, &cert);
if (nkeys != 0)
- KMF_FreeKMFKey(kmfh, &key);
+ kmf_free_kmf_key(kmfh, &key);
if (idstr)
free(idstr);
if (kmfh != NULL)
- (void) KMF_Finalize(kmfh);
+ (void) kmf_finalize(kmfh);
return (kssl_params);
}
@@ -614,37 +774,55 @@ add_cacerts(kssl_params_t *old_params, const char *cacert_chain_file)
char *buf;
KMF_RETURN rv;
KMF_X509_DER_CERT *certs = NULL;
- KMF_FINDCERT_PARAMS fcparms;
kssl_params_t *kssl_params;
KMF_HANDLE_T kmfh;
char *err = NULL;
+ int numattr = 0;
+ KMF_ATTRIBUTE attrlist[16];
+ KMF_KEYSTORE_TYPE kstype = KMF_KEYSTORE_OPENSSL;
- bzero(&fcparms, sizeof (fcparms));
- fcparms.kstype = KMF_KEYSTORE_OPENSSL;
- fcparms.sslparms.certfile = (char *)cacert_chain_file;
+ kstype = KMF_KEYSTORE_OPENSSL;
- rv = KMF_Initialize(&kmfh, NULL, NULL);
+ rv = kmf_initialize(&kmfh, NULL, NULL);
if (rv != KMF_OK) {
REPORT_KMF_ERROR(rv, "Error initializing KMF", err);
return (0);
}
- rv = KMF_FindCert(kmfh, &fcparms, NULL, &ncerts);
+ ncerts = 0;
+ kmf_set_attr_at_index(attrlist, numattr, KMF_KEYSTORE_TYPE_ATTR,
+ &kstype, sizeof (KMF_KEYSTORE_TYPE));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_CERT_FILENAME_ATTR,
+ (void *)cacert_chain_file, strlen(cacert_chain_file));
+ numattr++;
+
+ kmf_set_attr_at_index(attrlist, numattr, KMF_COUNT_ATTR,
+ &ncerts, sizeof (ncerts));
+ numattr++;
+
+ rv = kmf_find_cert(kmfh, numattr, attrlist);
if (rv != KMF_OK) {
REPORT_KMF_ERROR(rv, "Error finding CA certificates", err);
(void) KMF_Finalize(kmfh);
return (0);
}
certs = (KMF_X509_DER_CERT *)malloc(ncerts *
- sizeof (KMF_X509_DER_CERT));
+ sizeof (KMF_X509_DER_CERT));
if (certs == NULL) {
(void) fprintf(stderr, "memory allocation error.\n");
(void) KMF_Finalize(kmfh);
return (NULL);
}
bzero(certs, ncerts * sizeof (KMF_X509_DER_CERT));
- rv = KMF_FindCert(kmfh, &fcparms, certs, &ncerts);
- (void) KMF_Finalize(kmfh);
+ /* add new attribute for the cert list to be returned */
+ kmf_set_attr_at_index(attrlist, numattr, KMF_X509_DER_CERT_ATTR,
+ certs, (ncerts * sizeof (KMF_X509_DER_CERT)));
+ numattr++;
+ rv = kmf_find_cert(kmfh, numattr, attrlist);
+
+ (void) kmf_finalize(kmfh);
if (rv != KMF_OK || ncerts == 0) {
bzero(old_params, old_params->kssl_params_size);
@@ -688,12 +866,12 @@ add_cacerts(kssl_params_t *old_params, const char *cacert_chain_file)
/* now the certs values */
for (i = 0; i < ncerts; i++) {
bcopy(certs[i].certificate.Data, buf,
- certs[i].certificate.Length);
+ certs[i].certificate.Length);
buf += certs[i].certificate.Length;
}
for (i = 0; i < ncerts; i++)
- KMF_FreeKMFCert(kmfh, &certs[i]);
+ kmf_free_kmf_cert(kmfh, &certs[i]);
free(certs);
return (kssl_params);
@@ -711,7 +889,7 @@ load_from_pem(const char *filename, const char *password_file, int *paramsize)
KMF_DATA *certs = NULL;
ncerts = PEM_get_rsa_key_certs(filename, (char *)password_file,
- &rsa, &certs);
+ &rsa, &certs);
if (rsa == NULL || certs == NULL || ncerts == 0) {
return (NULL);
}
@@ -720,12 +898,12 @@ load_from_pem(const char *filename, const char *password_file, int *paramsize)
(void) printf("%d certificates read successfully\n", ncerts);
kssl_params = kmf_to_kssl(0, rsa, ncerts, certs, paramsize, NULL,
- NULL, NULL);
+ NULL, NULL);
for (i = 0; i < ncerts; i++)
- KMF_FreeData(&certs[i]);
+ kmf_free_data(&certs[i]);
free(certs);
- KMF_FreeRawKey(rsa);
+ kmf_free_raw_key(rsa);
return (kssl_params);
}
@@ -743,7 +921,7 @@ load_from_pkcs12(const char *filename, const char *password_file,
int ncerts = 0, i;
ncerts = PKCS12_get_rsa_key_certs(filename,
- password_file, &rsa, &certs);
+ password_file, &rsa, &certs);
if (certs == NULL || ncerts == 0) {
(void) fprintf(stderr,
@@ -755,13 +933,13 @@ load_from_pkcs12(const char *filename, const char *password_file,
(void) printf("%d certificates read successfully\n", ncerts);
kssl_params = kmf_to_kssl(0, rsa, ncerts, certs, paramsize, NULL,
- NULL, NULL);
+ NULL, NULL);
for (i = 0; i < ncerts; i++)
- KMF_FreeData(&certs[i]);
+ kmf_free_data(&certs[i]);
free(certs);
- KMF_FreeRawKey(rsa);
+ kmf_free_raw_key(rsa);
return (kssl_params);
}
diff --git a/usr/src/cmd/cmd-inet/usr.sbin/kssl/kssladm/ksslutil.c b/usr/src/cmd/cmd-inet/usr.sbin/kssl/kssladm/ksslutil.c
index 30f9d5f581..42fca362e3 100644
--- a/usr/src/cmd/cmd-inet/usr.sbin/kssl/kssladm/ksslutil.c
+++ b/usr/src/cmd/cmd-inet/usr.sbin/kssl/kssladm/ksslutil.c
@@ -51,7 +51,7 @@ PKCS12_get_rsa_key_certs(const char *filename, const char *password_file,
int ncerts, nkeys;
char *err = NULL;
- rv = KMF_Initialize(&kmfh, NULL, NULL);
+ rv = kmf_initialize(&kmfh, NULL, NULL);
if (rv != KMF_OK) {
REPORT_KMF_ERROR(rv, "Error initializing KMF", err);
return (0);
@@ -63,15 +63,15 @@ PKCS12_get_rsa_key_certs(const char *filename, const char *password_file,
nkeys = 0;
if (get_passphrase(password_file, password_buf,
- sizeof (password_buf)) <= 0) {
+ sizeof (password_buf)) <= 0) {
perror("Unable to read passphrase");
goto done;
}
pk12cred.cred = password_buf;
pk12cred.credlen = strlen(password_buf);
- rv = KMF_ImportPK12(kmfh, (char *)filename, &pk12cred, &tcerts, &ncerts,
- &keys, &nkeys);
+ rv = kmf_import_objects(kmfh, (char *)filename, &pk12cred, &tcerts,
+ &ncerts, &keys, &nkeys);
if (rv != KMF_OK) {
REPORT_KMF_ERROR(rv, "Error importing PKCS12 data", err);
}
@@ -81,14 +81,14 @@ done:
int i;
if (tcerts != NULL) {
for (i = 0; i < ncerts; i++)
- KMF_FreeData(&tcerts[i]);
+ kmf_free_data(&tcerts[i]);
free(tcerts);
}
tcerts = NULL;
ncerts = 0;
if (keys != NULL) {
for (i = 0; i < nkeys; i++)
- KMF_FreeRawKey(&keys[i]);
+ kmf_free_raw_key(&keys[i]);
free(keys);
}
keys = NULL;
@@ -96,7 +96,7 @@ done:
*certs = tcerts;
*rsa = keys;
- (void) KMF_Finalize(kmfh);
+ (void) kmf_finalize(kmfh);
return (ncerts);
}
@@ -119,7 +119,7 @@ PEM_get_rsa_key_certs(const char *filename, char *password_file,
char *err = NULL;
char password_buf[1024];
- rv = KMF_Initialize(&kmfh, NULL, NULL);
+ rv = kmf_initialize(&kmfh, NULL, NULL);
if (rv != KMF_OK) {
REPORT_KMF_ERROR(rv, "Error initializing KMF", err);
return (0);
@@ -131,15 +131,15 @@ PEM_get_rsa_key_certs(const char *filename, char *password_file,
nkeys = 0;
if (get_passphrase(password_file, password_buf,
- sizeof (password_buf)) <= 0) {
+ sizeof (password_buf)) <= 0) {
perror("Unable to read passphrase");
goto done;
}
creds.cred = password_buf;
creds.credlen = strlen(password_buf);
- rv = KMF_ImportKeypair(kmfh, (char *)filename, &creds, &tcerts, &ncerts,
- &keys, &nkeys);
+ rv = kmf_import_objects(kmfh, (char *)filename, &creds, &tcerts,
+ &ncerts, &keys, &nkeys);
if (rv != KMF_OK) {
REPORT_KMF_ERROR(rv, "Error importing key data", err);
}
@@ -149,14 +149,14 @@ done:
int i;
if (tcerts != NULL) {
for (i = 0; i < ncerts; i++)
- KMF_FreeData(&tcerts[i]);
+ kmf_free_data(&tcerts[i]);
free(tcerts);
}
tcerts = NULL;
ncerts = 0;
if (keys != NULL) {
for (i = 0; i < nkeys; i++)
- KMF_FreeRawKey(&keys[i]);
+ kmf_free_raw_key(&keys[i]);
free(keys);
}
keys = NULL;
@@ -166,7 +166,7 @@ done:
if (rsa != NULL)
*rsa = keys;
- (void) KMF_Finalize(kmfh);
+ (void) kmf_finalize(kmfh);
return (ncerts);
}