blob: 64fa16cfdb7f23c92d1234f7ae5ff570284861cd (
plain) (
tree)
|
|
extern crate hex;
extern crate urlencoding;
use std::collections::HashMap;
use std::net::IpAddr;
use chrono::{DateTime, Utc};
use sha2::{Sha256, Digest};
use sha1::{Sha1};
enum Version {
V1,
V2,
Hybrid
}
struct Torrent {
name: String,
sha1: [u8; 20],
sha256: [u8; 32],
version: Version,
files: HashMap<String, u64>,
source: IpAddr,
date: DateTime<Utc>,
hostname: String,
software: String
}
impl Torrent {
fn magnet(&self) -> String {
let mut string = String::from("magnet:?dn=");
string.push_str(&urlencoding::encode(&self.name));
if matches!(self.version, Version::V1) || matches!(self.version, Version::Hybrid) {
string.push_str("&xt=urn:btih:");
string.push_str(&hex::encode(&self.sha1));
}
if matches!(self.version, Version::V2) || matches!(self.version, Version::Hybrid) {
string.push_str("&xt=urn:btmh:1220");
string.push_str(&hex::encode(&self.sha256));
}
string
}
}
fn main() {
let hash2 = Sha256::new().chain_update(b"test").finalize();
let hash1 = Sha1::new().chain_update(b"test").finalize();
println!("Hello, world! {:#?} {:#?}", hash2, hash1);
}
|