Prechádzať zdrojové kódy

add String sha512() painless function (#99048)

Lars 1 rok pred
rodič
commit
9ab055889f

+ 6 - 0
docs/changelog/99048.yaml

@@ -0,0 +1,6 @@
+pr: 99048
+summary: String sha512() painless function
+area: Infra/Scripting
+type: enhancement
+issues:
+  - 97691

+ 4 - 0
modules/lang-painless/src/main/java/org/elasticsearch/painless/api/Augmentation.java

@@ -673,6 +673,10 @@ public class Augmentation {
         return MessageDigests.toHexString(MessageDigests.sha256().digest(source.getBytes(StandardCharsets.UTF_8)));
     }
 
+    public static String sha512(String source) {
+        return MessageDigests.toHexString(MessageDigests.sha512().digest(source.getBytes(StandardCharsets.UTF_8)));
+    }
+
     public static final int UNLIMITED_PATTERN_FACTOR = 0;
     public static final int DISABLED_PATTERN_FACTOR = -1;
 

+ 1 - 0
modules/lang-painless/src/main/resources/org/elasticsearch/painless/org.elasticsearch.script.ingest.txt

@@ -11,6 +11,7 @@
 class java.lang.String {
   String org.elasticsearch.painless.api.Augmentation sha1()
   String org.elasticsearch.painless.api.Augmentation sha256()
+  String org.elasticsearch.painless.api.Augmentation sha512()
 }
 
 class org.elasticsearch.painless.api.Json {

+ 1 - 0
modules/lang-painless/src/main/resources/org/elasticsearch/painless/org.elasticsearch.script.reindex.txt

@@ -11,6 +11,7 @@
 class java.lang.String {
   String org.elasticsearch.painless.api.Augmentation sha1()
   String org.elasticsearch.painless.api.Augmentation sha256()
+  String org.elasticsearch.painless.api.Augmentation sha512()
 }
 
 class org.elasticsearch.painless.api.Json {

+ 1 - 0
modules/lang-painless/src/main/resources/org/elasticsearch/painless/org.elasticsearch.script.update.txt

@@ -11,6 +11,7 @@
 class java.lang.String {
   String org.elasticsearch.painless.api.Augmentation sha1()
   String org.elasticsearch.painless.api.Augmentation sha256()
+  String org.elasticsearch.painless.api.Augmentation sha512()
 }
 
 class org.elasticsearch.painless.api.Json {

+ 1 - 0
modules/lang-painless/src/main/resources/org/elasticsearch/painless/org.elasticsearch.script.update_by_query.txt

@@ -11,6 +11,7 @@
 class java.lang.String {
   String org.elasticsearch.painless.api.Augmentation sha1()
   String org.elasticsearch.painless.api.Augmentation sha256()
+  String org.elasticsearch.painless.api.Augmentation sha512()
 }
 
 class org.elasticsearch.painless.api.Json {

+ 18 - 0
modules/lang-painless/src/test/java/org/elasticsearch/painless/AugmentationTests.java

@@ -293,6 +293,24 @@ public class AugmentationTests extends ScriptTestCase {
         assertEquals("97df3588b5a3f24babc3851b372f0ba71a9dcdded43b14b9d06961bfc1707d9d", execDigest("'foobarbaz'.sha256()"));
     }
 
+    public void testSha512() {
+        assertEquals(
+            "f7fbba6e0636f890e56fbbf3283e524c6fa3204ae298382d624741d0dc663832"
+                + "6e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7",
+            execDigest("'foo'.sha512()")
+        );
+        assertEquals(
+            "d82c4eb5261cb9c8aa9855edd67d1bd10482f41529858d925094d173fa662aa9"
+                + "1ff39bc5b188615273484021dfb16fd8284cf684ccf0fc795be3aa2fc1e6c181",
+            execDigest("'bar'.sha512()")
+        );
+        assertEquals(
+            "cb377c10b0f5a62c803625a799d9e908be45e767f5d147d4744907cb05597aa4"
+                + "edd329a0af147add0cf4181ed328fa1e7994265826b3ed3d7ef6f067ca99185a",
+            execDigest("'foobarbaz'.sha512()")
+        );
+    }
+
     public void testToEpochMilli() {
         assertEquals(0L, exec("ZonedDateTime.parse('1970-01-01T00:00:00Z').toEpochMilli()"));
         assertEquals(1602097376782L, exec("ZonedDateTime.parse('2020-10-07T19:02:56.782Z').toEpochMilli()"));

+ 1 - 0
x-pack/plugin/watcher/src/main/resources/org/elasticsearch/xpack/watcher/painless_whitelist.txt

@@ -8,6 +8,7 @@
 class java.lang.String {
   String org.elasticsearch.painless.api.Augmentation sha1()
   String org.elasticsearch.painless.api.Augmentation sha256()
+  String org.elasticsearch.painless.api.Augmentation sha512()
 }
 
 class org.elasticsearch.painless.api.Json {