// Copyright 2015 Luke Shumaker . // // This is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as // published by the Free Software Foundation; either version 2 of // the License, or (at your option) any later version. // // The GNU General Public License's references to "object code" and // "executables" are to be interpreted to also include the output of // any document formatting or typesetting system, including // intermediate and printed output. // // This software is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public // License along with this manual; if not, see // . package hackers_git import "unsafe" /* #cgo LDFLAGS: -lcrypt #define _GNU_SOURCE // for crypt_r(3) in crypt.h #include // for free(3) #include // for crypt_r(3) #include // 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 }