Free old store name (if any).
[openssl.git] / engines / e_capi.c
index c6821ebc6a31c44cbe8fc45c3513b02b371777a5..dabac92d8a7c4230e3190e72f428d1816a9f3ea4 100644 (file)
@@ -170,6 +170,7 @@ static int capi_ctx_set_provname_idx(CAPI_CTX *ctx, int idx);
 #define CAPI_CMD_LIST_CONTAINERS       (ENGINE_CMD_BASE + 9)
 #define CAPI_CMD_LIST_OPTIONS          (ENGINE_CMD_BASE + 10)
 #define CAPI_CMD_LOOKUP_METHOD         (ENGINE_CMD_BASE + 11)
+#define CAPI_CMD_STORE_NAME            (ENGINE_CMD_BASE + 12)
 
 static const ENGINE_CMD_DEFN capi_cmd_defns[] = {
        {CAPI_CMD_LIST_CERTS,
@@ -221,6 +222,10 @@ static const ENGINE_CMD_DEFN capi_cmd_defns[] = {
                "lookup_method",
                "Set key lookup method (1=substring, 2=friendlyname, 3=container name)",
                ENGINE_CMD_FLAG_NUMERIC},
+       {CAPI_CMD_STORE_NAME,
+               "store_name",
+               "certificate store name, default \"MY\"",
+               ENGINE_CMD_FLAG_STRING},
 
        {0, NULL, NULL, 0}
        };
@@ -259,6 +264,13 @@ static int capi_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)(void))
                ret = capi_list_containers(ctx, out);
                break;
 
+               case CAPI_CMD_STORE_NAME:
+               if (ctx->storename)
+                       OPENSSL_free(ctx->storename);
+               ctx->storename = BUF_strdup(p);
+               CAPI_trace(ctx, "Setting store name to %s\n", p);
+               break;
+
                case CAPI_CMD_DEBUG_LEVEL:
                ctx->debug_level = (int)i;
                CAPI_trace(ctx, "Setting debug level to %d\n", ctx->debug_level);
@@ -855,7 +867,7 @@ static DSA_SIG *capi_dsa_do_sign(const unsigned char *digest, int dlen,
 
        /* Finally sign it */
        slen = sizeof(csigbuf);
-       if(!CryptSignHash(hash, AT_SIGNATURE, NULL, 0, csigbuf, &slen))
+       if(!CryptSignHash(hash, capi_key->keyspec, NULL, 0, csigbuf, &slen))
                {
                CAPIerr(CAPI_F_CAPI_DSA_DO_SIGN, CAPI_R_ERROR_SIGNING_HASH);
                capi_addlasterror();