mirror of
https://github.com/Neo-Desktop/WindowsXPKg
synced 2025-06-13 09:04:17 +03:00
Compare commits
33 Commits
8368b6a6c7
...
master
Author | SHA1 | Date | |
---|---|---|---|
a66e579377 | |||
e30a4713b6 | |||
e9228045d3 | |||
36de07ecdf | |||
a28f4b5ca3 | |||
a0cb9e9869 | |||
6d30abba98 | |||
8b6c3b252b | |||
1fd7550f85 | |||
1f85bf954e | |||
74ff1ea08c | |||
0a63055e91 | |||
94da628e48 | |||
8e58232803 | |||
78ec40f4e3 | |||
9d36fb2f66 | |||
2166ee6e2f | |||
e85add2a54 | |||
f459316865 | |||
60a9b0ea70 | |||
0ebce49cf0 | |||
caa37365d4 | |||
8fe0fc06b2 | |||
fc4b83d1e8 | |||
aa331ad6e4 | |||
9b06fcf162 | |||
a4d810b030 | |||
c209070a66 | |||
9c01c93e77 | |||
b41b596e54 | |||
8723928e48 | |||
8b603c96f1 | |||
403bcb9dd5 |
4
.github/workflows/dos-djgpp.yml
vendored
4
.github/workflows/dos-djgpp.yml
vendored
@ -64,8 +64,8 @@ jobs:
|
|||||||
git clone https://github.com/UMSKT/openssl.git openssl
|
git clone https://github.com/UMSKT/openssl.git openssl
|
||||||
pushd openssl
|
pushd openssl
|
||||||
source ${{ github.workspace }}/djgpp/setenv
|
source ${{ github.workspace }}/djgpp/setenv
|
||||||
./Configure no-threads -DOPENSSL_DEV_NO_ATOMICS --prefix=${{ github.workspace }}/djgpp DJGPP
|
./Configure 386 no-threads no-tests no-sse2 no-asm -DOPENSSL_DEV_NO_ATOMICS -mno-mmx -mno-sse -mno-sse2 -march=i386 --prefix=${{ github.workspace }}/djgpp DJGPP
|
||||||
make && make install
|
make && make install_sw
|
||||||
popd
|
popd
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
|
221
.github/workflows/windows.yml
vendored
221
.github/workflows/windows.yml
vendored
@ -23,176 +23,83 @@ name: C/C++ CI (Windows)
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ "*" ]
|
branches: [ "*" ]
|
||||||
paths-ignore: [ '**.md', 'doc/**', '.idea/**'] # If only these files are edited, skip
|
paths-ignore: [ '**.md', 'doc/**', '.idea/**']
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-32bit:
|
build-tdm:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
arch: [x64, x86]
|
||||||
steps:
|
steps:
|
||||||
# https://github.com/actions/runner-images/issues/6067#issuecomment-1213069040
|
- name: Setup TDM-GCC
|
||||||
- name: Install Windows XP Support for Visual Studio
|
|
||||||
run: |
|
run: |
|
||||||
Set-Location "C:\Program Files (x86)\Microsoft Visual Studio\Installer\"
|
Write-Host Downloading TDM-GCC v10.3.0...
|
||||||
$InstallPath = "C:\Program Files\Microsoft Visual Studio\2022\Enterprise"
|
Invoke-WebRequest -Uri 'https://github.com/jmeubank/tdm-gcc/releases/download/v10.3.0-tdm64-2/tdm64-gcc-10.3.0-2.exe' -OutFile 'C:\Windows\temp\TDM-GCC-64.exe'
|
||||||
$componentsToAdd = @(
|
Write-Host Creating directory...
|
||||||
"Microsoft.VisualStudio.Component.WinXP"
|
New-Item -ItemType Directory -Path 'C:\TDM-GCC-64'
|
||||||
)
|
Write-Host Copying files [Set 1/3]...
|
||||||
[string]$workloadArgs = $componentsToAdd | ForEach-Object {" --add " + $_}
|
Start-Process '7z' -ArgumentList 'e C:\Windows\temp\TDM-GCC-64.exe -oC:\TDM-GCC-64 -y' -Wait
|
||||||
$Arguments = ('/c', "vs_installer.exe", 'modify', '--installPath', "`"$InstallPath`"",$workloadArgs, '--quiet', '--norestart', '--nocache')
|
Write-Host Copying files [Set 2/3]...
|
||||||
$process = Start-Process -FilePath cmd.exe -ArgumentList $Arguments -Wait -PassThru -WindowStyle Hidden
|
Start-Process '7z' -ArgumentList 'e C:\TDM-GCC-64\*.tar.xz -oC:\TDM-GCC-64 -y' -Wait
|
||||||
if ($process.ExitCode -eq 0)
|
Write-Host Copying files [Set 3/3]...
|
||||||
{
|
Start-Process '7z' -ArgumentList 'x C:\TDM-GCC-64\*.tar -oC:\TDM-GCC-64 -y' -Wait
|
||||||
Write-Host "components have been successfully added"
|
Write-Host Adding environment variables...
|
||||||
Get-ChildItem C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.Windows.XPSupport.*
|
$env:PATH = 'C:\TDM-GCC-64\bin;' + $env:PATH
|
||||||
}
|
[Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine)
|
||||||
else
|
|
||||||
{
|
|
||||||
Write-Host "components were not installed"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
- name: Download And Install 32-bit OpenSSL
|
|
||||||
run: |
|
|
||||||
$installDir = "$Env:ProgramFiles\OpenSSL"
|
|
||||||
# Define the URL for the JSON file containing the hashes
|
|
||||||
$jsonUrl = "https://raw.githubusercontent.com/slproweb/opensslhashes/master/win32_openssl_hashes.json"
|
|
||||||
|
|
||||||
# Download the JSON data
|
|
||||||
$jsonData = Invoke-RestMethod -Uri $jsonUrl
|
|
||||||
|
|
||||||
# Initialize variables for the latest version and URL
|
|
||||||
$latestVersion = "0.0.0"
|
|
||||||
$latestUrl = ""
|
|
||||||
|
|
||||||
# Iterate through the files to find the latest 3.1.x version
|
|
||||||
foreach ($file in $jsonData.files.PSObject.Properties) {
|
|
||||||
$details = $file.Value
|
|
||||||
if ($details.basever -like "3.1*" -and $file.Name -like "Win32OpenSSL*") {
|
|
||||||
if ([version]$details.basever -gt [version]$latestVersion) {
|
|
||||||
$latestVersion = $details.basever
|
|
||||||
$latestUrl = $details.url
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Output the latest version and URL
|
|
||||||
Write-Output "Latest OpenSSL Win32 3.1.x version: $latestVersion"
|
|
||||||
Write-Output "Download link: $latestUrl"
|
|
||||||
|
|
||||||
$installerURL = $latestURL
|
|
||||||
$installerName = "Win32OpenSSL.exe"
|
|
||||||
$installerPath = Join-Path -Path "${env:Temp}" -ChildPath "$installerName"
|
|
||||||
|
|
||||||
(New-Object System.Net.WebClient).DownloadFile($installerURL, $installerPath)
|
|
||||||
|
|
||||||
Remove-Item "$installDir" -Force -Recurse
|
|
||||||
$installerArgs = '/silent', '/sp-', '/suppressmsgboxes', "/DIR=`"$installDir`""
|
|
||||||
Start-Process -FilePath $installerPath -ArgumentList $installerArgs -Wait -PassThru
|
|
||||||
|
|
||||||
- name: Checkout Source Tree
|
- name: Checkout Source Tree
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup MSBuild
|
- name: Download OpenSSL-TDM release asset
|
||||||
uses: microsoft/setup-msbuild@v1
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
if ('${{ matrix.arch }}' -eq 'x64') {
|
||||||
|
$url = "https://github.com/UMSKT/winactiontest/releases/download/openssl/OpenSSL-TDM-64.zip"
|
||||||
|
$dest = "$env:GITHUB_WORKSPACE/OpenSSL-TDM-64"
|
||||||
|
$libdir = "lib64"
|
||||||
|
$cmake_flags = "-m64"
|
||||||
|
$openssl_root = "$env:GITHUB_WORKSPACE/OpenSSL-TDM-64"
|
||||||
|
} else {
|
||||||
|
$url = "https://github.com/UMSKT/winactiontest/releases/download/openssl/OpenSSL-TDM-32.zip"
|
||||||
|
$dest = "$env:GITHUB_WORKSPACE/OpenSSL-TDM-32"
|
||||||
|
$libdir = "lib32"
|
||||||
|
$cmake_flags = "-m32"
|
||||||
|
$openssl_root = "$env:GITHUB_WORKSPACE/OpenSSL-TDM-32"
|
||||||
|
}
|
||||||
|
Invoke-WebRequest -Uri $url -OutFile "OpenSSL-TDM.zip"
|
||||||
|
Expand-Archive -Path "OpenSSL-TDM.zip" -DestinationPath $env:GITHUB_WORKSPACE
|
||||||
|
echo "OPENSSL_ROOT=$openssl_root" | Out-File -FilePath $env:GITHUB_ENV -Append
|
||||||
|
echo "OPENSSL_LIBDIR=$libdir" | Out-File -FilePath $env:GITHUB_ENV -Append
|
||||||
|
echo "CMAKE_FLAGS=$cmake_flags" | Out-File -FilePath $env:GITHUB_ENV -Append
|
||||||
|
|
||||||
- name: Configure UMSKT
|
- name: Configure UMSKT (TDM-GCC ${{ matrix.arch }})
|
||||||
uses: threeal/cmake-action@v1.2.0
|
shell: pwsh
|
||||||
with:
|
run: |
|
||||||
generator: "Visual Studio 17 2022"
|
$env:PATH = 'C:\TDM-GCC-64\bin;' + $env:PATH
|
||||||
options: CMAKE_SYSTEM_VERSION="5.1.2600"
|
$OPENSSL_ROOT = "$env:OPENSSL_ROOT"
|
||||||
args: -A "Win32" -T v141_xp
|
$OPENSSL_LIB = "$OPENSSL_ROOT/$env:OPENSSL_LIBDIR"
|
||||||
|
$OPENSSL_INC = "$OPENSSL_ROOT/include"
|
||||||
|
cmake -G "MinGW Makefiles" `
|
||||||
|
-DCMAKE_C_COMPILER="gcc" `
|
||||||
|
-DCMAKE_CXX_COMPILER="g++" `
|
||||||
|
-DOPENSSL_ROOT_DIR="$OPENSSL_ROOT" `
|
||||||
|
-DOPENSSL_INCLUDE_DIR="$OPENSSL_INC" `
|
||||||
|
-DOPENSSL_CRYPTO_LIBRARY="$OPENSSL_LIB/libcrypto.a" `
|
||||||
|
-DOPENSSL_SSL_LIBRARY="$OPENSSL_LIB/libssl.a" `
|
||||||
|
-DCMAKE_C_FLAGS="$env:CMAKE_FLAGS" `
|
||||||
|
-DCMAKE_CXX_FLAGS="$env:CMAKE_FLAGS" `
|
||||||
|
.
|
||||||
|
|
||||||
- name: Build UMSKT
|
- name: Build UMSKT (TDM-GCC ${{ matrix.arch }})
|
||||||
working-directory: build
|
shell: pwsh
|
||||||
run: msbuild ALL_BUILD.vcxproj /P:Configuration=Release
|
run: |
|
||||||
|
$env:PATH = 'C:\TDM-GCC-64\bin;' + $env:PATH
|
||||||
|
mingw32-make
|
||||||
|
|
||||||
- name: Upload build artifact
|
- name: Upload build artifact
|
||||||
uses: actions/upload-artifact@v4.6.2
|
uses: actions/upload-artifact@v4.6.2
|
||||||
with:
|
with:
|
||||||
name: UMSKT-Win32
|
name: UMSKT-TDM${{ matrix.arch }}
|
||||||
path: build/Release
|
path: umskt.exe
|
||||||
|
|
||||||
build-64bit:
|
|
||||||
runs-on: windows-latest
|
|
||||||
steps:
|
|
||||||
- name: Install Windows XP Support for Visual Studio
|
|
||||||
run: |
|
|
||||||
Set-Location "C:\Program Files (x86)\Microsoft Visual Studio\Installer\"
|
|
||||||
$InstallPath = "C:\Program Files\Microsoft Visual Studio\2022\Enterprise"
|
|
||||||
$componentsToAdd = @(
|
|
||||||
"Microsoft.VisualStudio.Component.WinXP"
|
|
||||||
)
|
|
||||||
[string]$workloadArgs = $componentsToAdd | ForEach-Object {" --add " + $_}
|
|
||||||
$Arguments = ('/c', "vs_installer.exe", 'modify', '--installPath', "`"$InstallPath`"",$workloadArgs, '--quiet', '--norestart', '--nocache')
|
|
||||||
$process = Start-Process -FilePath cmd.exe -ArgumentList $Arguments -Wait -PassThru -WindowStyle Hidden
|
|
||||||
if ($process.ExitCode -eq 0)
|
|
||||||
{
|
|
||||||
Write-Host "components have been successfully added"
|
|
||||||
Get-ChildItem C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.Windows.XPSupport.*
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Write-Host "components were not installed"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
- name: Download And Install 64-bit OpenSSL
|
|
||||||
run: |
|
|
||||||
$installDir = "$Env:ProgramFiles\OpenSSL"
|
|
||||||
# Define the URL for the JSON file containing the hashes
|
|
||||||
$jsonUrl = "https://raw.githubusercontent.com/slproweb/opensslhashes/master/win32_openssl_hashes.json"
|
|
||||||
|
|
||||||
# Download the JSON data
|
|
||||||
$jsonData = Invoke-RestMethod -Uri $jsonUrl
|
|
||||||
|
|
||||||
# Initialize variables for the latest version and URL
|
|
||||||
$latestVersion = "0.0.0"
|
|
||||||
$latestUrl = ""
|
|
||||||
|
|
||||||
# Iterate through the files to find the latest 3.1.x version
|
|
||||||
foreach ($file in $jsonData.files.PSObject.Properties) {
|
|
||||||
$details = $file.Value
|
|
||||||
if ($details.basever -like "3.1*" -and $file.Name -like "Win64OpenSSL*") {
|
|
||||||
if ([version]$details.basever -gt [version]$latestVersion) {
|
|
||||||
$latestVersion = $details.basever
|
|
||||||
$latestUrl = $details.url
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Output the latest version and URL
|
|
||||||
Write-Output "Latest OpenSSL Win64 3.1.x version: $latestVersion"
|
|
||||||
Write-Output "Download link: $latestUrl"
|
|
||||||
|
|
||||||
$installerURL = $latestURL
|
|
||||||
$installerName = "Win64OpenSSL.exe"
|
|
||||||
$installerPath = Join-Path -Path "${env:Temp}" -ChildPath "$installerName"
|
|
||||||
|
|
||||||
(New-Object System.Net.WebClient).DownloadFile($installerURL, $installerPath)
|
|
||||||
|
|
||||||
Remove-Item "$installDir" -Force -Recurse
|
|
||||||
$installerArgs = '/silent', '/sp-', '/suppressmsgboxes', "/DIR=`"$installDir`""
|
|
||||||
Start-Process -FilePath $installerPath -ArgumentList $installerArgs -Wait -PassThru
|
|
||||||
|
|
||||||
- name: Checkout Source Tree
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup MSBuild
|
|
||||||
uses: microsoft/setup-msbuild@v1
|
|
||||||
|
|
||||||
- name: Configure UMSKT
|
|
||||||
uses: threeal/cmake-action@v1.2.0
|
|
||||||
with:
|
|
||||||
generator: "Visual Studio 17 2022"
|
|
||||||
args: -A "x64" -T "v141_xp"
|
|
||||||
|
|
||||||
- name: Build UMSKT
|
|
||||||
working-directory: build
|
|
||||||
run: msbuild ALL_BUILD.vcxproj /P:Configuration=Release
|
|
||||||
|
|
||||||
- name: Upload build artifact
|
|
||||||
uses: actions/upload-artifact@v4.6.2
|
|
||||||
with:
|
|
||||||
name: UMSKT-Win64
|
|
||||||
path: build/Release
|
|
||||||
|
8
.gitignore
vendored
8
.gitignore
vendored
@ -252,4 +252,10 @@ _deps
|
|||||||
CMakeSettings.json
|
CMakeSettings.json
|
||||||
|
|
||||||
# Visual Studio
|
# Visual Studio
|
||||||
.vs/
|
.vs/
|
||||||
|
|
||||||
|
CPM_modules
|
||||||
|
CPM_*.cmake
|
||||||
|
cpm-package-lock.cmake
|
||||||
|
*.a
|
||||||
|
*_cmrc*
|
@ -21,6 +21,13 @@
|
|||||||
CMAKE_MINIMUM_REQUIRED(VERSION 3.12)
|
CMAKE_MINIMUM_REQUIRED(VERSION 3.12)
|
||||||
PROJECT(UMSKT)
|
PROJECT(UMSKT)
|
||||||
|
|
||||||
|
# Force TDM-GCC on Windows if not using MSVC
|
||||||
|
if (WIN32 AND NOT MSVC)
|
||||||
|
set(CMAKE_C_COMPILER "C:/TDM-GCC-64/bin/gcc.exe" CACHE FILEPATH "C Compiler" FORCE)
|
||||||
|
set(CMAKE_CXX_COMPILER "C:/TDM-GCC-64/bin/g++.exe" CACHE FILEPATH "C++ Compiler" FORCE)
|
||||||
|
message(STATUS "[UMSKT] Forcing use of TDM-GCC in C:/TDM-GCC-64")
|
||||||
|
endif()
|
||||||
|
|
||||||
SET(CMAKE_CXX_STANDARD 17)
|
SET(CMAKE_CXX_STANDARD 17)
|
||||||
SET(CMAKE_OSX_SYSROOT "macosx" CACHE PATH "macOS SDK path")
|
SET(CMAKE_OSX_SYSROOT "macosx" CACHE PATH "macOS SDK path")
|
||||||
|
|
||||||
@ -63,6 +70,11 @@ IF(DJGPP_WATT32)
|
|||||||
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
||||||
SET(UMSKT_LINK_LIBS ${UMSKT_LINK_LIBS} ${DJGPP_WATT32})
|
SET(UMSKT_LINK_LIBS ${UMSKT_LINK_LIBS} ${DJGPP_WATT32})
|
||||||
SET(UMSKT_LINK_DIRS ${UMSKT_LINK_DIRS} ${WATT_ROOT}/lib)
|
SET(UMSKT_LINK_DIRS ${UMSKT_LINK_DIRS} ${WATT_ROOT}/lib)
|
||||||
|
|
||||||
|
# Maximum compatibility flags for DOS/NTVDM
|
||||||
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i386 -mtune=i386 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow -mno-ssse3 -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-avx -mno-avx2 -mno-fma -mno-fma4")
|
||||||
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=i386 -mtune=i386 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow -mno-ssse3 -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-avx -mno-avx2 -mno-fma -mno-fma4")
|
||||||
|
MESSAGE(STATUS "[UMSKT] Using i386 target for DOS DGJPP")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||||
@ -207,6 +219,12 @@ ELSE()
|
|||||||
TARGET_INCLUDE_DIRECTORIES(umskt PUBLIC ${OPENSSL_INCLUDE_DIR})
|
TARGET_INCLUDE_DIRECTORIES(umskt PUBLIC ${OPENSSL_INCLUDE_DIR})
|
||||||
TARGET_LINK_LIBRARIES(umskt _umskt ${OPENSSL_CRYPTO_LIBRARIES} ${ZLIB_LIBRARIES} fmt nlohmann_json::nlohmann_json umskt::rc ${UMSKT_LINK_LIBS})
|
TARGET_LINK_LIBRARIES(umskt _umskt ${OPENSSL_CRYPTO_LIBRARIES} ${ZLIB_LIBRARIES} fmt nlohmann_json::nlohmann_json umskt::rc ${UMSKT_LINK_LIBS})
|
||||||
TARGET_LINK_DIRECTORIES(umskt PUBLIC ${UMSKT_LINK_DIRS})
|
TARGET_LINK_DIRECTORIES(umskt PUBLIC ${UMSKT_LINK_DIRS})
|
||||||
|
|
||||||
|
# Link required Windows system libraries for OpenSSL
|
||||||
|
if (WIN32)
|
||||||
|
target_link_libraries(umskt crypt32 ws2_32)
|
||||||
|
endif()
|
||||||
|
|
||||||
IF(MSVC AND MSVC_MSDOS_STUB)
|
IF(MSVC AND MSVC_MSDOS_STUB)
|
||||||
SET_PROPERTY(TARGET umskt APPEND PROPERTY LINK_FLAGS /STUB:${MSVC_MSDOS_STUB})
|
SET_PROPERTY(TARGET umskt APPEND PROPERTY LINK_FLAGS /STUB:${MSVC_MSDOS_STUB})
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
@ -423,7 +423,7 @@ int CLI::BINK1998Generate() {
|
|||||||
} else {
|
} else {
|
||||||
// generate a random number to use as a serial
|
// generate a random number to use as a serial
|
||||||
BIGNUM *bnrand = BN_new();
|
BIGNUM *bnrand = BN_new();
|
||||||
BN_rand(bnrand, 19, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY);
|
UMSKT::umskt_bn_rand(bnrand, 19, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY);
|
||||||
|
|
||||||
int oRaw;
|
int oRaw;
|
||||||
char *cRaw = BN_bn2dec(bnrand);
|
char *cRaw = BN_bn2dec(bnrand);
|
||||||
@ -484,7 +484,7 @@ int CLI::BINK2002Generate() {
|
|||||||
// generate a key
|
// generate a key
|
||||||
for (int i = 0; i < this->total; i++) {
|
for (int i = 0; i < this->total; i++) {
|
||||||
DWORD pAuthInfo;
|
DWORD pAuthInfo;
|
||||||
RAND_bytes((BYTE *)&pAuthInfo, 4);
|
UMSKT::umskt_rand_bytes((BYTE *)&pAuthInfo, 4);
|
||||||
pAuthInfo &= BITMASK(10);
|
pAuthInfo &= BITMASK(10);
|
||||||
|
|
||||||
if (this->options.verbose) {
|
if (this->options.verbose) {
|
||||||
|
@ -58,3 +58,78 @@ FNEXPORT int PIDGEN2_GenerateRetail(char* channelID, char* &keyout) {
|
|||||||
FNEXPORT int PIDGEN2_GenerateOEM(char* year, char* day, char* oem, char* keyout) {
|
FNEXPORT int PIDGEN2_GenerateOEM(char* year, char* day, char* oem, char* keyout) {
|
||||||
return PIDGEN2::GenerateOEM(year, day, oem, keyout);
|
return PIDGEN2::GenerateOEM(year, day, oem, keyout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RNG utility functions
|
||||||
|
int UMSKT::umskt_rand_bytes(unsigned char *buf, int num) {
|
||||||
|
#if UMSKT_RNG_DJGPP
|
||||||
|
// DOS-compatible RNG using DJGPP's random() function
|
||||||
|
static bool initialized = false;
|
||||||
|
if (!initialized) {
|
||||||
|
// Get initial seed from multiple sources for better entropy
|
||||||
|
struct timeval tv;
|
||||||
|
gettimeofday(&tv, NULL);
|
||||||
|
|
||||||
|
// Combine microseconds with BIOS timer ticks
|
||||||
|
unsigned long ticks = *(volatile unsigned long *)0x0040001CL;
|
||||||
|
int seed = (int)((tv.tv_sec ^ tv.tv_usec) ^ (ticks * 100000));
|
||||||
|
|
||||||
|
// Initialize both random() and rand() with different seeds
|
||||||
|
srandom(seed);
|
||||||
|
srand(seed ^ 0x1234ABCD); // Use a different seed for rand
|
||||||
|
|
||||||
|
initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < num; i++) {
|
||||||
|
// Use random() for better randomness, especially in lower bits
|
||||||
|
buf[i] = (unsigned char)(random() & 0xFF);
|
||||||
|
|
||||||
|
// Mix in rand() as an additional source
|
||||||
|
buf[i] ^= (unsigned char)(rand() & 0xFF);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
#else
|
||||||
|
// Use OpenSSL's RAND_bytes for non-DOS systems
|
||||||
|
return RAND_bytes(buf, num);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int UMSKT::umskt_bn_rand(BIGNUM *rnd, int bits, int top, int bottom) {
|
||||||
|
#if UMSKT_RNG_DJGPP
|
||||||
|
// DOS-compatible RNG implementation for BIGNUMs
|
||||||
|
unsigned char *buf = (unsigned char *)malloc((bits + 7) / 8);
|
||||||
|
if (!buf) return 0;
|
||||||
|
|
||||||
|
// Generate random bytes
|
||||||
|
umskt_rand_bytes(buf, (bits + 7) / 8);
|
||||||
|
|
||||||
|
// Convert to BIGNUM
|
||||||
|
if (!BN_bin2bn(buf, (bits + 7) / 8, rnd)) {
|
||||||
|
free(buf);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(buf);
|
||||||
|
|
||||||
|
// Apply top/bottom constraints like BN_rand does
|
||||||
|
if (top != -1) {
|
||||||
|
if (top) {
|
||||||
|
if (bits == 0) {
|
||||||
|
BN_zero(rnd);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
BN_set_bit(rnd, bits - 1);
|
||||||
|
}
|
||||||
|
BN_mask_bits(rnd, bits);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bottom) {
|
||||||
|
BN_set_bit(rnd, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
#else
|
||||||
|
// Use OpenSSL's BN_rand for non-DOS systems
|
||||||
|
return BN_rand(rnd, bits, top, bottom);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
@ -38,6 +38,10 @@
|
|||||||
#include <fmt/core.h>
|
#include <fmt/core.h>
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
|
|
||||||
|
#ifdef __DJGPP__
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
// Algorithm macros
|
// Algorithm macros
|
||||||
#define PK_LENGTH 25
|
#define PK_LENGTH 25
|
||||||
#define NULL_TERMINATOR 1
|
#define NULL_TERMINATOR 1
|
||||||
@ -59,6 +63,17 @@
|
|||||||
#define BYDWORD(n) (DWORD)(*((n) + 0) | *((n) + 1) << 8 | *((n) + 2) << 16 | *((n) + 3) << 24)
|
#define BYDWORD(n) (DWORD)(*((n) + 0) | *((n) + 1) << 8 | *((n) + 2) << 16 | *((n) + 3) << 24)
|
||||||
#define BITMASK(n) ((1ULL << (n)) - 1)
|
#define BITMASK(n) ((1ULL << (n)) - 1)
|
||||||
|
|
||||||
|
// RNG utility functions
|
||||||
|
#ifdef __DJGPP__
|
||||||
|
#define UMSKT_RNG_DJGPP 1
|
||||||
|
extern "C" {
|
||||||
|
long int random(void);
|
||||||
|
int srandom(int seed);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define UMSKT_RNG_DJGPP 0
|
||||||
|
#endif
|
||||||
|
|
||||||
class UMSKT {
|
class UMSKT {
|
||||||
public:
|
public:
|
||||||
static std::FILE* debug;
|
static std::FILE* debug;
|
||||||
@ -67,7 +82,10 @@ public:
|
|||||||
class ConfigurationID;
|
class ConfigurationID;
|
||||||
|
|
||||||
static void setDebugOutput(std::FILE* input);
|
static void setDebugOutput(std::FILE* input);
|
||||||
|
|
||||||
|
// RNG utility functions
|
||||||
|
static int umskt_rand_bytes(unsigned char *buf, int num);
|
||||||
|
static int umskt_bn_rand(BIGNUM *rnd, int bits, int top, int bottom);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif //UMSKT_LIBUMSKT_H
|
#endif //UMSKT_LIBUMSKT_H
|
||||||
|
@ -201,7 +201,7 @@ void PIDGEN3::BINK1998::Generate(
|
|||||||
EC_POINT *r = EC_POINT_new(eCurve);
|
EC_POINT *r = EC_POINT_new(eCurve);
|
||||||
|
|
||||||
// Generate a random number c consisting of 384 bits without any constraints.
|
// Generate a random number c consisting of 384 bits without any constraints.
|
||||||
BN_rand(c, FIELD_BITS, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY);
|
UMSKT::umskt_bn_rand(c, FIELD_BITS, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY);
|
||||||
|
|
||||||
// Pick a random derivative of the base point on the elliptic curve.
|
// Pick a random derivative of the base point on the elliptic curve.
|
||||||
// R = cG;
|
// R = cG;
|
||||||
|
@ -236,7 +236,7 @@ void PIDGEN3::BINK2002::Generate(
|
|||||||
EC_POINT *r = EC_POINT_new(eCurve);
|
EC_POINT *r = EC_POINT_new(eCurve);
|
||||||
|
|
||||||
// Generate a random number c consisting of 512 bits without any constraints.
|
// Generate a random number c consisting of 512 bits without any constraints.
|
||||||
BN_rand(c, FIELD_BITS_2003, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY);
|
UMSKT::umskt_bn_rand(c, FIELD_BITS_2003, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY);
|
||||||
|
|
||||||
// R = cG
|
// R = cG
|
||||||
EC_POINT_mul(eCurve, r, nullptr, basePoint, c, numContext);
|
EC_POINT_mul(eCurve, r, nullptr, basePoint, c, numContext);
|
||||||
|
Reference in New Issue
Block a user