...

Package crypt

import "edge-infra.dev/pkg/lib/crypto/osutilcrypt"
Overview
Index
Subdirectories

Overview ▾

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

Variables

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

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.

type Crypt

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

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

)

type Crypter

Crypter is the common interface implemented by all crypt functions.

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
    // different, 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)
}

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.

Subdirectories

Name Synopsis
..
common
sha512 Package sha512_crypt implements Ulrich Drepper's SHA512-crypt password hashing algorithm.