Crate tripcode

Source
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.
FourchanNonescaping
Same as Fourchan and Mona10 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.
Mona12Nonescaping
Same as Mona12 except that it does not escape HTML special characters in passwords.
MonaNonescaping
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§

TripcodeGenerator
Trait for generators of tripcodes.
TripcodeGeneratorFailable
Trait for tripcode generators which may fail in generation.