1package argon2
2
3// #cgo pkg-config: libargon2
4// #include <argon2.h>
5import "C"
6
7import (
8	"errors"
9	"fmt"
10)
11
12// Error represents the internal error code propagated from libargon2.
13type Error int
14
15func (e Error) Error() string {
16	msg := C.argon2_error_message(C.int(e))
17	return fmt.Sprintf("argon2: %s", C.GoString(msg))
18}
19
20var (
21	ErrContext  = errors.New("argon2: context is nil")
22	ErrPassword = errors.New("argon2: password is nil or empty")
23	ErrSalt     = errors.New("argon2: salt is nil or empty")
24	ErrHash     = errors.New("argon2: hash is nil or empty")
25)
26
27var (
28	ErrOutputPtrNull         Error = C.ARGON2_OUTPUT_PTR_NULL
29	ErrOutputTooShort        Error = C.ARGON2_OUTPUT_TOO_SHORT
30	ErrOutputTooLong         Error = C.ARGON2_OUTPUT_TOO_LONG
31	ErrPwdTooShort           Error = C.ARGON2_PWD_TOO_SHORT
32	ErrPwdTooLong            Error = C.ARGON2_PWD_TOO_LONG
33	ErrSaltTooShort          Error = C.ARGON2_SALT_TOO_SHORT
34	ErrSaltTooLong           Error = C.ARGON2_SALT_TOO_LONG
35	ErrAdTooShort            Error = C.ARGON2_AD_TOO_SHORT
36	ErrAdTooLong             Error = C.ARGON2_AD_TOO_LONG
37	ErrSecretTooShort        Error = C.ARGON2_SECRET_TOO_SHORT
38	ErrSecretTooLong         Error = C.ARGON2_SECRET_TOO_LONG
39	ErrTimeTooSmall          Error = C.ARGON2_TIME_TOO_SMALL
40	ErrTimeTooLarge          Error = C.ARGON2_TIME_TOO_LARGE
41	ErrMemoryTooLittle       Error = C.ARGON2_MEMORY_TOO_LITTLE
42	ErrMemoryTooMuch         Error = C.ARGON2_MEMORY_TOO_MUCH
43	ErrLanesTooFew           Error = C.ARGON2_LANES_TOO_FEW
44	ErrLanesTooMany          Error = C.ARGON2_LANES_TOO_MANY
45	ErrPwdPtrMismatch        Error = C.ARGON2_PWD_PTR_MISMATCH
46	ErrSaltPtrMismatch       Error = C.ARGON2_SALT_PTR_MISMATCH
47	ErrSecretPtrMismatch     Error = C.ARGON2_SECRET_PTR_MISMATCH
48	ErrAdPtrMismatch         Error = C.ARGON2_AD_PTR_MISMATCH
49	ErrMemoryAllocationError Error = C.ARGON2_MEMORY_ALLOCATION_ERROR
50	ErrFreeMemoryCbkNull     Error = C.ARGON2_FREE_MEMORY_CBK_NULL
51	ErrAllocateMemoryCbkNull Error = C.ARGON2_ALLOCATE_MEMORY_CBK_NULL
52	ErrIncorrectParameter    Error = C.ARGON2_INCORRECT_PARAMETER
53	ErrIncorrectType         Error = C.ARGON2_INCORRECT_TYPE
54	ErrOutPtrMismatch        Error = C.ARGON2_OUT_PTR_MISMATCH
55	ErrThreadsTooFew         Error = C.ARGON2_THREADS_TOO_FEW
56	ErrThreadsTooMany        Error = C.ARGON2_THREADS_TOO_MANY
57	ErrMissingArgs           Error = C.ARGON2_MISSING_ARGS
58	ErrEncodingFail          Error = C.ARGON2_ENCODING_FAIL
59	ErrDecodingFail          Error = C.ARGON2_DECODING_FAIL
60	ErrThreadFail            Error = C.ARGON2_THREAD_FAIL
61	ErrDecodingLengthFail    Error = C.ARGON2_DECODING_LENGTH_FAIL
62	ErrVerifyMismatch        Error = C.ARGON2_VERIFY_MISMATCH
63)
64