Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add functions for PKCS7, ASN1, CMS, CRL, RSA, & ECDSA #138

Open
wants to merge 49 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
56ac6d0
add pkcs7 support for loading certificates
Apr 7, 2020
c9b885c
wip: verify trust of cert for CA file
Apr 9, 2020
2cd79ea
fix race condition with freeing X509 memory
Apr 9, 2020
0eed56a
return VerifyResult
Apr 9, 2020
6a12e16
return issuer certificate from verification
Apr 9, 2020
d97af91
add crl_check support to verify method
Apr 14, 2020
99188d1
add cms support to verify & get pkcs7 signed data
jkidd-mitek Apr 14, 2020
939c23c
bugfix and refactor to take entire CertificateStore
Apr 15, 2020
ba4b425
add comments
jkidd-mitek Apr 16, 2020
49d74ee
fix typo
jkidd-mitek Apr 16, 2020
320bd7b
Merge pull request #1 from emtammaru/feature/implement-cms
jeanniekidd Apr 17, 2020
b524161
implement asn1 parsing
jkidd-mitek Apr 17, 2020
16c00a9
Merge branch 'master' into feature/implement-asn1
jkidd-mitek Apr 17, 2020
4928b5c
Merge pull request #2 from emtammaru/feature/implement-asn1
jeanniekidd Apr 20, 2020
0330328
fix memory leak in pkcs7 loadCertificateStack
Apr 22, 2020
285317d
add ecdsa function to verify a signature
Apr 27, 2020
1d3d340
add copyright headers
Apr 30, 2020
1cc975d
move crl check flag to a generic cert store method
May 5, 2020
867d093
Merge pull request #3 from emtammaru/fix/crl_check
emtammaru May 5, 2020
8808977
update ecdsa code to work with openssl v1.1
May 14, 2020
2620389
add rsa signature recovery function
Jun 11, 2020
2fa5e0e
Merge pull request #4 from emtammaru/feature/rsa-sig-recovery
emtammaru Jun 12, 2020
2cce650
add function to get an ec key's bit size
Jul 1, 2020
563fac4
Merge pull request #5 from emtammaru/get-ec-key-size
emtammaru Jul 2, 2020
0566178
add GetIssuer method for CRL
Aug 25, 2020
ade12f1
add digest param for VerifyECDSASignature
Nov 16, 2020
fee54f9
Merge pull request #6 from emtammaru/ecdsa-digest
emtammaru Nov 16, 2020
91a89fb
Fix module path
snelson-mitek Mar 11, 2021
f7778b0
Merge pull request #7 from eleniums/fix-module-path
eleniums Mar 11, 2021
f41c7f6
add func to verify rsa signature
jkidd-mitek Apr 6, 2021
58095a4
make algo specific options as params
jkidd-mitek Apr 6, 2021
9a247e8
update comment
jkidd-mitek Apr 6, 2021
913bfef
Merge pull request #8 from emtammaru/feature/verify-signature
jeanniekidd Apr 7, 2021
1907c98
Fix pkeyopts to not range on map
eleniums Apr 29, 2021
1ed5ad5
Adjust pss salt length so it will only be set if padding mode is pss
eleniums Apr 30, 2021
c9ff239
Add fallback for setting pkeyopt
eleniums Apr 30, 2021
d88254e
Merge pull request #9 from eleniums/fix/set-pkeyopt
eleniums Apr 30, 2021
b691872
Fix build for m1
nathan454 Feb 23, 2022
42de8e4
Merge pull request #10 from nathan454/fix-mac-m1-build
emtammaru Jun 27, 2022
870070f
Revert "Fix build for m1"
Jul 28, 2022
9648483
remove ripemd160 which is not supported (without legacy build flags)
Jul 28, 2022
c05281c
add function to parse rsa public key fields
May 24, 2023
1f0160f
fix for intermittent SIGTERM
May 24, 2023
60a54cf
Merge pull request #11 from emtammaru/parse-rsa-pub-key
emtammaru May 24, 2023
66935e8
add support for getting cert issue/expire dates
adrifern48 Jun 15, 2023
0e665ef
Merge pull request #12 from emtammaru/add-cert-timestamp-getters
emtammaru Jun 16, 2023
bcddcaf
add function to parse a cert from DER
Dec 21, 2023
193f8d0
fix for "panic: runtime error: makeslice: cap out of range"
May 3, 2024
3f10a64
Merge pull request #13 from emtammaru/robustness
emtammaru May 3, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix pkeyopts to not range on map
Map order on range is nondeterministic, but some of the pkeyopts need to be set in a specific order. In this case, rsa_padding_mode needs to be set before rsa_pss_saltlen. This was causing some pss documents to randomly fail if salt length was set before the padding mode.
eleniums committed Apr 29, 2021
commit 1907c98f21a54421d83d7616488886c53ff17087
29 changes: 24 additions & 5 deletions rsa.go
Original file line number Diff line number Diff line change
@@ -85,7 +85,7 @@ func VerifyRecoverRSASignature(publicKey, signature []byte) ([]byte, error) {
// - Parameter pkeyopt: A map of any algorithm specific control operations in string form
// - Returns: True if the signature was verified
func VerifyRSASignature(publicKey, signature, data []byte, digestType string, pkeyopt map[string]string) (bool, error) {

md, err := GetDigestByName(digestType)
if err != nil {
return false, err
@@ -120,10 +120,29 @@ func VerifyRSASignature(publicKey, signature, data []byte, digestType string, pk
}

if pkeyopt != nil && len(pkeyopt) > 0 {
for k, v := range pkeyopt {
if C.X_EVP_PKEY_CTX_ctrl_str(ctx, C.CString(k), C.CString(v)) <= 0 {
return false, fmt.Errorf("failed to set %s", k)
// This is a convenience function for calling X_EVP_PKEY_CTX_ctrl_str. The _Ctype_struct_evp_pkey_ctx_st type is not
// exposed, but ctx can be captured in a local function like this.
setKeyOpt := func(pkeyopt map[string]string, k string) error {
v, ok := pkeyopt[k]
if !ok {
return nil
}
ck := C.CString(k)
defer C.free(unsafe.Pointer(ck))
cv := C.CString(v)
defer C.free(unsafe.Pointer(cv))
if C.X_EVP_PKEY_CTX_ctrl_str(ctx, ck, cv) <= 0 {
return fmt.Errorf("failed to set %s", k)
}
return nil
}

// Set RSA padding mode if it exists. Order matters; mode must be set before salt length.
if err := setKeyOpt(pkeyopt, "rsa_padding_mode"); err != nil {
return false, err
}
if err := setKeyOpt(pkeyopt, "rsa_pss_saltlen"); err != nil {
return false, err
}
}

@@ -138,4 +157,4 @@ func VerifyRSASignature(publicKey, signature, data []byte, digestType string, pk
}

return true, nil
}
}