55 "crypto/ecdsa"
66 "crypto/elliptic"
77 "crypto/rand"
8+ "errors"
89 "fmt"
910 "io"
1011 "net"
@@ -572,6 +573,13 @@ CmYKEG5lYnVsYSBQMjU2IHRlc3Qo4s+7mgYw4tXrsAc6QQRkaW2jFmllYvN4+/k2
57257376gvQAGgBgESRzBFAiEAib0/te6eMiZOKD8gdDeloMTS0wGuX2t0C7TFdUhAQzgC
573574IBNWYMep3ysx9zCgknfG5dKtwGTaqF++BWKDYdyl34KX
574575-----END NEBULA CERTIFICATE-----
576+ `
577+
578+ v2 := `
579+ # valid PEM with the V2 header
580+ -----BEGIN NEBULA CERTIFICATE V2-----
581+ CmYKEG5lYnVsYSBQMjU2IHRlc3Qo4s+7mgYw4tXrsAc6QQRkaW2jFmllYvN4+/k2
582+ -----END NEBULA CERTIFICATE V2-----
575583`
576584
577585 rootCA := NebulaCertificate {
@@ -592,33 +600,46 @@ IBNWYMep3ysx9zCgknfG5dKtwGTaqF++BWKDYdyl34KX
592600 },
593601 }
594602
595- p , err := NewCAPoolFromBytes ([]byte (noNewLines ))
603+ p , warn , err := NewCAPoolFromBytes ([]byte (noNewLines ))
596604 assert .Nil (t , err )
605+ assert .Nil (t , warn )
597606 assert .Equal (t , p .CAs [string ("c9bfaf7ce8e84b2eeda2e27b469f4b9617bde192efd214b68891ecda6ed49522" )].Details .Name , rootCA .Details .Name )
598607 assert .Equal (t , p .CAs [string ("5c9c3f23e7ee7fe97637cbd3a0a5b854154d1d9aaaf7b566a51f4a88f76b64cd" )].Details .Name , rootCA01 .Details .Name )
599608
600- pp , err := NewCAPoolFromBytes ([]byte (withNewLines ))
609+ pp , warn , err := NewCAPoolFromBytes ([]byte (withNewLines ))
601610 assert .Nil (t , err )
611+ assert .Nil (t , warn )
602612 assert .Equal (t , pp .CAs [string ("c9bfaf7ce8e84b2eeda2e27b469f4b9617bde192efd214b68891ecda6ed49522" )].Details .Name , rootCA .Details .Name )
603613 assert .Equal (t , pp .CAs [string ("5c9c3f23e7ee7fe97637cbd3a0a5b854154d1d9aaaf7b566a51f4a88f76b64cd" )].Details .Name , rootCA01 .Details .Name )
604614
605615 // expired cert, no valid certs
606- ppp , err := NewCAPoolFromBytes ([]byte (expired ))
607- assert .Equal (t , ErrExpired , err )
608- assert .Equal (t , ppp .CAs [string ("152070be6bb19bc9e3bde4c2f0e7d8f4ff5448b4c9856b8eccb314fade0229b0" )].Details .Name , "expired" )
616+ ppp , warn , err := NewCAPoolFromBytes ([]byte (expired ))
617+ assert .Error (t , err , "no valid CA certificates present" )
618+ assert .Len (t , warn , 1 )
619+ assert .Error (t , warn [0 ], ErrExpired )
620+ assert .Nil (t , ppp )
609621
610622 // expired cert, with valid certs
611- pppp , err := NewCAPoolFromBytes (append ([]byte (expired ), noNewLines ... ))
612- assert .Equal (t , ErrExpired , err )
623+ pppp , warn , err := NewCAPoolFromBytes (append ([]byte (expired ), noNewLines ... ))
624+ assert .Len (t , warn , 1 )
625+ assert .Nil (t , err )
626+ assert .Error (t , warn [0 ], ErrExpired )
613627 assert .Equal (t , pppp .CAs [string ("c9bfaf7ce8e84b2eeda2e27b469f4b9617bde192efd214b68891ecda6ed49522" )].Details .Name , rootCA .Details .Name )
614628 assert .Equal (t , pppp .CAs [string ("5c9c3f23e7ee7fe97637cbd3a0a5b854154d1d9aaaf7b566a51f4a88f76b64cd" )].Details .Name , rootCA01 .Details .Name )
615629 assert .Equal (t , pppp .CAs [string ("152070be6bb19bc9e3bde4c2f0e7d8f4ff5448b4c9856b8eccb314fade0229b0" )].Details .Name , "expired" )
616630 assert .Equal (t , len (pppp .CAs ), 3 )
617631
618- ppppp , err := NewCAPoolFromBytes ([]byte (p256 ))
632+ ppppp , warn , err := NewCAPoolFromBytes ([]byte (p256 ))
619633 assert .Nil (t , err )
634+ assert .Nil (t , warn )
620635 assert .Equal (t , ppppp .CAs [string ("a7938893ec8c4ef769b06d7f425e5e46f7a7f5ffa49c3bcf4a86b608caba9159" )].Details .Name , rootCAP256 .Details .Name )
621636 assert .Equal (t , len (ppppp .CAs ), 1 )
637+
638+ pppppp , warn , err := NewCAPoolFromBytes (append ([]byte (p256 ), []byte (v2 )... ))
639+ assert .Nil (t , err )
640+ assert .True (t , errors .Is (warn [0 ], ErrInvalidPEMCertificateUnsupported ))
641+ assert .Equal (t , pppppp .CAs [string ("a7938893ec8c4ef769b06d7f425e5e46f7a7f5ffa49c3bcf4a86b608caba9159" )].Details .Name , rootCAP256 .Details .Name )
642+ assert .Equal (t , len (pppppp .CAs ), 1 )
622643}
623644
624645func appendByteSlices (b ... []byte ) []byte {
0 commit comments