mirror of
https://github.com/Neo-Desktop/WindowsXPKg
synced 2025-03-17 21:28:54 +02:00
54 lines
2.1 KiB
C
54 lines
2.1 KiB
C
|
//
|
||
|
// Created by neo on 6/6/2023.
|
||
|
//
|
||
|
|
||
|
#ifndef WINDOWSXPKG_CONFID_H
|
||
|
#define WINDOWSXPKG_CONFID_H
|
||
|
|
||
|
#include "header.h"
|
||
|
|
||
|
// Confirmation ID generator constants
|
||
|
#define SUCCESS 0
|
||
|
#define ERR_TOO_SHORT 1
|
||
|
#define ERR_TOO_LARGE 2
|
||
|
#define ERR_INVALID_CHARACTER 3
|
||
|
#define ERR_INVALID_CHECK_DIGIT 4
|
||
|
#define ERR_UNKNOWN_VERSION 5
|
||
|
#define ERR_UNLUCKY 6
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
QWORD u[2];
|
||
|
QWORD v[2];
|
||
|
} TDivisor;
|
||
|
|
||
|
class ConfirmationID {
|
||
|
static QWORD residue_add(QWORD x, QWORD y);
|
||
|
static QWORD residue_sub(QWORD x, QWORD y);
|
||
|
static QWORD __umul128(QWORD a, QWORD b, QWORD* hi);
|
||
|
static QWORD ui128_quotient_mod(QWORD lo, QWORD hi);
|
||
|
static QWORD residue_mul(QWORD x, QWORD y);
|
||
|
static QWORD residue_pow(QWORD x, QWORD y);
|
||
|
static QWORD inverse(QWORD u, QWORD v);
|
||
|
static QWORD residue_inv(QWORD x);
|
||
|
static QWORD residue_sqrt(QWORD what);
|
||
|
static int find_divisor_v(TDivisor* d);
|
||
|
static int polynomial_mul(int adeg, const QWORD a[], int bdeg, const QWORD b[], int resultprevdeg, QWORD result[]);
|
||
|
static int polynomial_div_monic(int adeg, QWORD a[], int bdeg, const QWORD b[], QWORD* quotient);
|
||
|
static void polynomial_xgcd(int adeg, const QWORD a[3], int bdeg, const QWORD b[3], int* pgcddeg, QWORD gcd[3], int* pmult1deg, QWORD mult1[3], int* pmult2deg, QWORD mult2[3]);
|
||
|
static int u2poly(const TDivisor* src, QWORD polyu[3], QWORD polyv[2]);
|
||
|
static void divisor_add(const TDivisor* src1, const TDivisor* src2, TDivisor* dst);
|
||
|
static void divisor_mul(const TDivisor* src, QWORD mult, TDivisor* dst);
|
||
|
static void divisor_mul128(const TDivisor* src, QWORD mult_lo, QWORD mult_hi, TDivisor* dst);
|
||
|
static unsigned rol(unsigned x, int shift);
|
||
|
static void sha1_single_block(unsigned char input[64], unsigned char output[20]);
|
||
|
static void Mix(unsigned char* buffer, size_t bufSize, const unsigned char* key, size_t keySize);
|
||
|
static void Unmix(unsigned char* buffer, size_t bufSize, const unsigned char* key, size_t keySize);
|
||
|
|
||
|
public:
|
||
|
static int Generate(const char* installation_id_str, char confirmation_id[49]);
|
||
|
static int CLIRun();
|
||
|
};
|
||
|
|
||
|
#endif //WINDOWSXPKG_CONFID_H
|