/* -*- 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