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  }