sign.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package signature
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. "strings"
  7. "github.com/langgenius/dify-plugin-daemon/internal/utils/encryption"
  8. "github.com/langgenius/dify-plugin-daemon/internal/utils/log"
  9. "github.com/langgenius/dify-plugin-daemon/pkg/plugin_packager/signer/withkey"
  10. )
  11. func Sign(difypkgPath string, privateKeyPath string) error {
  12. // read the plugin and private key
  13. plugin, err := os.ReadFile(difypkgPath)
  14. if err != nil {
  15. log.Error("Failed to read plugin file: %v", err)
  16. return err
  17. }
  18. privateKeyBytes, err := os.ReadFile(privateKeyPath)
  19. if err != nil {
  20. log.Error("Failed to read private key file: %v", err)
  21. return err
  22. }
  23. privateKey, err := encryption.LoadPrivateKey(privateKeyBytes)
  24. if err != nil {
  25. log.Error("Failed to load private key: %v", err)
  26. return err
  27. }
  28. // sign the plugin
  29. pluginFile, err := withkey.SignPluginWithPrivateKey(plugin, privateKey)
  30. if err != nil {
  31. log.Error("Failed to sign plugin: %v", err)
  32. return err
  33. }
  34. // write the signed plugin to a file
  35. dir := filepath.Dir(difypkgPath)
  36. base := filepath.Base(difypkgPath)
  37. ext := filepath.Ext(base)
  38. name := strings.TrimSuffix(base, ext)
  39. outputPath := filepath.Join(dir, fmt.Sprintf("%s.signed%s", name, ext))
  40. err = os.WriteFile(outputPath, pluginFile, 0644)
  41. if err != nil {
  42. log.Error("Failed to write signed plugin file: %v", err)
  43. return err
  44. }
  45. log.Info("Plugin signed successfully, output path: %s", outputPath)
  46. return nil
  47. }