diff options
Diffstat (limited to 'src/nshd/hackers_git/check_password.go')
-rw-r--r-- | src/nshd/hackers_git/check_password.go | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/nshd/hackers_git/check_password.go b/src/nshd/hackers_git/check_password.go new file mode 100644 index 0000000..c112641 --- /dev/null +++ b/src/nshd/hackers_git/check_password.go @@ -0,0 +1,29 @@ +package hackers_git + +import "unsafe" + +/* +#cgo LDFLAGS: -lcrypt +#define _GNU_SOURCE // for crypt_r(3) in crypt.h +#include <stdlib.h> // for free(3) +#include <crypt.h> // for crypt_r(3) +#include <string.h> // for strcmp(3) and memset(3) +int check_password(const char *password, const char *hash) +{ + int ret; + struct crypt_data data; + data.initialized = 0; + ret = (strcmp(crypt_r(password, hash, &data), hash) == 0); + memset(&data, 0, sizeof(data)); + return ret; +} +*/ +import "C" + +func check_password(password string, hash string) bool { + cpassword := C.CString(password) + defer C.free(unsafe.Pointer(cpassword)) + chash := C.CString(hash) + defer C.free(unsafe.Pointer(chash)) + return C.check_password(cpassword, chash) != 0 +} |