Standard Library
Authentication (auth)

Authentication Module

The auth module provides bcrypt password hashing for secure authentication.

funcs

auth.hash()

Hash a password with bcrypt:

let password = "mySecurePassword123";
let hash = auth.hash(password);
print(hash);  // $2a$10$... (bcrypt hash)

auth.verify()

Verify a password against a hash:

let password = "mySecurePassword123";
let hash = auth.hash(password);
 
let is_valid = auth.verify(password, hash);
print(is_valid);  // true
 
let is_wrong = auth.verify("wrongPassword", hash);
print(is_wrong);  // false

User Authentication System

let users_db = {};
 
func register_user(username, password, email) {
    if (username in users_db) {
        return false;  // User exists
    }
    
    users_db[username] = {
        "email": email,
        "password_hash": auth.hash(password),
        "created_at": "2024-12-12"
    };
    
    return true;
}
 
func login_user(username, password) {
    if (!(username in users_db)) {
        return false;  // User not found
    }
    
    let stored_hash = users_db[username]["password_hash"];
    return auth.verify(password, stored_hash);
}
 
// Register
register_user("alice", "password123", "alice@example.com");
 
// Login
if (login_user("alice", "password123")) {
    print("Login successful!");
} else {
    print("Invalid credentials");
}

With Database

let db = sqlite.open("users.db");
 
sqlite.exec(db, "CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    username TEXT UNIQUE,
    password_hash TEXT,
    email TEXT
)");
 
func register(db, username, password, email) {
    let hash = auth.hash(password);
    let sql = "INSERT INTO users (username, password_hash, email) VALUES ('" + 
              username + "', '" + hash + "', '" + email + "')";
    sqlite.exec(db, sql);
}
 
func authenticate(db, username, password) {
    let sql = "SELECT password_hash FROM users WHERE username = '" + username + "'";
    let results = sqlite.query(db, sql);
    
    if (len(results) == 0) {
        return false;
    }
    
    return auth.verify(password, results[0]["password_hash"]);
}
 
// Usage
register(db, "bob", "securePass456", "bob@example.com");
if (authenticate(db, "bob", "securePass456")) {
    print("Authentication successful");
}
 
sqlite.close(db);

Best Practices

  • Never store plaintext passwords
  • Always hash passwords before storing
  • Use bcrypt (not MD5 or SHA1)
  • Implement rate limiting for login attempts
  • Use strong password requirements

Next Steps