Skip to content

Make the RAND code available from within the FIPS module#9035

Closed
mattcaswell wants to merge 10 commits intoopenssl:masterfrom
mattcaswell:fips-rand-v3
Closed

Make the RAND code available from within the FIPS module#9035
mattcaswell wants to merge 10 commits intoopenssl:masterfrom
mattcaswell:fips-rand-v3

Conversation

@mattcaswell
Copy link
Member

This enables calls to RAND_*() functions from within the FIPS module. This is required in order to bring in support for BIGNUM, and the various asymmetric algorithms.

I've added a dummy call into the FIPS module just to demonstrate that it works. This will be removed in due course when we no longer need it.

@mattcaswell mattcaswell added the branch: master Applies to master branch label May 28, 2019
@mattcaswell mattcaswell requested review from levitte and mspncp May 28, 2019 16:25
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These start/stop names look different

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure I understand your point. There isn't a "start" equivalent of ossl_ctx_thread_stop

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about ossl_init_thread_start?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The stop equivalent of ossl_init_thread_start is ossl_init_thread_stop. There is no "start" equivalent of ossl_ctx_thread_stop.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should *hands be NULL here?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesnt this *hands get returned?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I refactored this to make things a bit clearer.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NIT: unique

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume all these goto's mean that CRYPTO_THREAD_cleanup_local() doesnt handle passing NULLS - looks messy

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, dgbl->private_drbg is not NULL if there's an error, just uninitialised - so we shouldn't attempt to use it in anyway.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since dgbl is allocated via zalloc, and since NULL is all-bits-zero (via the sanity test), it is initialized.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's the private_drbg field we are specifically concerned with there. And yes it will get set to 0 on create. However, when I said it was unitialised, I meant it has not been initialised via a call to CRYPTO_THREAD_init_local. We should not be calling CRYPTO_THREAD_cleanup_local on keys that have not been initialised in that way. We cannot know how CRYPTO_THREAD_cleanup_local would treat a key that is set to 0. It most likely would be fine but we cannot say for sure. For example in a pthreads implementation CRYPTO_THREAD_cleanup_local calls pthread_key_delete which has this description: "The pthread_key_delete() function shall delete a thread-specific data key previously returned by pthread_key_create()". It says nothing about what happens if you pass it zero data that was not created by pthread_key_create - so at best this behaviour is undefined.

@slontis
Copy link
Member

slontis commented May 28, 2019

I havent gone through the whole thing yet - but it seems that a large percentage of this PR is related to threads. Maybe the rand changes should be in a seperate PR?

@slontis
Copy link
Member

slontis commented May 28, 2019

travis errors are valid (except for the timeout ones)

@mattcaswell
Copy link
Member Author

I've attempt to respond to the comments so far and have also tried to fix the various travis issues. I've also rebased and force pushed.

I'm going to take a look to see if I can easily split this up into smaller PRs to make it easier to review.

@mattcaswell mattcaswell changed the title Make the RAND code available from within the FIPS module WIP: Make the RAND code available from within the FIPS module May 29, 2019
@mattcaswell
Copy link
Member Author

I've split out various bits of this PR into other PRs. See #9038, #9039, and #9040. Once all of those are merged this PR will need to be rebased to pick up the last few commits to complete the move of the RAND code into the FIPS module. In the meantime I've set this PR to be WIP.

@mattcaswell
Copy link
Member Author

I rebased this now that #9038 has gone in, and to include the latest changes from #9039.

@mattcaswell
Copy link
Member Author

Needs #9186 before this can progress.

@levitte
Copy link
Member

levitte commented Jun 19, 2019

Please rebase then ping, I'll try to review quickly.

@mattcaswell
Copy link
Member Author

I've rebased this PR. Note the feedback comments above were for commits no longer in this PR. Note this PR now also includes the commits from #9186, so that needs to go in first before I can take this out of WIP.

In some circumstances the global data held in the "global" variable can
be NULL, so we should error out in the circumstance instead of crashing.
Insert a dummy call to RAND_DRBG_bytes from inside the FIPS provider to
demonstrate that it is possible to use the RAND code from inside the
module. This is temporary and will be removed once real uses of the RAND
code are available inside the module.
@mattcaswell mattcaswell changed the title WIP: Make the RAND code available from within the FIPS module Make the RAND code available from within the FIPS module Jun 19, 2019
@mattcaswell
Copy link
Member Author

Finally all the dependent PRs are in and I am able to take this out of WIP!

I've rebased on the latest master. Please review!

@mattcaswell
Copy link
Member Author

Fixup commit pushed addressing the feedback, and also fixing a windows linking issue. I've not addressed the doc-nits issue because that is (presumably) also a problem on master so probably is better done in a different PR.

@mattcaswell
Copy link
Member Author

doc-nits issue fixed in #9192

@levitte
Copy link
Member

levitte commented Jun 19, 2019

Looks good to me. I would like to know what @mspncp has to say, though.

@mspncp
Copy link
Contributor

mspncp commented Jun 19, 2019

Looks good to me. I would like to know what @mspncp has to say, though.

I started taking a look, but it might take a while to complete it, since I'm currently on vacation.

@levitte
Copy link
Member

levitte commented Jun 19, 2019

Oh, sorry, forgot about that...

Copy link
Contributor

@mspncp mspncp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be continued...

if (!value)
return 0;
#ifndef FIPS_MODE
/* Not supported in FIPS mode due to the implict fetch of the md */
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure I understand the explanation "...due to the implict fetch of the md" means. Actually, I believe this comment is incomprehensible for anybody who is not already deeply familiar with all the current replumbing and FIPS refactoring. Could this comment be a little bit more elaborated to make it more comprehensible?

Also, it contains a typo: 'implict' -> 'implicit'

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Explicit" fetch occurs when we look up an algorithm using one of the "fetch" functions such as EVP_MD_fetch(). This finds the algorithm and associates it with an implementation from a provider. Conversely "Implicit" fetch is when we don't do that, and use a function such as "EVP_sha256()" which has no provider implementation associated with it. With an algorithm obtained in that way the "fetch" happens automatically when you try to use it - hence "implicit fetch". An important difference between these two types of EVP_MD objects is that explicitly fetched versions are dynamically allocated and must be "freed", whereas implicitly fetched ones do not. That fact makes this code more complicated if we want to convert it to use explicit fetch. Since we are unlikely to need this ctrl in FIPS_MODE I didn't bother.

I replaced this comment with a longer one to try and explain this better.

#ifndef FIPS_MODE
/* Any approved digest is allowed */
md = EVP_get_digestbynid(drbg->type);
md = EVP_MD_meth_dup(EVP_get_digestbynid(drbg->type));
Copy link
Contributor

@mspncp mspncp Jun 19, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the digest algorithm of the HASH-DRBG should be selectable via generic EVP lookup accross multiple providers. It is an integral part of the HASH-DRBG algorithm and not a replaceable part. If you take a look at the CTR-DRBG implementation, there is no such distinction between fips and generic provider: The aes-ctr algorithm is always fetched unconditionally from the provider context.

switch (drbg->type) {
default:
/* This can't happen, but silence the compiler warning. */
return 0;
case NID_aes_128_ctr:
keylen = 16;
cipher = EVP_CIPHER_fetch(drbg->libctx, "AES-128-ECB", "");
break;
case NID_aes_192_ctr:
keylen = 24;
cipher = EVP_CIPHER_fetch(drbg->libctx, "AES-192-ECB", "");
break;
case NID_aes_256_ctr:
keylen = 32;
cipher = EVP_CIPHER_fetch(drbg->libctx, "AES-256-ECB", "");
break;
}

The application can only choose from a fixed number of builtin implementations. The digest selection for the HASH-DRBG should work exactly the same way. In other words, drop the #if part and keep only the #else part.

switch (drbg->type) {
default:
return 0;
case NID_sha256:
md = EVP_MD_fetch(drbg->libctx, "SHA256", "");
break;
}

The only difference between fips and non-fips might be that for the former the switch contains less cases.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the digest algorithm of the HASH-DRBG should be selectable via generic EVP lookup accross multiple providers
...
The aes-ctr algorithm is always fetched unconditionally from the provider context.

I think there is some confusion here. Ignoring the FIPS provider for a moment (which is a special case), the DRBG code exists in libcrypto and is not associated with a particular provider (yet). We probably will want to make it possible to "fetch" a DRBG implementation from a provider and use that...but we're not there yet. For now its just in libcrypto. The look up across "multiple providers" will happen anyway when used, even with aes-ctr. It just looks for an implementation of (for example) "AES-128-ECB" and uses it. The default provider (which might not even be available for all we know) may or may not be used.

Now, as I said, the FIPS provider is a special case. It does not link against libcrypto and so can't use the built-in DRBG implementation. Therefore, for that provider only, we are additionally making the DRBG code available inside the FIPS provider. For that provider only, when we do a "fetch" it will only ever find algorithms provided by itself.

Anyway, aside from that confusion, your suggestion is fine and I have refactored things accordingly.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd lean towards making the digest selection completely open. It provides a degree of flexibility in case something untoward happens to one of the digests. However, I'm happy enough with the current switch statement to not be too bothered (there are plenty of choices available and it avoids an explicit XOF check).

One could argue that the CTR-DRBG should have this flexibility too (ARIA and Camellia should both drop in instead of AES). Still, for some point in the future rather than now.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't mind, as long as the implementation is consistent for the three DRBG implementations. Anyway, if this change is desired it would be a matter for a separate pull request.

Providers that link against libcrypto can just use OBJ_nid2sn() to look
up the name of an algorithm given a NID. However that doesn't work for the
FIPS provider because OBJ_nid2sn() is not available there (due to the
reliance of the code on ASN.1 types). Therefore we provider a new function
to do this mapping. For providers linking against libcrypto the new function
just wraps OBJ_nid2sn(). For the FIPS provider it has a look up for all the
NIDs known there.
…ames

We use the new function ossl_prov_util_nid_to_name() to look up the
algorithm and unify the FIPS_MODE and non-FIPS_MODE handling.
As per the previous commit we make the same change for DRBG HMAC and
more closely align the FIPS_MODE and non FIPS_MODE implementations.
@mattcaswell
Copy link
Member Author

New commits addressing the feedback pushed.

Copy link
Contributor

@mspncp mspncp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, but some questions remain. (You can ignore the ones for @paulidale and @slontis).

BTW: Is it actually possible by now to run and check the DRBG code of the FIPS provider in the debugger (on linux)? If yes, what do I need to set it up?

/*
* We don't have EVP_get_digestbyname() in FIPS_MODE. That function returns
* an EVP_MD without an associated provider implementation (i.e. it is
* using "implict fetch"). We could replace it with an "explicit" fetch
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo: 'implict' -> 'implicit'

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.


#include "internal/providercommon.h"

const char *ossl_prov_util_nid_to_name(int nid);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm surprised that an internal function gets documented in the manual pages (which doesn't mean I'm against documenting it). Is it intended to be used by third party providers, too?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@levitte has been championing the documentation of the "internal" API, i.e. stuff that ends up in our internal header files. There's quite a few man pages there already. This particular function is purely internal. There is no intention for it to be used by third party providers.

#ifndef FIPS_MODE
case NID_blake2b512:
case NID_blake2s256:
case NID_sm3:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is more a question to @paulidale and @slontis than a review comment: NIST SP 800-90Ar1 does not mention SHA3, BLAKE and SM3. Is it 'legal' nevertheless to use them?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Section 10.1 opens by saying that the hash DRBG mechanisms have been designed to use any approved hash function. Based on this SHA3 would be legal.

BLAKE and SM3 cannot be FIPS validated.

#ifndef FIPS_MODE
case NID_blake2b512:
case NID_blake2s256:
case NID_sm3:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same question to @paulidale and @slontis.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it has the same answer. 10.1.2 again mentions an approved hash function.

};

int rand_crngt_get_entropy_cb(OPENSSL_CTX *ctx,
RAND_POOL *pool,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the rationale behind the changes in rand_crng_test.c?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it a fixup for 4e297b7 which you made along the way?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Effectively yes. I encountered a crash related to this code. The change is related to the crngt_get_entropy callback. That callback gets called from rand_crng_ossl_ctx_new. That function is called when we are initialising an OPENSSL_CTX with CRNG data for the first time. Unfortunately, in the original implementation, the default callback was itself trying to get CRNG data from the OPENSSL_CTX. But since we're still initialising it it went round in an an infinite recursive loop trying to initialise the OPENSSL_CTX until eventually it blew the stack. The solution to the problem was to change the callback to take the RAND_POOL to be used as a parameter instead of getting it from the OPENSSL_CTX.

}

# if !OPENSSL_API_1_1_0
# if !OPENSSL_API_1_1_0 || defined(FIPS_MODE)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you sure to enable it in FIPS mode? Or did you mean

# if !OPENSSL_API_1_1_0 && !defined(FIPS_MODE)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I did mean that!

Copy link
Contributor

@mspncp mspncp Jun 24, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmmm... but why? The code is marked deprecated-in-1.1.0 and not called anywhere.

msp@msppc:~/src/openssl$ git grep -E -nH 'RAND_(event|screen)' pr-9035
pr-9035:crypto/rand/rand_win.c:166:int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam)
pr-9035:crypto/rand/rand_win.c:172:void RAND_screen(void)
pr-9035:doc/man3/RAND_add.pod:5:RAND_add, RAND_poll, RAND_seed, RAND_status, RAND_event, RAND_screen,
pr-9035:doc/man3/RAND_add.pod:25: int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam);
pr-9035:doc/man3/RAND_add.pod:26: void RAND_screen(void);
pr-9035:doc/man3/RAND_add.pod:74:RAND_event() and RAND_screen() are equivalent to RAND_poll() and exist
pr-9035:doc/man3/RAND_add.pod:84:RAND_event() returns RAND_status().
pr-9035:doc/man3/RAND_add.pod:98:RAND_event() and RAND_screen() were deprecated in OpenSSL 1.1.0 and should
pr-9035:include/openssl/rand.h:68:DEPRECATEDIN_1_1_0(void RAND_screen(void))
pr-9035:include/openssl/rand.h:69:DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM))
pr-9035:util/libcrypto.num:1331:RAND_event                              1318    3_0_0   EXIST:_WIN32:FUNCTION:DEPRECATEDIN_1_1_0
pr-9035:util/libcrypto.num:1816:RAND_screen                             1804    3_0_0   EXIST:_WIN32:FUNCTION:DEPRECATEDIN_1_1_0

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it because it is still referenced in libcrypto.num?

pr-9035:util/libcrypto.num:1331:RAND_event                              1318    3_0_0   EXIST:_WIN32:FUNCTION:DEPRECATEDIN_1_1_0
pr-9035:util/libcrypto.num:1816:RAND_screen                             1804    3_0_0   EXIST:_WIN32:FUNCTION:DEPRECATEDIN_1_1_0

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I wasn't clear. What you wrote is what I meant! I've fixed it now.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But the FIPS provider does not reuse libcrypto.num, right?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I wasn't clear. What you wrote is what I meant! I've fixed it now.

Ok, now the world is in order again :-)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But the FIPS provider does not reuse libcrypto.num, right?

Right. It has its own num file which exports exactly one function:

https://github.com/openssl/openssl/blob/master/util/providers.num

@mattcaswell
Copy link
Member Author

BTW: Is it actually possible by now to run and check the DRBG code of the FIPS provider in the debugger (on linux)? If yes, what do I need to set it up?

With this PR, yes. Set a breakpoint on line 120 of providers/fips/fipsprov.c and then run evp_extra_test:

$ OPENSSL_MODULES=providers util/shlib_wrap.sh gdb --args test/evp_extra_test -test 13
GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test/evp_extra_test...done.
(gdb) break fipsprov.c:120
No source file named fipsprov.c.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (fipsprov.c:120) pending.
(gdb) run
Starting program: /home/matt/dev/openssl-write/test/evp_extra_test -test 13
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
    # Subtest: test_EVP_MD_fetch
    1..5
    ok 1 - iteration 1
    ok 2 - iteration 2
    ok 3 - iteration 3

Breakpoint 1, dummy_evp_call (provctx=0x5555557c0530)
    at providers/fips/fipsprov.c:120
120	    if (RAND_DRBG_bytes(drbg, randbuf, sizeof(randbuf)) <= 0)

@mspncp
Copy link
Contributor

mspncp commented Jun 24, 2019

Thanks for the instructions. I'll give it a try this evening...

@mattcaswell
Copy link
Member Author

Fix up commit pushed addressing the feedback.

Copy link
Contributor

@mspncp mspncp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. I would like to know what @mspncp has to say, though.

I think the 'DRBG part' is fine now. But I'd prefer if @levitte could also give his approval for the 'provider part'. Also, if you have time to wait until tomorrow, I'll do a live examination in the debugger this evening.

@mattcaswell
Copy link
Member Author

I'll do a live examination in the debugger this evening.

Did you manage to do that?

@mspncp
Copy link
Contributor

mspncp commented Jun 26, 2019

Yes I did, and I have some thoughts to share, which I did not find the time to write down yet. Also, I might have some questions for you. But it's nothing that would prevent this pull request from being merged, I haven't found any issues (yet). I'd still be more comfortable if @levitte would approve the provider related (non-drbg) parts of this pull request, but if you think my approval is sufficient, feel free to go ahead and merge it.

@mattcaswell
Copy link
Member Author

I'd still be more comfortable if @levitte would approve the provider related (non-drbg) parts of this pull request, but if you think my approval is sufficient, feel free to go ahead and merge it.

I think @levitte is away at the moment with only occasional network access. I'll leave this open a little bit longer to see if he comments, but otherwise I will merge this later today.

@mattcaswell
Copy link
Member Author

Pushed! Thanks!

levitte pushed a commit that referenced this pull request Jun 28, 2019
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
(Merged from #9035)
levitte pushed a commit that referenced this pull request Jun 28, 2019
In some circumstances the global data held in the "global" variable can
be NULL, so we should error out in the circumstance instead of crashing.

Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
(Merged from #9035)
levitte pushed a commit that referenced this pull request Jun 28, 2019
Insert a dummy call to RAND_DRBG_bytes from inside the FIPS provider to
demonstrate that it is possible to use the RAND code from inside the
module. This is temporary and will be removed once real uses of the RAND
code are available inside the module.

Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
(Merged from #9035)
levitte pushed a commit that referenced this pull request Jun 28, 2019
Providers that link against libcrypto can just use OBJ_nid2sn() to look
up the name of an algorithm given a NID. However that doesn't work for the
FIPS provider because OBJ_nid2sn() is not available there (due to the
reliance of the code on ASN.1 types). Therefore we provider a new function
to do this mapping. For providers linking against libcrypto the new function
just wraps OBJ_nid2sn(). For the FIPS provider it has a look up for all the
NIDs known there.

Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
(Merged from #9035)
levitte pushed a commit that referenced this pull request Jun 28, 2019
…ames

We use the new function ossl_prov_util_nid_to_name() to look up the
algorithm and unify the FIPS_MODE and non-FIPS_MODE handling.

Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
(Merged from #9035)
levitte pushed a commit that referenced this pull request Jun 28, 2019
As per the previous commit we make the same change for DRBG HMAC and
more closely align the FIPS_MODE and non FIPS_MODE implementations.

Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
(Merged from #9035)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

branch: master Applies to master branch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants