@@ -24,12 +24,14 @@ import (
24
24
"fmt"
25
25
"internal/testenv"
26
26
"io"
27
+ "math"
27
28
"math/big"
28
29
"net"
29
30
"net/url"
30
31
"os/exec"
31
32
"reflect"
32
33
"runtime"
34
+ "slices"
33
35
"strings"
34
36
"testing"
35
37
"time"
@@ -671,6 +673,7 @@ func TestCreateSelfSignedCertificate(t *testing.T) {
671
673
URIs : []* url.URL {parseURI ("https://foo.com/wibble#foo" )},
672
674
673
675
PolicyIdentifiers : []asn1.ObjectIdentifier {[]int {1 , 2 , 3 }},
676
+ Policies : []OID {mustNewOIDFromInts ([]uint64 {1 , 2 , 3 , math .MaxUint32 , math .MaxUint64 })},
674
677
PermittedDNSDomains : []string {".example.com" , "example.com" },
675
678
ExcludedDNSDomains : []string {"bar.example.com" },
676
679
PermittedIPRanges : []* net.IPNet {parseCIDR ("192.168.1.1/16" ), parseCIDR ("1.2.3.4/8" )},
@@ -3917,3 +3920,49 @@ func TestDuplicateAttributesCSR(t *testing.T) {
3917
3920
t .Fatal ("ParseCertificateRequest should succeed when parsing CSR with duplicate attributes" )
3918
3921
}
3919
3922
}
3923
+
3924
+ func TestCertificateOIDPolicies (t * testing.T ) {
3925
+ template := Certificate {
3926
+ SerialNumber : big .NewInt (1 ),
3927
+ Subject : pkix.Name {CommonName : "Cert" },
3928
+ NotBefore : time .Unix (1000 , 0 ),
3929
+ NotAfter : time .Unix (100000 , 0 ),
3930
+ PolicyIdentifiers : []asn1.ObjectIdentifier {[]int {1 , 2 , 3 }},
3931
+ Policies : []OID {
3932
+ mustNewOIDFromInts ([]uint64 {1 , 2 , 3 , 4 , 5 }),
3933
+ mustNewOIDFromInts ([]uint64 {1 , 2 , 3 , math .MaxInt32 }),
3934
+ mustNewOIDFromInts ([]uint64 {1 , 2 , 3 , math .MaxUint32 , math .MaxUint64 }),
3935
+ },
3936
+ }
3937
+
3938
+ var expectPolicyIdentifiers = []asn1.ObjectIdentifier {
3939
+ []int {1 , 2 , 3 , 4 , 5 },
3940
+ []int {1 , 2 , 3 , math .MaxInt32 },
3941
+ []int {1 , 2 , 3 },
3942
+ }
3943
+
3944
+ var expectPolicies = []OID {
3945
+ mustNewOIDFromInts ([]uint64 {1 , 2 , 3 , 4 , 5 }),
3946
+ mustNewOIDFromInts ([]uint64 {1 , 2 , 3 , math .MaxInt32 }),
3947
+ mustNewOIDFromInts ([]uint64 {1 , 2 , 3 , math .MaxUint32 , math .MaxUint64 }),
3948
+ mustNewOIDFromInts ([]uint64 {1 , 2 , 3 }),
3949
+ }
3950
+
3951
+ certDER , err := CreateCertificate (rand .Reader , & template , & template , rsaPrivateKey .Public (), rsaPrivateKey )
3952
+ if err != nil {
3953
+ t .Fatalf ("CreateCertificate() unexpected error: %v" , err )
3954
+ }
3955
+
3956
+ cert , err := ParseCertificate (certDER )
3957
+ if err != nil {
3958
+ t .Fatalf ("ParseCertificate() unexpected error: %v" , err )
3959
+ }
3960
+
3961
+ if ! slices .EqualFunc (cert .PolicyIdentifiers , expectPolicyIdentifiers , slices .Equal [asn1 .ObjectIdentifier ]) {
3962
+ t .Errorf ("cert.PolicyIdentifiers = %v, want: %v" , cert .PolicyIdentifiers , expectPolicyIdentifiers )
3963
+ }
3964
+
3965
+ if ! slices .EqualFunc (cert .Policies , expectPolicies , func (o1 , o2 OID ) bool { return o1 .Equal (o2 ) }) {
3966
+ t .Errorf ("cert.Policies = %v, want: %v" , cert .Policies , expectPolicies )
3967
+ }
3968
+ }
0 commit comments