#!/usr/bin/python
from slides import URL, Bullet, Slide, SubBullet
from twslides import Lecture

lecture = Lecture(
    "Twisted Conch: SSH in Python",
    Slide(
        "Introduction",
    ),
    Slide(
        "Other implementations (servers)",
        Bullet(
            "OpenSSH",
            SubBullet(URL("http://www.openssh.org")),
        ),
        Bullet(
            "FSecure SSH",
            SubBullet(URL("http://www.f-secure.com/products/ssh/")),
        ),
        Bullet(
            "LSH",
            SubBullet(URL("http://www.lysator.liu.se/~nisse/lsh/")),
        ),
    ),
    Slide(
        "Other implementations (clients)",
        Bullet(
            "PuTTY",
            SubBullet(URL("http://www.chiark.greenend.org.uk/~sgtatham/putty/")),
        ),
        Bullet(
            "TeraTerm",
            SubBullet(URL("http://www.ayera.com/teraterm/")),
        ),
        Bullet(
            "MindTerm",
            SubBullet(URL("http://www.appgate.com/mindterm/")),
        ),
    ),
    Slide(
        "Why Twisted?",
        Bullet("Asynchronous"),
        Bullet("Python"),
        Bullet("High-Level"),
    ),
    Slide(
        "No Forking or Threads",
        Bullet("Forking is expensive"),
        Bullet("Threads are complicated/expensive, esp. in Python"),
        Bullet("Asynch means no worrying about any of that"),
        Bullet("Makes running a session 2x as fast in Conch as in OpenSSH"),
    ),
    Slide(
        "Security - No Pointers",
        SubBullet("No buffer overflows"),
        SubBullet("No off-by-1 errors"),
        SubBullet("No malloc/free bugs"),
        SubBullet("No arbitrary code execution"),
    ),
    Slide(
        "Security - High Level",
        Bullet("Strong built-in library"),
        Bullet("Exceptions"),
    ),
    Slide(
        "Security - Not Root",
        Bullet("Limits vulnerablity in a compromise"),
        Bullet("Allows use of process limits/etc."),
    ),
    Slide(
        "Interfacing with other software",
        Bullet(
            "OpenSSH interacts only through separate processes",
            SubBullet("Expensive"),
            SubBullet("Complicated"),
        ),
        Bullet(
            "Conch can interact in-process",
            SubBullet("Faster"),
            SubBullet("Easy integration to other Twisted and Python libraries"),
        ),
    ),
    Slide(
        "Speed",
        Bullet("C is faster than Python"),
        Bullet("Interpreter cost is high for the client"),
        Bullet("FSH-style connection caching helps a bit"),
        Bullet("Psyco helps as well"),
    ),
    Slide(
        "Age",
        Bullet(
            "Conch is new",
            SubBullet("First commit was July 15, 2002"),
        ),
        Bullet("Hasn't had a security aduit"),
        Bullet("Shouldn't be used in security-critical systems"),
    ),
    Slide(
        "Applications with Conch",
        Bullet("Reality: MUD framework"),
        Bullet("Insults: async. replacement for curses in Conch apps"),
    ),
    Slide(
        "Future Directions",
        Bullet("Generic authentication forwarding"),
        Bullet("Work on applications"),
        Bullet("Auditing of the code"),
        Bullet("Increase speed"),
        Bullet("SFTP/SCP"),
        Bullet("Key Agent"),
        Bullet("DNSSEC"),
    ),
    Slide(
        "Conclusion",
        Bullet("Working implementation in Python"),
        Bullet("Much room for improvement"),
    ),
)

lecture.renderHTML(".", "conch-%d.html", css="main.css")
