Reorganize crate as lib
This commit is contained in:
parent
1129212b23
commit
83bfa98a38
9 changed files with 62 additions and 36 deletions
|
@ -2,6 +2,10 @@
|
|||
name = "umskt"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
crate-type = ["lib"]
|
||||
|
||||
[[bin]]
|
||||
name = "xpkey"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ use openssl::{
|
|||
};
|
||||
use serde_json::{from_reader, from_str};
|
||||
|
||||
use crate::{
|
||||
use umskt::{
|
||||
bink1998, bink2002, confid, crypto::initialize_elliptic_curve, key::P_KEY_CHARSET, PK_LENGTH,
|
||||
};
|
||||
|
||||
|
@ -156,7 +156,7 @@ impl Cli {
|
|||
|
||||
keys
|
||||
} else {
|
||||
from_str(std::include_str!("../keys.json"))?
|
||||
from_str(std::include_str!("../../../keys.json"))?
|
||||
}
|
||||
};
|
||||
|
7
src/bin/xpkey/main.rs
Normal file
7
src/bin/xpkey/main.rs
Normal file
|
@ -0,0 +1,7 @@
|
|||
use anyhow::Result;
|
||||
|
||||
mod cli;
|
||||
|
||||
fn main() -> Result<()> {
|
||||
cli::Cli::new()?.run()
|
||||
}
|
|
@ -6,7 +6,10 @@ use openssl::{
|
|||
sha::sha1,
|
||||
};
|
||||
|
||||
use crate::key::{base24_decode, base24_encode};
|
||||
use crate::{
|
||||
crypto::bitmask,
|
||||
key::{base24_decode, base24_encode},
|
||||
};
|
||||
|
||||
const FIELD_BITS: i32 = 384;
|
||||
const FIELD_BYTES: usize = 48;
|
||||
|
@ -185,10 +188,6 @@ fn pack(p_key: ProductKey) -> Vec<u8> {
|
|||
.collect()
|
||||
}
|
||||
|
||||
fn bitmask(n: u64) -> u64 {
|
||||
(1 << n) - 1
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::{fs::File, io::BufReader};
|
||||
|
|
|
@ -6,7 +6,10 @@ use openssl::{
|
|||
sha::sha1,
|
||||
};
|
||||
|
||||
use crate::key::{base24_decode, base24_encode};
|
||||
use crate::{
|
||||
crypto::{bitmask, by_dword, next_sn_bits},
|
||||
key::{base24_decode, base24_encode},
|
||||
};
|
||||
|
||||
const FIELD_BITS: i32 = 512;
|
||||
const FIELD_BYTES: usize = 64;
|
||||
|
@ -262,22 +265,11 @@ fn pack(p_key: ProductKey) -> Vec<u8> {
|
|||
.collect()
|
||||
}
|
||||
|
||||
fn bitmask(n: u64) -> u64 {
|
||||
(1 << n) - 1
|
||||
}
|
||||
|
||||
fn next_sn_bits(field: u64, n: u32, offset: u32) -> u64 {
|
||||
(field >> offset) & ((1u64 << n) - 1)
|
||||
}
|
||||
|
||||
fn by_dword(n: &[u8]) -> u32 {
|
||||
(n[0] as u32) | (n[1] as u32) << 8 | (n[2] as u32) << 16 | (n[3] as u32) << 24
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::{fs::File, io::BufReader};
|
||||
|
||||
use openssl::bn::{BigNum, BigNumContext};
|
||||
use serde_json::from_reader;
|
||||
|
||||
use crate::crypto::initialize_elliptic_curve;
|
||||
|
@ -308,4 +300,23 @@ mod tests {
|
|||
|
||||
assert!(super::verify(&e_curve, &gen_point, &pub_point, product_key, true).unwrap());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn prime_test() {
|
||||
let mut ctx = BigNumContext::new().unwrap();
|
||||
let p = BigNum::from_dec_str("9759712359818460653").unwrap();
|
||||
let mut p2 = BigNum::new().unwrap();
|
||||
let _ = p2.sqr(&p, &mut ctx);
|
||||
println!("p2: {:?}", p2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sqrt_test() {
|
||||
let mut ctx = BigNumContext::new().unwrap();
|
||||
let s = BigNum::from_dec_str("95251985346393225982548498694509186409").unwrap();
|
||||
let p = BigNum::from_dec_str("9362780380393422053").unwrap();
|
||||
let mut out = BigNum::new().unwrap();
|
||||
out.mod_sqrt(&s, &p, &mut ctx).unwrap();
|
||||
assert_eq!(out, BigNum::from_dec_str("8965848400968383453").unwrap());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -79,8 +79,8 @@ fn umul128(a: u64, b: u64, hi: &mut u64) -> u64 {
|
|||
r as u64
|
||||
}
|
||||
|
||||
/// `hi:lo * ceil(2**170/MOD) >> (64 + 64 + 42)`
|
||||
fn ui128_quotient_mod(lo: u64, hi: u64) -> u64 {
|
||||
// hi:lo * ceil(2**170/MOD) >> (64 + 64 + 42)
|
||||
let mut prod1: u64 = 0;
|
||||
umul128(lo, 0x604fa6a1c6346a87_i64 as u64, &mut prod1);
|
||||
let mut part1hi: u64 = 0;
|
||||
|
@ -286,7 +286,6 @@ unsafe fn find_divisor_v(d: *mut TDivisor) -> i32 {
|
|||
1_i32
|
||||
}
|
||||
|
||||
/// generic short slow code
|
||||
unsafe fn polynomial_mul(
|
||||
adeg: i32,
|
||||
a: *const u64,
|
||||
|
@ -295,6 +294,7 @@ unsafe fn polynomial_mul(
|
|||
mut resultprevdeg: i32,
|
||||
result: *mut u64,
|
||||
) -> i32 {
|
||||
// generic short slow code
|
||||
if adeg < 0_i32 || bdeg < 0_i32 {
|
||||
return resultprevdeg;
|
||||
}
|
||||
|
|
|
@ -35,3 +35,15 @@ pub fn initialize_elliptic_curve(
|
|||
|
||||
(c_curve, gen_point, pub_point)
|
||||
}
|
||||
|
||||
pub fn bitmask(n: u64) -> u64 {
|
||||
(1 << n) - 1
|
||||
}
|
||||
|
||||
pub fn next_sn_bits(field: u64, n: u32, offset: u32) -> u64 {
|
||||
(field >> offset) & ((1u64 << n) - 1)
|
||||
}
|
||||
|
||||
pub fn by_dword(n: &[u8]) -> u32 {
|
||||
(n[0] as u32) | (n[1] as u32) << 8 | (n[2] as u32) << 16 | (n[3] as u32) << 24
|
||||
}
|
||||
|
|
7
src/lib.rs
Normal file
7
src/lib.rs
Normal file
|
@ -0,0 +1,7 @@
|
|||
pub mod bink1998;
|
||||
pub mod bink2002;
|
||||
pub mod confid;
|
||||
pub mod crypto;
|
||||
pub mod key;
|
||||
|
||||
pub const PK_LENGTH: usize = 25;
|
14
src/main.rs
14
src/main.rs
|
@ -1,14 +0,0 @@
|
|||
use anyhow::Result;
|
||||
|
||||
mod bink1998;
|
||||
mod bink2002;
|
||||
mod cli;
|
||||
mod confid;
|
||||
mod crypto;
|
||||
mod key;
|
||||
|
||||
const PK_LENGTH: usize = 25;
|
||||
|
||||
fn main() -> Result<()> {
|
||||
cli::Cli::new()?.run()
|
||||
}
|
Loading…
Add table
Reference in a new issue