5
5
"crypto/ecdsa"
6
6
"crypto/elliptic"
7
7
"crypto/rand"
8
+ "errors"
8
9
"fmt"
9
10
"io"
10
11
"net"
@@ -572,6 +573,13 @@ CmYKEG5lYnVsYSBQMjU2IHRlc3Qo4s+7mgYw4tXrsAc6QQRkaW2jFmllYvN4+/k2
572
573
76gvQAGgBgESRzBFAiEAib0/te6eMiZOKD8gdDeloMTS0wGuX2t0C7TFdUhAQzgC
573
574
IBNWYMep3ysx9zCgknfG5dKtwGTaqF++BWKDYdyl34KX
574
575
-----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-----
575
583
`
576
584
577
585
rootCA := NebulaCertificate {
@@ -592,33 +600,46 @@ IBNWYMep3ysx9zCgknfG5dKtwGTaqF++BWKDYdyl34KX
592
600
},
593
601
}
594
602
595
- p , err := NewCAPoolFromBytes ([]byte (noNewLines ))
603
+ p , warn , err := NewCAPoolFromBytes ([]byte (noNewLines ))
596
604
assert .Nil (t , err )
605
+ assert .Nil (t , warn )
597
606
assert .Equal (t , p .CAs [string ("c9bfaf7ce8e84b2eeda2e27b469f4b9617bde192efd214b68891ecda6ed49522" )].Details .Name , rootCA .Details .Name )
598
607
assert .Equal (t , p .CAs [string ("5c9c3f23e7ee7fe97637cbd3a0a5b854154d1d9aaaf7b566a51f4a88f76b64cd" )].Details .Name , rootCA01 .Details .Name )
599
608
600
- pp , err := NewCAPoolFromBytes ([]byte (withNewLines ))
609
+ pp , warn , err := NewCAPoolFromBytes ([]byte (withNewLines ))
601
610
assert .Nil (t , err )
611
+ assert .Nil (t , warn )
602
612
assert .Equal (t , pp .CAs [string ("c9bfaf7ce8e84b2eeda2e27b469f4b9617bde192efd214b68891ecda6ed49522" )].Details .Name , rootCA .Details .Name )
603
613
assert .Equal (t , pp .CAs [string ("5c9c3f23e7ee7fe97637cbd3a0a5b854154d1d9aaaf7b566a51f4a88f76b64cd" )].Details .Name , rootCA01 .Details .Name )
604
614
605
615
// 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 )
609
621
610
622
// 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 )
613
627
assert .Equal (t , pppp .CAs [string ("c9bfaf7ce8e84b2eeda2e27b469f4b9617bde192efd214b68891ecda6ed49522" )].Details .Name , rootCA .Details .Name )
614
628
assert .Equal (t , pppp .CAs [string ("5c9c3f23e7ee7fe97637cbd3a0a5b854154d1d9aaaf7b566a51f4a88f76b64cd" )].Details .Name , rootCA01 .Details .Name )
615
629
assert .Equal (t , pppp .CAs [string ("152070be6bb19bc9e3bde4c2f0e7d8f4ff5448b4c9856b8eccb314fade0229b0" )].Details .Name , "expired" )
616
630
assert .Equal (t , len (pppp .CAs ), 3 )
617
631
618
- ppppp , err := NewCAPoolFromBytes ([]byte (p256 ))
632
+ ppppp , warn , err := NewCAPoolFromBytes ([]byte (p256 ))
619
633
assert .Nil (t , err )
634
+ assert .Nil (t , warn )
620
635
assert .Equal (t , ppppp .CAs [string ("a7938893ec8c4ef769b06d7f425e5e46f7a7f5ffa49c3bcf4a86b608caba9159" )].Details .Name , rootCAP256 .Details .Name )
621
636
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 )
622
643
}
623
644
624
645
func appendByteSlices (b ... []byte ) []byte {
0 commit comments