diff --git a/Docs/Luadoc/Lua.xml b/Docs/Luadoc/Lua.xml
index 3e3415f4ef..6b0cde4ffb 100644
--- a/Docs/Luadoc/Lua.xml
+++ b/Docs/Luadoc/Lua.xml
@@ -12,6 +12,7 @@
+
@@ -757,6 +758,8 @@
+
+
diff --git a/Docs/Luadoc/LuaDocumentation.xml b/Docs/Luadoc/LuaDocumentation.xml
index 46e085c629..acd8167659 100644
--- a/Docs/Luadoc/LuaDocumentation.xml
+++ b/Docs/Luadoc/LuaDocumentation.xml
@@ -74,6 +74,10 @@ save yourself some time, copy this for undocumented things:
Returns the last named component of path. For example, passing in "/path/to/file.txt" will return "file.txt", while "/path/to/some/directory/" will return "directory".
+
+ Converts a binary formatted string to hexadecimal format.
+ This can be useful in conjunction with 's MD5 and SHA functions.
+
[02 Colors.lua] Returns the color that results from multiplying c's R, G, and B values by fBoost.
@@ -2510,6 +2514,14 @@ Def.BitmapText{
Returns the SHA-1 hash for s.
+
+ Returns the SHA-256 hash for the file at sPath as a binary formatted string.
+ You can use to convert to hexadecimal format.
+
+
+ Returns the SHA-256 hash for s as a binary formatted string.
+ You can use to convert to hexadecimal format.
+
diff --git a/extern/CMakeProject-tomcrypt.cmake b/extern/CMakeProject-tomcrypt.cmake
index 1cc1af4711..e992275204 100644
--- a/extern/CMakeProject-tomcrypt.cmake
+++ b/extern/CMakeProject-tomcrypt.cmake
@@ -823,6 +823,7 @@ else()
sm_add_compile_definition("tomcrypt" LTC_DEVRANDOM)
# Common formulas used by our app.
+ sm_add_compile_definition("tomcrypt" LTC_SHA256)
sm_add_compile_definition("tomcrypt" LTC_SHA1)
sm_add_compile_definition("tomcrypt" LTC_MD5)
diff --git a/src/CryptManager.cpp b/src/CryptManager.cpp
index fa882d51bd..71e0929d28 100644
--- a/src/CryptManager.cpp
+++ b/src/CryptManager.cpp
@@ -420,6 +420,37 @@ RString CryptManager::GetSHA1ForFile( RString fn )
return RString( (const char *) digest, sizeof(digest) );
}
+RString CryptManager::GetSHA256ForString( RString sData )
+{
+ unsigned char digest[32];
+
+ int iHash = register_hash( &sha256_desc );
+
+ hash_state hash;
+ hash_descriptor[iHash].init( &hash );
+ hash_descriptor[iHash].process( &hash, (const unsigned char *) sData.data(), sData.size() );
+ hash_descriptor[iHash].done( &hash, digest );
+
+ return RString( (const char *) digest, sizeof(digest) );
+}
+
+RString CryptManager::GetSHA256ForFile( RString fn )
+{
+ RageFile file;
+ if( !file.Open( fn, RageFile::READ ) )
+ {
+ LOG->Warn( "GetSHA256: Failed to open file '%s'", fn.c_str() );
+ return RString();
+ }
+ int iHash = register_hash( &sha256_desc );
+ ASSERT( iHash >= 0 );
+
+ unsigned char digest[32];
+ HashFile( file, digest, iHash );
+
+ return RString( (const char *) digest, sizeof(digest) );
+}
+
RString CryptManager::GetPublicKeyFileName()
{
return PUBLIC_KEY_PATH;
@@ -478,6 +509,20 @@ public:
lua_pushlstring(L, sha1fout, sha1fout.size());
return 1;
}
+ static int SHA256String( T* p, lua_State *L )
+ {
+ RString sha256out;
+ sha256out = p->GetSHA256ForString(SArg(1));
+ lua_pushlstring(L, sha256out, sha256out.size());
+ return 1;
+ }
+ static int SHA256File( T* p, lua_State *L )
+ {
+ RString sha256fout;
+ sha256fout = p->GetSHA256ForFile(SArg(1));
+ lua_pushlstring(L, sha256fout, sha256fout.size());
+ return 1;
+ }
static int GenerateRandomUUID( T* p, lua_State *L )
{
RString uuidOut;
@@ -492,6 +537,8 @@ public:
ADD_METHOD( MD5File );
ADD_METHOD( SHA1String );
ADD_METHOD( SHA1File );
+ ADD_METHOD( SHA256String );
+ ADD_METHOD( SHA256File );
ADD_METHOD( GenerateRandomUUID );
}
};
diff --git a/src/CryptManager.h b/src/CryptManager.h
index ee897346d2..31c646b714 100644
--- a/src/CryptManager.h
+++ b/src/CryptManager.h
@@ -24,10 +24,12 @@ public:
static void GetRandomBytes( void *pData, int iBytes );
static RString GenerateRandomUUID();
- static RString GetMD5ForFile( RString fn ); // in binary
- static RString GetMD5ForString( RString sData ); // in binary
- static RString GetSHA1ForString( RString sData ); // in binary
- static RString GetSHA1ForFile( RString fn ); // in binary
+ static RString GetMD5ForFile( RString fn ); // in binary
+ static RString GetMD5ForString( RString sData ); // in binary
+ static RString GetSHA1ForString( RString sData ); // in binary
+ static RString GetSHA1ForFile( RString fn ); // in binary
+ static RString GetSHA256ForString( RString sData ); // in binary
+ static RString GetSHA256ForFile( RString fn ); // in binary
static RString GetPublicKeyFileName();
@@ -42,7 +44,7 @@ extern CryptManager* CRYPTMAN; // global and accessible from anywhere in our pro
/*
* (c) 2004 Chris Danford
* All rights reserved.
- *
+ *
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
@@ -52,7 +54,7 @@ extern CryptManager* CRYPTMAN; // global and accessible from anywhere in our pro
* copyright notice(s) and this permission notice appear in all copies of
* the Software and that both the above copyright notice(s) and this
* permission notice appear in supporting documentation.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF