PR: 2880
authorDr. Stephen Henson <steve@openssl.org>
Sun, 18 Nov 2012 15:21:02 +0000 (15:21 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Sun, 18 Nov 2012 15:21:02 +0000 (15:21 +0000)
Submitted by: "Florian Rüchel" <florian.ruechel@ruhr-uni-bochum.de>

Correctly handle local machine keys in the capi ENGINE.

engines/ccgost/gost_eng.c
engines/e_capi.c

index ebf0b625b5b316aba7b0f38f4ebe833d10f04f83..8f29bf6f85b918c3beadaf68387491c9f35ffa90 100644 (file)
@@ -78,6 +78,11 @@ static int bind_gost (ENGINE *e,const char *id)
        {
        int ret = 0;
        if (id && strcmp(id, engine_gost_id)) return 0;
+       if (ameth_GostR3410_94)
+               {
+               printf("GOST engine already loaded\n");
+               goto end;
+               }
 
        if (!ENGINE_set_id(e, engine_gost_id)) 
                {
index bfedde0eb0231c3b08bd97da6fb3fbc6c6505b9d..c1085b56cdabc46d0b46eef62481cab50500be46 100644 (file)
@@ -1432,10 +1432,13 @@ static PCCERT_CONTEXT capi_find_cert(CAPI_CTX *ctx, const char *id, HCERTSTORE h
 static CAPI_KEY *capi_get_key(CAPI_CTX *ctx, const char *contname, char *provname, DWORD ptype, DWORD keyspec)
        {
        CAPI_KEY *key;
+    DWORD dwFlags = 0; 
        key = OPENSSL_malloc(sizeof(CAPI_KEY));
        CAPI_trace(ctx, "capi_get_key, contname=%s, provname=%s, type=%d\n", 
                                                contname, provname, ptype);
-       if (!CryptAcquireContextA(&key->hprov, contname, provname, ptype, 0))
+    if(ctx->store_flags & CERT_SYSTEM_STORE_LOCAL_MACHINE)
+        dwFlags = CRYPT_MACHINE_KEYSET;
+    if (!CryptAcquireContextA(&key->hprov, contname, provname, ptype, dwFlags)) 
                {
                CAPIerr(CAPI_F_CAPI_GET_KEY, CAPI_R_CRYPTACQUIRECONTEXT_ERROR);
                capi_addlasterror();