Add showKey option to encfsctl, add makeKey program to generate keys.

Replace C header includes with C++ versions.


git-svn-id: http://encfs.googlecode.com/svn/trunk@27 db9cf616-1c43-0410-9cb8-a902689de0d6
This commit is contained in:
Valient Gough 2008-05-19 04:08:58 +00:00
parent 5cc7397e42
commit e9bc752721
22 changed files with 154 additions and 40 deletions

View File

@ -19,7 +19,7 @@
#include "MemoryPool.h" #include "MemoryPool.h"
#include <string.h> #include <cstring>
#include <rlog/rlog.h> #include <rlog/rlog.h>
#include "i18n.h" #include "i18n.h"

View File

@ -20,7 +20,7 @@
#include "Cipher.h" #include "Cipher.h"
#include "base64.h" #include "base64.h"
#include <string.h> #include <cstring>
#include <rlog/rlog.h> #include <rlog/rlog.h>
#include <rlog/Error.h> #include <rlog/Error.h>
#include <rlog/RLogChannel.h> #include <rlog/RLogChannel.h>

View File

@ -21,6 +21,7 @@
#include "Cipher.h" #include "Cipher.h"
#include "Interface.h" #include "Interface.h"
#include "Range.h" #include "Range.h"
#include "base64.h"
#include <map> #include <map>
#include <list> #include <list>
@ -206,3 +207,22 @@ bool Cipher::nameDecode( unsigned char *data, int len,
return streamDecode( data, len, iv64, key ); return streamDecode( data, len, iv64, key );
} }
string Cipher::encodeAsString(const CipherKey &key,
const CipherKey &encodingKey )
{
int encodedKeySize = this->encodedKeySize();
unsigned char *keyBuf = new unsigned char[ encodedKeySize ];
// write the key, encoding it with itself.
this->writeKey( key, keyBuf, key );
int b64Len = B256ToB64Bytes( encodedKeySize );
unsigned char *b64Key = new unsigned char[ b64Len + 1 ];
changeBase2( keyBuf, encodedKeySize, 8, b64Key,
b64Len, 6 );
B64ToAscii( b64Key, b64Len );
b64Key[ b64Len - 1 ] = '\0';
return string( (const char *)b64Key );
}

View File

@ -94,6 +94,10 @@ public:
bool checkKey = true) =0; bool checkKey = true) =0;
virtual void writeKey(const CipherKey &key, unsigned char *data, virtual void writeKey(const CipherKey &key, unsigned char *data,
const CipherKey &encodingKey) =0; const CipherKey &encodingKey) =0;
virtual std::string encodeAsString(const CipherKey &key,
const CipherKey &encodingKey );
// for testing purposes // for testing purposes
virtual bool compareKey( const CipherKey &A, const CipherKey &B ) const =0; virtual bool compareKey( const CipherKey &A, const CipherKey &B ) const =0;

View File

@ -23,7 +23,7 @@
#include <rlog/rlog.h> #include <rlog/rlog.h>
#include <fcntl.h> #include <fcntl.h>
#include <errno.h> #include <cerrno>
using boost::shared_ptr; using boost::shared_ptr;

View File

@ -23,7 +23,7 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <cstring>
using namespace std; using namespace std;

View File

@ -18,7 +18,7 @@
#include "ConfigVar.h" #include "ConfigVar.h"
#include <rlog/rlog.h> #include <rlog/rlog.h>
#include <string.h> #include <cstring>
using namespace rlog; using namespace rlog;

View File

@ -22,9 +22,9 @@
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
#include <errno.h> #include <cerrno>
#include <stdio.h> #include <cstdio>
#include <stdlib.h> #include <cstdlib>
#include <pthread.h> #include <pthread.h>
#include <unistd.h> #include <unistd.h>
#ifdef linux #ifdef linux

View File

@ -46,11 +46,11 @@
#include <sys/wait.h> #include <sys/wait.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <ctype.h> #include <cctype>
#include <stdio.h> #include <cstdio>
#include <stdlib.h> #include <cstdlib>
#include <errno.h> #include <cerrno>
#include <string.h> #include <cstring>
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>

View File

@ -23,7 +23,7 @@
#include <rlog/Error.h> #include <rlog/Error.h>
#include <rlog/RLogChannel.h> #include <rlog/RLogChannel.h>
#include <string.h> #include <cstring>
#include "i18n.h" #include "i18n.h"

View File

@ -20,21 +20,20 @@ endif
lib_LTLIBRARIES = libencfs.la lib_LTLIBRARIES = libencfs.la
bin_PROGRAMS = encfs encfsctl bin_PROGRAMS = encfs encfsctl
dist_bin_SCRIPTS = encfssh dist_bin_SCRIPTS = encfssh
noinst_PROGRAMS = test noinst_PROGRAMS = test makeKey
all-local: encfs-man.html all-local: encfs-man.html
#encfs_LDADD = libencfs.la -lfuse
#encfsctl_LDADD = libencfs.la -lfuse
#test_LDADD = libencfs.la -lfuse
encfs_LDADD = libencfs.la $(ALL_LDFLAGS) encfs_LDADD = libencfs.la $(ALL_LDFLAGS)
encfsctl_LDADD = libencfs.la $(ALL_LDFLAGS) encfsctl_LDADD = libencfs.la $(ALL_LDFLAGS)
test_LDADD = libencfs.la $(ALL_LDFLAGS) test_LDADD = libencfs.la $(ALL_LDFLAGS)
makeKey_LDADD = libencfs.la $(ALL_LDFLAGS)
if BUILD_STATIC if BUILD_STATIC
encfs_LDFLAGS = -all-static encfs_LDFLAGS = -all-static
encfsctl_LDFLAGS = -all-static encfsctl_LDFLAGS = -all-static
test_LDFLAGS = -all-static test_LDFLAGS = -all-static
makeKey_LDFLAGS = -all-static
endif endif
# CURRENT : REVISION : AGE # CURRENT : REVISION : AGE
@ -76,17 +75,20 @@ libencfs_la_SOURCES = \
DirNode.cpp \ DirNode.cpp \
FileNode.cpp \ FileNode.cpp \
FileUtils.cpp \ FileUtils.cpp \
openssl.cpp \
${EXTRASRC} ${EXTRASRC}
encfs_SOURCES = \ encfs_SOURCES = \
encfs.cpp \ encfs.cpp \
openssl.cpp \
main.cpp main.cpp
test_SOURCES = \ test_SOURCES = \
test.cpp test.cpp
makeKey_SOURCES = \
makeKey.cpp
encfsctl_SOURCES = \ encfsctl_SOURCES = \
encfsctl.cpp encfsctl.cpp

View File

@ -19,8 +19,8 @@
#include "MemoryPool.h" #include "MemoryPool.h"
#include <rlog/rlog.h> #include <rlog/rlog.h>
#include <stdlib.h> #include <cstdlib>
#include <string.h> #include <cstring>
#include "config.h" #include "config.h"
#include <pthread.h> #include <pthread.h>

View File

@ -23,7 +23,7 @@
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include <rlog/rlog.h> #include <rlog/rlog.h>
#include <string.h> #include <cstring>
using namespace std; using namespace std;
using namespace rel; using namespace rel;

View File

@ -27,9 +27,9 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <string.h> #include <cstring>
#include <errno.h> #include <cerrno>
using namespace std; using namespace std;

View File

@ -31,7 +31,7 @@
#include "MemoryPool.h" #include "MemoryPool.h"
#include "Mutex.h" #include "Mutex.h"
#include <string.h> #include <cstring>
#include <sys/mman.h> #include <sys/mman.h>
@ -296,7 +296,7 @@ void initKey(const shared_ptr<SSLKey> &key, const EVP_CIPHER *_blockCipher,
EVP_EncryptInit_ex( &key->block_enc, NULL, NULL, KeyData(key), NULL); EVP_EncryptInit_ex( &key->block_enc, NULL, NULL, KeyData(key), NULL);
EVP_DecryptInit_ex( &key->block_dec, NULL, NULL, KeyData(key), NULL); EVP_DecryptInit_ex( &key->block_dec, NULL, NULL, KeyData(key), NULL);
EVP_DecryptInit_ex( &key->stream_enc, NULL, NULL, KeyData(key), NULL); EVP_EncryptInit_ex( &key->stream_enc, NULL, NULL, KeyData(key), NULL);
EVP_DecryptInit_ex( &key->stream_dec, NULL, NULL, KeyData(key), NULL); EVP_DecryptInit_ex( &key->stream_dec, NULL, NULL, KeyData(key), NULL);
HMAC_CTX_init( &key->mac_ctx ); HMAC_CTX_init( &key->mac_ctx );

View File

@ -17,12 +17,12 @@
#include "encfs.h" #include "encfs.h"
#include <stdio.h> #include <cstdio>
#include <string.h> #include <cstring>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
#include <dirent.h> #include <dirent.h>
#include <errno.h> #include <cerrno>
#include <sys/statvfs.h> #include <sys/statvfs.h>
#include <sys/time.h> #include <sys/time.h>

View File

@ -28,7 +28,7 @@
#endif #endif
#ifndef linux #ifndef linux
#include <errno.h> #include <cerrno>
static __inline int setfsuid(uid_t uid) static __inline int setfsuid(uid_t uid)
{ {

View File

@ -65,6 +65,7 @@ static int cmd_encode( int argc, char **argv );
static int cmd_showcruft( int argc, char **argv ); static int cmd_showcruft( int argc, char **argv );
static int cmd_cat( int argc, char **argv ); static int cmd_cat( int argc, char **argv );
static int cmd_export( int argc, char **argv ); static int cmd_export( int argc, char **argv );
static int cmd_showKey( int argc, char **argv );
struct CommandOpts struct CommandOpts
{ {
@ -79,6 +80,9 @@ struct CommandOpts
{"info", 1, 1, showInfo, "(root dir)", {"info", 1, 1, showInfo, "(root dir)",
// xgroup(usage) // xgroup(usage)
gettext_noop(" -- show information (Default command)")}, gettext_noop(" -- show information (Default command)")},
{"showKey", 1, 1, cmd_showKey, "(root dir)",
// xgroup(usage)
gettext_noop(" -- show key")},
{"passwd", 1, 1, chpasswd, "(root dir)", {"passwd", 1, 1, chpasswd, "(root dir)",
// xgroup(usage) // xgroup(usage)
gettext_noop(" -- change password for volume")}, gettext_noop(" -- change password for volume")},
@ -233,6 +237,24 @@ static RootPtr initRootInfo(const char* crootDir)
return result; return result;
} }
static int cmd_showKey( int argc, char **argv )
{
RootPtr rootInfo = initRootInfo(argv[1]);
if(!rootInfo)
return EXIT_FAILURE;
else
{
// encode with itself
string b64Key = rootInfo->cipher->encodeAsString(
rootInfo->volumeKey, rootInfo->volumeKey );
cout << b64Key << "\n";
return EXIT_SUCCESS;
}
}
static int cmd_decode( int argc, char **argv ) static int cmd_decode( int argc, char **argv )
{ {
RootPtr rootInfo = initRootInfo(argv[1]); RootPtr rootInfo = initRootInfo(argv[1]);

View File

@ -24,12 +24,12 @@
#include <string> #include <string>
#include <sstream> #include <sstream>
#include <assert.h> #include <cassert>
#include <stdio.h> #include <cstdio>
#include <unistd.h> #include <unistd.h>
#include <sys/time.h> #include <sys/time.h>
#include <errno.h> #include <cerrno>
#include <string.h> #include <cstring>
#include <getopt.h> #include <getopt.h>

66
encfs/makeKey.cpp Normal file
View File

@ -0,0 +1,66 @@
/*****************************************************************************
* Author: Valient Gough <vgough@pobox.com>
*
*****************************************************************************
* Copyright (c) 2008, Valient Gough
*
* This program 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 3 of the License, or
* (at your option) any later version.
*
* 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. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "encfs.h"
#include "Cipher.h"
#include "CipherKey.h"
#include "openssl.h"
#include <iostream>
#include <sys/types.h>
#include <unistd.h>
using namespace std;
void genKey( const shared_ptr<Cipher> &cipher )
{
CipherKey key = cipher->newRandomKey();
// encode with itself
string b64Key = cipher->encodeAsString( key, key );
cout << b64Key << "\n";
}
int main(int argc, char **argv)
{
pid_t pid = getpid();
cerr << "pid = " << pid << "\n";
if(argc != 3)
{
cerr << "usage: makeKey [AES|Blowfish] [128|160|192|224|256]\n";
return 1;
}
const char *type = argv[1];
int size = atoi(argv[2]);
openssl_init(false);
// get a list of the available algorithms
shared_ptr<Cipher> cipher = Cipher::New( type, size );
genKey( cipher );
//openssl_shutdown(false);
}

View File

@ -35,16 +35,16 @@ static const char rcsid[] = "$OpenBSD: readpassphrase.c,v 1.12 2001/12/15 05:41:
#ifndef HAVE_READPASSPHRASE #ifndef HAVE_READPASSPHRASE
#include <signal.h> #include <csignal>
#include <stdio.h> #include <cstdio>
#include <errno.h> #include <cerrno>
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include <paths.h> #include <paths.h>
#include <string.h> #include <cstring>
#include <ctype.h> #include <cctype>
#include <termios.h> #include <termios.h>
#include <readpassphrase.h> #include <readpassphrase.h>

View File

@ -22,7 +22,7 @@
#include <iostream> #include <iostream>
#include <stdlib.h> #include <cstdlib>
#include "Cipher.h" #include "Cipher.h"
#include "DirNode.h" #include "DirNode.h"