[][src]Enum iocutil::SampleHash

pub enum SampleHash {
    Sha1(String),
    Sha256(String),
    Md5(String),
}

manage a hash value (sha256/sha1/md5)

Variants

Sha1(String)
Sha256(String)
Md5(String)

Methods

impl SampleHash[src]

pub fn new(hash: impl AsRef<str>) -> Result<Self, Error>[src]

new SampleHash from md5/sha1/sha256 string

pub fn map<T>(hashes: impl IntoIterator<Item = impl TryInto<SampleHash>>) -> T where
    T: FromIterator<Result<SampleHash, Error>>, 
[src]

map strings to SampleHash try_map is a better way if you want to map to Result (like Result<Vec<_>, _>).

Example

use iocutil::prelude::*;

let hashes = vec![
        "d41d8cd98f00b204e9800998ecf8427e",
        "invalid_hash"
    ];

let r1: Result<Vec<_>, _> = SampleHash::map(&hashes);

assert!(r1.is_err());

let r2: Vec<Result<_, _>> = SampleHash::map(&hashes);

assert_eq!(r2.len(), 2);
assert!(r2.iter().nth(0).unwrap().is_ok());
assert!(r2.iter().nth(1).unwrap().is_err());

pub fn try_map<T>(
    hashes: impl IntoIterator<Item = impl TryInto<SampleHash>>
) -> Result<T, Error> where
    T: FromIterator<SampleHash>, 
[src]

try map strings to SampleHash

Example

use iocutil::prelude::*;
use std::collections::HashSet;

let hashes1 = vec![
    "d41d8cd98f00b204e9800998ecf8427e",
    "d41d8cd98f00b204e9800998ecf8427e"
];

let r1: HashSet<_> = SampleHash::try_map(hashes1).expect("failed to map");
assert_eq!(r1.len(), 1);
assert!(r1.contains(&sample!("d41d8cd98f00b204e9800998ecf8427e")));

let hashes2 = vec![
    "d41d8cd98f00b204e9800998ecf8427e",
    "invalid_hash"
];

let r2: Result<HashSet<_>, _> = SampleHash::try_map(&hashes2);
assert!(r2.is_err());

pub fn uniquify<T>(
    hashes: impl IntoIterator<Item = impl TryInto<SampleHash>>
) -> T where
    T: FromIterator<SampleHash>, 
[src]

uniquify the hashes

Example

use iocutil::prelude::*;

let twice = vec![
    "d41d8cd98f00b204e9800998ecf8427e",
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    // uniquify case-insensitive
    "D41D8CD98F00B204E9800998ECF8427E",
    "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709",
    "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
    "a", // please note that invalid hashes are ignored
];

let uniqued: Vec<_> = SampleHash::uniquify(twice);
assert_eq!(uniqued.len(), 3);
assert!(uniqued.contains(&sample!("d41d8cd98f00b204e9800998ecf8427e")));
assert!(uniqued.contains(&sample!("da39a3ee5e6b4b0d3255bfef95601890afd80709")));
assert!(uniqued.contains(&sample!("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")));

pub fn find<T>(text: impl AsRef<str>) -> T where
    T: FromIterator<SampleHash>, 
[src]

find unique hashes in specified text

Example

use iocutil::prelude::*;

let txt = r#"d41d8cd98f00b204e9800998ecf8427e,da39a3ee5e6b4b0d3255bfef95601890afd80709,e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
D41D8CD98F00B204E9800998ECF8427E,DA39A3EE5E6B4B0D3255BFEF95601890AFD80709,E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855
"#;
let hashes: Vec<_> = SampleHash::find(txt);
// it scrapes unique hashes (ignore-case)
assert_eq!(hashes.len(), 3);

pub fn scrape<T>(url: impl AsRef<str>) -> Result<T, Error> where
    T: FromIterator<SampleHash>, 
[src]

scrape hashes from specified url

Example

This example is not tested
use iocutil::prelude::*;

let hashes: std::collections::HashSet<_> = SampleHash::scrape("https://www.malware-traffic-analysis.net/2019/05/20/index.html").expect("failed to scrape https://www.malware-traffic-analysis.net/2019/05/20/index.html");
assert_eq!(hashes.len(), 2);
assert!(hashes.contains(&sample!("7f335f990851510ab9654e9fc1add2acec2c38a64563b711031769c58ecd45c0")));
assert!(hashes.contains(&sample!("5a7042e698ce8e5cf6c4615e41a4205a52d9bb18a6ff214a967724c866cb72b4")));

Trait Implementations

impl AsRef<str> for SampleHash[src]

impl Into<String> for SampleHash[src]

impl Clone for SampleHash[src]

impl Eq for SampleHash[src]

impl PartialEq<SampleHash> for SampleHash[src]

impl Display for SampleHash[src]

impl Debug for SampleHash[src]

impl<'_> TryFrom<&'_ str> for SampleHash[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'_, '_> TryFrom<&'_ &'_ str> for SampleHash[src]

type Error = Error

The type returned in the event of a conversion error.

impl TryFrom<String> for SampleHash[src]

type Error = Error

The type returned in the event of a conversion error.

impl<'_> TryFrom<&'_ String> for SampleHash[src]

type Error = Error

The type returned in the event of a conversion error.

impl FromStr for SampleHash[src]

type Err = Error

The associated error which can be returned from parsing.

impl Hash for SampleHash[src]

impl StructuralPartialEq for SampleHash[src]

impl StructuralEq for SampleHash[src]

Auto Trait Implementations

Blanket Implementations

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> From<T> for T[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<Q, K> Equivalent<K> for Q where
    K: Borrow<Q> + ?Sized,
    Q: Eq + ?Sized
[src]

impl<'a, T> TryFrom<&'a str> for T where
    T: FromStr

type Err = <T as FromStr>::Err

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 

type Err = <U as TryFrom<T>>::Err