sophuwu.site > goauth   
              64
            
             package goauth

// SecurityLevelAccessible - Lower security level but easier to use
//
//	This will give 60 seconds for the user to write 6 digits. Its aim is to help
//	people with difficulties using a computer by allowing them more time to type.
//	The actual security implications are minimal.
const SecurityLevelAccessible = 0

// SecurityLevelDefault - Default security level used everywhere
//
//	This will give 30 seconds for the user to write 6 digits. This is the same as
//	the default for Google Authenticator.
const SecurityLevelDefault = 1

// SecurityLevelCozyHigh - Higher security but more time for the user
//
//	This will give 60 seconds for the user to write 10 digits. This offers a
//	slight security improvement. While remaining easier to use than other levels.
const SecurityLevelCozyHigh = 2

// SecurityLevelHigh - Same as default but with double the digits
//
//	With this you will get 30 seconds to write 12 digits. This is significantly
//	harder to brute force than the default level. This is the highest level
//	recommended for general use.
const SecurityLevelHigh = 3

// SecurityLevelRealTime - Extremely long password with very little time
//
//	Gives 5 seconds to write 15 digits. Intended for computers and application
//	interface use for automated task. May be useful for authentication of
//	unattended systems with less risk of being intercepted.
const SecurityLevelRealTime = 4

// securityLevel is a bitfield of the security levels
// each level is 8 bits long and contains another bitfield for the length
// of the password and the time allowed to enter it, allowing customisation
// ease of use and security
const securityLevel = uint64(uint64((15<<2)|0b00)<<(8*4) | uint64((12<<2)|0b01)<<(8*3) | uint64((10<<2)|0b10)<<(8*2) | uint64((6<<2)|0b01)<<8 | uint64((6<<2)|0b10))

// getSecurityLevel returns the number of digits and seconds allowed for a security level
func getSecurityLevel(i int) (int, int, error) {

	if i > 4 || i < 0 {
		return 0, 0, Error("invalid security level")
	}
	u := (securityLevel & (255 << (8 * uint64(i)))) >> (8 * uint64(i))
	x := int(u & 0b11)
	return int(u >> 2), (x*x*25)/10 + (225*x)/10 + 5, nil
}

func Error(text string) error {
	return &errorString{text}
}

// errorString is a trivial implementation of error.
type errorString struct {
	s string
}

func (e *errorString) Error() string {
	return e.s
}