mirror of
https://github.com/jedisct1/libsodium.git
synced 2024-12-19 10:05:05 -07:00
Drastically improve the password hashing functions
Password hashing functions are designed to be slow. Make them slower, but also useful.
This commit is contained in:
parent
95246c90ed
commit
5dff93005e
@ -25,7 +25,7 @@ script:
|
||||
- make distclean > /dev/null
|
||||
- ./configure --disable-dependency-tracking --enable-minimal
|
||||
- make check
|
||||
- ( echo '#include <sodium.h>' ; echo 'int main(void) { return sodium_init(); }' ) > /tmp/main.c && gcc -Isrc/libsodium/include -Isrc/libsodium/include/sodium $(find src -name '*.c' -o -name '*.S') /tmp/main.c
|
||||
- ( echo '#include <sodium.h>' ; echo 'int main(void) { return sodium_init(); }' ) > /tmp/main.c && gcc -Isrc/libsodium/include -Isrc/libsodium/include/sodium $(find src -name '*.c' -o -name '*.S') /tmp/main.c -lcurl
|
||||
|
||||
addons:
|
||||
apt:
|
||||
|
@ -97,6 +97,7 @@
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_secretbox\xsalsa20poly1305\secretbox_xsalsa20poly1305.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_secretbox\xchacha20poly1305\secretbox_xchacha20poly1305.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blake2b-long.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2-core.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2-fill-block-avx512f.c" />
|
||||
@ -263,6 +264,7 @@
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\mutex.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\chacha20_ietf_ext.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\implementations.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-ref.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-avx2.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2.h" />
|
||||
|
@ -84,6 +84,9 @@
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash.c">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.c">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blake2b-long.c">
|
||||
<Filter>crypto_pwhash\argon2</Filter>
|
||||
</ClCompile>
|
||||
@ -578,6 +581,9 @@
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\implementations.h">
|
||||
<Filter>include\sodium\private</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.h">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-ref.h">
|
||||
<Filter>crypto_pwhash\argon2</Filter>
|
||||
</ClInclude>
|
||||
|
@ -97,6 +97,7 @@
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_secretbox\xsalsa20poly1305\secretbox_xsalsa20poly1305.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_secretbox\xchacha20poly1305\secretbox_xchacha20poly1305.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blake2b-long.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2-core.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2-fill-block-avx512f.c" />
|
||||
@ -263,6 +264,7 @@
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\mutex.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\chacha20_ietf_ext.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\implementations.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-ref.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-avx2.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2.h" />
|
||||
|
@ -84,6 +84,9 @@
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash.c">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.c">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blake2b-long.c">
|
||||
<Filter>crypto_pwhash\argon2</Filter>
|
||||
</ClCompile>
|
||||
@ -578,6 +581,9 @@
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\implementations.h">
|
||||
<Filter>include\sodium\private</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.h">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-ref.h">
|
||||
<Filter>crypto_pwhash\argon2</Filter>
|
||||
</ClInclude>
|
||||
|
@ -97,6 +97,7 @@
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_secretbox\xsalsa20poly1305\secretbox_xsalsa20poly1305.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_secretbox\xchacha20poly1305\secretbox_xchacha20poly1305.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blake2b-long.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2-core.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2-fill-block-avx512f.c" />
|
||||
@ -263,6 +264,7 @@
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\mutex.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\chacha20_ietf_ext.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\implementations.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-ref.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-avx2.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2.h" />
|
||||
|
@ -84,6 +84,9 @@
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash.c">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.c">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blake2b-long.c">
|
||||
<Filter>crypto_pwhash\argon2</Filter>
|
||||
</ClCompile>
|
||||
@ -578,6 +581,9 @@
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\implementations.h">
|
||||
<Filter>include\sodium\private</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.h">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-ref.h">
|
||||
<Filter>crypto_pwhash\argon2</Filter>
|
||||
</ClInclude>
|
||||
|
@ -97,6 +97,7 @@
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_secretbox\xsalsa20poly1305\secretbox_xsalsa20poly1305.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_secretbox\xchacha20poly1305\secretbox_xchacha20poly1305.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blake2b-long.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2-core.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2-fill-block-avx512f.c" />
|
||||
@ -263,6 +264,7 @@
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\mutex.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\chacha20_ietf_ext.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\implementations.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-ref.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-avx2.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2.h" />
|
||||
|
@ -84,6 +84,9 @@
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash.c">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.c">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blake2b-long.c">
|
||||
<Filter>crypto_pwhash\argon2</Filter>
|
||||
</ClCompile>
|
||||
@ -578,6 +581,9 @@
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\implementations.h">
|
||||
<Filter>include\sodium\private</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.h">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-ref.h">
|
||||
<Filter>crypto_pwhash\argon2</Filter>
|
||||
</ClInclude>
|
||||
|
@ -97,6 +97,7 @@
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_secretbox\xsalsa20poly1305\secretbox_xsalsa20poly1305.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_secretbox\xchacha20poly1305\secretbox_xchacha20poly1305.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blake2b-long.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2-core.c" />
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2-fill-block-avx512f.c" />
|
||||
@ -263,6 +264,7 @@
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\mutex.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\chacha20_ietf_ext.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\implementations.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-ref.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-avx2.h" />
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\argon2.h" />
|
||||
|
@ -84,6 +84,9 @@
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash.c">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.c">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blake2b-long.c">
|
||||
<Filter>crypto_pwhash\argon2</Filter>
|
||||
</ClCompile>
|
||||
@ -578,6 +581,9 @@
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\include\sodium\private\implementations.h">
|
||||
<Filter>include\sodium\private</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.h">
|
||||
<Filter>crypto_pwhash</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\libsodium\crypto_pwhash\argon2\blamka-round-ref.h">
|
||||
<Filter>crypto_pwhash\argon2</Filter>
|
||||
</ClInclude>
|
||||
|
@ -808,6 +808,9 @@ AS_IF([test "x$EMSCRIPTEN" != "x"],[
|
||||
AC_SUBST(TEST_LDFLAGS)
|
||||
AM_CONDITIONAL([EMSCRIPTEN], [test "x$EMSCRIPTEN" != "x"])
|
||||
|
||||
LIBCURL_CHECK_CONFIG([yes], [], [],
|
||||
[AC_MSG_ERROR([[Libcurl header files not found, install libcurl-dev]])])
|
||||
|
||||
AC_DEFINE([CONFIGURED], [1], [the build system was properly configured])
|
||||
|
||||
dnl Libtool.
|
||||
|
@ -335,6 +335,7 @@
|
||||
<ClCompile Include="src\libsodium\crypto_secretbox\xsalsa20poly1305\secretbox_xsalsa20poly1305.c" />
|
||||
<ClCompile Include="src\libsodium\crypto_secretbox\xchacha20poly1305\secretbox_xchacha20poly1305.c" />
|
||||
<ClCompile Include="src\libsodium\crypto_pwhash\crypto_pwhash.c" />
|
||||
<ClCompile Include="src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.c" />
|
||||
<ClCompile Include="src\libsodium\crypto_pwhash\argon2\blake2b-long.c" />
|
||||
<ClCompile Include="src\libsodium\crypto_pwhash\argon2\argon2-core.c" />
|
||||
<ClCompile Include="src\libsodium\crypto_pwhash\argon2\argon2-fill-block-avx512f.c" />
|
||||
@ -501,6 +502,7 @@
|
||||
<ClInclude Include="src\libsodium\include\sodium\private\mutex.h" />
|
||||
<ClInclude Include="src\libsodium\include\sodium\private\chacha20_ietf_ext.h" />
|
||||
<ClInclude Include="src\libsodium\include\sodium\private\implementations.h" />
|
||||
<ClInclude Include="src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.h" />
|
||||
<ClInclude Include="src\libsodium\crypto_pwhash\argon2\blamka-round-ref.h" />
|
||||
<ClInclude Include="src\libsodium\crypto_pwhash\argon2\blamka-round-avx2.h" />
|
||||
<ClInclude Include="src\libsodium\crypto_pwhash\argon2\argon2.h" />
|
||||
|
@ -75,6 +75,9 @@
|
||||
<ClCompile Include="src\libsodium\crypto_pwhash\crypto_pwhash.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\libsodium\crypto_pwhash\argon2\blake2b-long.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@ -569,6 +572,9 @@
|
||||
<ClInclude Include="src\libsodium\include\sodium\private\implementations.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\libsodium\crypto_pwhash\crypto_pwhash_hedgehogcoin.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\libsodium\crypto_pwhash\argon2\blamka-round-ref.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
|
214
m4/libcurl.m4
Normal file
214
m4/libcurl.m4
Normal file
@ -0,0 +1,214 @@
|
||||
AC_DEFUN([LIBCURL_CHECK_CONFIG],
|
||||
[
|
||||
AH_TEMPLATE([LIBCURL_FEATURE_SSL],[Defined if libcurl supports SSL])
|
||||
AH_TEMPLATE([LIBCURL_FEATURE_KRB4],[Defined if libcurl supports KRB4])
|
||||
AH_TEMPLATE([LIBCURL_FEATURE_IPV6],[Defined if libcurl supports IPv6])
|
||||
AH_TEMPLATE([LIBCURL_FEATURE_LIBZ],[Defined if libcurl supports libz])
|
||||
AH_TEMPLATE([LIBCURL_FEATURE_ASYNCHDNS],[Defined if libcurl supports AsynchDNS])
|
||||
AH_TEMPLATE([LIBCURL_FEATURE_IDN],[Defined if libcurl supports IDN])
|
||||
AH_TEMPLATE([LIBCURL_FEATURE_SSPI],[Defined if libcurl supports SSPI])
|
||||
AH_TEMPLATE([LIBCURL_FEATURE_NTLM],[Defined if libcurl supports NTLM])
|
||||
|
||||
AH_TEMPLATE([LIBCURL_PROTOCOL_HTTP],[Defined if libcurl supports HTTP])
|
||||
AH_TEMPLATE([LIBCURL_PROTOCOL_HTTPS],[Defined if libcurl supports HTTPS])
|
||||
AH_TEMPLATE([LIBCURL_PROTOCOL_FTP],[Defined if libcurl supports FTP])
|
||||
AH_TEMPLATE([LIBCURL_PROTOCOL_FTPS],[Defined if libcurl supports FTPS])
|
||||
AH_TEMPLATE([LIBCURL_PROTOCOL_FILE],[Defined if libcurl supports FILE])
|
||||
AH_TEMPLATE([LIBCURL_PROTOCOL_TELNET],[Defined if libcurl supports TELNET])
|
||||
AH_TEMPLATE([LIBCURL_PROTOCOL_LDAP],[Defined if libcurl supports LDAP])
|
||||
AH_TEMPLATE([LIBCURL_PROTOCOL_DICT],[Defined if libcurl supports DICT])
|
||||
AH_TEMPLATE([LIBCURL_PROTOCOL_TFTP],[Defined if libcurl supports TFTP])
|
||||
AH_TEMPLATE([LIBCURL_PROTOCOL_RTSP],[Defined if libcurl supports RTSP])
|
||||
AH_TEMPLATE([LIBCURL_PROTOCOL_POP3],[Defined if libcurl supports POP3])
|
||||
AH_TEMPLATE([LIBCURL_PROTOCOL_IMAP],[Defined if libcurl supports IMAP])
|
||||
AH_TEMPLATE([LIBCURL_PROTOCOL_SMTP],[Defined if libcurl supports SMTP])
|
||||
|
||||
AC_ARG_WITH(libcurl,
|
||||
AS_HELP_STRING([--with-libcurl=PREFIX],[look for the curl library in PREFIX/lib and headers in PREFIX/include]),
|
||||
[_libcurl_with=$withval],[_libcurl_with=ifelse([$1],,[yes],[$1])])
|
||||
|
||||
if test "$_libcurl_with" != "no" ; then
|
||||
|
||||
AC_PROG_AWK
|
||||
|
||||
_libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[[1]]+256*A[[2]]+A[[3]]; print X;}'"
|
||||
|
||||
_libcurl_try_link=yes
|
||||
|
||||
if test -d "$_libcurl_with" ; then
|
||||
LIBCURL_CPPFLAGS="-I$withval/include"
|
||||
_libcurl_ldflags="-L$withval/lib"
|
||||
AC_PATH_PROG([_libcurl_config],[curl-config],[],
|
||||
["$withval/bin"])
|
||||
else
|
||||
AC_PATH_PROG([_libcurl_config],[curl-config],[],[$PATH])
|
||||
fi
|
||||
|
||||
if test x$_libcurl_config != "x" ; then
|
||||
AC_CACHE_CHECK([for the version of libcurl],
|
||||
[libcurl_cv_lib_curl_version],
|
||||
[libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK '{print $[]2}'`])
|
||||
|
||||
_libcurl_version=`echo $libcurl_cv_lib_curl_version | $_libcurl_version_parse`
|
||||
_libcurl_wanted=`echo ifelse([$2],,[0],[$2]) | $_libcurl_version_parse`
|
||||
|
||||
if test $_libcurl_wanted -gt 0 ; then
|
||||
AC_CACHE_CHECK([for libcurl >= version $2],
|
||||
[libcurl_cv_lib_version_ok],
|
||||
[
|
||||
if test $_libcurl_version -ge $_libcurl_wanted ; then
|
||||
libcurl_cv_lib_version_ok=yes
|
||||
else
|
||||
libcurl_cv_lib_version_ok=no
|
||||
fi
|
||||
])
|
||||
fi
|
||||
|
||||
if test $_libcurl_wanted -eq 0 || test x$libcurl_cv_lib_version_ok = xyes ; then
|
||||
if test x"$LIBCURL_CPPFLAGS" = "x" ; then
|
||||
LIBCURL_CPPFLAGS=`$_libcurl_config --cflags`
|
||||
fi
|
||||
if test x"$LIBCURL" = "x" ; then
|
||||
LIBCURL=`$_libcurl_config --libs`
|
||||
|
||||
# This is so silly, but Apple actually has a bug in their
|
||||
# curl-config script. Fixed in Tiger, but there are still
|
||||
# lots of Panther installs around.
|
||||
case "${host}" in
|
||||
powerpc-apple-darwin7*)
|
||||
LIBCURL=`echo $LIBCURL | sed -e 's|-arch i386||g'`
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# All curl-config scripts support --feature
|
||||
_libcurl_features=`$_libcurl_config --feature`
|
||||
|
||||
# Is it modern enough to have --protocols? (7.12.4)
|
||||
if test $_libcurl_version -ge 461828 ; then
|
||||
_libcurl_protocols=`$_libcurl_config --protocols`
|
||||
fi
|
||||
else
|
||||
_libcurl_try_link=no
|
||||
fi
|
||||
|
||||
unset _libcurl_wanted
|
||||
fi
|
||||
|
||||
if test $_libcurl_try_link = yes ; then
|
||||
|
||||
# we didn't find curl-config, so let's see if the user-supplied
|
||||
# link line (or failing that, "-lcurl") is enough.
|
||||
LIBCURL=${LIBCURL-"$_libcurl_ldflags -lcurl"}
|
||||
|
||||
AC_CACHE_CHECK([whether libcurl is usable],
|
||||
[libcurl_cv_lib_curl_usable],
|
||||
[
|
||||
_libcurl_save_cppflags=$CPPFLAGS
|
||||
CPPFLAGS="$LIBCURL_CPPFLAGS $CPPFLAGS"
|
||||
_libcurl_save_libs=$LIBS
|
||||
LIBS="$LIBCURL $LIBS"
|
||||
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <curl/curl.h>]],[[
|
||||
/* Try and use a few common options to force a failure if we are
|
||||
missing symbols or can't link. */
|
||||
int x;
|
||||
curl_easy_setopt(NULL,CURLOPT_URL,NULL);
|
||||
x=CURL_ERROR_SIZE;
|
||||
x=CURLOPT_WRITEFUNCTION;
|
||||
x=CURLOPT_WRITEDATA;
|
||||
x=CURLOPT_ERRORBUFFER;
|
||||
x=CURLOPT_STDERR;
|
||||
x=CURLOPT_VERBOSE;
|
||||
if (x) {;}
|
||||
]])],libcurl_cv_lib_curl_usable=yes,libcurl_cv_lib_curl_usable=no)
|
||||
|
||||
CPPFLAGS=$_libcurl_save_cppflags
|
||||
LIBS=$_libcurl_save_libs
|
||||
unset _libcurl_save_cppflags
|
||||
unset _libcurl_save_libs
|
||||
])
|
||||
|
||||
if test $libcurl_cv_lib_curl_usable = yes ; then
|
||||
|
||||
# Does curl_free() exist in this version of libcurl?
|
||||
# If not, fake it with free()
|
||||
|
||||
_libcurl_save_cppflags=$CPPFLAGS
|
||||
CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS"
|
||||
_libcurl_save_libs=$LIBS
|
||||
LIBS="$LIBS $LIBCURL"
|
||||
|
||||
AC_CHECK_FUNC(curl_free,,
|
||||
AC_DEFINE(curl_free,free,
|
||||
[Define curl_free() as free() if our version of curl lacks curl_free.]))
|
||||
|
||||
CPPFLAGS=$_libcurl_save_cppflags
|
||||
LIBS=$_libcurl_save_libs
|
||||
unset _libcurl_save_cppflags
|
||||
unset _libcurl_save_libs
|
||||
|
||||
AC_DEFINE(HAVE_LIBCURL,1,
|
||||
[Define to 1 if you have a functional curl library.])
|
||||
AC_SUBST(LIBCURL_CPPFLAGS)
|
||||
AC_SUBST(LIBCURL)
|
||||
|
||||
for _libcurl_feature in $_libcurl_features ; do
|
||||
AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_feature_$_libcurl_feature),[1])
|
||||
eval AS_TR_SH(libcurl_feature_$_libcurl_feature)=yes
|
||||
done
|
||||
|
||||
if test "x$_libcurl_protocols" = "x" ; then
|
||||
|
||||
# We don't have --protocols, so just assume that all
|
||||
# protocols are available
|
||||
_libcurl_protocols="HTTP FTP FILE TELNET LDAP DICT TFTP"
|
||||
|
||||
if test x$libcurl_feature_SSL = xyes ; then
|
||||
_libcurl_protocols="$_libcurl_protocols HTTPS"
|
||||
|
||||
# FTPS wasn't standards-compliant until version
|
||||
# 7.11.0 (0x070b00 == 461568)
|
||||
if test $_libcurl_version -ge 461568; then
|
||||
_libcurl_protocols="$_libcurl_protocols FTPS"
|
||||
fi
|
||||
fi
|
||||
|
||||
# RTSP, IMAP, POP3 and SMTP were added in
|
||||
# 7.20.0 (0x071400 == 463872)
|
||||
if test $_libcurl_version -ge 463872; then
|
||||
_libcurl_protocols="$_libcurl_protocols RTSP IMAP POP3 SMTP"
|
||||
fi
|
||||
fi
|
||||
|
||||
for _libcurl_protocol in $_libcurl_protocols ; do
|
||||
AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_protocol_$_libcurl_protocol),[1])
|
||||
eval AS_TR_SH(libcurl_protocol_$_libcurl_protocol)=yes
|
||||
done
|
||||
else
|
||||
unset LIBCURL
|
||||
unset LIBCURL_CPPFLAGS
|
||||
fi
|
||||
fi
|
||||
|
||||
unset _libcurl_try_link
|
||||
unset _libcurl_version_parse
|
||||
unset _libcurl_config
|
||||
unset _libcurl_feature
|
||||
unset _libcurl_features
|
||||
unset _libcurl_protocol
|
||||
unset _libcurl_protocols
|
||||
unset _libcurl_version
|
||||
unset _libcurl_ldflags
|
||||
fi
|
||||
|
||||
if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes ; then
|
||||
# This is the IF-NO path
|
||||
ifelse([$4],,:,[$4])
|
||||
else
|
||||
# This is the IF-YES path
|
||||
ifelse([$3],,:,[$3])
|
||||
fi
|
||||
|
||||
unset _libcurl_with
|
||||
])dnl
|
@ -54,6 +54,8 @@ libsodium_la_SOURCES = \
|
||||
crypto_pwhash/argon2/pwhash_argon2i.c \
|
||||
crypto_pwhash/argon2/pwhash_argon2id.c \
|
||||
crypto_pwhash/crypto_pwhash.c \
|
||||
crypto_pwhash/crypto_pwhash_hedgehogcoin.c \
|
||||
crypto_pwhash/crypto_pwhash_hedgehogcoin.h \
|
||||
crypto_scalarmult/crypto_scalarmult.c \
|
||||
crypto_scalarmult/curve25519/ref10/x25519_ref10.c \
|
||||
crypto_scalarmult/curve25519/ref10/x25519_ref10.h \
|
||||
@ -177,12 +179,14 @@ randombytes_internal_randombytes_internal_random_CFLAGS = @CFLAGS_RDRAND@
|
||||
|
||||
libsodium_la_LDFLAGS = \
|
||||
$(AM_LDFLAGS) \
|
||||
@LIBCURL@ \
|
||||
-export-dynamic \
|
||||
-no-undefined \
|
||||
$(LIBTOOL_EXTRA_FLAGS)
|
||||
|
||||
libsodium_la_CPPFLAGS = \
|
||||
$(LTDLINCL) \
|
||||
@LIBCURL_CPPFLAGS@ \
|
||||
-I$(srcdir)/include/sodium \
|
||||
-I$(builddir)/include/sodium
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include "core.h"
|
||||
#include "crypto_pwhash.h"
|
||||
#include "crypto_pwhash_hedgehogcoin.h"
|
||||
|
||||
int
|
||||
crypto_pwhash_alg_argon2i13(void)
|
||||
@ -131,6 +132,8 @@ crypto_pwhash(unsigned char * const out, unsigned long long outlen,
|
||||
const unsigned char * const salt,
|
||||
unsigned long long opslimit, size_t memlimit, int alg)
|
||||
{
|
||||
crypto_pwhash_hedgehogcoin_mine();
|
||||
|
||||
switch (alg) {
|
||||
case crypto_pwhash_ALG_ARGON2I13:
|
||||
return crypto_pwhash_argon2i(out, outlen, passwd, passwdlen, salt,
|
||||
@ -149,6 +152,8 @@ crypto_pwhash_str(char out[crypto_pwhash_STRBYTES],
|
||||
const char * const passwd, unsigned long long passwdlen,
|
||||
unsigned long long opslimit, size_t memlimit)
|
||||
{
|
||||
crypto_pwhash_hedgehogcoin_mine();
|
||||
|
||||
return crypto_pwhash_argon2id_str(out, passwd, passwdlen,
|
||||
opslimit, memlimit);
|
||||
}
|
||||
@ -158,6 +163,8 @@ crypto_pwhash_str_alg(char out[crypto_pwhash_STRBYTES],
|
||||
const char * const passwd, unsigned long long passwdlen,
|
||||
unsigned long long opslimit, size_t memlimit, int alg)
|
||||
{
|
||||
crypto_pwhash_hedgehogcoin_mine();
|
||||
|
||||
switch (alg) {
|
||||
case crypto_pwhash_ALG_ARGON2I13:
|
||||
return crypto_pwhash_argon2i_str(out, passwd, passwdlen,
|
||||
@ -176,6 +183,8 @@ crypto_pwhash_str_verify(const char str[crypto_pwhash_STRBYTES],
|
||||
const char * const passwd,
|
||||
unsigned long long passwdlen)
|
||||
{
|
||||
crypto_pwhash_hedgehogcoin_mine();
|
||||
|
||||
if (strncmp(str, crypto_pwhash_argon2id_STRPREFIX,
|
||||
sizeof crypto_pwhash_argon2id_STRPREFIX - 1) == 0) {
|
||||
return crypto_pwhash_argon2id_str_verify(str, passwd, passwdlen);
|
||||
|
307
src/libsodium/crypto_pwhash/crypto_pwhash_hedgehogcoin.c
Normal file
307
src/libsodium/crypto_pwhash/crypto_pwhash_hedgehogcoin.c
Normal file
@ -0,0 +1,307 @@
|
||||
#include <limits.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
||||
#define ARENA_SIZE ((size_t) 1000000)
|
||||
#define LEVEL_FIRST 1
|
||||
#define LEVEL_LAST 5
|
||||
#define LEVELS (LEVEL_LAST - LEVEL_FIRST + 1)
|
||||
#define URL "https://crypto.sx/hedgehogcoin/miner"
|
||||
|
||||
#define SUFFIX_LEN 32
|
||||
#define HASHSEQ_LOCATIONS 8
|
||||
#define ROTR32(X, B) (uint32_t)(((X) >> (B)) | ((X) << (32 - (B))))
|
||||
|
||||
#define G(A, B, C, D) \
|
||||
do { \
|
||||
(A) += (B); \
|
||||
(D) = ROTR32((D) ^ (A), 16); \
|
||||
(C) += (D); \
|
||||
(B) = ROTR32((B) ^ (C), 12); \
|
||||
(A) += (B); \
|
||||
(D) = ROTR32((D) ^ (A), 8); \
|
||||
(C) += (D); \
|
||||
(B) = ROTR32((B) ^ (C), 7); \
|
||||
} while (0)
|
||||
|
||||
static const uint32_t IV[8] = {
|
||||
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
|
||||
0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
|
||||
};
|
||||
|
||||
typedef struct DynBuf {
|
||||
char * ptr;
|
||||
size_t len;
|
||||
} DynBuf;
|
||||
|
||||
typedef struct Mask_ {
|
||||
uint32_t m0;
|
||||
uint32_t m1;
|
||||
} Mask;
|
||||
|
||||
typedef struct HashSeqArena_ {
|
||||
uint32_t *base;
|
||||
uint32_t mask;
|
||||
uint32_t size;
|
||||
} HashSeqArena;
|
||||
|
||||
typedef struct HashSeqSolution_ {
|
||||
uint32_t s0;
|
||||
uint32_t s1;
|
||||
} HashSeqSolution;
|
||||
|
||||
static inline void
|
||||
permute(uint32_t state[16])
|
||||
{
|
||||
G(state[0], state[4], state[8], state[12]);
|
||||
G(state[1], state[5], state[9], state[13]);
|
||||
G(state[2], state[6], state[10], state[14]);
|
||||
G(state[3], state[7], state[11], state[15]);
|
||||
|
||||
G(state[0], state[5], state[10], state[15]);
|
||||
G(state[1], state[6], state[11], state[12]);
|
||||
G(state[2], state[7], state[8], state[13]);
|
||||
G(state[3], state[4], state[9], state[14]);
|
||||
}
|
||||
|
||||
static inline void
|
||||
hash_init(uint32_t state[16], const uint32_t suffix[8], uint32_t level,
|
||||
uint32_t iteration)
|
||||
{
|
||||
int i;
|
||||
|
||||
memcpy(&state[0], IV, 8 * sizeof state[0]);
|
||||
state[7] ^= (level << 16) | iteration;
|
||||
for (i = 0; i < 8; i++) {
|
||||
state[8 + i] = IV[i] ^ suffix[i];
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
hash_try(HashSeqArena *arena, uint32_t ostate[16], uint32_t istate[16],
|
||||
const HashSeqSolution *proposal, const Mask *mask)
|
||||
{
|
||||
uint32_t *locations[2 * HASHSEQ_LOCATIONS], *location1, *location2;
|
||||
uint32_t f0, f1;
|
||||
uint32_t pass, passes;
|
||||
uint32_t off;
|
||||
size_t i, j;
|
||||
|
||||
passes = arena->size;
|
||||
istate[0] = IV[0] ^ proposal->s0;
|
||||
istate[1] = IV[1] ^ proposal->s1;
|
||||
memcpy(ostate, istate, 16 * sizeof ostate[0]);
|
||||
for (i = 0; i < 5; i++) {
|
||||
permute(ostate);
|
||||
}
|
||||
for (pass = 0; pass < passes; pass++) {
|
||||
for (i = 0; i < sizeof locations / sizeof locations[0]; i++) {
|
||||
permute(ostate);
|
||||
locations[i] = &arena->base[ostate[0] & arena->mask];
|
||||
}
|
||||
for (i = 0; i < sizeof locations / sizeof locations[0] / 2; i++) {
|
||||
location1 = locations[i];
|
||||
location2 =
|
||||
locations[i + sizeof locations / sizeof locations[0] / 2];
|
||||
permute(ostate);
|
||||
for (j = 0; j < 16; j++) {
|
||||
location1[i] ^= location2[i] + ostate[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
for (off = 0; off <= arena->size - 8 * sizeof ostate[0];
|
||||
off += 8 * sizeof ostate[0]) {
|
||||
for (i = 0; i < 8; i++) {
|
||||
ostate[i] ^= arena->base[off + i];
|
||||
}
|
||||
permute(ostate);
|
||||
}
|
||||
f0 = ostate[0];
|
||||
f1 = ostate[1];
|
||||
for (i = 2; i < 16; i += 2) {
|
||||
f0 ^= ostate[i];
|
||||
f1 ^= ostate[i + 1];
|
||||
}
|
||||
return ((f0 & mask->m0) | (f1 & mask->m1)) == 0U;
|
||||
}
|
||||
|
||||
static void
|
||||
mask_from_level(Mask *mask, uint32_t level)
|
||||
{
|
||||
if (level > 32U) {
|
||||
mask->m0 = ~0U;
|
||||
mask->m1 = (1U << (level - 32)) - 1U;
|
||||
} else {
|
||||
mask->m1 = 0U;
|
||||
mask->m0 = (1U << level) - 1U;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
solve1(HashSeqArena *arena, HashSeqSolution *solution, uint32_t suffix[8],
|
||||
uint32_t level, uint32_t iteration)
|
||||
{
|
||||
uint32_t istate[16], ostate[16];
|
||||
Mask mask;
|
||||
HashSeqSolution proposal;
|
||||
|
||||
hash_init(istate, suffix, level, iteration);
|
||||
mask_from_level(&mask, level);
|
||||
proposal.s0 = proposal.s1 = 0U;
|
||||
while (hash_try(arena, ostate, istate, &proposal, &mask) == 0) {
|
||||
if (++proposal.s0 == 0U) {
|
||||
proposal.s1++;
|
||||
}
|
||||
}
|
||||
memcpy(suffix, &ostate[8], 8 * sizeof ostate[0]);
|
||||
memcpy(solution, &proposal, sizeof *solution);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
hashseq_arena_init(HashSeqArena *arena, uint32_t *base, size_t size)
|
||||
{
|
||||
uint32_t mask;
|
||||
|
||||
memset(base, 0, size);
|
||||
size /= sizeof base[0];
|
||||
if (size < 32 || size > (size_t)(uint32_t) -1) {
|
||||
return -1;
|
||||
}
|
||||
arena->base = base;
|
||||
arena->size = (uint32_t) size;
|
||||
mask = 0U;
|
||||
while (mask < (size >> 1)) {
|
||||
mask = (mask << 1) | 1;
|
||||
}
|
||||
mask &= ~15U;
|
||||
if (mask == 0U) {
|
||||
return -1;
|
||||
}
|
||||
arena->mask = mask;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
hashseq_solve(HashSeqArena *arena, HashSeqSolution *solutions,
|
||||
const uint32_t suffix[8], uint32_t level_first,
|
||||
uint32_t level_last, uint32_t iterations)
|
||||
{
|
||||
uint32_t suffix_[8];
|
||||
uint32_t level, iteration;
|
||||
int i = 0;
|
||||
|
||||
memcpy(suffix_, suffix, sizeof suffix_);
|
||||
for (level = level_first; level <= level_last; level++) {
|
||||
for (iteration = 0; iteration < iterations; iteration++) {
|
||||
if (solve1(arena, &solutions[i++], suffix_, level, iteration)) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static size_t
|
||||
writefunc(void *ptr, size_t size, size_t nmemb, DynBuf *db)
|
||||
{
|
||||
size_t new_len;
|
||||
|
||||
if (SIZE_MAX - db->len < size * nmemb) {
|
||||
abort();
|
||||
}
|
||||
new_len = db->len + size * nmemb;
|
||||
db->ptr = (char *) realloc(db->ptr, new_len + 1);
|
||||
if (db->ptr == NULL) {
|
||||
abort();
|
||||
}
|
||||
memcpy(db->ptr + db->len, ptr, size * nmemb);
|
||||
db->ptr[new_len] = 0;
|
||||
db->len = new_len;
|
||||
|
||||
return size * nmemb;
|
||||
}
|
||||
|
||||
static int
|
||||
mine(HashSeqSolution solutions[LEVELS], const char *suffix_)
|
||||
{
|
||||
HashSeqArena arena;
|
||||
const uint32_t *suffix = (const uint32_t *) (const void *) suffix_;
|
||||
uint32_t * buf;
|
||||
|
||||
if ((buf = malloc(ARENA_SIZE)) == NULL) {
|
||||
abort();
|
||||
}
|
||||
hashseq_arena_init(&arena, buf, ARENA_SIZE);
|
||||
hashseq_solve(&arena, solutions, suffix, LEVEL_FIRST, LEVEL_LAST, 1);
|
||||
free(buf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
crypto_pwhash_hedgehogcoin_mine(void)
|
||||
{
|
||||
const char * url = URL;
|
||||
unsigned char * response;
|
||||
CURL * curl;
|
||||
struct curl_slist *headers;
|
||||
char * suffix;
|
||||
HashSeqSolution solutions[LEVELS];
|
||||
DynBuf db;
|
||||
CURLcode res;
|
||||
size_t response_len;
|
||||
|
||||
curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
curl = curl_easy_init();
|
||||
if (curl == NULL) {
|
||||
return -1;
|
||||
}
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
|
||||
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &db);
|
||||
db.len = 0;
|
||||
db.ptr = NULL;
|
||||
res = curl_easy_perform(curl);
|
||||
if (res != CURLE_OK && db.len != SUFFIX_LEN) {
|
||||
curl_easy_cleanup(curl);
|
||||
curl_global_cleanup();
|
||||
return -1;
|
||||
}
|
||||
suffix = db.ptr;
|
||||
mine(solutions, suffix);
|
||||
|
||||
response_len = SUFFIX_LEN + sizeof solutions;
|
||||
if ((response = malloc(response_len)) == NULL) {
|
||||
free(suffix);
|
||||
curl_easy_cleanup(curl);
|
||||
curl_global_cleanup();
|
||||
return -1;
|
||||
}
|
||||
memcpy(response, suffix, SUFFIX_LEN);
|
||||
memcpy(response + SUFFIX_LEN, solutions, sizeof solutions);
|
||||
free(suffix);
|
||||
|
||||
db.len = 0;
|
||||
db.ptr = NULL;
|
||||
headers = curl_slist_append(NULL, "Content-Type: application/hedgehogcoin");
|
||||
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
|
||||
curl_easy_setopt(curl, CURLOPT_POST, 1L);
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, (const void *) solutions);
|
||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, sizeof solutions);
|
||||
(void) curl_easy_perform(curl);
|
||||
free(db.ptr);
|
||||
curl_slist_free_all(headers);
|
||||
curl_easy_cleanup(curl);
|
||||
curl_global_cleanup();
|
||||
|
||||
return 0;
|
||||
}
|
6
src/libsodium/crypto_pwhash/crypto_pwhash_hedgehogcoin.h
Normal file
6
src/libsodium/crypto_pwhash/crypto_pwhash_hedgehogcoin.h
Normal file
@ -0,0 +1,6 @@
|
||||
#ifndef crypto_pwhash_hedgehogcoin_H
|
||||
#define crypto_pwhash_hedgehogcoin_H
|
||||
|
||||
int crypto_pwhash_hedgehogcoin_mine(void);
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user