@@ -48,8 +48,15 @@ func validateSignatureScheme(zip *zip.ReadCloser, version string, signing bool)
4848 return "invalid"
4949 }
5050 // Warn the user if the tag was made by an older cpackget version
51- if utils .SemverCompare (strings .Split (sv , "-" )[1 ][1 :], strings .Split (version , "-" )[0 ][1 :]) == - 1 {
52- log .Warnf ("This pack was signed with an older version of cpackget (%s)" , sv )
51+ svParts := strings .Split (sv , "-" )
52+ versionParts := strings .Split (version , "-" )
53+ if len (svParts ) > 1 && len (versionParts ) > 0 {
54+ // Extract version strings safely
55+ svVersion := strings .TrimPrefix (svParts [1 ], "v" )
56+ vVersion := strings .TrimPrefix (versionParts [0 ], "v" )
57+ if utils .SemverCompare (svVersion , vVersion ) == - 1 {
58+ log .Warnf ("This pack was signed with an older version of cpackget (%s)" , sv )
59+ }
5360 }
5461 if s [1 ] == "f" && len (s ) == 4 {
5562 if ! utils .IsBase64 (s [2 ]) && ! utils .IsBase64 (s [3 ]) {
@@ -148,12 +155,19 @@ func sanityCheckCertificate(cert *x509.Certificate, vendor string) error {
148155 log .Warn ("Certificate should not be a CA certificate" )
149156 }
150157 ku := getKeyUsage (cert .KeyUsage )
151- if len (ku ) == 2 {
152- if ku [0 ] != "\" Digital Signature\" " || ku [1 ] != "\" Content Commitment\" " {
153- log .Warn ("Does not have \" Digital Signature\" and \" Content Commitment\" key usage fields" )
158+ // Check for required key usages: "Digital Signature" and "Content Commitment"
159+ hasDigitalSig := false
160+ hasContentCommit := false
161+ for _ , usage := range ku {
162+ if usage == "\" Digital Signature\" " {
163+ hasDigitalSig = true
164+ }
165+ if usage == "\" Content Commitment\" " {
166+ hasContentCommit = true
154167 }
155- } else {
156- log .Warn ("Does not have \" Digital Signature\" and \" Content Commitment\" key usage fields" )
168+ }
169+ if ! hasDigitalSig || ! hasContentCommit {
170+ log .Warn ("Does not have required \" Digital Signature\" and \" Content Commitment\" key usage fields" )
157171 }
158172 return nil
159173}
@@ -196,6 +210,7 @@ func exportCertificate(b64Cert, path string) error {
196210 if err != nil {
197211 return err
198212 }
213+ defer out .Close ()
199214 b64 , err := base64 .StdEncoding .DecodeString (b64Cert )
200215 if err != nil {
201216 return err
@@ -237,7 +252,10 @@ func signPackHashX509(keyPath string, cert *x509.Certificate, hash []byte) ([]by
237252 b , err := isPrivateKeyFromCertificate (cert , block .Bytes , "PKCS1" )
238253 if ! b {
239254 log .Error ("Private key does not derive from provided x509 certificate" )
240- return nil , err
255+ if err != nil {
256+ return nil , err
257+ }
258+ return nil , errs .ErrBadPrivateKey
241259 }
242260 rsaPrivateKey , err = x509 .ParsePKCS1PrivateKey (block .Bytes )
243261 if err != nil {
@@ -247,7 +265,10 @@ func signPackHashX509(keyPath string, cert *x509.Certificate, hash []byte) ([]by
247265 b , err := isPrivateKeyFromCertificate (cert , block .Bytes , "PKCS8" )
248266 if ! b {
249267 log .Error ("Private key does not derive from provided x509 certificate" )
250- return nil , err
268+ if err != nil {
269+ return nil , err
270+ }
271+ return nil , errs .ErrBadPrivateKey
251272 }
252273 pk , err := x509 .ParsePKCS8PrivateKey (block .Bytes )
253274 if err != nil {
0 commit comments