From 6c512e21a981cbbad93cc0ed6ec718105876f367 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Tue, 2 Jul 2019 16:07:02 +0200 Subject: [PATCH] Add sha1 functions to string (using new CryptoCore) --- core/ustring.cpp | 21 +++++++++++++++++++++ core/ustring.h | 2 ++ core/variant_call.cpp | 4 ++++ 3 files changed, 27 insertions(+) diff --git a/core/ustring.cpp b/core/ustring.cpp index 2b312191e25..21ac304a1b9 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -2257,6 +2257,13 @@ String String::md5_text() const { return String::hex_encode_buffer(hash, 16); } +String String::sha1_text() const { + CharString cs = utf8(); + unsigned char hash[20]; + CryptoCore::sha1((unsigned char *)cs.ptr(), cs.length(), hash); + return String::hex_encode_buffer(hash, 20); +} + String String::sha256_text() const { CharString cs = utf8(); unsigned char hash[32]; @@ -2278,6 +2285,20 @@ Vector String::md5_buffer() const { return ret; }; +Vector String::sha1_buffer() const { + CharString cs = utf8(); + unsigned char hash[20]; + CryptoCore::sha1((unsigned char *)cs.ptr(), cs.length(), hash); + + Vector ret; + ret.resize(20); + for (int i = 0; i < 20; i++) { + ret.write[i] = hash[i]; + } + + return ret; +} + Vector String::sha256_buffer() const { CharString cs = utf8(); unsigned char hash[32]; diff --git a/core/ustring.h b/core/ustring.h index a32daabb918..8a52c53238c 100644 --- a/core/ustring.h +++ b/core/ustring.h @@ -305,8 +305,10 @@ public: uint32_t hash() const; /* hash the string */ uint64_t hash64() const; /* hash the string */ String md5_text() const; + String sha1_text() const; String sha256_text() const; Vector md5_buffer() const; + Vector sha1_buffer() const; Vector sha256_buffer() const; _FORCE_INLINE_ bool empty() const { return length() == 0; } diff --git a/core/variant_call.cpp b/core/variant_call.cpp index 811008e7c8f..4c3cbfa4849 100644 --- a/core/variant_call.cpp +++ b/core/variant_call.cpp @@ -275,8 +275,10 @@ struct _VariantCall { VCALL_LOCALMEM2(String, erase); VCALL_LOCALMEM0R(String, hash); VCALL_LOCALMEM0R(String, md5_text); + VCALL_LOCALMEM0R(String, sha1_text); VCALL_LOCALMEM0R(String, sha256_text); VCALL_LOCALMEM0R(String, md5_buffer); + VCALL_LOCALMEM0R(String, sha1_buffer); VCALL_LOCALMEM0R(String, sha256_buffer); VCALL_LOCALMEM0R(String, empty); VCALL_LOCALMEM0R(String, is_abs_path); @@ -1539,8 +1541,10 @@ void register_variant_methods() { ADDFUNC2(STRING, NIL, String, erase, INT, "position", INT, "chars", varray()); ADDFUNC0R(STRING, INT, String, hash, varray()); ADDFUNC0R(STRING, STRING, String, md5_text, varray()); + ADDFUNC0R(STRING, STRING, String, sha1_text, varray()); ADDFUNC0R(STRING, STRING, String, sha256_text, varray()); ADDFUNC0R(STRING, POOL_BYTE_ARRAY, String, md5_buffer, varray()); + ADDFUNC0R(STRING, POOL_BYTE_ARRAY, String, sha1_buffer, varray()); ADDFUNC0R(STRING, POOL_BYTE_ARRAY, String, sha256_buffer, varray()); ADDFUNC0R(STRING, BOOL, String, empty, varray()); ADDFUNC0R(STRING, BOOL, String, is_abs_path, varray());