Crate tripcode [−] [src]
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));
Reexports
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. |
FourchanNonescaping |
Same as |
Mona |
Generator for tripcodes on 2channel. |
Mona10 |
Generator for 2channel's 10-character tripcodes (10桁トリップ). |
Mona12 |
Generator for 2channel's 12-character tripcodes. |
Mona12Nonescaping |
Same as |
MonaNonescaping |
Same as |
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 |
Traits
TripcodeGenerator |
Trait for generators of tripcodes. |
TripcodeGeneratorFailable |
Trait for tripcode generators which may fail in generation. |