An open API service indexing awesome lists of open source software.

https://github.com/navbytes/totp-turbo

High-performance TypeScript library for generating TOTP tokens using Rust backend
https://github.com/navbytes/totp-turbo

2fa authentication otp rust security totp typescript wasm

Last synced: about 2 months ago
JSON representation

High-performance TypeScript library for generating TOTP tokens using Rust backend

Awesome Lists containing this project

README

          

# totp-turbo

A high-performance TypeScript library for generating Time-based One-Time Passwords (TOTP) using a Rust backend for cryptographic operations.

## Features

- 🚀 **High Performance**: Rust-powered cryptographic operations via WebAssembly
- 🔒 **Secure**: RFC 6238 compliant TOTP implementation
- 📱 **Cross-platform**: Works in browsers and Node.js
- 🎯 **Type-safe**: Full TypeScript support with comprehensive type definitions
- âš¡ **Fast**: Sub-millisecond token generation
- 🔧 **Flexible**: Multiple algorithms (SHA1, SHA256, SHA512) and configurations

## Installation

```bash
npm install totp-turbo
```

## Quick Start

### Object-based API (Recommended for repeated use)
```typescript
import { TotpGenerator } from 'totp-turbo';

// Create a generator with your secret and configuration
const totp = new TotpGenerator({
secret: 'JBSWY3DPEHPK3PXP',
digits: 6,
period: 30,
algorithm: 'SHA1'
});

// Generate tokens anytime
const token = totp.generate();
console.log(`Current TOTP: ${token}`);

// Verify tokens
const isValid = totp.verify('123456');
console.log(`Token valid: ${isValid}`);
```

### Direct static methods (For one-off generation)
```typescript
import { Totp } from 'totp-turbo';

// Generate directly from secret
const token = Totp.generate('JBSWY3DPEHPK3PXP');
console.log(`Current TOTP: ${token}`);

// With custom options
const customToken = Totp.generate('JBSWY3DPEHPK3PXP', {
digits: 8,
algorithm: 'SHA512',
period: 60
});
```

## Configuration Options

```typescript
interface TotpConfig {
secret: string; // Base32 encoded secret
digits?: number; // Token length 4-8 digits (default: 6)
period?: number; // Time step in seconds (default: 30)
algorithm?: 'SHA1' | 'SHA256' | 'SHA512'; // Hash algorithm (default: SHA1)
skew?: number; // Clock skew tolerance (default: 1)
explicitZeroPad?: boolean; // Explicitly pad with zeros (default: true)
timestamp?: number; // Custom timestamp in milliseconds (default: current time)
}
```

## API Reference

### TotpGenerator Class

```typescript
class TotpGenerator {
constructor(config: TotpConfig);

// Instance methods
generate(): string;
generateAt(timestamp: number): string;
verify(token: string): boolean;
verifyWithSkew(token: string, skew: number): boolean;
generateUri(issuer: string, accountName: string): string;

// Static utilities
static generateSecret(): string;
static parseUri(uri: string): TotpConfig;
}
```

### Totp Static Class

```typescript
class Totp {
// Direct generation methods
static generate(secret: string, options?: Partial): string;
static generateAt(secret: string, timestamp: number, options?: Partial): string;
static verify(secret: string, token: string, options?: Partial): boolean;
static verifyWithSkew(secret: string, token: string, skew: number, options?: Partial): boolean;

// Utility methods
static generateSecret(): string;
static parseUri(uri: string): TotpConfig;
static createUri(secret: string, issuer: string, accountName: string, options?: Partial): string;
}
```

## Examples

### Google Authenticator Compatibility
```typescript
// Generate a secret
const secret = TotpGenerator.generateSecret();

// Create QR code URI
const uri = totp.generateUri('MyApp', 'user@example.com');
console.log(uri); // otpauth://totp/MyApp:user@example.com?secret=...
```

### Different Algorithms and Periods
```typescript
// SHA-512 with 8 digits
const token = Totp.generate('JBSWY3DPEHPK3PXP', {
algorithm: 'SHA512',
digits: 8
});

// 60-second period
const token60s = Totp.generate('JBSWY3DPEHPK3PXP', {
period: 60
});

// Token for specific timestamp
const historicalToken = Totp.generate('JBSWY3DPEHPK3PXP', {
timestamp: 1465324707000
});
```

## Performance

- Token generation: < 1ms
- WASM module size: < 50KB gzipped
- Memory usage: < 1MB runtime footprint

## Browser Compatibility

- Chrome 67+
- Firefox 61+
- Safari 11+
- Node.js 12+

## License

MIT License

## Contributing

We welcome contributions! Please see our contributing guidelines for details.