package crypt

import "github.com/tredoe/osutil/user/crypt"

Package crypt provides interface for password crypt functions and collects common constants.

Index

Variables

var ErrKeyMismatch = errors.New("hashed value is not the hash of the given password")

Functions

func RegisterCrypt

func RegisterCrypt(c Crypt, f func() Crypter, prefix string)

RegisterCrypt registers a function that returns a new instance of the given crypt function. This is intended to be called from the init function in packages that implement crypt functions.

Types

type Crypt

type Crypt uint

Crypt identifies a crypt function that is implemented in another package.

const (
	APR1   Crypt = iota + 1 // import "github.com/tredoe/osutil/user/crypt/apr1_crypt"
	MD5                     // import "github.com/tredoe/osutil/user/crypt/md5_crypt"
	SHA256                  // import "github.com/tredoe/osutil/user/crypt/sha256_crypt"
	SHA512                  // import "github.com/tredoe/osutil/user/crypt/sha512_crypt"

)

type Crypter

type Crypter interface {
	// Generate performs the hashing algorithm, returning a full hash suitable
	// for storage and later password verification.
	//
	// If the salt is empty, a randomly-generated salt will be generated with a
	// length of SaltLenMax and number RoundsDefault of rounds.
	//
	// Any error only can be got when the salt argument is not empty.
	Generate(key, salt []byte) (string, error)

	// Verify compares a hashed key with its possible key equivalent.
	// Returns nil on success, or an error on failure; if the hashed key is
	// diffrent, the error is "ErrKeyMismatch".
	Verify(hashedKey string, key []byte) error

	// Cost returns the hashing cost (in rounds) used to create the given hashed
	// key.
	//
	// When, in the future, the hashing cost of a key needs to be increased in
	// order to adjust for greater computational power, this function allows one
	// to establish which keys need to be updated.
	//
	// The algorithms based in MD5-crypt use a fixed value of rounds.
	Cost(hashedKey string) (int, error)

	// SetSalt sets a different salt. It is used to easily create derivated
	// algorithms, i.e. "apr1_crypt" from "md5_crypt".
	SetSalt(salt common.Salt)
}

Crypter is the common interface implemented by all crypt functions.

func New

func New(c Crypt) Crypter

New returns a new crypter.

func NewFromHash

func NewFromHash(hashedKey string) Crypter

NewFromHash returns a new Crypter using the prefix in the given hashed key.

Source Files

crypt.go

Directories

PathSynopsis
user/crypt/apr1_cryptPackage apr1_crypt implements the standard Unix MD5-crypt algorithm created by Poul-Henning Kamp for FreeBSD, and modified by the Apache project.
user/crypt/commonPackage common contains routines used by multiple password hashing algorithms.
user/crypt/md5_cryptPackage md5_crypt implements the standard Unix MD5-crypt algorithm created by Poul-Henning Kamp for FreeBSD.
user/crypt/sha256_cryptPackage sha256_crypt implements Ulrich Drepper's SHA256-crypt password hashing algorithm.
user/crypt/sha512_cryptPackage sha512_crypt implements Ulrich Drepper's SHA512-crypt password hashing algorithm.
Version
v1.5.0 (latest)
Published
Jun 4, 2024
Platform
linux/amd64
Imports
3 packages
Last checked
1 day ago

Tools for package owners.