Skip to content

Commit

Permalink
Merge pull request #7614 from lhupfeldt/3.0.x
Browse files Browse the repository at this point in the history
md5 OpenSSL FIPS mode fix #7611
  • Loading branch information
tk0miya committed May 5, 2020
2 parents 153682d + 7d41edd commit d670214
Show file tree
Hide file tree
Showing 9 changed files with 39 additions and 12 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Expand Up @@ -85,6 +85,7 @@ Other contributors, listed alphabetically, are:
* Daniel Pizetta -- inheritance diagram improvements
* KINEBUCHI Tomohiko -- typing Sphinx as well as docutils
* Adrián Chaves (Gallaecio) -- coverage builder improvements
* Lars Hupfeldt Nielsen - OpenSSL FIPS mode md5 bug fix

Many thanks for all contributions!

Expand Down
1 change: 1 addition & 0 deletions CHANGES
Expand Up @@ -17,6 +17,7 @@ Bugs fixed
----------

* #7567: autodoc: parametrized types are shown twice for generic types
* #7611: md5 fails when OpenSSL FIPS is enabled

Testing
--------
Expand Down
3 changes: 1 addition & 2 deletions sphinx/builders/html/__init__.py
Expand Up @@ -13,7 +13,6 @@
import re
import sys
import warnings
from hashlib import md5
from os import path
from typing import Any, Dict, IO, Iterable, Iterator, List, Set, Tuple

Expand All @@ -38,7 +37,7 @@
from sphinx.locale import _, __
from sphinx.search import js_index
from sphinx.theming import HTMLThemeFactory
from sphinx.util import logging, progress_message, status_iterator
from sphinx.util import logging, progress_message, status_iterator, md5
from sphinx.util.docutils import is_html5_writer_available, new_document
from sphinx.util.fileutil import copy_asset
from sphinx.util.i18n import format_date
Expand Down
3 changes: 1 addition & 2 deletions sphinx/ext/graphviz.py
Expand Up @@ -12,7 +12,6 @@
import posixpath
import re
import subprocess
from hashlib import sha1
from os import path
from subprocess import CalledProcessError, PIPE
from typing import Any, Dict, List, Tuple
Expand All @@ -25,7 +24,7 @@
from sphinx.application import Sphinx
from sphinx.errors import SphinxError
from sphinx.locale import _, __
from sphinx.util import logging
from sphinx.util import logging, sha1
from sphinx.util.docutils import SphinxDirective, SphinxTranslator
from sphinx.util.fileutil import copy_asset
from sphinx.util.i18n import search_image_for_language
Expand Down
3 changes: 1 addition & 2 deletions sphinx/ext/imgmath.py
Expand Up @@ -14,7 +14,6 @@
import subprocess
import sys
import tempfile
from hashlib import sha1
from os import path
from subprocess import CalledProcessError, PIPE
from typing import Any, Dict, List, Tuple
Expand All @@ -30,7 +29,7 @@
from sphinx.deprecation import RemovedInSphinx40Warning, deprecated_alias
from sphinx.errors import SphinxError
from sphinx.locale import _, __
from sphinx.util import logging
from sphinx.util import logging, sha1
from sphinx.util.math import get_node_equation_number, wrap_displaymath
from sphinx.util.osutil import ensuredir
from sphinx.util.png import read_png_depth, write_png_depth
Expand Down
2 changes: 1 addition & 1 deletion sphinx/ext/inheritance_diagram.py
Expand Up @@ -38,7 +38,6 @@ class E(B): pass
import builtins
import inspect
import re
from hashlib import md5
from importlib import import_module
from typing import Any, Dict, Iterable, List, Tuple
from typing import cast
Expand All @@ -55,6 +54,7 @@ class E(B): pass
graphviz, figure_wrapper,
render_dot_html, render_dot_latex, render_dot_texinfo
)
from sphinx.util import md5
from sphinx.util.docutils import SphinxDirective
from sphinx.writers.html import HTMLTranslator
from sphinx.writers.latex import LaTeXTranslator
Expand Down
3 changes: 1 addition & 2 deletions sphinx/transforms/post_transforms/images.py
Expand Up @@ -10,7 +10,6 @@

import os
import re
from hashlib import sha1
from math import ceil
from typing import Any, Dict, List, Tuple

Expand All @@ -19,7 +18,7 @@
from sphinx.application import Sphinx
from sphinx.locale import __
from sphinx.transforms import SphinxTransform
from sphinx.util import epoch_to_rfc1123, rfc1123_to_epoch
from sphinx.util import epoch_to_rfc1123, rfc1123_to_epoch, sha1
from sphinx.util import logging, requests
from sphinx.util.images import guess_mimetype, get_image_extension, parse_data_uri
from sphinx.util.osutil import ensuredir, movefile
Expand Down
32 changes: 31 additions & 1 deletion sphinx/util/__init__.py
Expand Up @@ -10,6 +10,7 @@

import fnmatch
import functools
import hashlib
import os
import posixpath
import re
Expand All @@ -21,7 +22,6 @@
from codecs import BOM_UTF8
from collections import deque
from datetime import datetime
from hashlib import md5
from importlib import import_module
from os import path
from time import mktime, strptime
Expand Down Expand Up @@ -170,6 +170,36 @@ def __setstate__(self, state: Set[str]) -> None:
self._existing = state


def md5(data=b'', **kwargs):
"""Wrapper around hashlib.md5
Attempt call with 'usedforsecurity=False' if we get a ValueError, which happens when
OpenSSL FIPS mode is enabled:
ValueError: error:060800A3:digital envelope routines:EVP_DigestInit_ex:disabled for fips
See: https://github.com/sphinx-doc/sphinx/issues/7611
"""

try:
return hashlib.md5(data, **kwargs) # type: ignore
except ValueError:
return hashlib.md5(data, **kwargs, usedforsecurity=False) # type: ignore


def sha1(data=b'', **kwargs):
"""Wrapper around hashlib.sha1
Attempt call with 'usedforsecurity=False' if we get a ValueError
See: https://github.com/sphinx-doc/sphinx/issues/7611
"""

try:
return hashlib.sha1(data, **kwargs) # type: ignore
except ValueError:
return hashlib.sha1(data, **kwargs, usedforsecurity=False) # type: ignore


class DownloadFiles(dict):
"""A special dictionary for download files.
Expand Down
3 changes: 1 addition & 2 deletions tests/test_build_html.py
Expand Up @@ -10,7 +10,6 @@

import os
import re
from hashlib import md5
from itertools import cycle, chain

import pytest
Expand All @@ -19,7 +18,7 @@
from sphinx.builders.html import validate_html_extra_path, validate_html_static_path
from sphinx.errors import ConfigError
from sphinx.testing.util import strip_escseq
from sphinx.util import docutils
from sphinx.util import docutils, md5
from sphinx.util.inventory import InventoryFile


Expand Down

0 comments on commit d670214

Please sign in to comment.