func NewMasked(profile HashProfile) (*Profile, error) {
	var p Profile
	var err error
	switch profile {
	case Argon2idDefault, Argon2idParanoid, ScryptDefault, ScryptParanoid:
		mparams := params[profile]
		switch v := mparams.(type) {
		case ScryptParams:
			v.Masked = true
			p = Profile{
				t:      profile,
				params: v,
			}
		case Argon2Params:
			v.Masked = true
			p = Profile{
				t:      profile,
				params: v,
			}
		}
	default:
		err = ErrUnsupported
	}
	return &p, err
}
NewMasked instanciates a new masked Profile.
"masked" translate to the fact that no hash parameters will be provided in
the resulting hash.
package passwd
import (
	"fmt"
)
type HashProfile int
const (
	Argon2idDefault HashProfile = iota
	Argon2idParanoid
	ScryptDefault
	ScryptParanoid
	BcryptDefault
	BcryptParanoid
	Argon2Custom  
	ScryptCustom  
	BcryptCustom  
)
var (
	params = map[HashProfile]interface{}{
		Argon2idDefault:  argonCommonParameters,
		Argon2idParanoid: argonParanoidParameters,
		ScryptDefault:    scryptCommonParameters,
		ScryptParanoid:   scryptParanoidParameters,
		BcryptDefault:    bcryptCommonParameters,
		BcryptParanoid:   bcryptParanoidParameters,
	}
)
type Profile struct {
	t      HashProfile  
	params interface{}  
}
func New(profile HashProfile) (*Profile, error) {
	var p Profile
	switch profile {
	case Argon2idDefault, Argon2idParanoid, ScryptDefault, ScryptParanoid, BcryptDefault, BcryptParanoid:
		p = Profile{
			t:      profile,
			params: params[profile],
		}
		return &p, nil
	}
	return nil, ErrUnsupported
}