You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
2.0 KiB
50 lines
2.0 KiB
From 74885fb1c174468cc0a505cd7404e228d465efd8 Mon Sep 17 00:00:00 2001 |
|
From: AnthonyA <ascanio.alba7@gmail.com> |
|
Date: Tue, 27 Mar 2018 00:48:05 +0000 |
|
Subject: [PATCH] pkcs11-tool: allow mechanism to be specified in hexadecimal |
|
|
|
To support vendor mechanisms, let -m accept hexadecimal strings, |
|
e.g., -m 0x80001234 |
|
--- |
|
doc/tools/pkcs11-tool.1.xml | 3 ++- |
|
src/tools/pkcs11-tool.c | 5 ++++- |
|
2 files changed, 6 insertions(+), 2 deletions(-) |
|
|
|
diff --git a/doc/tools/pkcs11-tool.1.xml b/doc/tools/pkcs11-tool.1.xml |
|
index f8d638b45..e78570b10 100644 |
|
--- a/doc/tools/pkcs11-tool.1.xml |
|
+++ b/doc/tools/pkcs11-tool.1.xml |
|
@@ -231,7 +231,8 @@ |
|
</term> |
|
<listitem><para>Use the specified <replaceable>mechanism</replaceable> |
|
for token operations. See <option>-M</option> for a list |
|
- of mechanisms supported by your token.</para></listitem> |
|
+ of mechanisms supported by your token. The mechanism can also be specified in |
|
+ hexadecimal, e.g., <replaceable>0x80001234</replaceable>.</para></listitem> |
|
</varlistentry> |
|
|
|
<varlistentry> |
|
diff --git a/src/tools/pkcs11-tool.c b/src/tools/pkcs11-tool.c |
|
index 63e5c5f7f..484c019d8 100644 |
|
--- a/src/tools/pkcs11-tool.c |
|
+++ b/src/tools/pkcs11-tool.c |
|
@@ -234,7 +234,7 @@ static const char *option_help[] = { |
|
"Hash some data", |
|
"Derive a secret key using another key and some data", |
|
"Derive ECDHpass DER encoded pubkey for compatibility with some PKCS#11 implementations", |
|
- "Specify mechanism (use -M for a list of supported mechanisms)", |
|
+ "Specify mechanism (use -M for a list of supported mechanisms), or by hexadecimal, e.g., 0x80001234", |
|
|
|
"Log into the token first", |
|
"Specify login type ('so', 'user', 'context-specific'; default:'user')", |
|
@@ -6076,6 +6076,9 @@ static CK_MECHANISM_TYPE p11_name_to_mechanism(const char *name) |
|
{ |
|
struct mech_info *mi; |
|
|
|
+ if (strncasecmp("0x", name, 2) == 0) { |
|
+ return strtoul(name, NULL, 0); |
|
+ } |
|
for (mi = p11_mechanisms; mi->name; mi++) { |
|
if (!strcasecmp(mi->name, name) |
|
|| (mi->short_name && !strcasecmp(mi->short_name, name))) |
|
|
|
|