Expand description
§Tripcode
A library for generating tripcodes on textboards and imageboards.
§Compatibility
This crate is compatible with tripcodes of the following formats:
- 4chan’s normal (non-secure) tripcode
- 2channel’s tripcodes:
- 10-character tripcode (10桁トリップ)
- Nama key tripcode (生キートリップ)
- 12-character tripcode (12桁トリップ)
- 2ch.sc’s tripcodes:
- 15-character tripcode (15桁トリップ)
- Katakana tripcode (カタカナトリップ)
§Usage
Add tripcode
to the dependencies in your project’s Cargo.toml
:
[dependencies]
tripcode = "0.2"
and this to your crate root:
extern crate tripcode;
§Overview
Basic examples:
use tripcode::*;
let mut tripcode;
// 4chan's tripcode.
tripcode = Fourchan::generate("password");
assert_eq!("ozOtJW9BFA", &tripcode);
// The above method handles HTML escaping.
tripcode = Fourchan::generate("&\"");
assert_eq!("ydkX0LqkHM", &tripcode);
tripcode = FourchanNonescaping::generate("&"");
assert_eq!("ydkX0LqkHM", &tripcode);
// 2channel (Monazilla)'s tripcode. This method automatically selects the proper hashing algorithm.
tripcode = Mona::generate("7 bytes");
assert_eq!("W/RvZlE2K.", &tripcode);
tripcode = Mona::generate("twelve bytes");
assert_eq!("t+lnR7LBqNQY", &tripcode);
tripcode = Mona::generate("#1145145554560721..");
assert_eq!("14cvFmVHg2", &tripcode);
// 2channel's 10-character tripcode (10桁トリップ).
tripcode = Mona10::generate("password longer than 12 bytes");
assert_eq!("ozOtJW9BFA", &tripcode);
// 2channel's nama key tripcode (生キートリップ).
// This generator is failable so we use `try_generate()` method, which yields an `Option<String>`.
tripcode = MonaRaw::try_generate("#0123456789ABCDEF./").unwrap();
assert_eq!("IP9Lda5FPc", &tripcode);
// 2channel's 12-character tripcode (12桁トリップ).
tripcode = Mona12::generate("<12 bytes");
assert_eq!("/9L00Vb1PBcb", &tripcode);
§Handling non-UTF-8 passwords
Besides str
, the generate()
method can take any object that implements AsRef<[u8]>
so that it can handle non-UTF-8 passwords.
Here’s an example of generating a tripcode from a CP932 (superset of Shift-JIS) encoded password.
This example uses encoding
crate:
extern crate encoding;
extern crate tripcode;
use encoding::{Encoding, EncoderTrap};
use encoding::all::WINDOWS_31J;
use tripcode::*;
fn main() {
let mut tripcode = String::with_capacity(10);
let sjis = WINDOWS_31J.encode("トリップ", EncoderTrap::Strict).unwrap();
let tripcode = Fourchan::generate(&sjis);
assert_eq!("XSSH/ryx32", &tripcode);
}
§Avoiding reallocations
The append()
method takes a &mut String
and appends the resulting tripcode to it.
The method does not cause additional heap allocations if the buffer has sufficient capacity to
store the tripcode.
use tripcode::*;
// Prepare a buffer
let mut tripcode = String::with_capacity(20);
Fourchan::append("tripcode", &mut tripcode);
assert_eq!("3GqYIJ3Obs", &tripcode);
assert_eq!(tripcode.capacity(), 20);
Fourchan::append("TRIPCODE", &mut tripcode);
assert_eq!("3GqYIJ3ObsPvHEudHNso", &tripcode);
assert_eq!(tripcode.capacity(), 20); // No allocations have occured!
§Writing to streams
The write()
method takes a mutable reference to a Write
and writes the resulting tripcode
to it.
use std::io::Write;
use tripcode::*;
let mut tripcode = [0u8; 10];
// `&'a mut [u8]` implements `Write`.
Fourchan::write("Writing to stream", &mut (&mut tripcode as &mut [u8])).unwrap();
assert_eq!("N5MkEeXGtk", String::from_utf8_lossy(&tripcode));
Re-exports§
pub use FourchanNonescaping as Mona10Nonescaping;
Modules§
- hash
- Tools for handling lightweight hash values that can be encoded to/decoded from tripcodes.
Structs§
- Des
- Generator for DES-based tripcodes (4chan and 2channel’s 10-character tripcode) that accepts custom salt characters.
- Fourchan
- Generator for tripcodes on 4chan.
- Fourchan
Nonescaping - Same as
Fourchan
andMona10
except that it does not escape HTML special characters in passwords. - Mona
- Generator for tripcodes on 2channel.
- Mona10
- Generator for 2channel’s 10-character tripcodes (10桁トリップ).
- Mona12
- Generator for 2channel’s 12-character tripcodes.
- Mona12
Nonescaping - Same as
Mona12
except that it does not escape HTML special characters in passwords. - Mona
Nonescaping - Same as
Mona
except that it does not escape HTML special characters in passwords. - MonaRaw
- Generator for 2channel’s nama key tripcodes (生キートリップ).
- Sc
- Generator for tripcodes on 2ch.sc.
- Sc15
- Generator for 2ch.sc’s 15-character tripcodes (15桁トリップ).
- ScKatakana
- Generator for 2ch.sc’s katakana tripcodes (カタカナトリップ).
- ScSjis
- Same as
Sc
except that it treats passwords as Shift-JIS-encoded when generating katakana tripcodes.
Traits§
- Tripcode
Generator - Trait for generators of tripcodes.
- Tripcode
Generator Failable - Trait for tripcode generators which may fail in generation.