/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=2 et sw=2 tw=80: */ /* Copyright (c) 2014 D. Richard Hipp This program is free software; you can redistribute it and/or modify it under the terms of the Simplified BSD License (also known as the "2-Clause License" or "FreeBSD License".) This program 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. Author contact information: drh@hwaci.com http://www.hwaci.com/drh/ ***************************************************************************** This file contains routines related to working with the filesystem. */ #include "fossil-scm/fossil-internal.h" char * fsl_sha1_shared_secret( fsl_cx * f, char const * zPw, char const * zLoginName ){ if(!f || !zPw || !zLoginName) return 0; else{ fsl_sha1_cx hash = fsl_sha1_cx_empty; unsigned char zResult[20]; char zDigest[41]; if(!f->cache.projectCode){ f->cache.projectCode = fsl_config_get_text(f, FSL_CONFDB_REPO, "project-code", 0); /* fossil(1) returns a copy of zPw here if !f->cache.projectCode, with the following comment: */ /* On the first xfer request of a clone, the project-code is not yet ** known. Use the cleartext password, since that is all we have. */ if(!f->cache.projectCode) return 0; } fsl_sha1_update(&hash, f->cache.projectCode, fsl_strlen(f->cache.projectCode)); fsl_sha1_update(&hash, "/", 1); fsl_sha1_update(&hash, zLoginName, fsl_strlen(zLoginName)); fsl_sha1_update(&hash, "/", 1); fsl_sha1_update(&hash, zPw, fsl_strlen(zPw)); fsl_sha1_final(&hash, zResult); fsl_sha1_digest_to_base16(zResult, zDigest); return fsl_strndup( zDigest, FSL_UUID_STRLEN ); } } #undef MARKER