From 477d7e7f0932912b72ceb218e82a8cfceb682e44 Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Sun, 24 Mar 2024 13:39:19 +0100 Subject: [PATCH] Migrate equinox.security.win32 to JNA to enhance CPI-arch compatibility This allows to use equinox.security.win32 also on aarch64 CPU-architectures and not only on x86_64. Rename the fragment from org.eclipse.equinox.security.win32.x86_64 to org.eclipse.equinox.security.win32 to reflect that it's not architecture specific anymore. --- .../tests/storage/WinPreferencesTest.java | 4 +- .../cpp/jnicrypt.cpp | 84 ---- .../cpp/jnicrypt.h | 31 -- .../cpp/jnicrypt.vcproj | 463 ------------------ .../jnicrypt64.dll | Bin 56320 -> 0 bytes .../.classpath | 0 .../.project | 2 +- .../org.eclipse.core.resources.prefs | 0 .../.settings/org.eclipse.core.runtime.prefs | 0 .../.settings/org.eclipse.jdt.core.prefs | 0 .../.settings/org.eclipse.jdt.ui.prefs | 0 .../META-INF/MANIFEST.MF | 9 +- .../ReadMe.txt | 12 +- .../about.html | 0 .../build.properties | 5 +- .../forceQualifierUpdate.txt | 0 .../fragment.properties | 4 +- .../fragment.xml | 2 +- .../pom.xml | 4 +- .../win32/WindowsPasswordProvider.java} | 23 +- .../security/win32/nls/WinCryptoMessages.java | 0 .../security/win32/nls/messages.properties | 0 .../schema/secureStorage.exsd | 2 +- .../org.eclipse.equinox.core.sdk/feature.xml | 4 +- pom.xml | 2 +- 25 files changed, 36 insertions(+), 615 deletions(-) delete mode 100644 bundles/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.cpp delete mode 100644 bundles/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.h delete mode 100644 bundles/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.vcproj delete mode 100644 bundles/org.eclipse.equinox.security.win32.x86_64/jnicrypt64.dll rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/.classpath (100%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/.project (93%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/.settings/org.eclipse.core.resources.prefs (100%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/.settings/org.eclipse.core.runtime.prefs (100%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/.settings/org.eclipse.jdt.core.prefs (100%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/.settings/org.eclipse.jdt.ui.prefs (100%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/META-INF/MANIFEST.MF (55%) rename bundles/{org.eclipse.equinox.security.win32.x86_64/cpp => org.eclipse.equinox.security.win32}/ReadMe.txt (74%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/about.html (100%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/build.properties (87%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/forceQualifierUpdate.txt (100%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/fragment.properties (87%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/fragment.xml (95%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/pom.xml (94%) rename bundles/{org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/WinCrypto.java => org.eclipse.equinox.security.win32/src/org/eclipse/equinox/internal/security/win32/WindowsPasswordProvider.java} (86%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/src/org/eclipse/equinox/internal/security/win32/nls/WinCryptoMessages.java (100%) rename bundles/{org.eclipse.equinox.security.win32.x86_64 => org.eclipse.equinox.security.win32}/src/org/eclipse/equinox/internal/security/win32/nls/messages.properties (100%) diff --git a/bundles/org.eclipse.equinox.security.tests/src/org/eclipse/equinox/internal/security/tests/storage/WinPreferencesTest.java b/bundles/org.eclipse.equinox.security.tests/src/org/eclipse/equinox/internal/security/tests/storage/WinPreferencesTest.java index 3419f235bbd..ce87bbe58cb 100644 --- a/bundles/org.eclipse.equinox.security.tests/src/org/eclipse/equinox/internal/security/tests/storage/WinPreferencesTest.java +++ b/bundles/org.eclipse.equinox.security.tests/src/org/eclipse/equinox/internal/security/tests/storage/WinPreferencesTest.java @@ -24,11 +24,11 @@ */ public class WinPreferencesTest extends SecurePreferencesTest { - final private static String WIN_64BIT_BUNDLE = "org.eclipse.equinox.security.win32.x86_64"; + final private static String WIN_BUNDLE = "org.eclipse.equinox.security.win32"; @Before public void setUp() { - org.junit.Assume.assumeTrue(hasBundle(WIN_64BIT_BUNDLE)); + org.junit.Assume.assumeTrue(hasBundle(WIN_BUNDLE)); } /** diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.cpp b/bundles/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.cpp deleted file mode 100644 index 29305744070..00000000000 --- a/bundles/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2011 IBM Corporation and others. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ - -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers - -#include -#include -#include "jnicrypt.h" - -BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) -{ - return TRUE; -} - -JNIEXPORT jbyteArray JNICALL Java_org_eclipse_equinox_internal_security_win32_WinCrypto_winencrypt - (JNIEnv *env, jobject obj, jbyteArray value) -{ - jsize size = env->GetArrayLength(value); - jbyte *body = env->GetByteArrayElements(value, NULL); - if (body == NULL) - return NULL; - - DATA_BLOB clearText; - DATA_BLOB encryptedText; - clearText.pbData = (BYTE*) body; - clearText.cbData = (DWORD) size; - - BOOL result = CryptProtectData(&clearText, L"Equinox", NULL, NULL, NULL, 0, &encryptedText); - - // release memory allocated by Java environment - env->ReleaseByteArrayElements(value, body, 0); - - if (result == FALSE) - return NULL; - - jbyteArray returnArray = env->NewByteArray(encryptedText.cbData); - env->SetByteArrayRegion(returnArray, 0, encryptedText.cbData, (jbyte*) encryptedText.pbData); - LocalFree(encryptedText.pbData); // no need any more, have Java representation - - return returnArray; -} - -JNIEXPORT jbyteArray JNICALL Java_org_eclipse_equinox_internal_security_win32_WinCrypto_windecrypt - (JNIEnv *env, jobject obj, jbyteArray value) -{ - jsize size = env->GetArrayLength(value); - jbyte *body = env->GetByteArrayElements(value, NULL); - if (body == NULL) - return NULL; - - DATA_BLOB clearText; - DATA_BLOB encryptedText; - encryptedText.pbData = (BYTE*) body; - encryptedText.cbData = (DWORD) size; - - LPWSTR pDescrOut = NULL; - BOOL result = CryptUnprotectData(&encryptedText, &pDescrOut, NULL, NULL, NULL, 0, &clearText); - - if (pDescrOut != NULL) - LocalFree(pDescrOut); - - // release memory allocated by Java environment - env->ReleaseByteArrayElements(value, body, 0); - - if (result == FALSE) - return NULL; - - jbyteArray returnArray = env->NewByteArray(clearText.cbData); - env->SetByteArrayRegion(returnArray, 0, clearText.cbData, (jbyte*) clearText.pbData); - LocalFree(clearText.pbData); // no need any more, have Java representation - - return returnArray; -} diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.h b/bundles/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.h deleted file mode 100644 index 377290d5779..00000000000 --- a/bundles/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.h +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007, 2011 IBM Corporation and others. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -#include - -#ifndef EQUINOX_WIN32_CRYPTO -#define EQUINOX_WIN32_CRYPTO - -#ifdef __cplusplus -extern "C" { -#endif - -JNIEXPORT jbyteArray JNICALL Java_org_eclipse_equinox_internal_security_win32_WinCrypto_windecrypt(JNIEnv *, jobject, jbyteArray); -JNIEXPORT jbyteArray JNICALL Java_org_eclipse_equinox_internal_security_win32_WinCrypto_winencrypt(JNIEnv *, jobject, jbyteArray); - -#ifdef __cplusplus -} -#endif - -#endif // #ifndef EQUINOX_WIN32_CRYPTO - diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.vcproj b/bundles/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.vcproj deleted file mode 100644 index a5db9f507e1..00000000000 --- a/bundles/org.eclipse.equinox.security.win32.x86_64/cpp/jnicrypt.vcproj +++ /dev/null @@ -1,463 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/jnicrypt64.dll b/bundles/org.eclipse.equinox.security.win32.x86_64/jnicrypt64.dll deleted file mode 100644 index 4a21b29207219e861fb6fcb380c6d9b0a2ecab2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56320 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 - org.eclipse.equinox.security.win32.x86_64 + org.eclipse.equinox.security.win32 diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.equinox.security.win32/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from bundles/org.eclipse.equinox.security.win32.x86_64/.settings/org.eclipse.core.resources.prefs rename to bundles/org.eclipse.equinox.security.win32/.settings/org.eclipse.core.resources.prefs diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/.settings/org.eclipse.core.runtime.prefs b/bundles/org.eclipse.equinox.security.win32/.settings/org.eclipse.core.runtime.prefs similarity index 100% rename from bundles/org.eclipse.equinox.security.win32.x86_64/.settings/org.eclipse.core.runtime.prefs rename to bundles/org.eclipse.equinox.security.win32/.settings/org.eclipse.core.runtime.prefs diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.security.win32/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from bundles/org.eclipse.equinox.security.win32.x86_64/.settings/org.eclipse.jdt.core.prefs rename to bundles/org.eclipse.equinox.security.win32/.settings/org.eclipse.jdt.core.prefs diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/.settings/org.eclipse.jdt.ui.prefs b/bundles/org.eclipse.equinox.security.win32/.settings/org.eclipse.jdt.ui.prefs similarity index 100% rename from bundles/org.eclipse.equinox.security.win32.x86_64/.settings/org.eclipse.jdt.ui.prefs rename to bundles/org.eclipse.equinox.security.win32/.settings/org.eclipse.jdt.ui.prefs diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.security.win32/META-INF/MANIFEST.MF similarity index 55% rename from bundles/org.eclipse.equinox.security.win32.x86_64/META-INF/MANIFEST.MF rename to bundles/org.eclipse.equinox.security.win32/META-INF/MANIFEST.MF index 4778a524a71..5ae94c7510b 100644 --- a/bundles/org.eclipse.equinox.security.win32.x86_64/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.equinox.security.win32/META-INF/MANIFEST.MF @@ -1,12 +1,13 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %fragmentName -Bundle-SymbolicName: org.eclipse.equinox.security.win32.x86_64;singleton:=true -Bundle-Version: 1.2.200.qualifier +Bundle-SymbolicName: org.eclipse.equinox.security.win32;singleton:=true +Bundle-Version: 1.3.0.qualifier Bundle-Vendor: %providerName Fragment-Host: org.eclipse.equinox.security;bundle-version="[1.0.0,2.0.0)" +Import-Package: com.sun.jna.platform.win32;version="[5.14.0,6.0.0)" Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-Localization: fragment -Eclipse-PlatformFilter: (& (osgi.os=win32) (osgi.arch=x86_64)) +Eclipse-PlatformFilter: (osgi.os=win32) Export-Package: org.eclipse.equinox.internal.security.win32;x-internal:=true -Automatic-Module-Name: org.eclipse.equinox.security.win32.x86_64 +Automatic-Module-Name: org.eclipse.equinox.security.win32 diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/cpp/ReadMe.txt b/bundles/org.eclipse.equinox.security.win32/ReadMe.txt similarity index 74% rename from bundles/org.eclipse.equinox.security.win32.x86_64/cpp/ReadMe.txt rename to bundles/org.eclipse.equinox.security.win32/ReadMe.txt index baf19d5ed56..d753d7967d3 100644 --- a/bundles/org.eclipse.equinox.security.win32.x86_64/cpp/ReadMe.txt +++ b/bundles/org.eclipse.equinox.security.win32/ReadMe.txt @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2011 IBM Corporation and others. + * Copyright (c) 2007, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -12,8 +12,8 @@ * IBM Corporation - initial API and implementation *******************************************************************************/ -This is a JNI bridge to access native Windows encryption methods from Java. This version -works in a 64-bit Windows environment. +This is a JNA bridge to access native Windows encryption methods from Java. This version +works in a Windows environment. The methods perform user-specific encryption of the data. The same user can later decrypt data using methods provided by this DLL. A different user won't be able to decrypt the data. @@ -28,9 +28,3 @@ Note that this mechanism is intended to be used with small size data (i.e., pass large amount of data consider encrypting your password using this mechanism and using symmetric encryption to encrypt the data. -To compile this DLL: -=> JAVA_HOME environment variable needs to be setup so that jni.h can be found - -Note C++ projects settings: -=> Additional include directories - "$(JAVA_HOME)/include";"$(JAVA_HOME)/include/win32" -=> Additional linker dependency - Crypt32.lib diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/about.html b/bundles/org.eclipse.equinox.security.win32/about.html similarity index 100% rename from bundles/org.eclipse.equinox.security.win32.x86_64/about.html rename to bundles/org.eclipse.equinox.security.win32/about.html diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/build.properties b/bundles/org.eclipse.equinox.security.win32/build.properties similarity index 87% rename from bundles/org.eclipse.equinox.security.win32.x86_64/build.properties rename to bundles/org.eclipse.equinox.security.win32/build.properties index 399a64b3564..e9ad9abc775 100644 --- a/bundles/org.eclipse.equinox.security.win32.x86_64/build.properties +++ b/bundles/org.eclipse.equinox.security.win32/build.properties @@ -17,8 +17,5 @@ bin.includes = META-INF/,\ .,\ fragment.properties,\ fragment.xml,\ - about.html,\ - jnicrypt64.dll -src.includes = cpp/,\ - META-INF/,\ about.html +src.includes = about.html diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/forceQualifierUpdate.txt b/bundles/org.eclipse.equinox.security.win32/forceQualifierUpdate.txt similarity index 100% rename from bundles/org.eclipse.equinox.security.win32.x86_64/forceQualifierUpdate.txt rename to bundles/org.eclipse.equinox.security.win32/forceQualifierUpdate.txt diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/fragment.properties b/bundles/org.eclipse.equinox.security.win32/fragment.properties similarity index 87% rename from bundles/org.eclipse.equinox.security.win32.x86_64/fragment.properties rename to bundles/org.eclipse.equinox.security.win32/fragment.properties index c9b8604ca76..666520c7561 100644 --- a/bundles/org.eclipse.equinox.security.win32.x86_64/fragment.properties +++ b/bundles/org.eclipse.equinox.security.win32/fragment.properties @@ -11,7 +11,7 @@ # Contributors: # IBM Corporation - initial API and implementation ############################################################################### -fragmentName = Windows Data Protection services integration (64 bit) +fragmentName = Windows Data Protection services integration providerName = Eclipse.org - Equinox -windowsModuleName = Windows Integration (64 bit) +windowsModuleName = Windows Integration providerDescription = The provider uses Windows APIs to encrypt a randomly generated \'master\' password in a way specific to the login credentials. Users who can log into the Windows account can access contents of the secure storage. diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/fragment.xml b/bundles/org.eclipse.equinox.security.win32/fragment.xml similarity index 95% rename from bundles/org.eclipse.equinox.security.win32.x86_64/fragment.xml rename to bundles/org.eclipse.equinox.security.win32/fragment.xml index c9d4d64a9f1..bd63be209c8 100644 --- a/bundles/org.eclipse.equinox.security.win32.x86_64/fragment.xml +++ b/bundles/org.eclipse.equinox.security.win32/fragment.xml @@ -6,7 +6,7 @@ name="%windowsModuleName" point="org.eclipse.equinox.security.secureStorage"> 4.32.0-SNAPSHOT ../../ - org.eclipse.equinox.security.win32.x86_64 - 1.2.200-SNAPSHOT + org.eclipse.equinox.security.win32 + 1.3.0-SNAPSHOT eclipse-plugin diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/WinCrypto.java b/bundles/org.eclipse.equinox.security.win32/src/org/eclipse/equinox/internal/security/win32/WindowsPasswordProvider.java similarity index 86% rename from bundles/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/WinCrypto.java rename to bundles/org.eclipse.equinox.security.win32/src/org/eclipse/equinox/internal/security/win32/WindowsPasswordProvider.java index 7ccedabb118..f3dc114defd 100644 --- a/bundles/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/WinCrypto.java +++ b/bundles/org.eclipse.equinox.security.win32/src/org/eclipse/equinox/internal/security/win32/WindowsPasswordProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2017 IBM Corporation and others. + * Copyright (c) 2008, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -7,9 +7,10 @@ * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 - * + * * Contributors: * IBM Corporation - initial API and implementation + * Hannes Wellmann - Migrate to JNA as CPU-architecture independent access to Windows' Crypt32 native library *******************************************************************************/ package org.eclipse.equinox.internal.security.win32; @@ -27,18 +28,24 @@ import org.eclipse.equinox.security.storage.provider.IPreferencesContainer; import org.eclipse.equinox.security.storage.provider.PasswordProvider; +import com.sun.jna.platform.win32.Crypt32Util; + /** * Provides interface with native Windows data protection API. This provider * auto-generates separate passwords for each secure preferences tree. */ -public class WinCrypto extends PasswordProvider { +public class WindowsPasswordProvider extends PasswordProvider { - native public byte[] windecrypt(byte[] encryptedText); - - native public byte[] winencrypt(byte[] clearText); + private static byte[] windecrypt(byte[] encryptedText) { + // Through JNA call + // https://learn.microsoft.com/en-us/windows/win32/api/dpapi/nf-dpapi-cryptunprotectdata + return Crypt32Util.cryptUnprotectData(encryptedText); + } - static { - System.loadLibrary("jnicrypt64"); + private static byte[] winencrypt(byte[] clearText) { + // Through JNA call + // https://learn.microsoft.com/en-us/windows/win32/api/dpapi/nf-dpapi-cryptprotectdata + return Crypt32Util.cryptProtectData(clearText, null, 0, "Equinox", null); } private final static String WIN_PROVIDER_NODE = "/org.eclipse.equinox.secure.storage/windows64"; diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/nls/WinCryptoMessages.java b/bundles/org.eclipse.equinox.security.win32/src/org/eclipse/equinox/internal/security/win32/nls/WinCryptoMessages.java similarity index 100% rename from bundles/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/nls/WinCryptoMessages.java rename to bundles/org.eclipse.equinox.security.win32/src/org/eclipse/equinox/internal/security/win32/nls/WinCryptoMessages.java diff --git a/bundles/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/nls/messages.properties b/bundles/org.eclipse.equinox.security.win32/src/org/eclipse/equinox/internal/security/win32/nls/messages.properties similarity index 100% rename from bundles/org.eclipse.equinox.security.win32.x86_64/src/org/eclipse/equinox/internal/security/win32/nls/messages.properties rename to bundles/org.eclipse.equinox.security.win32/src/org/eclipse/equinox/internal/security/win32/nls/messages.properties diff --git a/bundles/org.eclipse.equinox.security/schema/secureStorage.exsd b/bundles/org.eclipse.equinox.security/schema/secureStorage.exsd index d23f7f6756d..59652354ed8 100644 --- a/bundles/org.eclipse.equinox.security/schema/secureStorage.exsd +++ b/bundles/org.eclipse.equinox.security/schema/secureStorage.exsd @@ -141,7 +141,7 @@ <p>The <code>org.eclipse.equinox.security.ui</code> bundle supplies default password provider that prompts user to enter the password.</p> -<p>The <code>org.eclipse.equinox.security.win32.x86_64</code> fragment provides Windows OS integration.</p> +<p>The <code>org.eclipse.equinox.security.win32</code> fragment provides Windows OS integration.</p> <p>The <code>org.eclipse.equinox.security.linux</code> fragment provides Linux OS integration.</p> <p>The <code>org.eclipse.equinox.security.macosx</code> fragment provides Mac OS integration.</p> diff --git a/features/org.eclipse.equinox.core.sdk/feature.xml b/features/org.eclipse.equinox.core.sdk/feature.xml index 65124b9c048..3a892b6d415 100644 --- a/features/org.eclipse.equinox.core.sdk/feature.xml +++ b/features/org.eclipse.equinox.core.sdk/feature.xml @@ -72,13 +72,13 @@ version="0.0.0"/> diff --git a/pom.xml b/pom.xml index 4d75085fd2a..1c07be3c1fa 100644 --- a/pom.xml +++ b/pom.xml @@ -174,7 +174,7 @@ bundles/org.eclipse.equinox.concurrent bundles/org.eclipse.equinox.security bundles/org.eclipse.equinox.security.macosx - bundles/org.eclipse.equinox.security.win32.x86_64 + bundles/org.eclipse.equinox.security.win32 bundles/org.eclipse.equinox.security.linux bundles/org.eclipse.equinox.bidi bundles/org.eclipse.equinox.cm