[PATCH 06/10] dssenh: refactor rsaenh - move release_key_container_keys, destroy_key_container, read_key_value, read_key_container, new_key_container, import_key from rsaenh/rsaenh.c to rsaenh/cryptoprovutils.c
shuai zhang
wxsxsdz at gmail.com
Sun Nov 17 09:26:37 CST 2019
Signed-off-by: Zhang Shuai <wxsxsdz at gmail.com>
---
dlls/rsaenh/cryptoprovutils.c | 111 ++++++++++++++++++++++++++++++++++
dlls/rsaenh/cryptoprovutils.h | 4 ++
dlls/rsaenh/rsaenh.c | 111 ----------------------------------
3 files changed, 115 insertions(+), 111 deletions(-)
diff --git a/dlls/rsaenh/cryptoprovutils.c b/dlls/rsaenh/cryptoprovutils.c
index 9f774bad1d..44bbc923b8 100644
--- a/dlls/rsaenh/cryptoprovutils.c
+++ b/dlls/rsaenh/cryptoprovutils.c
@@ -208,3 +208,114 @@ void store_key_pair(HCRYPTKEY hCryptKey, HKEY
hKey, DWORD dwKeySpec, DWORD dwFla
}
}
+/******************************************************************************
+ * store_key_container_keys [Internal]
+ *
+ * Stores key container's keys in a persistent location.
+ *
+ * PARAMS
+ * pKeyContainer [I] Pointer to the key container whose keys are to be saved
+ */
+void store_key_container_keys(KEYCONTAINER *pKeyContainer)
+{
+ HKEY hKey;
+ DWORD dwFlags;
+
+ /* On WinXP, persistent keys are stored in a file located at:
+ * $AppData$\\Microsoft\\Crypto\\RSA\\$SID$\\some_hex_string
+ */
+
+ if (pKeyContainer->dwFlags & CRYPT_MACHINE_KEYSET)
+ dwFlags = CRYPTPROTECT_LOCAL_MACHINE;
+ else
+ dwFlags = 0;
+
+ if (create_container_key(pKeyContainer, KEY_WRITE, &hKey))
+ {
+ store_key_pair(pKeyContainer->hKeyExchangeKeyPair, hKey,
+ AT_KEYEXCHANGE, dwFlags);
+ store_key_pair(pKeyContainer->hSignatureKeyPair, hKey,
+ AT_SIGNATURE, dwFlags);
+ RegCloseKey(hKey);
+ }
+}
+
+/******************************************************************************
+ * map_key_spec_to_permissions_name [Internal]
+ *
+ * Returns the name of the registry value associated with the permissions for
+ * a key spec.
+ *
+ * PARAMS
+ * dwKeySpec [I] AT_KEYEXCHANGE or AT_SIGNATURE
+ *
+ * RETURNS
+ * Success: Name of registry value.
+ * Failure: NULL
+ */
+LPCSTR map_key_spec_to_permissions_name(DWORD dwKeySpec)
+{
+ LPCSTR szValueName;
+
+ switch (dwKeySpec)
+ {
+ case AT_KEYEXCHANGE:
+ szValueName = "KeyExchangePermissions";
+ break;
+ case AT_SIGNATURE:
+ szValueName = "SignaturePermissions";
+ break;
+ default:
+ WARN("invalid key spec %d\n", dwKeySpec);
+ szValueName = NULL;
+ }
+ return szValueName;
+}
+
+/******************************************************************************
+ * store_key_permissions [Internal]
+ *
+ * Stores a key's permissions to the registry
+ *
+ * PARAMS
+ * hCryptKey [I] Handle to the key whose permissions are to be stored
+ * hKey [I] Registry key where the key permissions are to be stored
+ * dwKeySpec [I] AT_KEYEXCHANGE or AT_SIGNATURE
+ */
+void store_key_permissions(HCRYPTKEY hCryptKey, HKEY hKey, DWORD dwKeySpec)
+{
+ LPCSTR szValueName;
+ CRYPTKEY *pKey;
+
+ if (!(szValueName = map_key_spec_to_permissions_name(dwKeySpec)))
+ return;
+ if (lookup_handle(&handle_table, hCryptKey, RSAENH_MAGIC_KEY,
+ (OBJECTHDR**)&pKey))
+ RegSetValueExA(hKey, szValueName, 0, REG_DWORD,
+ (BYTE *)&pKey->dwPermissions,
+ sizeof(pKey->dwPermissions));
+}
+
+/******************************************************************************
+ * store_key_container_permissions [Internal]
+ *
+ * Stores key container's key permissions in a persistent location.
+ *
+ * PARAMS
+ * pKeyContainer [I] Pointer to the key container whose key permissions are to
+ * be saved
+ */
+void store_key_container_permissions(KEYCONTAINER *pKeyContainer)
+{
+ HKEY hKey;
+
+ if (create_container_key(pKeyContainer, KEY_WRITE, &hKey))
+ {
+ store_key_permissions(pKeyContainer->hKeyExchangeKeyPair, hKey,
+ AT_KEYEXCHANGE);
+ store_key_permissions(pKeyContainer->hSignatureKeyPair, hKey,
+ AT_SIGNATURE);
+ RegCloseKey(hKey);
+ }
+}
+
diff --git a/dlls/rsaenh/cryptoprovutils.h b/dlls/rsaenh/cryptoprovutils.h
index 499b0b8140..4b5fcf2f22 100644
--- a/dlls/rsaenh/cryptoprovutils.h
+++ b/dlls/rsaenh/cryptoprovutils.h
@@ -77,4 +77,8 @@ BOOL crypt_export_key(CRYPTKEY *pCryptKey, HCRYPTKEY
hPubKey, DWORD dwBlobType,
DWORD dwFlags, BOOL force, BYTE *pbData, DWORD *pdwDataLen);
LPCSTR map_key_spec_to_key_pair_name(DWORD dwKeySpec);
void store_key_pair(HCRYPTKEY hCryptKey, HKEY hKey, DWORD dwKeySpec,
DWORD dwFlags);
+void store_key_container_keys(KEYCONTAINER *pKeyContainer);
+LPCSTR map_key_spec_to_permissions_name(DWORD dwKeySpec);
+void store_key_permissions(HCRYPTKEY hCryptKey, HKEY hKey, DWORD dwKeySpec);
+void store_key_container_permissions(KEYCONTAINER *pKeyContainer);
#endif /* __WINE_CRYPTOPROVUTILS_H */
diff --git a/dlls/rsaenh/rsaenh.c b/dlls/rsaenh/rsaenh.c
index 8925abefab..5557068813 100644
--- a/dlls/rsaenh/rsaenh.c
+++ b/dlls/rsaenh/rsaenh.c
@@ -862,117 +862,6 @@ static HCRYPTKEY new_key(HCRYPTPROV hProv,
ALG_ID aiAlgid, DWORD dwFlags, CRYPTK
return hCryptKey;
}
-/******************************************************************************
- * map_key_spec_to_permissions_name [Internal]
- *
- * Returns the name of the registry value associated with the permissions for
- * a key spec.
- *
- * PARAMS
- * dwKeySpec [I] AT_KEYEXCHANGE or AT_SIGNATURE
- *
- * RETURNS
- * Success: Name of registry value.
- * Failure: NULL
- */
-static LPCSTR map_key_spec_to_permissions_name(DWORD dwKeySpec)
-{
- LPCSTR szValueName;
-
- switch (dwKeySpec)
- {
- case AT_KEYEXCHANGE:
- szValueName = "KeyExchangePermissions";
- break;
- case AT_SIGNATURE:
- szValueName = "SignaturePermissions";
- break;
- default:
- WARN("invalid key spec %d\n", dwKeySpec);
- szValueName = NULL;
- }
- return szValueName;
-}
-
-/******************************************************************************
- * store_key_permissions [Internal]
- *
- * Stores a key's permissions to the registry
- *
- * PARAMS
- * hCryptKey [I] Handle to the key whose permissions are to be stored
- * hKey [I] Registry key where the key permissions are to be stored
- * dwKeySpec [I] AT_KEYEXCHANGE or AT_SIGNATURE
- */
-static void store_key_permissions(HCRYPTKEY hCryptKey, HKEY hKey,
DWORD dwKeySpec)
-{
- LPCSTR szValueName;
- CRYPTKEY *pKey;
-
- if (!(szValueName = map_key_spec_to_permissions_name(dwKeySpec)))
- return;
- if (lookup_handle(&handle_table, hCryptKey, RSAENH_MAGIC_KEY,
- (OBJECTHDR**)&pKey))
- RegSetValueExA(hKey, szValueName, 0, REG_DWORD,
- (BYTE *)&pKey->dwPermissions,
- sizeof(pKey->dwPermissions));
-}
-
-/******************************************************************************
- * store_key_container_keys [Internal]
- *
- * Stores key container's keys in a persistent location.
- *
- * PARAMS
- * pKeyContainer [I] Pointer to the key container whose keys are to be saved
- */
-static void store_key_container_keys(KEYCONTAINER *pKeyContainer)
-{
- HKEY hKey;
- DWORD dwFlags;
-
- /* On WinXP, persistent keys are stored in a file located at:
- * $AppData$\\Microsoft\\Crypto\\RSA\\$SID$\\some_hex_string
- */
-
- if (pKeyContainer->dwFlags & CRYPT_MACHINE_KEYSET)
- dwFlags = CRYPTPROTECT_LOCAL_MACHINE;
- else
- dwFlags = 0;
-
- if (create_container_key(pKeyContainer, KEY_WRITE, &hKey))
- {
- store_key_pair(pKeyContainer->hKeyExchangeKeyPair, hKey,
- AT_KEYEXCHANGE, dwFlags);
- store_key_pair(pKeyContainer->hSignatureKeyPair, hKey,
- AT_SIGNATURE, dwFlags);
- RegCloseKey(hKey);
- }
-}
-
-/******************************************************************************
- * store_key_container_permissions [Internal]
- *
- * Stores key container's key permissions in a persistent location.
- *
- * PARAMS
- * pKeyContainer [I] Pointer to the key container whose key permissions are to
- * be saved
- */
-static void store_key_container_permissions(KEYCONTAINER *pKeyContainer)
-{
- HKEY hKey;
-
- if (create_container_key(pKeyContainer, KEY_WRITE, &hKey))
- {
- store_key_permissions(pKeyContainer->hKeyExchangeKeyPair, hKey,
- AT_KEYEXCHANGE);
- store_key_permissions(pKeyContainer->hSignatureKeyPair, hKey,
- AT_SIGNATURE);
- RegCloseKey(hKey);
- }
-}
-
/******************************************************************************
* release_key_container_keys [Internal]
*
--
2.21.0
More information about the wine-devel
mailing list