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.1"

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 function 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

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.