onetime: github.com/dchapes/onetime Index | Examples | Files

package onetime

import "github.com/dchapes/onetime"

Package onetime provides a library for one-time password generation, implementing the HOTP and TOTP algorithms as specified by IETF RFC-4226 and RFC-6238.

Code:

// Google authenticator style 8-digit TOTP code:
var secret = []byte("SOME_SECRET")
var otp, _ = onetime.Simple(8)
var code = otp.TOTP(secret)
fmt.Println(code)

Code:

// 9-digit 5-second-step TOTP starting on midnight 2000-01-01 UTC, using SHA-256:

var secret = []byte("SOME_SECRET")
const ts = 5 * time.Second
var t = time.Date(2000, time.January, 1, 0, 0, 0, 0, time.UTC)
var otp = onetime.OneTimePassword{Digit: 9, TimeStep: ts, BaseTime: t, Hash: sha256.New}
var code = otp.TOTP(secret)
fmt.Println(code)

Code:

// Simple 6-digit HOTP code:
var secret = []byte("SOME_SECRET")
var counter uint64 = 123456
var otp, _ = onetime.Simple(6)
var code = otp.HOTP(secret, counter)
fmt.Println(code)

Output:

260040

Index

Examples

Package Files

onetime.go

type OneTimePassword Uses

type OneTimePassword struct {
    Digit    int              // Length of code generated
    TimeStep time.Duration    // Length of each time step for TOTP
    BaseTime time.Time        // The start time for TOTP step calculation
    Hash     func() hash.Hash // Hash algorithm used with HMAC
}

OneTimePassword stores the configuration values relevant to HOTP/TOTP calculations.

func Simple Uses

func Simple(digit int) (otp OneTimePassword, err error)

Simple returns a new OneTimePassword with the specified HTOP code length, SHA-1 as the HMAC hash algorithm, the Unix epoch as the base time, and 30 seconds as the step length.

func (*OneTimePassword) HOTP Uses

func (otp *OneTimePassword) HOTP(secret []byte, count uint64) uint

HOTP returns a HOTP code with the given secret and counter.

func (*OneTimePassword) TOTP Uses

func (otp *OneTimePassword) TOTP(secret []byte) uint

TOTP returns a TOTP code calculated with the current time and the given secret.

Package onetime imports 7 packages (graph). Updated 2016-07-21. Refresh now. Tools for package owners. This is an inactive package (no imports and no commits in at least two years).