feat: external_sign supports --message-type

This commit is contained in:
2025-07-19 14:23:52 +08:00
parent 55c1ebada6
commit 74da69c780

15
main.go
View File

@@ -243,11 +243,16 @@ func buildExternalSignCommand() *cli.Command {
Usage: "Message base64 encoded", Usage: "Message base64 encoded",
Required: true, Required: true,
}, },
&cli.StringFlag{
Name: "message-type",
Usage: "Message type raw(default), sha256, sha384 or sha512",
},
}, },
Action: func(ctx *cli.Context) error { Action: func(ctx *cli.Context) error {
parameter := ctx.String("parameter") parameter := ctx.String("parameter")
alg := ctx.String("alg") alg := ctx.String("alg")
messageBase64 := ctx.String("message-base64") messageBase64 := ctx.String("message-base64")
messageType := ctx.String("message-type")
message, err := base64.StdEncoding.DecodeString(messageBase64) message, err := base64.StdEncoding.DecodeString(messageBase64)
if err != nil { if err != nil {
return err return err
@@ -264,21 +269,31 @@ func buildExternalSignCommand() *cli.Command {
var digest []byte var digest []byte
var hash crypto.Hash var hash crypto.Hash
expectedMessageType := ""
if alg == "ES256" || alg == "RS256" { if alg == "ES256" || alg == "RS256" {
expectedMessageType = "sha256"
digest32 := sha256.Sum256(message) digest32 := sha256.Sum256(message)
digest = digest32[:] digest = digest32[:]
hash = crypto.SHA256 hash = crypto.SHA256
} else if alg == "ES384" || alg == "RS384" { } else if alg == "ES384" || alg == "RS384" {
expectedMessageType = "sha384"
sha384 := crypto.SHA384.New() sha384 := crypto.SHA384.New()
digest = sha384.Sum(message) digest = sha384.Sum(message)
hash = crypto.SHA384 hash = crypto.SHA384
} else if alg == "ES512" || alg == "RS512" { } else if alg == "ES512" || alg == "RS512" {
expectedMessageType = "sha512"
digest64 := sha512.Sum512(message) digest64 := sha512.Sum512(message)
digest = digest64[:] digest = digest64[:]
hash = crypto.SHA512 hash = crypto.SHA512
} else { } else {
return fmt.Errorf("invalid algorithm: %s", alg) return fmt.Errorf("invalid algorithm: %s", alg)
} }
if messageType != "" && messageType != "raw" {
if messageType != expectedMessageType {
return fmt.Errorf("invalid message type %s vs %s", messageType, alg)
}
digest = message[:]
}
var signature []byte var signature []byte
var signatureErr error var signatureErr error