-
Notifications
You must be signed in to change notification settings - Fork 29.9k
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
crypto: support FIPS mode of OpenSSL #1890
Changes from 3 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -88,6 +88,11 @@ parser.add_option("--openssl-no-asm", | |
dest="openssl_no_asm", | ||
help="Do not build optimized assembly for OpenSSL") | ||
|
||
parser.add_option("--openssl-fips", | ||
action="store", | ||
dest="openssl_fips", | ||
help="Build OpenSSL using FIPS canister .o file in supplied folder") | ||
|
||
shared_optgroup.add_option('--shared-http-parser', | ||
action='store_true', | ||
dest='shared_http_parser', | ||
|
@@ -720,6 +725,16 @@ def configure_openssl(o): | |
o['variables']['node_use_openssl'] = b(not options.without_ssl) | ||
o['variables']['node_shared_openssl'] = b(options.shared_openssl) | ||
o['variables']['openssl_no_asm'] = 1 if options.openssl_no_asm else 0 | ||
if options.openssl_fips: | ||
o['variables']['openssl_fips'] = options.openssl_fips | ||
fips_dir = os.path.join(root_dir, 'deps', 'openssl', 'fips') | ||
fips_ld = os.path.abspath(os.path.join(fips_dir, 'fipsld')) | ||
o['make_global_settings'] = [ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Using make_global_settings like that is a horrible and not very portable hack. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ok, what would be your suggestion to override the linker command? |
||
['LINK', fips_ld + ' <(openssl_fips)/bin/fipsld'], | ||
] | ||
else: | ||
o['variables']['openssl_fips'] = '' | ||
|
||
|
||
if options.without_ssl: | ||
return | ||
|
@@ -1025,10 +1040,21 @@ configure_fullystatic(output) | |
# move everything else to target_defaults | ||
variables = output['variables'] | ||
del output['variables'] | ||
|
||
# make_global_settings should be a root level element too | ||
if 'make_global_settings' in output: | ||
make_global_settings = output['make_global_settings'] | ||
del output['make_global_settings'] | ||
else: | ||
make_global_settings = False | ||
|
||
output = { | ||
'variables': variables, | ||
'target_defaults': output | ||
'target_defaults': output, | ||
} | ||
if make_global_settings: | ||
output['make_global_settings'] = make_global_settings | ||
|
||
pprint.pprint(output, indent=2) | ||
|
||
write('config.gypi', do_not_edit + | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
# Building io.js with FIPS-compliant OpenSSL | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. could we have a link to this from the README? Perhaps at the bottom of the build section:
|
||
|
||
It is possible to build io.js with [OpenSSL FIPS module][0]. | ||
|
||
Instructions: | ||
|
||
1. Download and verify `openssl-fips-x.x.x.tar.gz` from | ||
https://www.openssl.org/source/ | ||
2. Extract source to `openssl-fips` folder | ||
3. ``cd openssl-fips && ./config fipscanisterbuild --prefix=`pwd`/out`` | ||
(NOTE: On OS X, you may want to run | ||
``./Configure darwin64-x86_64-cc --prefix=`pwd`/out`` if you are going to | ||
build x64-mode io.js) | ||
4. `make -j && make install` | ||
5. Get into io.js checkout folder | ||
6. `./configure --openssl-fips=/path/to/openssl-fips/out` | ||
7. Build io.js with `make -j` | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think it is better to add some descriptions to the doc as
$ ./iojs -e "console.log(process.versions.openssl)"
1.0.2a-fips |
||
[0]: https://www.openssl.org/docs/fips/fipsnotes.html |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
#!/bin/sh | ||
ARGS= | ||
|
||
while [ "x$1" != "x" ]; do | ||
ARG=$1 | ||
shift | ||
case $ARG in | ||
*fips_premain.c) ARGS="$ARGS -x c $ARG -x none";; | ||
*) ARGS="$ARGS $ARG";; | ||
esac | ||
done | ||
|
||
echo $CXX $ARGS | ||
${CXX} $ARGS |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#!/bin/sh | ||
|
||
# NOTE: Just a wrapper around normal fipsld | ||
FIPSLD=$1 | ||
shift | ||
|
||
DIR=`dirname $0` | ||
FIPSLD_CC=$DIR/fipscc $FIPSLD $@ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very minor. Everywhere else in the PR,
'
is used and only here"
is used. Is there any convention followed?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I just copied and changed previous line :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmmm, even that is not consistent with the previous
add_option
calls. This shouldn't matter anyway.