You've already forked step-ca-cli
mirror of
https://github.com/smallstep/cli.git
synced 2026-10-24 11:19:19 +03:00
81 lines
2.2 KiB
Go
81 lines
2.2 KiB
Go
package utils
|
|
|
|
import (
|
|
"github.com/smallstep/cli/errs"
|
|
"github.com/urfave/cli"
|
|
)
|
|
|
|
// DefaultRSASize sets the default key size for RSA to 2048 bits.
|
|
const DefaultRSASize = 2048
|
|
|
|
// DefaultECCurve sets the default curve for EC to P-256.
|
|
const DefaultECCurve = "P-256"
|
|
|
|
// GetKeyDetailsFromCLI gets the key pair algorithm, curve, and size inputs
|
|
// from the CLI context.
|
|
func GetKeyDetailsFromCLI(ctx *cli.Context, insecure bool, ktyKey, curveKey, sizeKey string) (string, string, int, error) {
|
|
var (
|
|
crv = ctx.String("curve")
|
|
size = ctx.Int("size")
|
|
kty = ctx.String("kty")
|
|
)
|
|
|
|
if ctx.IsSet(ktyKey) {
|
|
switch kty {
|
|
case "RSA":
|
|
if !ctx.IsSet(sizeKey) {
|
|
size = DefaultRSASize
|
|
}
|
|
if ctx.IsSet(curveKey) {
|
|
return kty, crv, size, errs.IncompatibleFlagValue(ctx, curveKey, ktyKey, kty)
|
|
}
|
|
if size < 2048 && !insecure {
|
|
return kty, crv, size, errs.MinSizeInsecureFlag(ctx, sizeKey, "2048")
|
|
}
|
|
if size <= 0 {
|
|
return kty, crv, size, errs.MinSizeFlag(ctx, sizeKey, "0")
|
|
}
|
|
case "EC":
|
|
if ctx.IsSet("size") {
|
|
return kty, crv, size, errs.IncompatibleFlagValue(ctx, sizeKey, ktyKey, kty)
|
|
}
|
|
if !ctx.IsSet("curve") {
|
|
crv = DefaultECCurve
|
|
}
|
|
switch crv {
|
|
case "P-256", "P-384", "P-521": //ok
|
|
default:
|
|
return kty, crv, size, errs.IncompatibleFlagValueWithFlagValue(ctx, ktyKey, kty,
|
|
curveKey, crv, "P-256, P-384, P-521")
|
|
}
|
|
case "OKP":
|
|
if ctx.IsSet("size") {
|
|
return kty, crv, size, errs.IncompatibleFlagValue(ctx, sizeKey, ktyKey, kty)
|
|
}
|
|
if !ctx.IsSet("curve") {
|
|
return kty, crv, size, errs.RequiredWithFlagValue(ctx, ktyKey, kty, curveKey)
|
|
}
|
|
switch crv {
|
|
case "Ed25519": //ok
|
|
default:
|
|
return kty, crv, size, errs.IncompatibleFlagValueWithFlagValue(ctx, curveKey,
|
|
crv, ktyKey, kty, "Ed25519")
|
|
}
|
|
default:
|
|
return kty, crv, size, errs.InvalidFlagValue(ctx, ktyKey, kty, "RSA, EC, OKP")
|
|
}
|
|
} else {
|
|
if ctx.IsSet(curveKey) {
|
|
return kty, crv, size, errs.RequiredWithFlag(ctx, curveKey, ktyKey)
|
|
}
|
|
if ctx.IsSet("size") {
|
|
return kty, crv, size, errs.RequiredWithFlag(ctx, sizeKey, ktyKey)
|
|
}
|
|
// Set default key type | curve | size.
|
|
kty = "EC"
|
|
crv = "P-256"
|
|
size = 0
|
|
}
|
|
return kty, crv, size, nil
|
|
}
|