add pow_mod for DHM-Exchange
This commit is contained in:
parent
8ac1a1f31e
commit
5e0dcf1b13
@ -1,6 +1,6 @@
|
|||||||
import secrets
|
import secrets
|
||||||
|
|
||||||
rndsize = 488*500+5
|
rndsize = 2**24
|
||||||
|
|
||||||
rndbytes = secrets.token_bytes(rndsize)
|
rndbytes = secrets.token_bytes(rndsize)
|
||||||
|
|
||||||
|
91
rust/client/Cargo.lock
generated
91
rust/client/Cargo.lock
generated
@ -2,6 +2,12 @@
|
|||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 3
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "autocfg"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bincode"
|
name = "bincode"
|
||||||
version = "1.3.3"
|
version = "1.3.3"
|
||||||
@ -80,6 +86,17 @@ dependencies = [
|
|||||||
"version_check",
|
"version_check",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "getrandom"
|
||||||
|
version = "0.2.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"libc",
|
||||||
|
"wasi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itransfer_client"
|
name = "itransfer_client"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@ -87,6 +104,8 @@ dependencies = [
|
|||||||
"bincode",
|
"bincode",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"crc32fast",
|
"crc32fast",
|
||||||
|
"num-bigint",
|
||||||
|
"rand",
|
||||||
"serde",
|
"serde",
|
||||||
"sha2",
|
"sha2",
|
||||||
]
|
]
|
||||||
@ -97,6 +116,42 @@ version = "0.2.144"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
|
checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-bigint"
|
||||||
|
version = "0.4.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-integer"
|
||||||
|
version = "0.1.45"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-traits"
|
||||||
|
version = "0.2.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ppv-lite86"
|
||||||
|
version = "0.2.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.58"
|
version = "1.0.58"
|
||||||
@ -115,6 +170,36 @@ dependencies = [
|
|||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand"
|
||||||
|
version = "0.8.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"rand_chacha",
|
||||||
|
"rand_core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_chacha"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||||
|
dependencies = [
|
||||||
|
"ppv-lite86",
|
||||||
|
"rand_core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_core"
|
||||||
|
version = "0.6.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.163"
|
version = "1.0.163"
|
||||||
@ -174,3 +259,9 @@ name = "version_check"
|
|||||||
version = "0.9.4"
|
version = "0.9.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasi"
|
||||||
|
version = "0.11.0+wasi-snapshot-preview1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||||
|
@ -11,6 +11,8 @@ serde = { version = "1.0.163", features = ["serde_derive"], default-features = f
|
|||||||
byteorder = { default-features = false, version = "1.4.3" }
|
byteorder = { default-features = false, version = "1.4.3" }
|
||||||
sha2 = { default-features = false, version = "0.10.6" }
|
sha2 = { default-features = false, version = "0.10.6" }
|
||||||
crc32fast = { default-features = false, version = "1.3.2" }
|
crc32fast = { default-features = false, version = "1.3.2" }
|
||||||
|
rand = { default-features = true, features = ["std_rng"], version = "0.8.5" }
|
||||||
|
num-bigint = { default-features = true, version = "0.4.3" }
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
lto = true # Enable link-time optimization
|
lto = true # Enable link-time optimization
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
use bincode::{self, Error, options, Options};
|
use bincode::{self, Error, options, Options};
|
||||||
use std::{net::{UdpSocket, SocketAddr}, io::Write};
|
use std::{net::{UdpSocket, SocketAddr}, io::{Write, BufRead, self}};
|
||||||
use serde::{Serialize, Deserialize};
|
use serde::{Serialize, Deserialize};
|
||||||
use sha2::{Digest, Sha512};
|
use sha2::{Digest, Sha512};
|
||||||
use std::io::{self, BufRead};
|
|
||||||
use crc32fast;
|
use crc32fast;
|
||||||
|
use rand::{rngs::StdRng, RngCore, SeedableRng};
|
||||||
|
use num_bigint::BigUint;
|
||||||
|
|
||||||
mod big_array;
|
mod big_array;
|
||||||
use big_array::BigArray;
|
use big_array::BigArray;
|
||||||
@ -42,8 +43,25 @@ fn read_stdin(message: String) -> String {
|
|||||||
buffer.trim().to_string()
|
buffer.trim().to_string()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn pow_mod(num: BigUint, pow: BigUint, modulo: BigUint) -> BigUint {
|
||||||
|
let mut result = BigUint::from(1u8);
|
||||||
|
let one = BigUint::from(1u8);
|
||||||
|
let mut i = BigUint::from(0u8);
|
||||||
|
while i < pow {
|
||||||
|
result = (result * &num) % &modulo;
|
||||||
|
i += &one;
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
||||||
|
let mut randomgen = StdRng::from_entropy();
|
||||||
|
let mut private_key = [0u8; 4096];
|
||||||
|
randomgen.fill_bytes(&mut private_key);
|
||||||
|
let private_key = BigUint::from_bytes_be(&private_key);
|
||||||
|
|
||||||
let timeout = 1;
|
let timeout = 1;
|
||||||
let mut server_ip = read_stdin("Enter server ip: ".to_string());//e.g. 213.47.107.152:1337
|
let mut server_ip = read_stdin("Enter server ip: ".to_string());//e.g. 213.47.107.152:1337
|
||||||
if server_ip == "" {
|
if server_ip == "" {
|
||||||
@ -119,6 +137,7 @@ fn main() {
|
|||||||
let mut server_hash = [0u8; 64];
|
let mut server_hash = [0u8; 64];
|
||||||
let mut server_hash_received = false;
|
let mut server_hash_received = false;
|
||||||
|
|
||||||
|
loop {
|
||||||
//receive the packets
|
//receive the packets
|
||||||
while received_packets < packet_info.packet_numbers-1 || !server_hash_received {
|
while received_packets < packet_info.packet_numbers-1 || !server_hash_received {
|
||||||
let mut buffer = [0u8; MAX_FRAME_PAYLOAD_U];
|
let mut buffer = [0u8; MAX_FRAME_PAYLOAD_U];
|
||||||
@ -225,13 +244,15 @@ fn main() {
|
|||||||
for i in 0..packets.len() {
|
for i in 0..packets.len() {
|
||||||
crc32.update(&packets[i]);
|
crc32.update(&packets[i]);
|
||||||
if packet_hashes[i] != crc32.clone().finalize() && packet_hashes[i] != 0 {
|
if packet_hashes[i] != crc32.clone().finalize() && packet_hashes[i] != 0 {
|
||||||
println!("Packet {} crc does not match, writing .corrupt", i);
|
println!("Packet {} crc does not match, requesting again", i);
|
||||||
//TODO: Request packets again
|
received_packets -= 1;
|
||||||
let mut file = std::fs::File::create("received/".to_string()+filename+".corrupt").expect("Failed to create file");
|
packet_hashes[i] = 0;
|
||||||
for i in 0..packets.len() {
|
packets[i] = Vec::new();
|
||||||
file.write_all(&packets[i]).expect("Failed to write to file");
|
|
||||||
}
|
}
|
||||||
return;
|
}
|
||||||
|
|
||||||
|
if received_packets == packet_info.packet_numbers-1 && server_hash_received {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
70
rust/server/Cargo.lock
generated
70
rust/server/Cargo.lock
generated
@ -11,6 +11,12 @@ dependencies = [
|
|||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "autocfg"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bincode"
|
name = "bincode"
|
||||||
version = "1.3.3"
|
version = "1.3.3"
|
||||||
@ -96,6 +102,8 @@ dependencies = [
|
|||||||
"bincode",
|
"bincode",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"crc32fast",
|
"crc32fast",
|
||||||
|
"num-bigint",
|
||||||
|
"rand",
|
||||||
"regex",
|
"regex",
|
||||||
"serde",
|
"serde",
|
||||||
"sha2",
|
"sha2",
|
||||||
@ -113,6 +121,42 @@ version = "2.5.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-bigint"
|
||||||
|
version = "0.4.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-integer"
|
||||||
|
version = "0.1.45"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-traits"
|
||||||
|
version = "0.2.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ppv-lite86"
|
||||||
|
version = "0.2.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.59"
|
version = "1.0.59"
|
||||||
@ -131,6 +175,32 @@ dependencies = [
|
|||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand"
|
||||||
|
version = "0.8.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||||
|
dependencies = [
|
||||||
|
"rand_chacha",
|
||||||
|
"rand_core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_chacha"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||||
|
dependencies = [
|
||||||
|
"ppv-lite86",
|
||||||
|
"rand_core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_core"
|
||||||
|
version = "0.6.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.8.3"
|
version = "1.8.3"
|
||||||
|
@ -12,6 +12,8 @@ byteorder = { default-features = false, version = "1.4.3" }
|
|||||||
sha2 = { default-features = false, version = "0.10.6" }
|
sha2 = { default-features = false, version = "0.10.6" }
|
||||||
regex = { default-features = true, version = "1.8.3" }
|
regex = { default-features = true, version = "1.8.3" }
|
||||||
crc32fast = { default-features = false, version = "1.3.2" }
|
crc32fast = { default-features = false, version = "1.3.2" }
|
||||||
|
rand = { default-features = false, features = ["std_rng"], version = "0.8.5" }
|
||||||
|
num-bigint = { default-features = true, version = "0.4.3" }
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
lto = true # Enable link-time optimization
|
lto = true # Enable link-time optimization
|
||||||
|
@ -4,6 +4,8 @@ use serde::{Serialize, Deserialize};
|
|||||||
use sha2::{Digest,Sha512};
|
use sha2::{Digest,Sha512};
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use crc32fast;
|
use crc32fast;
|
||||||
|
use rand::{rngs::StdRng, RngCore, SeedableRng};
|
||||||
|
use num_bigint::BigUint;
|
||||||
|
|
||||||
mod big_array;
|
mod big_array;
|
||||||
use big_array::BigArray;
|
use big_array::BigArray;
|
||||||
@ -36,6 +38,18 @@ struct StrPacket {
|
|||||||
payload: [u8; MAX_PAYLOAD_U]
|
payload: [u8; MAX_PAYLOAD_U]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn pow_mod(num: BigUint, pow: BigUint, modulo: BigUint) -> BigUint {
|
||||||
|
let mut result = BigUint::from(1u8);
|
||||||
|
let one = BigUint::from(1u8);
|
||||||
|
let mut i = BigUint::from(0u8);
|
||||||
|
while i < pow {
|
||||||
|
result = (result * &num) % &modulo;
|
||||||
|
i += &one;
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let port = "1337";
|
let port = "1337";
|
||||||
let timeout = 100; //ms
|
let timeout = 100; //ms
|
||||||
|
Loading…
x
Reference in New Issue
Block a user