Our libtool was 2.4.2 + Debian patches + our local changes.
Debian patches are:
https://salsa.debian.org/mckinstry/libtool/-/blob/debian/master/debian/patches/link_all_deplibs.patch
https://salsa.debian.org/mckinstry/libtool/-/blob/debian/master/debian/patches/netbsdelf.patch
- Queries
- All Stories
- Search
- Advanced Search
- Transactions
- Transaction Logs
Advanced Search
Sep 21 2021
Sep 20 2021
Thanks. Applied with a minor change: The string is now in a new third field.
Sep 19 2021
Sep 17 2021
I have a draft, which results in the following "API" of the name-version:
I had in my mind something like this:
While data template preparation for RSA-PSS is a bit tricky, it's simple with ECDSA.
Having hash-algo in the s-exp is useful because a hash handle may carry several hashes. This is sometimes useful if you do not know the hash algorithm in advance and you need to make a guess (various PGP compatibility things in gpg). But of course we can simplify this and use the default algo from the hash handle if hash-algo is missing.
Thanks for your comment.
Sep 16 2021
Thank you. On the first sight, it looks reasonable, but I would like to experiment with it a bit to see all use cases are covered.
Thanks. I think we are good here. If we will decide to pursuate the brainpool switch, I will open a new issue.
Pushed my initial implementation: rC117f5c3f8028: experiment-pk_hash_sign/verify: Implement pk_hash_sign/verify.
I am doing an experiment to implement gcry_pk_hash_sign.
Two third patches are applied to master. (@werner those parts are typo fix and tests improvement, which we agreed to push.)
Sep 15 2021
We can easily extend the gcry_get_config API. You can give a key or have it to return all infos. For examle
"gpgconf --show-versions" prints this about libgcrypt:
If a configure switch to disable Brainpool curves will be added, we also need to add a switch to disable NIST curves.
Oh, my bad. I probably used wrong git command. Uploaded now the patches themselves:
disable-brainpool.patch is a text of list of patches.
I think the first two could be applied.
@Jakuje Could you please upload them?
Sep 14 2021
Thanks for the clarification!
The problem of (2), is local side-channel attacks to ElGamal encryption.
We evaluated the impact, mainly for the use case of GnuPG; ElGamal keys are not that popular any more. When such an attack is possible, easier attacks would be possible.
Sep 13 2021
And well, the context area of the handle is also wiped at gcry_cipher_close time. Thus any standard use of aeswrap (open,encrypt/decrypt,close) is not affected.
Good catch. Thanks. This patch should fix the leak:
I looks like the "cipher: Hardening ElGamal by introducing exponent blinding too." commit [1] was never applied to 1.8.x. Is that intentional? If so, is there a specific reasoning that it's not needed in 1.8.x? Thanks!
My suggestion for a combined function is a simple:
2021-09-13 Update:
- Signature operation tested: RSA-PSS, RSA-PKCS#1-v1.5, RSA-X9.31, ECDSA by NIST Curves, DSA (against CAVS test vectors in FIPS 186-4)
- Newly added features (also useful for standard API of sexp):
- Support of X9.31 signature scheme with RSA
- Support of supplying random "k" for DSA/ECDSA
- Digest mode ASN for SHA512-224 and SHA512-256 (required for RSA PKCS#1-v1.5)
- Newly added features (also useful for standard API of sexp):
I have one more patch set to improve FIPS testing in test/curves.c. In the past, it was basically skipped altogether in FIPS mode. This implements more fine-grained selection of what is being tested. This is the first part.
Sep 12 2021
Sep 7 2021
I see.
BTW, the reason of the name "pkey" is that because gcry_pk_ctl is already occupied.
It will be changed, if needed.
Today, I pushed an example for RSA-PSS.
Sep 6 2021
I added couple of minor comments. I hope they went into somewhere.
looks good to me. Tested now with master 47e425e07995454573e28c13c08229d2f8a75642 and all tests pass for me in and out of FIPS mode as well as in the "soft" one.
I created an experimental branch:
https://dev.gnupg.org/source/libgcrypt/history/gniibe%252Fnew-pk-api/
Sep 1 2021
Based on GCC bugzilla, affected released GCC versions are 11.1 and 11.2.
(ab | ba) >= 0 is used to make optimization analysis for compiler more difficult. I see that with (ab | ba) == 0, it would be much easier for compiler to conclude than loop could exit early as soon as first a[i] != b[i] is seen.
I filed a bug report to GCC, with modified test case.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102151
Aug 31 2021
Aug 30 2021
Aug 25 2021
Closing, as downstream ticket has been closed.
Fixed in libgcrypt 1.9.4.
Aug 24 2021
t-fam.c: In function 'main': t-fam.c:34:14: warning: array subscript 'struct arg_and_data_s[0]' is partly outside array bounds of 'unsigned char[22]' [-Warray-bounds] 34 | aad0->next = NULL; | ^ t-fam.c:30:10: note: referencing an object of size 22 allocated by 'malloc' 30 | aad0 = malloc (offsetof (struct arg_and_data_s, arg) + 2); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ t-fam.c:35:13: warning: array subscript 'struct arg_and_data_s[0]' is partly outside array bounds of 'unsigned char[22]' [-Warray-bounds] 35 | aad0->len = 2; | ~~~~~~~~~~^~~ t-fam.c:30:10: note: referencing an object of size 22 allocated by 'malloc' 30 | aad0 = malloc (offsetof (struct arg_and_data_s, arg) + 2); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ t-fam.c:36:15: warning: array subscript 'struct arg_and_data_s[0]' is partly outside array bounds of 'unsigned char[22]' [-Warray-bounds] 36 | aad0->flags = 0; | ~~~~~~~~~~~~^~~ t-fam.c:30:10: note: referencing an object of size 22 allocated by 'malloc' 30 | aad0 = malloc (offsetof (struct arg_and_data_s, arg) + 2); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ t-fam.c:37:18: warning: array subscript 'struct arg_and_data_s[0]' is partly outside array bounds of 'unsigned char[22]' [-Warray-bounds] 37 | aad0->print_fd = fd; | ~~~~~~~~~~~~~~~^~~~ t-fam.c:30:10: note: referencing an object of size 22 allocated by 'malloc' 30 | aad0 = malloc (offsetof (struct arg_and_data_s, arg) + 2); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
For GCC 11, modified version of struct arg_and_data_s has an issue for x86_64.
Aug 23 2021
We should update jitterentropy to 3.0.2 or newer, which should be easier to get through certification, if we will go this way. From FIPS perspective, we should be fine with either going through getrandom only or with jitter entropy, but the bottom-line was that we should probably keep both as we do now.
From Stephan I got the following response to the allocation handler use case
I think the last user of random-fips was removed with rCed57fed6de1465e02ec5e3bc0affeabdd35e2eb7
Yes, it makes sense to remove it.
For the use case of struct arg_and_data_s in gpgme, which may allocate zero-sized ARG[], it seems that GCC 11 interprets it as an invalid use.
Aug 22 2021
Aug 20 2021
iirc Uli Drepper added a hack to dladdr which we made use of. Seems to be integrated into dladdr1 now.
While I don't know if runtime integrity check is required or not by FIPS 140,
I checked OpenSSL, and it has such a check in openssl/providers/fips. The FIPS module configuration file which has the module checksum by HMAC is generated by openssl fipsinstall command.
Ah... I realized that HMAC integrity check with dladdr (using address of constant string) might work (at some point) to determine the filename of libgcrypt.so, when/if glibc implementation allows searching with address of constant string. So, my claim "never worked" was wrong.
Aug 19 2021
We have the same patch (including the hmac key and we use the switch. The reasoning on our side was to be compatible with fipscheck, but it is no longer used since last year and we use just the hmac256 tool:
Just for the records, the whole HMAC thing including the special dlopen trick used to work fine when we did the original FIPS support.
Aug 18 2021
Right. The clarification is that SHA1 itself (for non-security and non-signature use) is still allowed in FIPS mode. But it is not allowed to be used as part of signature schemes of the new API in FIPS mode. The old API, which allows raw signatures without digests, should just fail in FIPS mode too. And the FIPS-compatible gnupg should use the new API too (it would be good to think about this when putting it together).
For Linux and FIPS, we should be actually fine with using /dev/random or getrandom().
The CAVS driver can be safely removed. The certification goes through the ACVP these days so it does not make sense to keep this.
For use of SHA-1:
Aug 17 2021
(can't access that bug with my account)
For tests with FIPS mode enabled, I manually create the file .libgcrypt.so.20.hmac under src/.libs.
I pushed my further change.
Also, applied and pushed your changes.
Sorry, I didn't test for non-FIPS mode when I committed rC347817438990: fips: Fix tests in fips mode..
Tweaking the value for memory allocation is needed for FIPS mode, because it uses some secure memory by DRBG.
Aug 16 2021
I went a bit back to the history to figure out what is the enforced and soft fips mode as it was initially not completely clear to me. For the record, I used the following bug from 9 years ago: