feat: external_sign supports --message-type
This commit is contained in:
15
main.go
15
main.go
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user