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" | name = "umskt" | ||||||
| version = "0.1.0" | version = "0.1.0" | ||||||
| edition = "2021" | edition = "2021" | ||||||
|  | crate-type = ["lib"] | ||||||
|  | 
 | ||||||
|  | [[bin]] | ||||||
|  | name = "xpkey" | ||||||
| 
 | 
 | ||||||
| # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | # 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 serde_json::{from_reader, from_str}; | ||||||
| 
 | 
 | ||||||
| use crate::{ | use umskt::{ | ||||||
|     bink1998, bink2002, confid, crypto::initialize_elliptic_curve, key::P_KEY_CHARSET, PK_LENGTH, |     bink1998, bink2002, confid, crypto::initialize_elliptic_curve, key::P_KEY_CHARSET, PK_LENGTH, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -156,7 +156,7 @@ impl Cli { | ||||||
| 
 | 
 | ||||||
|                 keys |                 keys | ||||||
|             } else { |             } 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, |     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_BITS: i32 = 384; | ||||||
| const FIELD_BYTES: usize = 48; | const FIELD_BYTES: usize = 48; | ||||||
|  | @ -185,10 +188,6 @@ fn pack(p_key: ProductKey) -> Vec<u8> { | ||||||
|         .collect() |         .collect() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| fn bitmask(n: u64) -> u64 { |  | ||||||
|     (1 << n) - 1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #[cfg(test)] | #[cfg(test)] | ||||||
| mod tests { | mod tests { | ||||||
|     use std::{fs::File, io::BufReader}; |     use std::{fs::File, io::BufReader}; | ||||||
|  |  | ||||||
|  | @ -6,7 +6,10 @@ use openssl::{ | ||||||
|     sha::sha1, |     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_BITS: i32 = 512; | ||||||
| const FIELD_BYTES: usize = 64; | const FIELD_BYTES: usize = 64; | ||||||
|  | @ -262,22 +265,11 @@ fn pack(p_key: ProductKey) -> Vec<u8> { | ||||||
|         .collect() |         .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)] | #[cfg(test)] | ||||||
| mod tests { | mod tests { | ||||||
|     use std::{fs::File, io::BufReader}; |     use std::{fs::File, io::BufReader}; | ||||||
| 
 | 
 | ||||||
|  |     use openssl::bn::{BigNum, BigNumContext}; | ||||||
|     use serde_json::from_reader; |     use serde_json::from_reader; | ||||||
| 
 | 
 | ||||||
|     use crate::crypto::initialize_elliptic_curve; |     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()); |         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 |     r as u64 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// `hi:lo * ceil(2**170/MOD) >> (64 + 64 + 42)`
 |  | ||||||
| fn ui128_quotient_mod(lo: u64, hi: u64) -> u64 { | fn ui128_quotient_mod(lo: u64, hi: u64) -> u64 { | ||||||
|  |     // hi:lo * ceil(2**170/MOD) >> (64 + 64 + 42)
 | ||||||
|     let mut prod1: u64 = 0; |     let mut prod1: u64 = 0; | ||||||
|     umul128(lo, 0x604fa6a1c6346a87_i64 as u64, &mut prod1); |     umul128(lo, 0x604fa6a1c6346a87_i64 as u64, &mut prod1); | ||||||
|     let mut part1hi: u64 = 0; |     let mut part1hi: u64 = 0; | ||||||
|  | @ -286,7 +286,6 @@ unsafe fn find_divisor_v(d: *mut TDivisor) -> i32 { | ||||||
|     1_i32 |     1_i32 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// generic short slow code
 |  | ||||||
| unsafe fn polynomial_mul( | unsafe fn polynomial_mul( | ||||||
|     adeg: i32, |     adeg: i32, | ||||||
|     a: *const u64, |     a: *const u64, | ||||||
|  | @ -295,6 +294,7 @@ unsafe fn polynomial_mul( | ||||||
|     mut resultprevdeg: i32, |     mut resultprevdeg: i32, | ||||||
|     result: *mut u64, |     result: *mut u64, | ||||||
| ) -> i32 { | ) -> i32 { | ||||||
|  |     // generic short slow code
 | ||||||
|     if adeg < 0_i32 || bdeg < 0_i32 { |     if adeg < 0_i32 || bdeg < 0_i32 { | ||||||
|         return resultprevdeg; |         return resultprevdeg; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -35,3 +35,15 @@ pub fn initialize_elliptic_curve( | ||||||
| 
 | 
 | ||||||
|     (c_curve, gen_point, pub_point) |     (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
		Add a link
		
	
		Reference in a new issue