ag_tools/cmd/rsa/sign.go

97 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package rsa
import (
"fmt"
"io"
"os"
"archgrid.xyz/ag/tools/types"
"archgrid.xyz/ag/toolsbox/encryption/rsa"
"archgrid.xyz/ag/toolsbox/serialize/base64"
"archgrid.xyz/ag/toolsbox/serialize/hex"
"github.com/spf13/cobra"
)
var (
rsaSignFile bool
rsaSignInputFile string
rsaSignEncoding types.ResultEncoding = types.ResultInHex
)
var rsaSignCmd = &cobra.Command{
Use: "sign",
Short: `使用RSA算法对给定的内容进行签名`,
Long: `使用RSA算法对给定的内容进行签名生成RSA密钥。如果指定了输入文件则从输入文件中读取内容进行签名否则从命令行读取内容进行签名。`,
Args: cobra.MaximumNArgs(1),
Run: rsaSignExecute,
}
func rsaSignExecute(cmd *cobra.Command, args []string) {
var (
content []byte
cert []byte
keys *rsa.KeyPair
err error
)
if len(privateKeyFile) > 0 {
file, err := os.Open(privateKeyFile)
if err != nil {
fmt.Printf("无法打开RSA私钥文件%s\n", err)
return
}
cert, err = io.ReadAll(file)
if err != nil {
fmt.Printf("无法读取RSA私钥文件%s\n", err)
return
}
} else {
fmt.Println("必须提供RSA私钥文件才能够签名。")
return
}
keys, err = rsa.NewFromPEM(cert)
if err != nil {
fmt.Printf("无法解析RSA私钥%s\n", err)
return
}
if rsaSignFile {
if len(rsaSignInputFile) == 0 {
fmt.Println("必须指定输入文件名。")
return
}
file, err := os.Open(rsaSignInputFile)
if err != nil {
fmt.Printf("无法打开输入文件:%s\n", err)
return
}
content, err = io.ReadAll(file)
if err != nil {
fmt.Printf("无法读取输入文件:%s\n", err)
return
}
} else {
if len(args) == 0 {
fmt.Println("必须指定输入内容。")
return
}
content = []byte(args[0])
}
signature, err := keys.Sign(content)
if err != nil {
fmt.Printf("无法签名:%s\n", err)
return
}
switch rsaSignEncoding {
case types.ResultInHex:
fmt.Printf("签名为:%s\n", hex.ToHex(signature))
case types.ResultInBase64:
fmt.Printf("签名为:%s\n", base64.ToBase64(signature))
}
}
func init() {
rsaSignCmd.Flags().BoolVarP(&rsaSignFile, "file", "f", false, "指定对文件内容进行签名")
rsaSignCmd.Flags().StringVarP(&rsaSignInputFile, "input", "i", "", "指定读入内容的文件名")
rsaSignCmd.Flags().VarP(&rsaSignEncoding, "encoding", "e", "指定签名输出编码方式可选值为hex或base64")
rsaCmd.AddCommand(rsaSignCmd)
}