mirror of
https://github.com/Neo-Desktop/WindowsXPKg
synced 2025-06-24 06:24:16 +03:00
Compare commits
2 Commits
74ff1ea08c
...
v0.3.0-bet
Author | SHA1 | Date | |
---|---|---|---|
1fd7550f85 | |||
1f85bf954e |
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 no-threads no-tests -DOPENSSL_DEV_NO_ATOMICS --prefix=${{ github.workspace }}/djgpp DJGPP
|
||||||
make && make install
|
make && make install_sw
|
||||||
popd
|
popd
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
|
@ -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