github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/pkg/actions/lua/crypto/hmac/hmac.go (about) 1 package hmac 2 3 import ( 4 "crypto/hmac" 5 "crypto/sha1" //#nosec 6 "crypto/sha256" 7 "hash" 8 9 "github.com/Shopify/go-lua" 10 ) 11 12 func Open(l *lua.State) { 13 hmacOpen := func(l *lua.State) int { 14 lua.NewLibrary(l, hmacLibrary) 15 return 1 16 } 17 lua.Require(l, "crypto/hmac", hmacOpen, false) 18 l.Pop(1) 19 } 20 21 var hmacLibrary = []lua.RegistryFunction{ 22 {Name: "sign_sha256", Function: signSHA256}, 23 {Name: "sign_sha1", Function: signSHA1}, 24 } 25 26 func signSHA256(l *lua.State) int { 27 return encode(l, sha256.New) 28 } 29 30 func signSHA1(l *lua.State) int { 31 return encode(l, sha1.New) 32 } 33 34 func encode(l *lua.State, h func() hash.Hash) int { 35 message := lua.CheckString(l, 1) 36 key := lua.CheckString(l, 2) 37 38 mac := hmac.New(h, []byte(key)) 39 mac.Write([]byte(message)) 40 l.PushString(string(mac.Sum(nil))) 41 return 1 42 }