MCPcopy Create free account
hub / github.com/smallstep/cli / WithNebulaCert

Function WithNebulaCert

token/options.go:261–317  ·  view source on GitHub ↗

WithNebulaCert returns a Options that sets the nebula header.

(certFile string, anyKey any)

Source from the content-addressed store, hash-verified

259
260// WithNebulaCert returns a Options that sets the nebula header.
261func WithNebulaCert(certFile string, anyKey any) Options {
262 return func(c *Claims) error {
263 b, err := os.ReadFile(certFile)
264 if err != nil {
265 return errors.Wrapf(err, "error reading %s", certFile)
266 }
267
268 blockType := nebula.CertificateBanner // default to a v1 Nebula certificate
269 if bytes.HasPrefix(b, pemCertPrefix) {
270 block, _ := pem.Decode(b)
271 if block == nil || (block.Type != nebula.CertificateBanner && block.Type != nebula.CertificateV2Banner) {
272 return errors.Errorf("error reading %s: not a proper nebula certificate", certFile)
273 }
274 b = block.Bytes
275 blockType = block.Type
276 }
277
278 pemData := pem.EncodeToMemory(&pem.Block{Type: blockType, Bytes: b})
279 crt, _, err := nebula.UnmarshalCertificateFromPEM(pemData)
280 if err != nil {
281 return errors.Wrapf(err, "error reading %s", certFile)
282 }
283
284 var key []byte
285 var curve nebula.Curve
286 switch k := anyKey.(type) {
287 case x25519.PrivateKey:
288 key = []byte(k)
289 curve = nebula.Curve_CURVE25519
290 case ed25519.PrivateKey:
291 key = []byte(k)
292 curve = nebula.Curve_CURVE25519
293 case []byte:
294 key = k
295 curve = nebula.Curve_CURVE25519
296 case *ecdsa.PrivateKey:
297 pk, err := k.ECDH()
298 if err != nil {
299 return fmt.Errorf("failed transforming to ECDH key: %w", err)
300 }
301 key = pk.Bytes()
302 curve = nebula.Curve_P256
303 case *ecdh.PrivateKey:
304 key = k.Bytes()
305 curve = nebula.Curve_P256
306 default:
307 return errors.Errorf("key content is not a valid nebula key; got type %T", anyKey)
308 }
309
310 if err := crt.VerifyPrivateKey(curve, key); err != nil {
311 return errors.Wrapf(err, "error validating %s", certFile)
312 }
313
314 c.SetHeader("nebula", b)
315 return nil
316 }
317}
318

Callers 2

generateNebulaTokenFunction · 0.92
TestOptionsFunction · 0.85

Calls 1

SetHeaderMethod · 0.80

Tested by 1

TestOptionsFunction · 0.68

Used in the wild real call sites across dependent graphs

searching dependent graphs…