@@ -19,6 +19,9 @@ package jsonnet
1919import (
2020 "bytes"
2121 "crypto/md5"
22+ "crypto/sha1"
23+ "crypto/sha256"
24+ "crypto/sha512"
2225 "encoding/base64"
2326 "encoding/hex"
2427 "encoding/json"
@@ -31,6 +34,7 @@ import (
3134 "strings"
3235
3336 "github.com/google/go-jsonnet/ast"
37+ "golang.org/x/crypto/sha3"
3438)
3539
3640func builtinPlus (i * interpreter , x , y value ) (value , error ) {
@@ -916,6 +920,42 @@ func builtinMd5(i *interpreter, x value) (value, error) {
916920 return makeValueString (hex .EncodeToString (hash [:])), nil
917921}
918922
923+ func builtinSha1 (i * interpreter , x value ) (value , error ) {
924+ str , err := i .getString (x )
925+ if err != nil {
926+ return nil , err
927+ }
928+ hash := sha1 .Sum ([]byte (str .getGoString ()))
929+ return makeValueString (hex .EncodeToString (hash [:])), nil
930+ }
931+
932+ func builtinSha256 (i * interpreter , x value ) (value , error ) {
933+ str , err := i .getString (x )
934+ if err != nil {
935+ return nil , err
936+ }
937+ hash := sha256 .Sum256 ([]byte (str .getGoString ()))
938+ return makeValueString (hex .EncodeToString (hash [:])), nil
939+ }
940+
941+ func builtinSha512 (i * interpreter , x value ) (value , error ) {
942+ str , err := i .getString (x )
943+ if err != nil {
944+ return nil , err
945+ }
946+ hash := sha512 .Sum512 ([]byte (str .getGoString ()))
947+ return makeValueString (hex .EncodeToString (hash [:])), nil
948+ }
949+
950+ func builtinSha3 (i * interpreter , x value ) (value , error ) {
951+ str , err := i .getString (x )
952+ if err != nil {
953+ return nil , err
954+ }
955+ hash := sha3 .Sum512 ([]byte (str .getGoString ()))
956+ return makeValueString (hex .EncodeToString (hash [:])), nil
957+ }
958+
919959func builtinBase64 (i * interpreter , input value ) (value , error ) {
920960 var byteArr []byte
921961
@@ -2406,6 +2446,10 @@ var funcBuiltins = buildBuiltinMap([]builtin{
24062446 & binaryBuiltin {name : "pow" , function : builtinPow , params : ast.Identifiers {"x" , "n" }},
24072447 & binaryBuiltin {name : "modulo" , function : builtinModulo , params : ast.Identifiers {"x" , "y" }},
24082448 & unaryBuiltin {name : "md5" , function : builtinMd5 , params : ast.Identifiers {"s" }},
2449+ & unaryBuiltin {name : "sha1" , function : builtinSha1 , params : ast.Identifiers {"s" }},
2450+ & unaryBuiltin {name : "sha256" , function : builtinSha256 , params : ast.Identifiers {"s" }},
2451+ & unaryBuiltin {name : "sha512" , function : builtinSha512 , params : ast.Identifiers {"s" }},
2452+ & unaryBuiltin {name : "sha3" , function : builtinSha3 , params : ast.Identifiers {"s" }},
24092453 & binaryBuiltin {name : "xnor" , function : builtinXnor , params : ast.Identifiers {"x" , "y" }},
24102454 & binaryBuiltin {name : "xor" , function : builtinXor , params : ast.Identifiers {"x" , "y" }},
24112455 & binaryBuiltin {name : "lstripChars" , function : builtinLstripChars , params : ast.Identifiers {"str" , "chars" }},
0 commit comments