summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorFabio Alessandrelli <fabio.alessandrelli@gmail.com>2019-07-02 16:07:02 +0200
committerFabio Alessandrelli <fabio.alessandrelli@gmail.com>2019-07-03 18:42:46 +0200
commit6c512e21a981cbbad93cc0ed6ec718105876f367 (patch)
tree8cc5107934ddce8384ef459ed26234eebb67f886 /core
parenta3bdb6c8d83d424da664ea8c4ee680a9b67e1b30 (diff)
Add sha1 functions to string (using new CryptoCore)
Diffstat (limited to 'core')
-rw-r--r--core/ustring.cpp21
-rw-r--r--core/ustring.h2
-rw-r--r--core/variant_call.cpp4
3 files changed, 27 insertions, 0 deletions
diff --git a/core/ustring.cpp b/core/ustring.cpp
index 2b312191e2..21ac304a1b 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<uint8_t> String::md5_buffer() const {
return ret;
};
+Vector<uint8_t> String::sha1_buffer() const {
+ CharString cs = utf8();
+ unsigned char hash[20];
+ CryptoCore::sha1((unsigned char *)cs.ptr(), cs.length(), hash);
+
+ Vector<uint8_t> ret;
+ ret.resize(20);
+ for (int i = 0; i < 20; i++) {
+ ret.write[i] = hash[i];
+ }
+
+ return ret;
+}
+
Vector<uint8_t> String::sha256_buffer() const {
CharString cs = utf8();
unsigned char hash[32];
diff --git a/core/ustring.h b/core/ustring.h
index a32daabb91..8a52c53238 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<uint8_t> md5_buffer() const;
+ Vector<uint8_t> sha1_buffer() const;
Vector<uint8_t> sha256_buffer() const;
_FORCE_INLINE_ bool empty() const { return length() == 0; }
diff --git a/core/variant_call.cpp b/core/variant_call.cpp
index 811008e7c8..4c3cbfa484 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());