MCPcopy Index your code
hub / github.com/ThinkAlexandria/BoringAuth

github.com/ThinkAlexandria/BoringAuth @v0.9.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.9.0 ↗ · + Follow
153 symbols 555 edges 15 files 21 documented · 14%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

BoringAuth

Build Status BoringAuth on crates.io

BoringAuth is a collection of tools for user authentication. BoringAuth is a fork of LibreAuth that chooses to use the actively developed ring crypto crate over the dead rust-crypto crate for its crypto primitives.

Ring compatibility chart.

BoringAuth Ring
v0.6.4 0.12
v0.7.0 0.13

Features

  • Password / passphrase authentication
  • [x] no character-set limitation
  • [x] reasonable lenth limit (security vs. DOS)
  • [x] strong, evolutive and retro-compatible password derivation functions
  • [x] crypt() compatibility
  • HOTP - HMAC-based One-time Password Algorithm (OATH - RFC 4226)
  • [x] the key can be passed as bytes, an ASCII string, an hexadicimal string or a base32 string
  • [x] customizable counter
  • [x] customizable hash function (sha1, sha256, sha512)
  • [x] customizable output length
  • [x] customizable output alphabet
  • TOTP - Time-based One-time Password Algorithm (OATH - RFC 6238)
  • [x] the key can be passed as bytes, an ASCII string, an hexadicimal string or a base32 string
  • [x] customizable timestamp
  • [x] customizable period
  • [x] customizable initial time (T0)
  • [x] customizable hash function (sha1, sha256, sha512)
  • [x] customizable output length
  • [x] customizable output alphabet
  • [x] customizable positive and negative period tolerance
  • YubiKey OTP (Yubico)
  • [ ] virtual device API
  • [ ] client API
  • [ ] server API
  • U2F - Universal 2nd Factor (FIDO Alliance)
  • [ ] virtual device API
  • [ ] client API
  • [ ] server API

Using within a Rust project

You can find BoringAuth on crates.io and include it in your Cargo.toml:

boringauth = "*"

Using outside Rust

In order to build BoringAuth, you will need both the rust compiler and cargo.

$ git clone https://github.com/ThinkAlexandria/boringauth.git
$ cd boringauth
$ make
$ make install prefix=/usr

Quick examples

Rust

extern crate boringauth;
use boringauth::oath::TOTPBuilder;

let key = "GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ".to_string();
let code = TOTPBuilder::new()
    .base32_key(&key)
    .finalize()
    .unwrap()
    .generate();
assert_eq!(code.len(), 6);

C

#include <stdio.h>
#include <boringauth.h>

int main(void) {
  struct boringauth_totp_cfg cfg;
  char   code[7], key[] = "12345678901234567890";

  if (boringauth_totp_init(&cfg) != LIBREAUTH_OTP_SUCCESS) {
    return 1;
  }
  cfg.key = key;
  cfg.key_len = sizeof(key);
  if (boringauth_totp_generate(&cfg, code) != LIBREAUTH_OTP_SUCCESS) {
    return 2;
  }

  printf("%s\n", code);

  return 0;
}
$ cc -o totp totp.c -lboringauth
$ ./totp
848085

Python

from ctypes.util import find_library
from struct import Struct
from ctypes import *

class TOTPcfg(Structure):
    _fields_ = [
        ('key', c_char_p),
        ('key_len', c_size_t),
        ('timestamp', c_longlong),
        ('period', c_uint),
        ('initial_time', c_ulonglong),
        ('output_len', c_size_t),
        ('output_base', c_char_p),
        ('output_base_len', c_size_t),
        ('hash_function', c_int),
    ]

def get_totp():
    key = b'12345678901234567890'
    lib_path = find_library('boringauth') or 'target/release/libboringauth.so'
    lib = cdll.LoadLibrary(lib_path)
    cfg = TOTPcfg()
    if lib.boringauth_totp_init(byref(cfg)) != 0:
        return
    cfg.key_len = len(key)
    cfg.key = c_char_p(key)
    code = create_string_buffer(b'\000' * cfg.output_len)
    if lib.boringauth_totp_generate(byref(cfg), code) != 0:
        return
    return str(code.value, encoding="utf-8")

if __name__ == '__main__':
    code = get_totp()
    print('{}'.format(code))

Core symbols most depended-on inside this repo

finalize
called by 34
src/oath/hotp.rs
finalize
called by 33
src/oath/totp.rs
boringauth_hotp_generate
called by 24
src/oath/hotp.rs
boringauth_totp_is_valid
called by 20
src/oath/totp.rs
timestamp
called by 16
src/oath/totp.rs
generate
called by 13
src/oath/hotp.rs
generate
called by 12
src/oath/totp.rs
boringauth_totp_generate
called by 10
src/oath/totp.rs

Shape

Function 108
Method 27
Class 13
Enum 5

Languages

Rust83%
C13%
Python3%
C++1%

Modules by API surface

src/oath/totp.rs44 symbols
src/oath/hotp.rs43 symbols
src/pass/mod.rs21 symbols
tests/test_totp.c8 symbols
src/oath/mod.rs8 symbols
tests/test_hotp.c7 symbols
src/pass/phc_encoding.rs6 symbols
src/parser/hex.rs5 symbols
tests/boringauth_test.py4 symbols
tests/test_pass.c3 symbols
tests/test_boringauth.c2 symbols
include/boringauth.h2 symbols

For agents

$ claude mcp add BoringAuth \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact