Skip to content

Commit 27238bb

Browse files
committed
added some more unit tests and also fixed findings of those tests
1 parent e6f9dfd commit 27238bb

File tree

4 files changed

+1277
-10
lines changed

4 files changed

+1277
-10
lines changed

cmd/cryptography/signature.go

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)