From 4058d332025ea96ae45f39275a95c7785327e4f3 Mon Sep 17 00:00:00 2001 From: Maarten Billemont Date: Sat, 8 Apr 2017 14:25:54 -0400 Subject: [PATCH] Support for dynamically linking libscrypt & libsodium as alternative to statically linking Tarsnap's scrypt. --- core/c/lib/scrypt/.source | 4 +- core/c/mpw-util.c | 55 +++++++++++++-- core/c/mpw-util.h | 2 +- .../project.pbxproj | 3 + .../project.pbxproj | 70 ++++++++++++++++++- .../xcshareddata/xcschemes/mpw-test.xcscheme | 3 +- platform-independent/cli-c/build | 59 +++++++++------- platform-independent/cli-c/cli/mpw-bench.c | 1 - platform-independent/cli-c/cli/mpw-cli.c | 8 ++- platform-independent/cli-c/cli/mpw-tests.c | 5 ++ 10 files changed, 170 insertions(+), 40 deletions(-) diff --git a/core/c/lib/scrypt/.source b/core/c/lib/scrypt/.source index aeab23de..431f048d 100644 --- a/core/c/lib/scrypt/.source +++ b/core/c/lib/scrypt/.source @@ -1,4 +1,4 @@ home=http://www.tarsnap.com/scrypt.html git=https://github.com/Tarsnap/scrypt.git -pkg=http://www.tarsnap.com/scrypt/scrypt-1.2.0.tgz -pkg_sha256=1754bc89405277c8ac14220377a4c240ddc34b1ce70882aa92cd01bfdc8569d4 +pkg=https://www.tarsnap.com/scrypt/scrypt-1.2.1.tgz +pkg_sha256=4621f5e7da2f802e20850436219370092e9fcda93bd598f6d4236cce33f4c577 diff --git a/core/c/mpw-util.c b/core/c/mpw-util.c index afbb28a6..bede72e5 100644 --- a/core/c/mpw-util.c +++ b/core/c/mpw-util.c @@ -20,14 +20,23 @@ #include #include -#ifdef COLOR +#if COLOR #include #include #include #endif -#include +#if HAS_CPERCIVA #include +#include +#elif HAS_SCRYPT_SODIUM +#include +#include +#endif + +#ifndef trc +int mpw_verbosity; +#endif #include "mpw-util.h" @@ -85,30 +94,62 @@ uint8_t const *mpw_scrypt(const size_t keySize, const char *secret, const uint8_ if (!key) return NULL; +#if HAS_CPERCIVA if (crypto_scrypt( (const uint8_t *)secret, strlen( secret ), salt, saltSize, N, r, p, key, keySize ) < 0) { mpw_free( key, keySize ); return NULL; } +#elif HAS_SCRYPT_SODIUM + if (crypto_pwhash_scryptsalsa208sha256_ll( (const uint8_t *)secret, strlen( secret ), salt, saltSize, N, r, p, key, keySize) != 0 ) { + mpw_free( key, keySize ); + return NULL; + } +#endif return key; } uint8_t const *mpw_hmac_sha256(const uint8_t *key, const size_t keySize, const uint8_t *salt, const size_t saltSize) { +#if HAS_CPERCIVA uint8_t *const buffer = malloc( 32 ); if (!buffer) return NULL; HMAC_SHA256_Buf( key, keySize, salt, saltSize, buffer ); return buffer; +#elif HAS_SCRYPT_SODIUM + uint8_t *const buffer = malloc( crypto_auth_hmacsha256_BYTES ); + if (!buffer) + return NULL; + + crypto_auth_hmacsha256_state state; + if (crypto_auth_hmacsha256_init( &state, key, keySize ) != 0 || + crypto_auth_hmacsha256_update( &state, salt, saltSize ) != 0 || + crypto_auth_hmacsha256_final( &state, buffer ) != 0) { + mpw_free( buffer, crypto_auth_hmacsha256_BYTES ); + return NULL; + } + + return buffer; +#endif + + return NULL; } const char *mpw_id_buf(const void *buf, size_t length) { +#if HAS_CPERCIVA uint8_t hash[32]; SHA256_Buf( buf, length, hash ); return mpw_hex( hash, 32 ); +#elif HAS_SCRYPT_SODIUM + uint8_t hash[crypto_hash_sha256_BYTES]; + crypto_hash_sha256( hash, buf, length ); + + return mpw_hex( hash, crypto_hash_sha256_BYTES ); +#endif } static char **mpw_hex_buf = NULL; @@ -144,10 +185,10 @@ static int initputvar() { if (!isatty(STDERR_FILENO)) return 0; if (putvarc) - free(putvarc); + free( putvarc ); if (!termsetup) { int status; - if (! (termsetup = (setupterm(NULL, STDERR_FILENO, &status) == OK && status == 1))) { + if (! (termsetup = (setupterm( NULL, STDERR_FILENO, &status ) == 0 && status == 1))) { wrn( "Terminal doesn't support color (setupterm errno %d).\n", status ); return 0; } @@ -174,8 +215,9 @@ const char *mpw_identicon(const char *fullName, const char *masterPassword) { "♨", "♩", "♪", "♫", "⚐", "⚑", "⚔", "⚖", "⚙", "⚠", "⌘", "⏎", "✄", "✆", "✈", "✉", "✌" }; - uint8_t identiconSeed[32]; - HMAC_SHA256_Buf( masterPassword, strlen( masterPassword ), fullName, strlen( fullName ), identiconSeed ); + const uint8_t *identiconSeed = mpw_hmac_sha256( (const uint8_t *)masterPassword, strlen( masterPassword ), (const uint8_t *)fullName, strlen( fullName ) ); + if (!identiconSeed) + return NULL; char *colorString, *resetString; #ifdef COLOR @@ -203,6 +245,7 @@ const char *mpw_identicon(const char *fullName, const char *masterPassword) { accessory[identiconSeed[3] % (sizeof( accessory ) / sizeof( accessory[0] ))], resetString ); + mpw_free( identiconSeed, 32 ); free( colorString ); free( resetString ); return identicon; diff --git a/core/c/mpw-util.h b/core/c/mpw-util.h index fd72e26b..260ed736 100644 --- a/core/c/mpw-util.h +++ b/core/c/mpw-util.h @@ -22,7 +22,7 @@ //// Logging. #ifndef trc -int mpw_verbosity; +extern int mpw_verbosity; #define trc_level 3 #define trc(...) \ if (mpw_verbosity >= 3) \ diff --git a/platform-darwin/MasterPassword-iOS.xcodeproj/project.pbxproj b/platform-darwin/MasterPassword-iOS.xcodeproj/project.pbxproj index 3fd8051a..395eb4a6 100644 --- a/platform-darwin/MasterPassword-iOS.xcodeproj/project.pbxproj +++ b/platform-darwin/MasterPassword-iOS.xcodeproj/project.pbxproj @@ -3916,6 +3916,7 @@ "\"$(SRCROOT)/External/Pearl/Pearl-Crypto/lib\"", "$(inherited)", ); + OTHER_CFLAGS = "-DHAS_CPERCIVA=1"; OTHER_LDFLAGS = "$(inherited)"; "OTHER_LDFLAGS[sdk=iphoneos*]" = ( "$(inherited)", @@ -4192,6 +4193,7 @@ "\"$(SRCROOT)/External/Pearl/Pearl-Crypto/lib\"", "$(inherited)", ); + OTHER_CFLAGS = "-DHAS_CPERCIVA=1"; OTHER_LDFLAGS = "$(inherited)"; "OTHER_LDFLAGS[sdk=iphoneos*]" = ( "$(inherited)", @@ -4230,6 +4232,7 @@ "\"$(SRCROOT)/External/Pearl/Pearl-Crypto/lib\"", "$(inherited)", ); + OTHER_CFLAGS = "-DHAS_CPERCIVA=1"; OTHER_LDFLAGS = "$(inherited)"; "OTHER_LDFLAGS[sdk=iphoneos*]" = ( "$(inherited)", diff --git a/platform-darwin/MasterPassword-macOS.xcodeproj/project.pbxproj b/platform-darwin/MasterPassword-macOS.xcodeproj/project.pbxproj index 3e83d243..5d62759e 100644 --- a/platform-darwin/MasterPassword-macOS.xcodeproj/project.pbxproj +++ b/platform-darwin/MasterPassword-macOS.xcodeproj/project.pbxproj @@ -23,6 +23,13 @@ 93D39F833DEC1C89B2F795AC /* MPPasswordWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39A57A7823DE98A0FF83C /* MPPasswordWindowController.m */; }; DA0933CC1747AD2D00DE1CEF /* shot-laptop-leaning-iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = DA0933CB1747AD2D00DE1CEF /* shot-laptop-leaning-iphone.png */; }; DA0933D01747B91B00DE1CEF /* appstore.png in Resources */ = {isa = PBXBuildFile; fileRef = DA0933CF1747B91B00DE1CEF /* appstore.png */; }; + DA0974541E9957F300F0BFE8 /* libopensslcrypto-osx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAE8E65319867ADA00416A0F /* libopensslcrypto-osx.a */; }; + DA0974551E9957F300F0BFE8 /* libscryptenc-osx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5E5C8717248AA1003798D8 /* libscryptenc-osx.a */; }; + DA09745A1E99582900F0BFE8 /* mpw-tests-util.c in Sources */ = {isa = PBXBuildFile; fileRef = DA0974561E99582200F0BFE8 /* mpw-tests-util.c */; }; + DA09745B1E99582900F0BFE8 /* mpw-tests.c in Sources */ = {isa = PBXBuildFile; fileRef = DA0974571E99582200F0BFE8 /* mpw-tests.c */; }; + DA09745E1E99586600F0BFE8 /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = DA09745D1E99586600F0BFE8 /* libxml2.tbd */; }; + DA0974621E9961F100F0BFE8 /* libsodium.18.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DA0974611E9961F100F0BFE8 /* libsodium.18.dylib */; }; + DA0974641E99620400F0BFE8 /* libscrypt.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DA0974631E99620400F0BFE8 /* libscrypt.0.dylib */; }; DA10007F1998A4C6002B873F /* scrypt in Headers */ = {isa = PBXBuildFile; fileRef = DAE8E65619867AF500416A0F /* scrypt */; settings = {ATTRIBUTES = (Public, ); }; }; DA1000801998A4C6002B873F /* openssl in Headers */ = {isa = PBXBuildFile; fileRef = DAE8E65719867AF500416A0F /* openssl */; settings = {ATTRIBUTES = (Public, ); }; }; DA16B341170661DB000A0EAB /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA16B340170661DB000A0EAB /* Carbon.framework */; }; @@ -285,6 +292,13 @@ DA0933C91747A56A00DE1CEF /* MPInitialWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MPInitialWindow.xib; sourceTree = ""; }; DA0933CB1747AD2D00DE1CEF /* shot-laptop-leaning-iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "shot-laptop-leaning-iphone.png"; sourceTree = ""; }; DA0933CF1747B91B00DE1CEF /* appstore.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = appstore.png; sourceTree = ""; }; + DA0974561E99582200F0BFE8 /* mpw-tests-util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "mpw-tests-util.c"; path = "../../platform-independent/cli-c/cli/mpw-tests-util.c"; sourceTree = ""; }; + DA0974571E99582200F0BFE8 /* mpw-tests.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "mpw-tests.c"; path = "../../platform-independent/cli-c/cli/mpw-tests.c"; sourceTree = ""; }; + DA09745C1E99583B00F0BFE8 /* mpw-tests-util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "mpw-tests-util.h"; path = "../../platform-independent/cli-c/cli/mpw-tests-util.h"; sourceTree = ""; }; + DA09745D1E99586600F0BFE8 /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = usr/lib/libxml2.tbd; sourceTree = SDKROOT; }; + DA09745F1E995EB500F0BFE8 /* mpw_tests.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = mpw_tests.xml; path = ../../core/java/tests/src/main/resources/mpw_tests.xml; sourceTree = ""; }; + DA0974611E9961F100F0BFE8 /* libsodium.18.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsodium.18.dylib; path = ../../../../../../../usr/local/Cellar/libsodium/1.0.12/lib/libsodium.18.dylib; sourceTree = ""; }; + DA0974631E99620400F0BFE8 /* libscrypt.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libscrypt.0.dylib; path = ../../../../../../../usr/local/Cellar/libscrypt/1.21/lib/libscrypt.0.dylib; sourceTree = ""; }; DA16B340170661DB000A0EAB /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; DA16B343170661EE000A0EAB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; DA2508F019511D3600AC23F1 /* MPPasswordWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MPPasswordWindowController.xib; sourceTree = ""; }; @@ -945,6 +959,11 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + DA0974641E99620400F0BFE8 /* libscrypt.0.dylib in Frameworks */, + DA0974621E9961F100F0BFE8 /* libsodium.18.dylib in Frameworks */, + DA09745E1E99586600F0BFE8 /* libxml2.tbd in Frameworks */, + DA0974541E9957F300F0BFE8 /* libopensslcrypto-osx.a in Frameworks */, + DA0974551E9957F300F0BFE8 /* libscryptenc-osx.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1025,6 +1044,9 @@ DA5BFA47147E415C00F98B1E /* Frameworks */ = { isa = PBXGroup; children = ( + DA0974631E99620400F0BFE8 /* libscrypt.0.dylib */, + DA0974611E9961F100F0BFE8 /* libsodium.18.dylib */, + DA09745D1E99586600F0BFE8 /* libxml2.tbd */, DA6701B716406A4100B61001 /* Accounts.framework */, DA16B340170661DB000A0EAB /* Carbon.framework */, DA16B343170661EE000A0EAB /* Cocoa.framework */, @@ -1552,6 +1574,9 @@ DA831A2A1A6E1146000AC234 /* mpw-algorithm_v3.c */, DA6773BB1A4746AF004F356A /* mpw-algorithm.c */, DA6773BC1A4746AF004F356A /* mpw-algorithm.h */, + DA0974561E99582200F0BFE8 /* mpw-tests-util.c */, + DA09745C1E99583B00F0BFE8 /* mpw-tests-util.h */, + DA0974571E99582200F0BFE8 /* mpw-tests.c */, DA6773C21A4746AF004F356A /* mpw-types.c */, DA6773C31A4746AF004F356A /* mpw-types.h */, DA6773C51A4746AF004F356A /* mpw-util.c */, @@ -1614,6 +1639,7 @@ DACA23B41705DF7D002C6C22 /* Resources */ = { isa = PBXGroup; children = ( + DA09745F1E995EB500F0BFE8 /* mpw_tests.xml */, DACA26991705DF81002C6C22 /* Crashlytics */, DACA29701705E1A8002C6C22 /* Data */, DACA23B51705DF7D002C6C22 /* Media */, @@ -2252,6 +2278,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + DA09745B1E99582900F0BFE8 /* mpw-tests.c in Sources */, + DA09745A1E99582900F0BFE8 /* mpw-tests-util.c in Sources */, DA6774451A474A3B004F356A /* mpw-types.c in Sources */, DA6774461A474A3B004F356A /* mpw-util.c in Sources */, DA6774431A474A3B004F356A /* mpw-algorithm.c in Sources */, @@ -2471,6 +2499,7 @@ "\"$(SRCROOT)/External/Pearl/Pearl-Crypto/lib\"", "$(inherited)", ); + OTHER_CFLAGS = "-DHAS_CPERCIVA=1"; PRODUCT_BUNDLE_IDENTIFIER = com.lyndir.lhunath.MasterPassword.Mac; SKIP_INSTALL = NO; WRAPPER_NAME = "Master Password.${WRAPPER_EXTENSION}"; @@ -2517,8 +2546,19 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = NO; HEADER_SEARCH_PATHS = ( "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, /usr/include/libxml2, + /usr/local/include, + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/External/Pearl/Pearl-Crypto/lib", + "$(inherited)", + "$(PROJECT_DIR)/External/Pearl/Pearl-Crypto/lib", + /usr/local/Cellar/libsodium/1.0.12/lib, + /usr/local/Cellar/libscrypt/1.21/lib, + ); + OTHER_CFLAGS = ( + "-DHAS_CPERCIVA=0", + "-DHAS_SCRYPT_SODIUM=1", ); }; name = Test; @@ -2727,6 +2767,7 @@ "\"$(SRCROOT)/External/Pearl/Pearl-Crypto/lib\"", "$(inherited)", ); + OTHER_CFLAGS = "-DHAS_CPERCIVA=1"; PRODUCT_BUNDLE_IDENTIFIER = com.lyndir.lhunath.MasterPassword.Mac; SKIP_INSTALL = NO; WRAPPER_NAME = "Master Password.${WRAPPER_EXTENSION}"; @@ -2754,6 +2795,7 @@ "\"$(SRCROOT)/External/Pearl/Pearl-Crypto/lib\"", "$(inherited)", ); + OTHER_CFLAGS = "-DHAS_CPERCIVA=1"; PRODUCT_BUNDLE_IDENTIFIER = com.lyndir.lhunath.MasterPassword.Mac; SKIP_INSTALL = NO; WRAPPER_NAME = "Master Password.${WRAPPER_EXTENSION}"; @@ -2766,8 +2808,19 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = NO; HEADER_SEARCH_PATHS = ( "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, /usr/include/libxml2, + /usr/local/include, + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/External/Pearl/Pearl-Crypto/lib", + "$(inherited)", + "$(PROJECT_DIR)/External/Pearl/Pearl-Crypto/lib", + /usr/local/Cellar/libsodium/1.0.12/lib, + /usr/local/Cellar/libscrypt/1.21/lib, + ); + OTHER_CFLAGS = ( + "-DHAS_CPERCIVA=0", + "-DHAS_SCRYPT_SODIUM=1", ); }; name = Debug; @@ -2778,8 +2831,19 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = NO; HEADER_SEARCH_PATHS = ( "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, /usr/include/libxml2, + /usr/local/include, + ); + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/External/Pearl/Pearl-Crypto/lib", + "$(inherited)", + "$(PROJECT_DIR)/External/Pearl/Pearl-Crypto/lib", + /usr/local/Cellar/libsodium/1.0.12/lib, + /usr/local/Cellar/libscrypt/1.21/lib, + ); + OTHER_CFLAGS = ( + "-DHAS_CPERCIVA=0", + "-DHAS_SCRYPT_SODIUM=1", ); }; name = Release; diff --git a/platform-darwin/MasterPassword-macOS.xcodeproj/xcshareddata/xcschemes/mpw-test.xcscheme b/platform-darwin/MasterPassword-macOS.xcodeproj/xcshareddata/xcschemes/mpw-test.xcscheme index 083fa81d..3dc78d49 100644 --- a/platform-darwin/MasterPassword-macOS.xcodeproj/xcshareddata/xcschemes/mpw-test.xcscheme +++ b/platform-darwin/MasterPassword-macOS.xcodeproj/xcshareddata/xcschemes/mpw-test.xcscheme @@ -46,7 +46,8 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" launchStyle = "0" - useCustomWorkingDirectory = "NO" + useCustomWorkingDirectory = "YES" + customWorkingDirectory = "/Users/lhunath/Documents/workspace/lyndir/MasterPassword/platform-independent/cli-c" ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" debugServiceExtension = "internal" diff --git a/platform-independent/cli-c/build b/platform-independent/cli-c/build index acab03d2..667529d6 100755 --- a/platform-independent/cli-c/build +++ b/platform-independent/cli-c/build @@ -41,13 +41,11 @@ fi # Optional features. mpw_color=${mpw_color:-1} # Colorized Identicon, requires libncurses-dev -# Distribution specific configuration. -# Homebrew -if hash brew 2>/dev/null; then - opensslPath=$(brew --prefix openssl) - export CFLAGS="$CFLAGS -I$opensslPath/include" - export LDFLAGS="$LDFLAGS -L$opensslPath/lib" -fi +# Default build flags. +export CFLAGS="-O3 $CFLAGS" +export LDFLAGS="$LDFLAGS" + + ### DEPENDENCIES @@ -208,26 +206,40 @@ depend() { popd popd } +depend_scrypt() { + if haslib scrypt && haslib sodium; then + CFLAGS+=" -DHAS_SCRYPT_SODIUM=1" + LDFLAGS+=" -lscrypt -lsodium" + return + fi + + depend scrypt + local objects=( + "lib/scrypt/src/libcperciva/"*/*.o + "lib/scrypt/src/lib/crypto/"*.o + ) + CFLAGS+=" -DHAS_CPERCIVA=1" + LDFLAGS+=" -Llib/scrypt/src ${objects[*]}" +} ### MPW mpw() { - depend scrypt + depend_scrypt echo echo "Building target: $target..." local CFLAGS=( + $CFLAGS + # library paths -I"lib/include" # mpw paths -I"core" -I"cli" ) local LDFLAGS=( - # scrypt - "lib/scrypt/src/libcperciva/"*/*.o - "lib/scrypt/src/lib/crypto/"*.o - # library paths - -L"lib/scrypt/src" + $LDFLAGS + # link libraries -l"crypto" ) @@ -245,28 +257,28 @@ mpw() { ### MPW-BENCH mpw-bench() { - depend scrypt + depend_scrypt depend bcrypt echo echo "Building target: $target..." local CFLAGS=( + $CFLAGS + # library paths -I"lib/include" # mpw paths -I"core" -I"cli" ) local LDFLAGS=( - # scrypt - "lib/scrypt/src/libcperciva/"*/*.o - "lib/scrypt/src/lib/crypto/"*.o + $LDFLAGS + # bcrypt "lib/bcrypt/src/crypt_blowfish.o" "lib/bcrypt/src/crypt_gensalt.o" "lib/bcrypt/src/wrapper.o" "lib/bcrypt/src/x86.o" # library paths - -L"lib/scrypt/src" -L"lib/bcrypt/src" # link libraries -l"crypto" @@ -283,11 +295,13 @@ mpw-bench() { ### MPW-TESTS mpw-tests() { - depend scrypt + depend_scrypt echo echo "Building target: $target..." local CFLAGS=( + $CFLAGS + # library paths -I"lib/include" -I"/usr/include/libxml2" @@ -296,11 +310,8 @@ mpw-tests() { -I"core" -I"cli" ) local LDFLAGS=( - # scrypt - "lib/scrypt/src/libcperciva/"*/*.o - "lib/scrypt/src/lib/crypto/"*.o - # library paths - -L"lib/scrypt/src" + $LDFLAGS + # link libraries -l"crypto" -l"xml2" ) diff --git a/platform-independent/cli-c/cli/mpw-bench.c b/platform-independent/cli-c/cli/mpw-bench.c index 7a5e6090..a26c319b 100644 --- a/platform-independent/cli-c/cli/mpw-bench.c +++ b/platform-independent/cli-c/cli/mpw-bench.c @@ -13,7 +13,6 @@ #include #include -#include #include #include "mpw-algorithm.h" diff --git a/platform-independent/cli-c/cli/mpw-cli.c b/platform-independent/cli-c/cli/mpw-cli.c index b505dcec..b11f022f 100644 --- a/platform-independent/cli-c/cli/mpw-cli.c +++ b/platform-independent/cli-c/cli/mpw-cli.c @@ -213,8 +213,12 @@ int main(int argc, char *const argv[]) { // Summarize operation. const char *identicon = mpw_identicon( fullName, masterPassword ); - fprintf( stderr, "%s's password for %s:\n[ %s ]: ", fullName, siteName, identicon ); - mpw_free_string( identicon ); + if (!identicon) { + err( "Couldn't determine identicon.\n" ); + } else { + fprintf( stderr, "%s's password for %s:\n[ %s ]: ", fullName, siteName, identicon ); + mpw_free_string( identicon ); + } // Output the password. const uint8_t *masterKey = mpw_masterKeyForUser( diff --git a/platform-independent/cli-c/cli/mpw-tests.c b/platform-independent/cli-c/cli/mpw-tests.c index 14c09f88..274d6d55 100644 --- a/platform-independent/cli-c/cli/mpw-tests.c +++ b/platform-independent/cli-c/cli/mpw-tests.c @@ -15,6 +15,11 @@ int main(int argc, char *const argv[]) { int failedTests = 0; xmlNodePtr tests = xmlDocGetRootElement( xmlParseFile( "mpw_tests.xml" ) ); + if (!tests) { + ftl( "Couldn't find test case: mpw_tests.xml\n" ); + abort(); + } + for (xmlNodePtr testCase = tests->children; testCase; testCase = testCase->next) { if (testCase->type != XML_ELEMENT_NODE || xmlStrcmp( testCase->name, BAD_CAST "case" ) != 0) continue;