openSUSE Commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
May 2019
- 1 participants
- 2232 discussions
Hello community,
here is the log from the commit of package 000update-repos for openSUSE:Factory checked in at 2019-05-25 21:01:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/000update-repos (Old)
and /work/SRC/openSUSE:Factory/.000update-repos.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "000update-repos"
Sat May 25 21:01:56 2019 rev:268 rq: version:unknown
Changes:
--------
New Changes file:
NO CHANGES FILE!!!
New:
----
factory_20190524.packages.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
1
0
Hello community,
here is the log from the commit of package python-sphinx-feature-classification for openSUSE:Factory checked in at 2019-05-25 13:35:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-sphinx-feature-classification (Old)
and /work/SRC/openSUSE:Factory/.python-sphinx-feature-classification.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-sphinx-feature-classification"
Sat May 25 13:35:34 2019 rev:4 rq:705301 version:0.4.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-sphinx-feature-classification/python-sphinx-feature-classification.changes 2019-04-28 20:14:22.910383860 +0200
+++ /work/SRC/openSUSE:Factory/.python-sphinx-feature-classification.new.5148/python-sphinx-feature-classification.changes 2019-05-25 13:35:35.555962286 +0200
@@ -1,0 +2,12 @@
+Fri May 24 20:07:37 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Update to 0.4.0:
+ * OpenDev Migration Patch
+ * Fix the summary table border not rendering
+ * Copy the CSS into the built docs
+ * Fix deprecated add\_stylesheet with add\_css\_file
+ * Fix driver links rendering in the summary table
+ * releasenotes: Remove crud from 'conf.py'
+ * releasenotes: Switch to openstackdocstheme
+
+-------------------------------------------------------------------
Old:
----
sphinx-feature-classification-0.3.2.tar.gz
New:
----
sphinx-feature-classification-0.4.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-sphinx-feature-classification.spec ++++++
--- /var/tmp/diff_new_pack.bH0s5o/_old 2019-05-25 13:35:36.391961690 +0200
+++ /var/tmp/diff_new_pack.bH0s5o/_new 2019-05-25 13:35:36.391961690 +0200
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-sphinx-feature-classification
-Version: 0.3.2
+Version: 0.4.0
Release: 0
Summary: Sphinx extension to generate a matrix of pluggable drivers
License: Apache-2.0
++++++ sphinx-feature-classification-0.3.2.tar.gz -> sphinx-feature-classification-0.4.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinx-feature-classification-0.3.2/AUTHORS new/sphinx-feature-classification-0.4.0/AUTHORS
--- old/sphinx-feature-classification-0.3.2/AUTHORS 2019-02-26 01:07:16.000000000 +0100
+++ new/sphinx-feature-classification-0.4.0/AUTHORS 2019-04-26 18:55:18.000000000 +0200
@@ -3,6 +3,7 @@
Corey Bryant <corey.bryant(a)canonical.com>
Doug Hellmann <doug(a)doughellmann.com>
Jay S. Bryant <jungleboyj(a)electronicjungle.net>
+Michael Johnson <johnsomor(a)gmail.com>
Mike Perez <thingee(a)gmail.com>
Sean McGinnis <sean.mcginnis(a)gmail.com>
Stephen Finucane <stephenfin(a)redhat.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinx-feature-classification-0.3.2/ChangeLog new/sphinx-feature-classification-0.4.0/ChangeLog
--- old/sphinx-feature-classification-0.3.2/ChangeLog 2019-02-26 01:07:16.000000000 +0100
+++ new/sphinx-feature-classification-0.4.0/ChangeLog 2019-04-26 18:55:18.000000000 +0200
@@ -1,6 +1,17 @@
CHANGES
=======
+0.4.0
+-----
+
+* OpenDev Migration Patch
+* Fix the summary table border not rendering
+* Copy the CSS into the built docs
+* Fix deprecated add\_stylesheet with add\_css\_file
+* Fix driver links rendering in the summary table
+* releasenotes: Remove crud from 'conf.py'
+* releasenotes: Switch to openstackdocstheme
+
0.3.2
-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinx-feature-classification-0.3.2/PKG-INFO new/sphinx-feature-classification-0.4.0/PKG-INFO
--- old/sphinx-feature-classification-0.3.2/PKG-INFO 2019-02-26 01:07:16.000000000 +0100
+++ new/sphinx-feature-classification-0.4.0/PKG-INFO 2019-04-26 18:55:19.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: sphinx-feature-classification
-Version: 0.3.2
+Version: 0.4.0
Summary: Generate a matrix of pluggable drivers and their support to an API in Sphinx.
Home-page: https://docs.openstack.org/sphinx-feature-classification/latest/
Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinx-feature-classification-0.3.2/releasenotes/notes/copy-css-to-static-938b35b03a568abc.yaml new/sphinx-feature-classification-0.4.0/releasenotes/notes/copy-css-to-static-938b35b03a568abc.yaml
--- old/sphinx-feature-classification-0.3.2/releasenotes/notes/copy-css-to-static-938b35b03a568abc.yaml 1970-01-01 01:00:00.000000000 +0100
+++ new/sphinx-feature-classification-0.4.0/releasenotes/notes/copy-css-to-static-938b35b03a568abc.yaml 2019-04-26 18:51:32.000000000 +0200
@@ -0,0 +1,5 @@
+---
+fixes:
+ - |
+ Adds a handler to copy the CSS file into the _static directory on build.
+ Previously the CSS file was not being copied over into the built docs.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinx-feature-classification-0.3.2/releasenotes/notes/fix-css-handling-e17f37c98d80b76e.yaml new/sphinx-feature-classification-0.4.0/releasenotes/notes/fix-css-handling-e17f37c98d80b76e.yaml
--- old/sphinx-feature-classification-0.3.2/releasenotes/notes/fix-css-handling-e17f37c98d80b76e.yaml 1970-01-01 01:00:00.000000000 +0100
+++ new/sphinx-feature-classification-0.4.0/releasenotes/notes/fix-css-handling-e17f37c98d80b76e.yaml 2019-04-26 18:51:32.000000000 +0200
@@ -0,0 +1,4 @@
+---
+fixes:
+ - |
+ Updated the CSS handling to use add_css_file instead of add_stylesheet.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinx-feature-classification-0.3.2/releasenotes/notes/fix-driver-links-18528dcdbcc9f007.yaml new/sphinx-feature-classification-0.4.0/releasenotes/notes/fix-driver-links-18528dcdbcc9f007.yaml
--- old/sphinx-feature-classification-0.3.2/releasenotes/notes/fix-driver-links-18528dcdbcc9f007.yaml 1970-01-01 01:00:00.000000000 +0100
+++ new/sphinx-feature-classification-0.4.0/releasenotes/notes/fix-driver-links-18528dcdbcc9f007.yaml 2019-04-26 18:51:32.000000000 +0200
@@ -0,0 +1,4 @@
+---
+fixes:
+ - |
+ Fixed driver links to render in the summary table.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinx-feature-classification-0.3.2/releasenotes/source/conf.py new/sphinx-feature-classification-0.4.0/releasenotes/source/conf.py
--- old/sphinx-feature-classification-0.3.2/releasenotes/source/conf.py 2019-02-26 01:05:12.000000000 +0100
+++ new/sphinx-feature-classification-0.4.0/releasenotes/source/conf.py 2019-04-26 18:51:32.000000000 +0200
@@ -12,45 +12,16 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-# Glance Release Notes documentation build configuration file, created by
-# sphinx-quickstart on Tue Nov 3 17:40:50 2015.
-#
-# This file is execfile()d with the current directory set to its
-# containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-# sys.path.insert(0, os.path.abspath('.'))
-
# -- General configuration ------------------------------------------------
-# If your documentation needs a minimal Sphinx version, state it here.
-# needs_sphinx = '1.0'
-
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
- 'oslosphinx',
+ 'openstackdocstheme',
'reno.sphinxext',
]
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix of source filenames.
-source_suffix = '.rst'
-
-# The encoding of source files.
-# source_encoding = 'utf-8-sig'
-
# The master toctree document.
master_doc = 'index'
@@ -68,208 +39,12 @@
# The short X.Y version.
version = ''
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-# language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-# today = ''
-# Else, today_fmt is used as the format for a strftime call.
-# today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = []
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-# default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-# add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-# add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-# show_authors = False
-
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
-# A list of ignored prefixes for module index sorting.
-# modindex_common_prefix = []
-
-# If true, keep warnings as "system message" paragraphs in the built documents.
-# keep_warnings = False
-
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
-html_theme = 'default'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-# html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-# html_theme_path = []
-
-# The name for this set of Sphinx documents. If None, it defaults to
-# "<project> v<release> documentation".
-# html_title = None
-
-# A shorter title for the navigation bar. Default is the same as html_title.
-# html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-# html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-# html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
-
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-# html_extra_path = []
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-# html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-# html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-# html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-# html_additional_pages = {}
-
-# If false, no module index is generated.
-# html_domain_indices = True
-
-# If false, no index is generated.
-# html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-# html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-# html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-# html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-# html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it. The value of this option must be the
-# base URL from which the finished HTML is served.
-# html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-# html_file_suffix = None
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'GlanceReleaseNotesdoc'
-
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_elements = {
- # The paper size ('letterpaper' or 'a4paper').
- # 'papersize': 'letterpaper',
-
- # The font size ('10pt', '11pt' or '12pt').
- # 'pointsize': '10pt',
-
- # Additional stuff for the LaTeX preamble.
- # 'preamble': '',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-# author, documentclass [howto, manual, or own class]).
-latex_documents = [
- ('index', 'GlanceReleaseNotes.tex', u'Glance Release Notes Documentation',
- u'Glance Developers', 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-# latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-# latex_use_parts = False
-
-# If true, show page references after internal links.
-# latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-# latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-# latex_appendices = []
-
-# If false, no module index is generated.
-# latex_domain_indices = True
-
-
-# -- Options for manual page output ---------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
- ('index', 'glancereleasenotes', u'Glance Release Notes Documentation',
- [u'Glance Developers'], 1)
-]
-
-# If true, show URL addresses after external links.
-# man_show_urls = False
-
-
-# -- Options for Texinfo output -------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-# dir menu entry, description, category)
-texinfo_documents = [
- ('index', 'GlanceReleaseNotes', u'Glance Release Notes Documentation',
- u'Glance Developers', 'GlanceReleaseNotes',
- 'One line description of project.',
- 'Miscellaneous'),
-]
-
-# Documents to append as an appendix to all manuals.
-# texinfo_appendices = []
-
-# If false, no module index is generated.
-# texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-# texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-# texinfo_no_detailmenu = False
-
-# -- Options for Internationalization output ------------------------------
-locale_dirs = ['locale/']
+html_theme = 'openstackdocs'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinx-feature-classification-0.3.2/sphinx_feature_classification/releasenotes/notes/update-summary-table-style-cb5a00eb45cce78a.yaml new/sphinx-feature-classification-0.4.0/sphinx_feature_classification/releasenotes/notes/update-summary-table-style-cb5a00eb45cce78a.yaml
--- old/sphinx-feature-classification-0.3.2/sphinx_feature_classification/releasenotes/notes/update-summary-table-style-cb5a00eb45cce78a.yaml 1970-01-01 01:00:00.000000000 +0100
+++ new/sphinx-feature-classification-0.4.0/sphinx_feature_classification/releasenotes/notes/update-summary-table-style-cb5a00eb45cce78a.yaml 2019-04-26 18:51:32.000000000 +0200
@@ -0,0 +1,5 @@
+---
+fixes:
+ - |
+ Fixed the summary table border not rendering and improved the table
+ font sizing.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinx-feature-classification-0.3.2/sphinx_feature_classification/support-matrix.css new/sphinx-feature-classification-0.4.0/sphinx_feature_classification/support-matrix.css
--- old/sphinx-feature-classification-0.3.2/sphinx_feature_classification/support-matrix.css 2019-02-26 01:05:12.000000000 +0100
+++ new/sphinx-feature-classification-0.4.0/sphinx_feature_classification/support-matrix.css 2019-04-26 18:51:32.000000000 +0200
@@ -1,8 +1,12 @@
-
.sp_feature_required {
font-weight: bold;
}
+.sp_feature_cells {
+ border: solid 1px black;
+ text-align: center;
+}
+
.sp_impl_complete {
color: rgb(0, 120, 0);
font-weight: normal;
@@ -24,7 +28,7 @@
}
.sp_impl_summary {
- font-size: 2em;
+ font-size: medium;
}
.sp_cli {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinx-feature-classification-0.3.2/sphinx_feature_classification/support_matrix.py new/sphinx-feature-classification-0.4.0/sphinx_feature_classification/support_matrix.py
--- old/sphinx-feature-classification-0.3.2/sphinx_feature_classification/support_matrix.py 2019-02-26 01:05:12.000000000 +0100
+++ new/sphinx-feature-classification-0.4.0/sphinx_feature_classification/support_matrix.py 2019-04-26 18:51:32.000000000 +0200
@@ -19,7 +19,9 @@
"""
+from os import path
import re
+import shutil
from docutils import nodes
from docutils.parsers import rst
@@ -248,7 +250,7 @@
"""
summary_title = nodes.subtitle(text="Summary")
- summary = nodes.table()
+ summary = nodes.table(classes=["sp_feature_cells"])
cols = len(matrix.drivers.keys())
# Add two columns for the Feature and Status columns.
@@ -269,10 +271,10 @@
# This sets up all the column headers - two fixed
# columns for feature name & status
header = nodes.row()
- blank = nodes.entry()
+ blank = nodes.entry(classes=["sp_feature_cells"])
blank.append(nodes.emphasis(text="Feature"))
header.append(blank)
- blank = nodes.entry()
+ blank = nodes.entry(classes=["sp_feature_cells"])
blank.append(nodes.emphasis(text="Status"))
header.append(blank)
summary_head.append(header)
@@ -282,9 +284,17 @@
key=lambda x: matrix.drivers[x].title)
for key in impls:
driver = matrix.drivers[key]
- implcol = nodes.entry()
+ implcol = nodes.entry(classes=["sp_feature_cells"])
header.append(implcol)
- implcol.append(nodes.strong(text=driver.title))
+ if driver.link:
+ uri = driver.link
+ target_ref = nodes.reference("", refuri=uri)
+ target_txt = nodes.inline()
+ implcol.append(target_txt)
+ target_txt.append(target_ref)
+ target_ref.append(nodes.strong(text=driver.title))
+ else:
+ implcol.append(nodes.strong(text=driver.title))
# We now produce the body of the table, one row for
# each feature to report on
@@ -295,7 +305,7 @@
feature_id = re.sub(KEY_PATTERN, "_", feature.key)
# first the fixed columns for title/status
- key_col = nodes.entry()
+ key_col = nodes.entry(classes=["sp_feature_cells"])
item.append(key_col)
key_ref = nodes.reference(refid=feature_id)
key_txt = nodes.inline()
@@ -303,7 +313,7 @@
key_txt.append(key_ref)
key_ref.append(nodes.strong(text=feature.title))
- status_col = nodes.entry()
+ status_col = nodes.entry(classes=["sp_feature_cells"])
item.append(status_col)
status_col.append(nodes.inline(
text=feature.status,
@@ -312,7 +322,7 @@
# and then one column for each backend driver
for key in impls:
impl = feature.implementations[key]
- impl_col = nodes.entry()
+ impl_col = nodes.entry(classes=["sp_feature_cells"])
item.append(impl_col)
key_id = re.sub(KEY_PATTERN, "_",
@@ -463,6 +473,15 @@
return para
+def on_build_finished(app, exc):
+ if exc is None:
+ src = path.join(path.abspath(path.dirname(__file__)),
+ 'support-matrix.css')
+ dst = path.join(app.outdir, '_static', 'support-matrix.css')
+ shutil.copyfile(src, dst)
+
+
def setup(app):
app.add_directive('support_matrix', Directive)
- app.add_stylesheet('support-matrix.css')
+ app.add_css_file('support-matrix.css')
+ app.connect('build-finished', on_build_finished)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinx-feature-classification-0.3.2/sphinx_feature_classification.egg-info/PKG-INFO new/sphinx-feature-classification-0.4.0/sphinx_feature_classification.egg-info/PKG-INFO
--- old/sphinx-feature-classification-0.3.2/sphinx_feature_classification.egg-info/PKG-INFO 2019-02-26 01:07:16.000000000 +0100
+++ new/sphinx-feature-classification-0.4.0/sphinx_feature_classification.egg-info/PKG-INFO 2019-04-26 18:55:19.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: sphinx-feature-classification
-Version: 0.3.2
+Version: 0.4.0
Summary: Generate a matrix of pluggable drivers and their support to an API in Sphinx.
Home-page: https://docs.openstack.org/sphinx-feature-classification/latest/
Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinx-feature-classification-0.3.2/sphinx_feature_classification.egg-info/SOURCES.txt new/sphinx-feature-classification-0.4.0/sphinx_feature_classification.egg-info/SOURCES.txt
--- old/sphinx-feature-classification-0.3.2/sphinx_feature_classification.egg-info/SOURCES.txt 2019-02-26 01:07:16.000000000 +0100
+++ new/sphinx-feature-classification-0.4.0/sphinx_feature_classification.egg-info/SOURCES.txt 2019-04-26 18:55:19.000000000 +0200
@@ -20,6 +20,9 @@
doc/source/install/index.rst
doc/source/user/index.rst
releasenotes/notes/.placeholder
+releasenotes/notes/copy-css-to-static-938b35b03a568abc.yaml
+releasenotes/notes/fix-css-handling-e17f37c98d80b76e.yaml
+releasenotes/notes/fix-driver-links-18528dcdbcc9f007.yaml
releasenotes/notes/support-driver-notes-b73d5b185f05db7f.yaml
releasenotes/source/conf.py
releasenotes/source/index.rst
@@ -36,6 +39,7 @@
sphinx_feature_classification.egg-info/pbr.json
sphinx_feature_classification.egg-info/requires.txt
sphinx_feature_classification.egg-info/top_level.txt
+sphinx_feature_classification/releasenotes/notes/update-summary-table-style-cb5a00eb45cce78a.yaml
sphinx_feature_classification/tests/__init__.py
sphinx_feature_classification/tests/base.py
sphinx_feature_classification/tests/test_sphinx_feature_classification.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sphinx-feature-classification-0.3.2/sphinx_feature_classification.egg-info/pbr.json new/sphinx-feature-classification-0.4.0/sphinx_feature_classification.egg-info/pbr.json
--- old/sphinx-feature-classification-0.3.2/sphinx_feature_classification.egg-info/pbr.json 2019-02-26 01:07:16.000000000 +0100
+++ new/sphinx-feature-classification-0.4.0/sphinx_feature_classification.egg-info/pbr.json 2019-04-26 18:55:19.000000000 +0200
@@ -1 +1 @@
-{"git_version": "2dacdfb", "is_release": true}
\ No newline at end of file
+{"git_version": "884fec8", "is_release": true}
\ No newline at end of file
1
0
Hello community,
here is the log from the commit of package netdata for openSUSE:Factory checked in at 2019-05-25 13:35:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/netdata (Old)
and /work/SRC/openSUSE:Factory/.netdata.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "netdata"
Sat May 25 13:35:31 2019 rev:10 rq:705267 version:1.15.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/netdata/netdata.changes 2019-05-03 22:48:03.075993005 +0200
+++ /work/SRC/openSUSE:Factory/.netdata.new.5148/netdata.changes 2019-05-25 13:35:32.767964274 +0200
@@ -1,0 +2,49 @@
+Tue May 21 12:37:08 UTC 2019 - Martin Herkt <9+suse(a)cirno.systems>
+
+- Update to v1.15.0
+ Bug Fixes:
+ * Prowl notifications were not being sent, unless another
+ notification method was also active
+ * Fix exception handling in the python.d plugin
+ * The node applications group did not include all node processes.
+ * The nvidia_smi collector displayed incorrect power usage
+ * The python.d plugin would sometimes hang, because it lacked
+ a connect timeout
+ * The mongodb collector raised errors due to various KeyErrors
+ * The smartd_log collector would show incorrect temperature
+ values
+
+ Improvements:
+ * Support for aggregate node view
+ * Database engine
+ * New collector modules:
+ + Go.d collectors for OpenVPN, the Tengine web server and
+ ScaleIO (VxFlex OS) instances
+ + Monitor disk access latency like ioping does
+ * Energi Core daemon monitoring, suits other Bitcoin forks
+ * Collector improvements:
+ + Add docker swarm manager metrics to the go.d docker_engine
+ collector
+ + Implement unified cgroup cpu limit
+ + python.d.plugin: Allow monitoring of HTTP(S) endpoints which
+ require POST data and make the UrlService more flexible
+ * Support the AWS Kinesis backend for long-term storage
+ * Add a new "text-only" chart renderer
+ * API Improvements:
+ + Smarter caching of API calls. Do not cache alarms and info
+ api calls and extend no-cache headers.
+ + Extend the api/v1/info call response with system and
+ collector information
+ + k6 script for API load testing
+ * Kubernetes helmchart improvements:
+ + Added the init container, where sysctl params could be
+ managed, to bypass the Cannot allocate memory issue
+ + Better startup/shutdown of slaves and reduced memory usage
+ with liveness/readiness probes and default memory mode none
+ + Added the option of overriding the default settings for
+ kubelet, kubeproxy and coredns collectors via values.yaml
+ + Make the use of persistent volumes optional, add apiVersion
+ to fix linting errors and correct the location of the env
+ field
+
+-------------------------------------------------------------------
@@ -164 +213 @@
- * Python module sensors fix #5406 (ilyam8)
+ * Python module sensors fix #5406
Old:
----
netdata-v1.14.0.tar.gz
New:
----
netdata-v1.15.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ netdata.spec ++++++
--- /var/tmp/diff_new_pack.0u4BUl/_old 2019-05-25 13:35:33.435963798 +0200
+++ /var/tmp/diff_new_pack.0u4BUl/_new 2019-05-25 13:35:33.439963795 +0200
@@ -18,13 +18,8 @@
%define netdata_user netdata
%define netdata_group netdata
-%if 0%{?suse_version} > 1220
-%bcond_without systemd
-%else
-%bcond_with systemd
-%endif
Name: netdata
-Version: 1.14.0
+Version: 1.15.0
Release: 0
Summary: A system for distributed real-time performance and health monitoring
# netdata is GPL-3.0+, other licenses refer to included third-party software (see REDISTRIBUTED.md)
@@ -35,15 +30,17 @@
Source3: netdata-rpmlintrc
Patch0: netdata-logrotate-su.patch
Patch2: netdata-smartd-log-path.patch
-BuildRequires: autoconf
-BuildRequires: automake
BuildRequires: cups-devel
BuildRequires: dos2unix
BuildRequires: fdupes
+BuildRequires: judy-devel
BuildRequires: pkgconfig
BuildRequires: pkgconfig(libcap)
+BuildRequires: pkgconfig(liblz4)
BuildRequires: pkgconfig(libmnl)
BuildRequires: pkgconfig(libnetfilter_acct)
+BuildRequires: pkgconfig(libuv)
+BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(uuid)
BuildRequires: pkgconfig(zlib)
Requires(pre): shadow
@@ -73,7 +70,6 @@
%patch2 -p1
%build
-autoreconf -fiv
%configure \
--docdir="%{_docdir}/%{name}-%{version}" \
--enable-plugin-nfacct \
++++++ netdata-v1.14.0.tar.gz -> netdata-v1.15.0.tar.gz ++++++
++++ 22081 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package gajim for openSUSE:Factory checked in at 2019-05-25 13:35:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gajim (Old)
and /work/SRC/openSUSE:Factory/.gajim.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gajim"
Sat May 25 13:35:27 2019 rev:29 rq:705266 version:1.1.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/gajim/gajim.changes 2019-02-02 21:49:33.039965153 +0100
+++ /work/SRC/openSUSE:Factory/.gajim.new.5148/gajim.changes 2019-05-25 13:35:29.587966543 +0200
@@ -1,0 +2,24 @@
+Thu May 23 05:14:14 UTC 2019 - mvetter(a)suse.com
+
+- Update to 1.1.3:
+ New:
+ * Add a mobile phone indicator to the chat window
+ * Rework HTTPUpload dialog
+ * Add a "paste as quote" option to the message input
+ Bug fixes:
+ * #8822 Fix memory leak when using spell checker
+ * #9514 Fix jingle filetransfers not working in some circumstances
+ * #9573 Dont leak DNS query when connecting over proxy
+ * #9578 Determine Windows version more reliably
+ * #9622 Fix an error while quitting Gajim
+ * #9633 Fix an error while sending a file
+ * #9637 Restore window size correctly on wayland
+ * #9660 GPG Agent setting is ignored
+ * #9645 Make zeroconf IPV6 compatible
+ * Improve dark theme colors
+ * Fix access to GnuPG keys
+ * Use UUID4 item ids for pubsub posts
+ * Dont send invalid show values
+ * Various smaller improvements
+
+-------------------------------------------------------------------
Old:
----
gajim-1.1.2.tar.bz2
New:
----
gajim-1.1.3.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gajim.spec ++++++
--- /var/tmp/diff_new_pack.G9dJOV/_old 2019-05-25 13:35:30.319966020 +0200
+++ /var/tmp/diff_new_pack.G9dJOV/_new 2019-05-25 13:35:30.323966018 +0200
@@ -18,7 +18,7 @@
%define _version 1.1
Name: gajim
-Version: 1.1.2
+Version: 1.1.3
Release: 0
Summary: XMPP client written in Python and Gtk3
License: GPL-3.0-only
@@ -32,7 +32,7 @@
BuildRequires: p11-kit-devel
BuildRequires: pkgconfig
BuildRequires: python3 >= 3.5.0
-BuildRequires: python3-nbxmpp >= 0.6.9
+BuildRequires: python3-nbxmpp >= 0.6.10
BuildRequires: python3-precis-i18n >= 1.0.0
BuildRequires: python3-setuptools
BuildRequires: update-desktop-files
++++++ gajim-1.1.2.tar.bz2 -> gajim-1.1.3.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/gajim/gajim-1.1.2.tar.bz2 /work/SRC/openSUSE:Factory/.gajim.new.5148/gajim-1.1.3.tar.bz2 differ: char 11, line 1
1
0
Hello community,
here is the log from the commit of package python-notebook for openSUSE:Factory checked in at 2019-05-25 13:35:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-notebook (Old)
and /work/SRC/openSUSE:Factory/.python-notebook.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-notebook"
Sat May 25 13:35:23 2019 rev:2 rq:705228 version:5.7.8
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-notebook/python-notebook.changes 2019-05-22 11:12:46.798573913 +0200
+++ /work/SRC/openSUSE:Factory/.python-notebook.new.5148/python-notebook.changes 2019-05-25 13:35:24.671970049 +0200
@@ -1,0 +2,11 @@
+Fri May 24 03:33:21 UTC 2019 - Todd R <toddrme2178(a)gmail.com>
+
+- Add a jupyter-specific language package
+
+-------------------------------------------------------------------
+Wed May 22 18:59:10 UTC 2019 - Todd R <toddrme2178(a)gmail.com>
+
+- Split directories and macros into separate package.
+- Make lang subpackage python version-specific
+
+-------------------------------------------------------------------
Old:
----
macros.jupyter_notebook
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-notebook.spec ++++++
--- /var/tmp/diff_new_pack.WOuv11/_old 2019-05-25 13:35:26.715968591 +0200
+++ /var/tmp/diff_new_pack.WOuv11/_new 2019-05-25 13:35:26.759968560 +0200
@@ -28,12 +28,12 @@
Source0: https://files.pythonhosted.org/packages/source/n/notebook/notebook-%{versio…
Source1: https://media.readthedocs.org/pdf/jupyter-notebook/%{doc_ver}/jupyter-noteb…
Source2: https://media.readthedocs.org/htmlzip/jupyter-notebook/%{doc_ver}/jupyter-n…
-Source10: macros.jupyter_notebook
Source100: python-notebook-rpmlintrc
BuildRequires: %{python_module jupyter_core >= 4.4.0}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: hicolor-icon-theme
+BuildRequires: jupyter-notebook-filesystem
BuildRequires: python-rpm-macros
BuildRequires: unzip
Requires: jupyter-notebook = %{version}
@@ -87,6 +87,21 @@
This package provides the python interface.
+%package lang
+# FIXME: consider using %%lang_package macro
+Summary: Provides translations for the Jupyter Notebook
+Group: System/Localization
+Requires: python-notebook = %{version}
+Provides: python-notebook-lang-all = %{version}
+Provides: python-jupyter_notebook-lang = %{version}
+Obsoletes: python-jupyter_notebook-lang < %{version}
+Requires: jupyter-notebook-lang = %{version}
+
+%description lang
+Provides translations for the Jupyter notebook.
+
+This package provides the python module translations.
+
%package -n jupyter-notebook
Summary: Jupyter Notebook interface
Requires: jupyter-ipykernel
@@ -94,8 +109,7 @@
Requires: jupyter-jupyter_core >= 4.4.0
Requires: jupyter-nbconvert
Requires: jupyter-nbformat
-# This package provides macros that depend on these macros
-Requires: python-rpm-macros
+Requires: jupyter-notebook-filesystem
Requires: python3-notebook = %{version}
Conflicts: python3-jupyter_notebook < 5.7.8
@@ -106,18 +120,16 @@
This package provides the jupyter components.
%package -n jupyter-notebook-lang
-# FIXME: consider using %%lang_package macro
-Summary: Provides translations for %{name}
+Summary: Provides translations for the Jupyter Notebook
Group: System/Localization
Requires: jupyter-notebook = %{version}
+Requires: python3-notebook-lang = %{version}
Provides: jupyter-notebook-lang-all = %{version}
-Provides: %{python_module notebook-lang = %{version}}
-Provides: %{python_module notebook-lang-all = %{version}}
-Provides: %{python_module jupyter_notebook-lang = %{version}}
-Obsoletes: %{python_module jupyter_notebook-lang < %{version}}
%description -n jupyter-notebook-lang
-Provides translations for the "jupyter-notebook" package.
+Provides translations for the Jupyter notebook.
+
+This package provides the jupyter component translations.
%package -n jupyter-notebook-latex
Summary: LaTeX support for the Jupyter Notebook
@@ -146,7 +158,6 @@
%prep
%setup -q -n notebook-%{version}
-cp %{SOURCE1} .
unzip %{SOURCE2} -d docs
mv docs/jupyter-notebook-* docs/html
rm docs/html/.buildinfo
@@ -159,16 +170,6 @@
%python_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
-# These directories are used for extensions
-mkdir -p %{buildroot}%{_jupyter_prefix}/nbextensions
-mkdir -p %{buildroot}%{_jupyter_confdir}/jupyter_notebook_config.d/
-mkdir -p %{buildroot}%{_jupyter_confdir}/jupyter_server_config.d/
-mkdir -p %{buildroot}%{_jupyter_confdir}/nbextensions/
-
-for d in auth base bidi custom edit notebook services style terminal tree ; do
- mkdir -p %{buildroot}%{_jupyter_confdir}/nbconfig/${d}.d
-done
-
# Install icons
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/
cp docs/resources/icon_512x512.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/JupyterNotebook.svg
@@ -183,8 +184,6 @@
cp -r %{SOURCE1} %{buildroot}%{_docdir}/jupyter-notebook/
cp -r docs/html %{buildroot}%{_docdir}/jupyter-notebook/
-install -D -m644 %{SOURCE10} %{buildroot}%{_rpmconfigdir}/macros.d/macros.jupyter_notebook
-
%fdupes %{buildroot}%{_docdir}/jupyter-notebook/html/
%check
@@ -198,6 +197,11 @@
%{python_sitelib}/notebook/
%exclude %{python_sitelib}/notebook/i18n/*/
+%files %{python_files lang}
+%license COPYING.md
+%lang(fr_FR) %{python_sitelib}/notebook/i18n/fr_FR/
+%lang(zh_CN) %{python_sitelib}/notebook/i18n/zh_CN/
+
%files -n jupyter-notebook
%license COPYING.md
%{_bindir}/jupyter-bundlerextension
@@ -205,27 +209,9 @@
%{_bindir}/jupyter-notebook
%{_bindir}/jupyter-serverextension
%{_datadir}/icons/hicolor/*/apps/JupyterNotebook.*
-%{_rpmconfigdir}/macros.d/macros.jupyter_notebook
-%dir %{_jupyter_prefix}/nbextensions
-%dir %{_jupyter_confdir}/jupyter_notebook_config.d/
-%dir %{_jupyter_confdir}/jupyter_server_config.d/
-%dir %{_jupyter_confdir}/nbextensions/
-%dir %{_jupyter_confdir}/nbconfig/
-%dir %{_jupyter_confdir}/nbconfig/auth.d
-%dir %{_jupyter_confdir}/nbconfig/base.d
-%dir %{_jupyter_confdir}/nbconfig/bidi.d
-%dir %{_jupyter_confdir}/nbconfig/custom.d
-%dir %{_jupyter_confdir}/nbconfig/edit.d
-%dir %{_jupyter_confdir}/nbconfig/notebook.d
-%dir %{_jupyter_confdir}/nbconfig/services.d
-%dir %{_jupyter_confdir}/nbconfig/style.d
-%dir %{_jupyter_confdir}/nbconfig/terminal.d
-%dir %{_jupyter_confdir}/nbconfig/tree.d
%files -n jupyter-notebook-lang
%license COPYING.md
-%lang(fr_FR) %{python_sitelib}/notebook/i18n/fr_FR/
-%lang(zh_CN) %{python_sitelib}/notebook/i18n/zh_CN/
%files -n jupyter-notebook-latex
%license COPYING.md
1
0
Hello community,
here is the log from the commit of package jupyter for openSUSE:Factory checked in at 2019-05-25 13:35:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/jupyter (Old)
and /work/SRC/openSUSE:Factory/.jupyter.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "jupyter"
Sat May 25 13:35:11 2019 rev:2 rq:705102 version:1.0.0
Changes:
--------
New Changes file:
--- /dev/null 2019-05-02 15:18:01.516169518 +0200
+++ /work/SRC/openSUSE:Factory/.jupyter.new.5148/jupyter-filesystem.changes 2019-05-25 13:35:12.855978476 +0200
@@ -0,0 +1,10 @@
+-------------------------------------------------------------------
+Fri May 24 02:52:16 UTC 2019 - Todd R <toddrme2178(a)gmail.com>
+
+- Use %{_rpmmacrodir}
+
+-------------------------------------------------------------------
+Tue May 14 19:01:28 UTC 2019 - Todd R <toddrme2178(a)gmail.com>
+
+- Initial version
+
New:
----
jupyter-filesystem.changes
jupyter-filesystem.spec
macros.jupyter_core
macros.jupyter_notebook
macros.jupyterlab
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ jupyter-filesystem.spec ++++++
#
# spec file for package jupyter-filesystem
#
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: jupyter-filesystem
Url: https://jupyter.org/
Version: 20190522
%define tar_ver 1.0.0
Release: 0
Summary: Common directories shared by Jupyter packages
Source0: https://files.pythonhosted.org/packages/source/j/jupyter/jupyter-%{tar_ver}…
Source10: macros.jupyter_core
Source11: macros.jupyter_notebook
Source12: macros.jupyterlab
License: BSD-3-Clause
Group: System/Fhs
%description
This package provides common directories and macros used by many
jupyter packages.
%package -n jupyter-jupyter_core-filesystem
Summary: Common directories shared by Jupyter packages
Provides: jupyter-jupyter_core-macros-devel = %{version}
Provides: %{python_module jupyter_core-filesystem = %{version}}
Provides: %{python_module jupyter_core-macros-devel = %{version}}
%description -n jupyter-jupyter_core-filesystem
This package provides common directories and macros used by many
packages that depend on jupyter_core.
It also provides macros for building packages that depend on
jupyter_core.
%define _jupyter_prefix %{_datadir}/jupyter/
%define _jupyter_kernel_dir %{_jupyter_prefix}/kernels/
%define _jupyter_confdir %{_sysconfdir}/jupyter/
%package -n jupyter-notebook-filesystem
Summary: Common directories shared by Jupyter notebook packages
Requires: jupyter-jupyter_core-filesystem = %{version}
Requires: python-rpm-macros
Provides: jupyter-notebook-macros-devel = %{version}
Provides: %{python_module notebook-filesystem = %{version}}
Provides: %{python_module notebook-macros-devel = %{version}}
%description -n jupyter-notebook-filesystem
This package provides common directories and macros used by many
packages that depend on the Jupyter notebook.
It also provides macros for building packages that depend on
the Jupyter notebook.
%define _jupyter_nbextension_dir %{_jupyter_prefix}/nbextensions/
%define _jupyter_nb_confdir %{_jupyter_confdir}/nbconfig/
%define _jupyter_nbextension_confdir %{_jupyter_nb_confdir}/nbextensions/
%define _jupyter_servextension_confdir %{_jupyter_confdir}/jupyter_notebook_config.d/
%define _jupyter_server_confdir %{_jupyter_confdir}/jupyter_server_config.d/
%define _jupyter_nb_auth_confdir %{_jupyter_nb_confdir}/auth.d
%define _jupyter_nb_base_confdir %{_jupyter_nb_confdir}/base.d
%define _jupyter_nb_bidi_confdir %{_jupyter_nb_confdir}/bidi.d
%define _jupyter_nb_custom_confdir %{_jupyter_nb_confdir}/custom.d
%define _jupyter_nb_edit_confdir %{_jupyter_nb_confdir}/edit.d
%define _jupyter_nb_notebook_confdir %{_jupyter_nb_confdir}/notebook.d
%define _jupyter_nb_services_confdir %{_jupyter_nb_confdir}/services.d
%define _jupyter_nb_style_confdir %{_jupyter_nb_confdir}/style.d
%define _jupyter_nb_terminal_confdir %{_jupyter_nb_confdir}/terminal.d
%define _jupyter_nb_tree_confdir %{_jupyter_nb_confdir}/tree.d
%package -n jupyter-jupyterlab-filesystem
Summary: Common directories shared by JupyterLab packages
Requires: jupyter-jupyter_core-filesystem = %{version}
Provides: jupyter-jupyterlab-macros-devel = %{version}
Provides: %{python_module jupyterlab-filesystem = %{version}}
Provides: %{python_module jupyterlab-macros-devel = %{version}}
%description -n jupyter-jupyterlab-filesystem
This package provides common directories and macros used by many
packages that depend on JupyterLab.
It also provides macros for building packages that depend on
JupyterLab.
%define _jupyter_lab_dir %{_jupyter_prefix}/lab/
%define _jupyter_labextensions_dir %{_jupyter_lab_dir}/extensions/
%prep
%setup -q -n jupyter-%{tar_ver}
%build
# Not needed
%install
# macros
install -D -m644 %{SOURCE10} %{buildroot}%{_rpmmacrodir}/macros.jupyter_core
install -D -m644 %{SOURCE11} %{buildroot}%{_rpmmacrodir}/macros.jupyter_notebook
install -D -m644 %{SOURCE12} %{buildroot}%{_rpmmacrodir}/macros.jupyterlab
# jupyter_core directories
mkdir -p %{buildroot}%{_jupyter_prefix}
mkdir -p %{buildroot}%{_jupyter_kernel_dir}
mkdir -p %{buildroot}%{_jupyter_confdir}
# notebook directories
mkdir -p %{buildroot}%{_jupyter_nbextension_dir}
mkdir -p %{buildroot}%{_jupyter_nb_confdir}
mkdir -p %{buildroot}%{_jupyter_nbextension_confdir}
mkdir -p %{buildroot}%{_jupyter_servextension_confdir}
mkdir -p %{buildroot}%{_jupyter_server_confdir}
mkdir -p %{buildroot}%{_jupyter_nb_auth_confdir}
mkdir -p %{buildroot}%{_jupyter_nb_base_confdir}
mkdir -p %{buildroot}%{_jupyter_nb_bidi_confdir}
mkdir -p %{buildroot}%{_jupyter_nb_custom_confdir}
mkdir -p %{buildroot}%{_jupyter_nb_edit_confdir}
mkdir -p %{buildroot}%{_jupyter_nb_notebook_confdir}
mkdir -p %{buildroot}%{_jupyter_nb_services_confdir}
mkdir -p %{buildroot}%{_jupyter_nb_style_confdir}
mkdir -p %{buildroot}%{_jupyter_nb_terminal_confdir}
mkdir -p %{buildroot}%{_jupyter_nb_tree_confdir}
# jupyterlab directories
mkdir -p %{buildroot}%{_jupyter_lab_dir}
mkdir -p %{buildroot}%{_jupyter_labextensions_dir}
%files -n jupyter-jupyter_core-filesystem
%license LICENSE
%{_rpmmacrodir}/macros.jupyter_core
%dir %{_jupyter_prefix}
%dir %{_jupyter_kernel_dir}
%dir %{_jupyter_confdir}
%files -n jupyter-notebook-filesystem
%license LICENSE
%{_rpmmacrodir}/macros.jupyter_notebook
%dir %{_jupyter_nbextension_dir}
%dir %{_jupyter_nb_confdir}
%dir %{_jupyter_nbextension_confdir}
%dir %{_jupyter_servextension_confdir}
%dir %{_jupyter_server_confdir}
%dir %{_jupyter_nb_auth_confdir}
%dir %{_jupyter_nb_base_confdir}
%dir %{_jupyter_nb_bidi_confdir}
%dir %{_jupyter_nb_custom_confdir}
%dir %{_jupyter_nb_edit_confdir}
%dir %{_jupyter_nb_notebook_confdir}
%dir %{_jupyter_nb_services_confdir}
%dir %{_jupyter_nb_style_confdir}
%dir %{_jupyter_nb_terminal_confdir}
%dir %{_jupyter_nb_tree_confdir}
%files -n jupyter-jupyterlab-filesystem
%license LICENSE
%{_rpmmacrodir}/macros.jupyterlab
%dir %{_jupyter_lab_dir}
%dir %{_jupyter_labextensions_dir}
%changelog
++++++ macros.jupyter_core ++++++
%_jupyter_prefix %{_datadir}/jupyter/
%_jupyter_kernel_dir %{_jupyter_prefix}/kernels/
%_jupyter_confdir %{_sysconfdir}/jupyter/
%jupyter_move_config \
%if "$(dirname %{_prefix}/etc/jupyter)" != "$(dirname %{_jupyter_confdir})" \
mkdir -p %{buildroot}%{_sysconfdir} \
mv %{buildroot}%{_prefix}/etc/jupyter %{buildroot}%{_jupyter_confdir} \
rm -d %{buildroot}%{_prefix}/etc \
%endif \
%{nil}
++++++ macros.jupyter_notebook ++++++
%_jupyter_nbextension_dir %{_jupyter_prefix}/nbextensions/
%_jupyter_nb_confdir %{_jupyter_confdir}/nbconfig/
%_jupyter_nbextension_confdir %{_jupyter_nb_confdir}/nbextensions/
%_jupyter_servextension_confdir %{_jupyter_confdir}/jupyter_notebook_config.d/
%_jupyter_server_confdir %{_jupyter_confdir}/jupyter_server_config.d/
%_jupyter_nb_auth_confdir %{_jupyter_nb_confdir}/auth.d
%_jupyter_nb_base_confdir %{_jupyter_nb_confdir}/base.d
%_jupyter_nb_bidi_confdir %{_jupyter_nb_confdir}/bidi.d
%_jupyter_nb_custom_confdir %{_jupyter_nb_confdir}/custom.d
%_jupyter_nb_edit_confdir %{_jupyter_nb_confdir}/edit.d
%_jupyter_nb_notebook_confdir %{_jupyter_nb_confdir}/notebook.d
%_jupyter_nb_services_confdir %{_jupyter_nb_confdir}/services.d
%_jupyter_nb_style_confdir %{_jupyter_nb_confdir}/style.d
%_jupyter_nb_terminal_confdir %{_jupyter_nb_confdir}/terminal.d
%_jupyter_nb_tree_confdir %{_jupyter_nb_confdir}/tree.d
%jupyter_nbextension_install() \
PYTHONPATH=%{buildroot}%{python3_sitelib} jupyter nbextension install --nbextensions=%{buildroot}%{_jupyter_nbextension_dir} --py %{1} \
%{nil}
%jupyter_nbextension_enable() \
jupyter nbextension enable --py --system %{1} || true \
%{nil}
%jupyter_serverextension_enable() \
jupyter serverextension enable --py --system %{1} || true \
%{nil}
%jupyter_nbextension_disable() \
if [ $1 = 0 ] && [ -d %{python3_sitelib}/%{1}/ ] ; then \
jupyter nbextension disable --py --system %{1} || true \
fi \
%{nil}
%jupyter_serverextension_disable() \
if [ $1 = 0 ] && [ -d %{python3_sitelib}/%{1}/ ] ; then \
jupyter serverextension disable --py --system %{1} || true \
fi \
%{nil}
++++++ macros.jupyterlab ++++++
%_jupyter_lab_dir %{_jupyter_prefix}/lab/
%_jupyter_labextensions_dir %{_jupyter_lab_dir}/extensions/
1
0
Hello community,
here is the log from the commit of package python-jupyter_core for openSUSE:Factory checked in at 2019-05-25 13:35:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-jupyter_core (Old)
and /work/SRC/openSUSE:Factory/.python-jupyter_core.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-jupyter_core"
Sat May 25 13:35:07 2019 rev:9 rq:704842 version:4.4.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-jupyter_core/python-jupyter_core.changes 2019-05-22 11:05:25.682577350 +0200
+++ /work/SRC/openSUSE:Factory/.python-jupyter_core.new.5148/python-jupyter_core.changes 2019-05-25 13:35:08.523981566 +0200
@@ -1,0 +2,5 @@
+Tue May 14 18:55:09 UTC 2019 - Todd R <toddrme2178(a)gmail.com>
+
+- Split directories and macros into separate package.
+
+-------------------------------------------------------------------
Old:
----
macros.jupyter
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-jupyter_core.spec ++++++
--- /var/tmp/diff_new_pack.nEhT50/_old 2019-05-25 13:35:10.115980431 +0200
+++ /var/tmp/diff_new_pack.nEhT50/_new 2019-05-25 13:35:10.119980428 +0200
@@ -25,13 +25,13 @@
Group: Development/Languages/Python
URL: https://github.com/jupyter/jupyter_core
Source0: https://files.pythonhosted.org/packages/source/j/jupyter_core/jupyter_core-…
-Source10: macros.jupyter
# PATCH-FIX-OPENSUSE -- use_rpms_paths.patch -- change paths so they are easy to replace at build time
Patch0: use_rpms_paths.patch
BuildRequires: %{python_module ipython_genutils}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module traitlets}
BuildRequires: fdupes
+BuildRequires: jupyter-jupyter_core-filesystem
BuildRequires: python-rpm-macros
Requires: jupyter-jupyter_core = %{version}
Requires: python-ipython_genutils
@@ -55,6 +55,7 @@
Summary: Base package on which Jupyter projects rely
Group: Development/Languages/Python
Requires: python3-jupyter_core = %{version}
+Requires: jupyter-notebook-filesystem
%description -n jupyter-jupyter_core
Core common functionality of Jupyter projects.
@@ -89,13 +90,6 @@
%fdupes %{buildroot}%{$python_sitelib}
}
-# these directories are used by extensions
-mkdir -p %{buildroot}%{_datadir}/jupyter/
-mkdir -p %{buildroot}%{_datadir}/jupyter/kernels/
-mkdir -p %{buildroot}%{_sysconfdir}/jupyter/
-
-install -D -m644 %{SOURCE10} %{buildroot}%{_rpmconfigdir}/macros.d/macros.jupyter
-
%files %{python_files}
%license COPYING.md
%{python_sitelib}/jupyter.py*
@@ -108,9 +102,5 @@
%doc CONTRIBUTING.md README.md
%{_bindir}/jupyter
%{_bindir}/jupyter-migrate
-%{_rpmconfigdir}/macros.d/macros.jupyter
-%dir %{_datadir}/jupyter/
-%dir %{_datadir}/jupyter/kernels/
-%dir %{_sysconfdir}/jupyter/
%changelog
1
0
Hello community,
here is the log from the commit of package jupyter-jupyterlab for openSUSE:Factory checked in at 2019-05-25 13:35:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/jupyter-jupyterlab (Old)
and /work/SRC/openSUSE:Factory/.jupyter-jupyterlab.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "jupyter-jupyterlab"
Sat May 25 13:35:02 2019 rev:2 rq:704841 version:0.35.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/jupyter-jupyterlab/jupyter-jupyterlab.changes 2019-05-22 10:57:23.338937989 +0200
+++ /work/SRC/openSUSE:Factory/.jupyter-jupyterlab.new.5148/jupyter-jupyterlab.changes 2019-05-25 13:35:04.499984436 +0200
@@ -1,0 +2,9 @@
+Tue May 14 18:55:09 UTC 2019 - Todd R <toddrme2178(a)gmail.com>
+
+- Update to 0.35.6
+ * Publish outputarea 0.19.2
+ * Make sure the cached value of `_lastStream` reflects the removed
+ characters so we don't have to remove them over and over again.
+- Split directories and macros into separate package.
+
+-------------------------------------------------------------------
Old:
----
jupyterlab-0.35.5-py3-none-any.whl
macros.jupyterlab
New:
----
jupyterlab-0.35.6-py3-none-any.whl
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ jupyter-jupyterlab.spec ++++++
--- /var/tmp/diff_new_pack.EXUp9U/_old 2019-05-25 13:35:06.551982973 +0200
+++ /var/tmp/diff_new_pack.EXUp9U/_new 2019-05-25 13:35:06.555982970 +0200
@@ -18,16 +18,16 @@
%bcond_with test
Name: jupyter-jupyterlab
-Version: 0.35.5
+Version: 0.35.6
Release: 0
Summary: The JupyterLab notebook server extension
License: BSD-3-Clause
Group: Development/Languages/Python
URL: https://github.com/jupyterlab/jupyterlab
Source0: https://files.pythonhosted.org/packages/py3/j/jupyterlab/jupyterlab-%{versi…
-Source10: macros.jupyterlab
Source99: jupyter-jupyterlab-rpmlintrc
BuildRequires: fdupes
+BuildRequires: jupyter-jupyterlab-filesystem
BuildRequires: jupyter-jupyterlab-launcher >= 0.13.1
BuildRequires: jupyter-jupyterlab-server < 0.3.0
BuildRequires: jupyter-jupyterlab-server >= 0.2.0
@@ -39,6 +39,7 @@
BuildRequires: python3-ipython_genutils
BuildRequires: python3-pip
BuildRequires: python3-requests
+Requires: jupyter-jupyterlab-filesystem
Requires: jupyter-jupyterlab-launcher >= 0.13.1
Requires: jupyter-jupyterlab-server < 0.3.0
Requires: jupyter-jupyterlab-server >= 0.2.0
@@ -50,7 +51,7 @@
Recommends: python3-requests
Recommends: python3-sphinx_rtd_theme
Provides: python3-jupyter_jupyterlab = %{version}
-Obsoletes: python3-jupyter_jupyterlab <= %{version}
+Obsoletes: python3-jupyter_jupyterlab < %{version}
Provides: python3-jupyterlab = %{version}
BuildArch: noarch
%if %{with test}
@@ -80,14 +81,8 @@
%{jupyter_move_config}
-mkdir -p %{buildroot}%{_jupyter_prefix}/lab/
-mkdir -p %{buildroot}%{_jupyter_prefix}/lab/extensions/
-mkdir -p %{buildroot}%{_jupyter_prefix}/labextensions/
-
%{fdupes %{buildroot}%{_jupyter_prefix} %{buildroot}%{python3_sitelib}}
-install -D -m644 %{SOURCE10} %{buildroot}%{_rpmconfigdir}/macros.d/macros.jupyterlab
-
%if %{with test}
%check
rm -r build
@@ -101,11 +96,8 @@
%{_bindir}/jupyter-lab
%{_bindir}/jupyter-labextension
%{_bindir}/jupyter-labhub
-%{_jupyter_prefix}/lab/
-%{_jupyter_prefix}/lab/extensions/
-%{_jupyter_prefix}/labextensions/
%config %{_jupyter_servextension_confdir}/jupyterlab.json
-%{_rpmconfigdir}/macros.d/macros.jupyterlab
+%{_jupyter_lab_dir}
%{python3_sitelib}/jupyterlab
%{python3_sitelib}/jupyterlab-%{version}.dist-info
1
0
Hello community,
here is the log from the commit of package libvirt for openSUSE:Factory checked in at 2019-05-25 13:34:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libvirt (Old)
and /work/SRC/openSUSE:Factory/.libvirt.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libvirt"
Sat May 25 13:34:44 2019 rev:284 rq:705076 version:5.3.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/libvirt/libvirt.changes 2019-05-22 10:53:13.747242186 +0200
+++ /work/SRC/openSUSE:Factory/.libvirt.new.5148/libvirt.changes 2019-05-25 13:34:45.547997953 +0200
@@ -1,0 +2,6 @@
+Thu May 23 17:07:21 UTC 2019 - Jim Fehlig <jfehlig(a)suse.com>
+
+- spec: add systemd-container dependency to qemu and lxc drivers
+ bsc#1136109
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libvirt.spec ++++++
--- /var/tmp/diff_new_pack.tJPxux/_old 2019-05-25 13:34:47.675996435 +0200
+++ /var/tmp/diff_new_pack.tJPxux/_new 2019-05-25 13:34:47.675996435 +0200
@@ -12,7 +12,7 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via https://bugs.opensuse.org/
+# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
@@ -675,6 +675,7 @@
Requires: gzip
Requires: lzop
Requires: qemu
+Requires: systemd-container
Requires: xz
%description daemon-driver-qemu
@@ -688,6 +689,7 @@
Requires: %{name}-libs = %{version}-%{release}
# There really is a hard cross-driver dependency here
Requires: %{name}-daemon-driver-network = %{version}-%{release}
+Requires: systemd-container
%description daemon-driver-lxc
The LXC driver plugin for the libvirtd daemon, providing
1
0
Hello community,
here is the log from the commit of package libssh for openSUSE:Factory checked in at 2019-05-25 13:34:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libssh (Old)
and /work/SRC/openSUSE:Factory/.libssh.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libssh"
Sat May 25 13:34:36 2019 rev:56 rq:705071 version:0.8.7
Changes:
--------
--- /work/SRC/openSUSE:Factory/libssh/libssh.changes 2019-03-01 20:30:02.474002378 +0100
+++ /work/SRC/openSUSE:Factory/.libssh.new.5148/libssh.changes 2019-05-25 13:34:37.708003545 +0200
@@ -1,0 +2,8 @@
+Thu May 23 15:32:07 UTC 2019 - James McDonough <jmcdonough(a)suse.com>
+
+- Add support for new AES-GCM encryption types; (bsc#1134193)
+ * Add 0001-libcrypto-Implement-OpenSSH-compatible-AES-GCM-ciphe.patch
+ * Add 0001-libgcrypt-Implement-OpenSSH-compatible-AES-GCM-ciphe.patch
+ * Add 0001-tests-Add-aes-gcm-ciphers-tests.patch
+
+-------------------------------------------------------------------
New:
----
0001-libcrypto-Implement-OpenSSH-compatible-AES-GCM-ciphe.patch
0001-libgcrypt-Implement-OpenSSH-compatible-AES-GCM-ciphe.patch
0001-tests-Add-aes-gcm-ciphers-tests.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libssh.spec ++++++
--- /var/tmp/diff_new_pack.KnaVAb/_old 2019-05-25 13:34:39.864002007 +0200
+++ /var/tmp/diff_new_pack.KnaVAb/_new 2019-05-25 13:34:39.904001978 +0200
@@ -36,6 +36,9 @@
Source2: https://cryptomilk.org/gpgkey-8DFF53E18F2ABC8D8F3C92237EE0FC4DCC014E3D.gpg#…
Source99: baselibs.conf
Patch0: 0001-disable-timeout-test-on-slow-buildsystems.patch
+Patch1: 0001-libcrypto-Implement-OpenSSH-compatible-AES-GCM-ciphe.patch
+Patch2: 0001-libgcrypt-Implement-OpenSSH-compatible-AES-GCM-ciphe.patch
+Patch3: 0001-tests-Add-aes-gcm-ciphers-tests.patch
# cmake pulls curl, but libssh is a dependency of it, so avoid cycles by using curl-mini
#!BuildRequires: libcurl4-mini
BuildRequires: cmake
++++++ 0001-libcrypto-Implement-OpenSSH-compatible-AES-GCM-ciphe.patch ++++++
>From 46090facbae8c8292d2775546082ccbd5e56fbd1 Mon Sep 17 00:00:00 2001
From: Jakub Jelen <jjelen(a)redhat.com>
Date: Mon, 8 Oct 2018 13:24:49 +0200
Subject: [PATCH] libcrypto: Implement OpenSSH-compatible AES-GCM ciphers using
OpenSSL
The commit also propares the internals throughout the code base
for the inclusion of a new AEAD cipher, because previously, the
source code counted only with chacha20-poly1305 cipher, which
is very specific in many cases.
The SSH_HMAC_AEAD_GCM mac algorithm is not actually used, but the name
needed to be defined so we can match in the algorithms selection per
OpenSSH specification (MACs are ignored in case GCM is select as a cipher [1]).
If the provided OpenSSL does not provide EVP_aes_128_gcm() function,
the AES-GCM ciphers will not be compiled in.
[1] https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.chacha20poly1305?annota…
Signed-off-by: Jakub Jelen <jjelen(a)redhat.com>
Reviewed-by: Andreas Schneider <asn(a)cryptomilk.org>
---
ConfigureChecks.cmake | 4 +
config.h.cmake | 3 +
include/libssh/crypto.h | 8 +-
include/libssh/wrapper.h | 3 +-
src/chachapoly.c | 1 +
src/kex.c | 9 +-
src/libcrypto.c | 247 +++++++++++++++++++++++++++++++++++++++
src/packet_crypt.c | 5 +-
src/wrapper.c | 27 ++++-
9 files changed, 297 insertions(+), 10 deletions(-)
Index: libssh-0.8.7/ConfigureChecks.cmake
===================================================================
--- libssh-0.8.7.orig/ConfigureChecks.cmake
+++ libssh-0.8.7/ConfigureChecks.cmake
@@ -110,6 +110,10 @@ if (OPENSSL_FOUND)
set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
+ check_function_exists(EVP_aes_128_gcm HAVE_OPENSSL_EVP_AES_GCM)
+
+ set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
+ set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
check_function_exists(CRYPTO_THREADID_set_callback HAVE_OPENSSL_CRYPTO_THREADID_SET_CALLBACK)
set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
Index: libssh-0.8.7/config.h.cmake
===================================================================
--- libssh-0.8.7.orig/config.h.cmake
+++ libssh-0.8.7/config.h.cmake
@@ -100,6 +100,9 @@
/* Define to 1 if you have the `EVP_aes128_cbc' function. */
#cmakedefine HAVE_OPENSSL_EVP_AES_CBC 1
+/* Define to 1 if you have the `EVP_aes128_gcm' function. */
+#cmakedefine HAVE_OPENSSL_EVP_AES_GCM 1
+
/* Define to 1 if you have the `CRYPTO_THREADID_set_callback' function. */
#cmakedefine HAVE_OPENSSL_CRYPTO_THREADID_SET_CALLBACK 1
Index: libssh-0.8.7/include/libssh/crypto.h
===================================================================
--- libssh-0.8.7.orig/include/libssh/crypto.h
+++ libssh-0.8.7/include/libssh/crypto.h
@@ -48,6 +48,9 @@
#define DIGEST_MAX_LEN 64
+#define AES_GCM_TAGLEN 16
+#define AES_GCM_IVLEN 12
+
enum ssh_key_exchange_e {
/* diffie-hellman-group1-sha1 */
SSH_KEX_DH_GROUP1_SHA1=1,
@@ -78,7 +81,10 @@ enum ssh_cipher_e {
SSH_AES256_CBC,
SSH_AES128_CTR,
SSH_AES192_CTR,
- SSH_AES256_CTR
+ SSH_AES256_CTR,
+ SSH_AEAD_AES128_GCM,
+ SSH_AEAD_AES256_GCM,
+ SSH_AEAD_CHACHA20_POLY1305
};
struct ssh_crypto_struct {
Index: libssh-0.8.7/include/libssh/wrapper.h
===================================================================
--- libssh-0.8.7.orig/include/libssh/wrapper.h
+++ libssh-0.8.7/include/libssh/wrapper.h
@@ -46,7 +46,8 @@ enum ssh_hmac_e {
SSH_HMAC_SHA256,
SSH_HMAC_SHA512,
SSH_HMAC_MD5,
- SSH_HMAC_AEAD_POLY1305
+ SSH_HMAC_AEAD_POLY1305,
+ SSH_HMAC_AEAD_GCM
};
enum ssh_des_e {
Index: libssh-0.8.7/src/chachapoly.c
===================================================================
--- libssh-0.8.7.orig/src/chachapoly.c
+++ libssh-0.8.7/src/chachapoly.c
@@ -192,6 +192,7 @@ static void chacha20_cleanup(struct ssh_
}
const struct ssh_cipher_struct chacha20poly1305_cipher = {
+ .ciphertype = SSH_AEAD_CHACHA20_POLY1305,
.name = "chacha20-poly1305(a)openssh.com",
.blocksize = 8,
.lenfield_blocksize = 4,
Index: libssh-0.8.7/src/kex.c
===================================================================
--- libssh-0.8.7.orig/src/kex.c
+++ libssh-0.8.7/src/kex.c
@@ -61,10 +61,15 @@
# endif /* HAVE_OPENSSL_BLOWFISH_H */
# ifdef HAVE_OPENSSL_AES_H
+# ifdef HAVE_OPENSSL_EVP_AES_GCM
+# define GCM "aes256-gcm@openssh.com,aes128-gcm@openssh.com,"
+# else
+# define GCM ""
+# endif /* HAVE_OPENSSL_EVP_AES_GCM */
# ifdef BROKEN_AES_CTR
-# define AES "aes256-cbc,aes192-cbc,aes128-cbc,"
+# define AES GCM "aes256-cbc,aes192-cbc,aes128-cbc,"
# else /* BROKEN_AES_CTR */
-# define AES "aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,"
+# define AES GCM "aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,"
# endif /* BROKEN_AES_CTR */
# else /* HAVE_OPENSSL_AES_H */
# define AES ""
Index: libssh-0.8.7/src/libcrypto.c
===================================================================
--- libssh-0.8.7.orig/src/libcrypto.c
+++ libssh-0.8.7/src/libcrypto.c
@@ -491,6 +491,19 @@ static void evp_cipher_init(struct ssh_c
SSH_LOG(SSH_LOG_WARNING, "This cipher is not available in evp_cipher_init");
break;
#endif
+#ifdef HAVE_OPENSSL_EVP_AES_GCM
+ case SSH_AEAD_AES128_GCM:
+ cipher->cipher = EVP_aes_128_gcm();
+ break;
+ case SSH_AEAD_AES256_GCM:
+ cipher->cipher = EVP_aes_256_gcm();
+ break;
+#else
+ case SSH_AEAD_AES128_GCM:
+ case SSH_AEAD_AES256_GCM:
+ SSH_LOG(SSH_LOG_WARNING, "This cipher is not available in evp_cipher_init");
+ break;
+#endif /* HAVE_OPENSSL_EVP_AES_GCM */
case SSH_3DES_CBC:
cipher->cipher = EVP_des_ede3_cbc();
break;
@@ -498,6 +511,9 @@ static void evp_cipher_init(struct ssh_c
cipher->cipher = EVP_bf_cbc();
break;
/* ciphers not using EVP */
+ case SSH_AEAD_CHACHA20_POLY1305:
+ SSH_LOG(SSH_LOG_WARNING, "The ChaCha cipher can not be handled here");
+ break;
case SSH_NO_CIPHER:
SSH_LOG(SSH_LOG_WARNING, "No valid ciphertype found");
break;
@@ -517,6 +533,22 @@ static int evp_cipher_set_encrypt_key(st
SSH_LOG(SSH_LOG_WARNING, "EVP_EncryptInit_ex failed");
return SSH_ERROR;
}
+
+#ifdef HAVE_OPENSSL_EVP_AES_GCM
+ /* For AES-GCM we need to set IV in specific way */
+ if (cipher->ciphertype == SSH_AEAD_AES128_GCM ||
+ cipher->ciphertype == SSH_AEAD_AES256_GCM) {
+ rc = EVP_CIPHER_CTX_ctrl(cipher->ctx,
+ EVP_CTRL_GCM_SET_IV_FIXED,
+ -1,
+ (u_char *)IV);
+ if (rc != 1) {
+ SSH_LOG(SSH_LOG_WARNING, "EVP_CTRL_GCM_SET_IV_FIXED failed");
+ return SSH_ERROR;
+ }
+ }
+#endif /* HAVE_OPENSSL_EVP_AES_GCM */
+
EVP_CIPHER_CTX_set_padding(cipher->ctx, 0);
return SSH_OK;
@@ -534,6 +566,22 @@ static int evp_cipher_set_decrypt_key(st
SSH_LOG(SSH_LOG_WARNING, "EVP_DecryptInit_ex failed");
return SSH_ERROR;
}
+
+#ifdef HAVE_OPENSSL_EVP_AES_GCM
+ /* For AES-GCM we need to set IV in specific way */
+ if (cipher->ciphertype == SSH_AEAD_AES128_GCM ||
+ cipher->ciphertype == SSH_AEAD_AES256_GCM) {
+ rc = EVP_CIPHER_CTX_ctrl(cipher->ctx,
+ EVP_CTRL_GCM_SET_IV_FIXED,
+ -1,
+ (u_char *)IV);
+ if (rc != 1) {
+ SSH_LOG(SSH_LOG_WARNING, "EVP_CTRL_GCM_SET_IV_FIXED failed");
+ return SSH_ERROR;
+ }
+ }
+#endif /* HAVE_OPENSSL_EVP_AES_GCM */
+
EVP_CIPHER_CTX_set_padding(cipher->ctx, 0);
return SSH_OK;
@@ -642,6 +690,175 @@ static void aes_ctr_cleanup(struct ssh_c
#endif /* HAVE_OPENSSL_EVP_AES_CTR */
+#ifdef HAVE_OPENSSL_EVP_AES_GCM
+static int
+evp_cipher_aead_get_length(struct ssh_cipher_struct *cipher,
+ void *in,
+ uint8_t *out,
+ size_t len,
+ uint64_t seq)
+{
+ (void)seq;
+
+ /* The length is not encrypted: Copy it to the result buffer */
+ memcpy(out, in, len);
+
+ return SSH_OK;
+}
+
+static void
+evp_cipher_aead_encrypt(struct ssh_cipher_struct *cipher,
+ void *in,
+ void *out,
+ size_t len,
+ uint8_t *tag,
+ uint64_t seq)
+{
+ size_t authlen, aadlen;
+ u_char lastiv[1];
+ int outlen = 0;
+ int rc;
+
+ (void) seq;
+
+ aadlen = cipher->lenfield_blocksize;
+ authlen = cipher->tag_size;
+
+ /* increment IV */
+ rc = EVP_CIPHER_CTX_ctrl(cipher->ctx,
+ EVP_CTRL_GCM_IV_GEN,
+ 1,
+ lastiv);
+ if (rc == 0) {
+ SSH_LOG(SSH_LOG_WARNING, "EVP_CTRL_GCM_IV_GEN failed");
+ return;
+ }
+
+ /* Pass over the authenticated data (not encrypted) */
+ rc = EVP_EncryptUpdate(cipher->ctx,
+ NULL,
+ &outlen,
+ (unsigned char *)in,
+ aadlen);
+ if (rc == 0 || outlen != aadlen) {
+ SSH_LOG(SSH_LOG_WARNING, "Failed to pass authenticated data");
+ return;
+ }
+ memcpy(out, in, aadlen);
+
+ /* Encrypt the rest of the data */
+ rc = EVP_EncryptUpdate(cipher->ctx,
+ (unsigned char *)out + aadlen,
+ &outlen,
+ (unsigned char *)in + aadlen,
+ len - aadlen);
+ if (rc != 1 || outlen != len - aadlen) {
+ SSH_LOG(SSH_LOG_WARNING, "EVP_EncryptUpdate failed");
+ return;
+ }
+
+ /* compute tag */
+ rc = EVP_EncryptFinal(cipher->ctx,
+ NULL,
+ &outlen);
+ if (rc < 0) {
+ SSH_LOG(SSH_LOG_WARNING, "EVP_EncryptFinal failed: Failed to create a tag");
+ return;
+ }
+
+ rc = EVP_CIPHER_CTX_ctrl(cipher->ctx,
+ EVP_CTRL_GCM_GET_TAG,
+ authlen,
+ (unsigned char *)tag);
+ if (rc != 1) {
+ SSH_LOG(SSH_LOG_WARNING, "EVP_CTRL_GCM_GET_TAG failed");
+ return;
+ }
+}
+
+static int
+evp_cipher_aead_decrypt(struct ssh_cipher_struct *cipher,
+ void *complete_packet,
+ uint8_t *out,
+ size_t encrypted_size,
+ uint64_t seq)
+{
+ size_t authlen, aadlen;
+ u_char lastiv[1];
+ int outlen = 0;
+ int rc = 0;
+
+ (void)seq;
+
+ aadlen = cipher->lenfield_blocksize;
+ authlen = cipher->tag_size;
+
+ /* increment IV */
+ rc = EVP_CIPHER_CTX_ctrl(cipher->ctx,
+ EVP_CTRL_GCM_IV_GEN,
+ 1,
+ lastiv);
+ if (rc == 0) {
+ SSH_LOG(SSH_LOG_WARNING, "EVP_CTRL_GCM_IV_GEN failed");
+ return SSH_ERROR;
+ }
+
+ /* set tag for authentication */
+ rc = EVP_CIPHER_CTX_ctrl(cipher->ctx,
+ EVP_CTRL_GCM_SET_TAG,
+ authlen,
+ (unsigned char *)complete_packet + aadlen + encrypted_size);
+ if (rc == 0) {
+ SSH_LOG(SSH_LOG_WARNING, "EVP_CTRL_GCM_SET_TAG failed");
+ return SSH_ERROR;
+ }
+
+ /* Pass over the authenticated data (not encrypted) */
+ rc = EVP_DecryptUpdate(cipher->ctx,
+ NULL,
+ &outlen,
+ (unsigned char *)complete_packet,
+ aadlen);
+ if (rc == 0) {
+ SSH_LOG(SSH_LOG_WARNING, "Failed to pass authenticated data");
+ return SSH_ERROR;
+ }
+ /* Do not copy the length to the target buffer, because it is already processed */
+ //memcpy(out, complete_packet, aadlen);
+
+ /* Decrypt the rest of the data */
+ rc = EVP_DecryptUpdate(cipher->ctx,
+ (unsigned char *)out,
+ &outlen,
+ (unsigned char *)complete_packet + aadlen,
+ encrypted_size /* already substracted aadlen*/);
+ if (rc != 1) {
+ SSH_LOG(SSH_LOG_WARNING, "EVP_DecryptUpdate failed");
+ return SSH_ERROR;
+ }
+
+ if (outlen != (int)encrypted_size) {
+ SSH_LOG(SSH_LOG_WARNING,
+ "EVP_DecryptUpdate: output size %d for %zd in",
+ outlen,
+ encrypted_size);
+ return SSH_ERROR;
+ }
+
+ /* verify tag */
+ rc = EVP_DecryptFinal(cipher->ctx,
+ NULL,
+ &outlen);
+ if (rc < 0) {
+ SSH_LOG(SSH_LOG_WARNING, "EVP_DecryptFinal failed: Failed authentication");
+ return SSH_ERROR;
+ }
+
+ return SSH_OK;
+}
+
+#endif /* HAVE_OPENSSL_EVP_AES_GCM */
+
/*
* The table of supported ciphers
*/
@@ -765,6 +982,36 @@ static struct ssh_cipher_struct ssh_ciph
.decrypt = evp_cipher_decrypt,
.cleanup = evp_cipher_cleanup
},
+#ifdef HAVE_OPENSSL_EVP_AES_GCM
+ {
+ .name = "aes128-gcm(a)openssh.com",
+ .blocksize = AES_BLOCK_SIZE,
+ .lenfield_blocksize = 4, /* not encrypted, but authenticated */
+ .ciphertype = SSH_AEAD_AES128_GCM,
+ .keysize = 128,
+ .tag_size = AES_GCM_TAGLEN,
+ .set_encrypt_key = evp_cipher_set_encrypt_key,
+ .set_decrypt_key = evp_cipher_set_decrypt_key,
+ .aead_encrypt = evp_cipher_aead_encrypt,
+ .aead_decrypt_length = evp_cipher_aead_get_length,
+ .aead_decrypt = evp_cipher_aead_decrypt,
+ .cleanup = evp_cipher_cleanup
+ },
+ {
+ .name = "aes256-gcm(a)openssh.com",
+ .blocksize = AES_BLOCK_SIZE,
+ .lenfield_blocksize = 4, /* not encrypted, but authenticated */
+ .ciphertype = SSH_AEAD_AES256_GCM,
+ .keysize = 256,
+ .tag_size = AES_GCM_TAGLEN,
+ .set_encrypt_key = evp_cipher_set_encrypt_key,
+ .set_decrypt_key = evp_cipher_set_decrypt_key,
+ .aead_encrypt = evp_cipher_aead_encrypt,
+ .aead_decrypt_length = evp_cipher_aead_get_length,
+ .aead_decrypt = evp_cipher_aead_decrypt,
+ .cleanup = evp_cipher_cleanup
+ },
+#endif /* HAVE_OPENSSL_EVP_AES_GCM */
#endif /* HAS_AES */
#ifdef HAS_DES
{
Index: libssh-0.8.7/src/packet_crypt.c
===================================================================
--- libssh-0.8.7.orig/src/packet_crypt.c
+++ libssh-0.8.7/src/packet_crypt.c
@@ -209,8 +209,9 @@ int ssh_packet_hmac_verify(ssh_session s
unsigned int len;
uint32_t seq;
- /* AEAD type have no mac checking */
- if (type == SSH_HMAC_AEAD_POLY1305) {
+ /* AEAD types have no mac checking */
+ if (type == SSH_HMAC_AEAD_POLY1305 ||
+ type == SSH_HMAC_AEAD_GCM) {
return SSH_OK;
}
Index: libssh-0.8.7/src/wrapper.c
===================================================================
--- libssh-0.8.7.orig/src/wrapper.c
+++ libssh-0.8.7/src/wrapper.c
@@ -55,6 +55,7 @@ static struct ssh_hmac_struct ssh_hmac_t
{ "hmac-sha2-512", SSH_HMAC_SHA512 },
{ "hmac-md5", SSH_HMAC_MD5 },
{ "aead-poly1305", SSH_HMAC_AEAD_POLY1305 },
+ { "aead-gcm", SSH_HMAC_AEAD_GCM },
{ NULL, 0}
};
@@ -74,6 +75,8 @@ size_t hmac_digest_len(enum ssh_hmac_e t
return MD5_DIGEST_LEN;
case SSH_HMAC_AEAD_POLY1305:
return POLY1305_TAGLEN;
+ case SSH_HMAC_AEAD_GCM:
+ return AES_GCM_TAGLEN;
default:
return 0;
}
@@ -253,7 +256,11 @@ static int crypt_set_algorithms2(ssh_ses
if (session->next_crypto->out_cipher->aead_encrypt != NULL){
/* this cipher has integrated MAC */
- wanted = "aead-poly1305";
+ if (session->next_crypto->out_cipher->ciphertype == SSH_AEAD_CHACHA20_POLY1305) {
+ wanted = "aead-poly1305";
+ } else {
+ wanted = "aead-gcm";
+ }
} else {
/*
* We must scan the kex entries to find hmac algorithms and set their
@@ -307,7 +314,11 @@ static int crypt_set_algorithms2(ssh_ses
if (session->next_crypto->in_cipher->aead_encrypt != NULL){
/* this cipher has integrated MAC */
- wanted = "aead-poly1305";
+ if (session->next_crypto->in_cipher->ciphertype == SSH_AEAD_CHACHA20_POLY1305) {
+ wanted = "aead-poly1305";
+ } else {
+ wanted = "aead-gcm";
+ }
} else {
/* we must scan the kex entries to find hmac algorithms and set their appropriate structure */
wanted = session->next_crypto->kex_methods[SSH_MAC_S_C];
@@ -395,7 +406,11 @@ int crypt_set_algorithms_server(ssh_sess
i=0;
if (session->next_crypto->out_cipher->aead_encrypt != NULL){
/* this cipher has integrated MAC */
- method = "aead-poly1305";
+ if (session->next_crypto->out_cipher->ciphertype == SSH_AEAD_CHACHA20_POLY1305) {
+ method = "aead-poly1305";
+ } else {
+ method = "aead-gcm";
+ }
} else {
/* we must scan the kex entries to find hmac algorithms and set their appropriate structure */
/* out */
@@ -446,7 +461,11 @@ int crypt_set_algorithms_server(ssh_sess
if (session->next_crypto->in_cipher->aead_encrypt != NULL){
/* this cipher has integrated MAC */
- method = "aead-poly1305";
+ if (session->next_crypto->in_cipher->ciphertype == SSH_AEAD_CHACHA20_POLY1305) {
+ method = "aead-poly1305";
+ } else {
+ method = "aead-gcm";
+ }
} else {
/* we must scan the kex entries to find hmac algorithms and set their appropriate structure */
method = session->next_crypto->kex_methods[SSH_MAC_C_S];
++++++ 0001-libgcrypt-Implement-OpenSSH-compatible-AES-GCM-ciphe.patch ++++++
>From 5790036a2305d5610ac55adb5382ea55d043998f Mon Sep 17 00:00:00 2001
From: Jakub Jelen <jjelen(a)redhat.com>
Date: Mon, 1 Oct 2018 14:32:05 +0200
Subject: [PATCH] libgcrypt: Implement OpenSSH-compatible AES-GCM ciphers using
libgcrypt
Signed-off-by: Jakub Jelen <jjelen(a)redhat.com>
Reviewed-by: Andreas Schneider <asn(a)cryptomilk.org>
---
include/libssh/crypto.h | 1 +
src/kex.c | 4 +-
src/libgcrypt.c | 201 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 205 insertions(+), 1 deletion(-)
diff --git a/include/libssh/crypto.h b/include/libssh/crypto.h
index fc375a4f..8777f0c9 100644
--- a/include/libssh/crypto.h
+++ b/include/libssh/crypto.h
@@ -142,6 +142,7 @@ struct ssh_cipher_struct {
size_t keylen; /* length of the key structure */
#ifdef HAVE_LIBGCRYPT
gcry_cipher_hd_t *key;
+ unsigned char last_iv[AES_GCM_IVLEN];
#elif defined HAVE_LIBCRYPTO
struct ssh_3des_key_schedule *des3_key;
struct ssh_aes_key_schedule *aes_key;
diff --git a/src/kex.c b/src/kex.c
index e0fd5680..382d88fb 100644
--- a/src/kex.c
+++ b/src/kex.c
@@ -40,7 +40,9 @@
#ifdef HAVE_LIBGCRYPT
# define BLOWFISH "blowfish-cbc,"
-# define AES "aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,"
+# define AES "aes256-gcm@openssh.com,aes128-gcm@openssh.com," \
+ "aes256-ctr,aes192-ctr,aes128-ctr," \
+ "aes256-cbc,aes192-cbc,aes128-cbc,"
# define DES "3des-cbc"
# define DES_SUPPORTED "3des-cbc"
diff --git a/src/libgcrypt.c b/src/libgcrypt.c
index f004ffe2..7160bb1c 100644
--- a/src/libgcrypt.c
+++ b/src/libgcrypt.c
@@ -353,6 +353,8 @@ static int aes_set_key(struct ssh_cipher_struct *cipher, void *key, void *IV) {
}
if(strstr(cipher->name,"-ctr"))
mode=GCRY_CIPHER_MODE_CTR;
+ if (strstr(cipher->name, "-gcm"))
+ mode = GCRY_CIPHER_MODE_GCM;
switch (cipher->keysize) {
case 128:
if (gcry_cipher_open(&cipher->key[0], GCRY_CIPHER_AES128,
@@ -386,6 +388,11 @@ static int aes_set_key(struct ssh_cipher_struct *cipher, void *key, void *IV) {
SAFE_FREE(cipher->key);
return -1;
}
+ } else if (mode == GCRY_CIPHER_MODE_GCM) {
+ /* Store the IV so we can handle the packet counter increments later
+ * The IV is passed to the cipher context later.
+ */
+ memcpy(cipher->last_iv, IV, AES_GCM_IVLEN);
} else {
if(gcry_cipher_setctr(cipher->key[0],IV,16)){
SAFE_FREE(cipher->key);
@@ -407,6 +414,172 @@ static void aes_decrypt(struct ssh_cipher_struct *cipher, void *in, void *out,
gcry_cipher_decrypt(cipher->key[0], out, len, in, len);
}
+static int
+aes_aead_get_length(struct ssh_cipher_struct *cipher,
+ void *in,
+ uint8_t *out,
+ size_t len,
+ uint64_t seq)
+{
+ (void)seq;
+
+ /* The length is not encrypted: Copy it to the result buffer */
+ memcpy(out, in, len);
+
+ return SSH_OK;
+}
+
+/* Increment 64b integer in network byte order */
+static void
+uint64_inc(unsigned char *counter)
+{
+ int i;
+
+ for (i = 7; i >= 0; i--) {
+ counter[i]++;
+ if (counter[i])
+ return;
+ }
+}
+
+static void
+aes_gcm_encrypt(struct ssh_cipher_struct *cipher,
+ void *in,
+ void *out,
+ size_t len,
+ uint8_t *tag,
+ uint64_t seq)
+{
+ gpg_error_t err;
+ size_t aadlen, authlen;
+
+ (void)seq;
+
+ aadlen = cipher->lenfield_blocksize;
+ authlen = cipher->tag_size;
+
+ /* increment IV */
+ err = gcry_cipher_setiv(cipher->key[0],
+ cipher->last_iv,
+ AES_GCM_IVLEN);
+ /* This actualy does not increment the packet counter for the
+ * current encryption operation, but for the next one. The first
+ * operation needs to be completed with the derived IV.
+ *
+ * The IV buffer has the following structure:
+ * [ 4B static IV ][ 8B packet counter ][ 4B block counter ]
+ */
+ uint64_inc(cipher->last_iv + 4);
+ if (err) {
+ SSH_LOG(SSH_LOG_WARNING, "gcry_cipher_setiv failed: %s",
+ gpg_strerror(err));
+ return;
+ }
+
+ /* Pass the authenticated data (packet_length) */
+ err = gcry_cipher_authenticate(cipher->key[0], in, aadlen);
+ if (err) {
+ SSH_LOG(SSH_LOG_WARNING, "gcry_cipher_authenticate failed: %s",
+ gpg_strerror(err));
+ return;
+ }
+ memcpy(out, in, aadlen);
+
+ /* Encrypt the rest of the data */
+ err = gcry_cipher_encrypt(cipher->key[0],
+ (unsigned char *)out + aadlen,
+ len - aadlen,
+ (unsigned char *)in + aadlen,
+ len - aadlen);
+ if (err) {
+ SSH_LOG(SSH_LOG_WARNING, "gcry_cipher_encrypt failed: %s",
+ gpg_strerror(err));
+ return;
+ }
+
+ /* Calculate the tag */
+ err = gcry_cipher_gettag(cipher->key[0],
+ (void *)tag,
+ authlen);
+ if (err) {
+ SSH_LOG(SSH_LOG_WARNING, "gcry_cipher_gettag failed: %s",
+ gpg_strerror(err));
+ return;
+ }
+}
+
+static int
+aes_gcm_decrypt(struct ssh_cipher_struct *cipher,
+ void *complete_packet,
+ uint8_t *out,
+ size_t encrypted_size,
+ uint64_t seq)
+{
+ gpg_error_t err;
+ size_t aadlen, authlen;
+
+ (void)seq;
+
+ aadlen = cipher->lenfield_blocksize;
+ authlen = cipher->tag_size;
+
+ /* increment IV */
+ err = gcry_cipher_setiv(cipher->key[0],
+ cipher->last_iv,
+ AES_GCM_IVLEN);
+ /* This actualy does not increment the packet counter for the
+ * current encryption operation, but for the next one. The first
+ * operation needs to be completed with the derived IV.
+ *
+ * The IV buffer has the following structure:
+ * [ 4B static IV ][ 8B packet counter ][ 4B block counter ]
+ */
+ uint64_inc(cipher->last_iv + 4);
+ if (err) {
+ SSH_LOG(SSH_LOG_WARNING, "gcry_cipher_setiv failed: %s",
+ gpg_strerror(err));
+ return SSH_ERROR;
+ }
+
+ /* Pass the authenticated data (packet_length) */
+ err = gcry_cipher_authenticate(cipher->key[0],
+ complete_packet,
+ aadlen);
+ if (err) {
+ SSH_LOG(SSH_LOG_WARNING, "gcry_cipher_authenticate failed: %s",
+ gpg_strerror(err));
+ return SSH_ERROR;
+ }
+ /* Do not copy the length to the target buffer, because it is already processed */
+ //memcpy(out, complete_packet, aadlen);
+
+ /* Encrypt the rest of the data */
+ err = gcry_cipher_decrypt(cipher->key[0],
+ out,
+ encrypted_size,
+ (unsigned char *)complete_packet + aadlen,
+ encrypted_size);
+ if (err) {
+ SSH_LOG(SSH_LOG_WARNING, "gcry_cipher_decrypt failed: %s",
+ gpg_strerror(err));
+ return SSH_ERROR;
+ }
+
+ /* Check the tag */
+ err = gcry_cipher_checktag(cipher->key[0],
+ (unsigned char *)complete_packet + aadlen + encrypted_size,
+ authlen);
+ if (gpg_err_code(err) == GPG_ERR_CHECKSUM) {
+ SSH_LOG(SSH_LOG_WARNING, "The authentication tag does not match");
+ return SSH_ERROR;
+ } else if (err != GPG_ERR_NO_ERROR) {
+ SSH_LOG(SSH_LOG_WARNING, "General error while decryption: %s",
+ gpg_strerror(err));
+ return SSH_ERROR;
+ }
+ return SSH_OK;
+}
+
static int des3_set_key(struct ssh_cipher_struct *cipher, void *key, void *IV) {
if (cipher->key == NULL) {
if (alloc_key(cipher) < 0) {
@@ -519,6 +692,34 @@ static struct ssh_cipher_struct ssh_ciphertab[] = {
.encrypt = aes_encrypt,
.decrypt = aes_decrypt
},
+ {
+ .name = "aes128-gcm(a)openssh.com",
+ .blocksize = 16,
+ .lenfield_blocksize = 4, /* not encrypted, but authenticated */
+ .keylen = sizeof(gcry_cipher_hd_t),
+ .key = NULL,
+ .keysize = 128,
+ .tag_size = AES_GCM_TAGLEN,
+ .set_encrypt_key = aes_set_key,
+ .set_decrypt_key = aes_set_key,
+ .aead_encrypt = aes_gcm_encrypt,
+ .aead_decrypt_length = aes_aead_get_length,
+ .aead_decrypt = aes_gcm_decrypt,
+ },
+ {
+ .name = "aes256-gcm(a)openssh.com",
+ .blocksize = 16,
+ .lenfield_blocksize = 4, /* not encrypted, but authenticated */
+ .keylen = sizeof(gcry_cipher_hd_t),
+ .key = NULL,
+ .keysize = 256,
+ .tag_size = AES_GCM_TAGLEN,
+ .set_encrypt_key = aes_set_key,
+ .set_decrypt_key = aes_set_key,
+ .aead_encrypt = aes_gcm_encrypt,
+ .aead_decrypt_length = aes_aead_get_length,
+ .aead_decrypt = aes_gcm_decrypt,
+ },
{
.name = "3des-cbc",
.blocksize = 8,
--
2.21.0
++++++ 0001-tests-Add-aes-gcm-ciphers-tests.patch ++++++
>From 42bd7cdf6c6e50786155c904821fc62d6d8e5acb Mon Sep 17 00:00:00 2001
From: Jakub Jelen <jjelen(a)redhat.com>
Date: Mon, 8 Oct 2018 13:31:12 +0200
Subject: [PATCH] tests: Add aes-gcm ciphers tests
Signed-off-by: Jakub Jelen <jjelen(a)redhat.com>
Reviewed-by: Andreas Schneider <asn(a)cryptomilk.org>
---
tests/client/torture_algorithms.c | 20 ++++++++++++++++++++
tests/pkd/pkd_hello.c | 29 +++++++++++++++++++++++++++--
2 files changed, 47 insertions(+), 2 deletions(-)
diff --git a/tests/client/torture_algorithms.c b/tests/client/torture_algorithms.c
index c216c99b..9bb67410 100644
--- a/tests/client/torture_algorithms.c
+++ b/tests/client/torture_algorithms.c
@@ -240,6 +240,20 @@ static void torture_algorithms_aes256_ctr_hmac_sha2_512(void **state) {
test_algorithm(s->ssh.session, NULL/*kex*/, "aes256-ctr", "hmac-sha2-512");
}
+static void torture_algorithms_aes128_gcm(void **state)
+{
+ struct torture_state *s = *state;
+
+ test_algorithm(s->ssh.session, NULL/*kex*/, "aes128-gcm(a)openssh.com", NULL);
+}
+
+static void torture_algorithms_aes256_gcm(void **state)
+{
+ struct torture_state *s = *state;
+
+ test_algorithm(s->ssh.session, NULL/*kex*/, "aes256-gcm(a)openssh.com", NULL);
+}
+
static void torture_algorithms_3des_cbc_hmac_sha1(void **state) {
struct torture_state *s = *state;
@@ -464,6 +478,12 @@ int torture_run_tests(void) {
cmocka_unit_test_setup_teardown(torture_algorithms_aes256_ctr_hmac_sha2_512,
session_setup,
session_teardown),
+ cmocka_unit_test_setup_teardown(torture_algorithms_aes128_gcm,
+ session_setup,
+ session_teardown),
+ cmocka_unit_test_setup_teardown(torture_algorithms_aes256_gcm,
+ session_setup,
+ session_teardown),
cmocka_unit_test_setup_teardown(torture_algorithms_3des_cbc_hmac_sha1,
session_setup,
session_teardown),
diff --git a/tests/pkd/pkd_hello.c b/tests/pkd/pkd_hello.c
index e14316ec..0fa72d04 100644
--- a/tests/pkd/pkd_hello.c
+++ b/tests/pkd/pkd_hello.c
@@ -383,6 +383,8 @@ static int torture_pkd_setup_ecdsa_521(void **state) {
#endif
#define CHACHA20 "chacha20-poly1305(a)openssh.com"
+#define AES128_GCM "aes128-gcm(a)openssh.com"
+#define AES256_GCM "aes256-gcm(a)openssh.com"
#ifdef HAVE_DSA
#define PKDTESTS_CIPHER_OPENSSHONLY(f, client, ciphercmd) \
@@ -390,9 +392,13 @@ static int torture_pkd_setup_ecdsa_521(void **state) {
f(client, rsa_aes192_cbc, ciphercmd("aes192-cbc"), setup_rsa, teardown) \
f(client, rsa_aes192_ctr, ciphercmd("aes192-ctr"), setup_rsa, teardown) \
f(client, rsa_chacha20, ciphercmd(CHACHA20), setup_rsa, teardown) \
+ f(client, rsa_aes128_gcm, ciphercmd(AES128_GCM), setup_rsa, teardown) \
+ f(client, rsa_aes256_gcm, ciphercmd(AES256_GCM), setup_rsa, teardown) \
f(client, dsa_aes192_cbc, ciphercmd("aes192-cbc"), setup_dsa, teardown) \
f(client, dsa_aes192_ctr, ciphercmd("aes192-ctr"), setup_dsa, teardown) \
f(client, dsa_chacha20, ciphercmd(CHACHA20), setup_dsa, teardown) \
+ f(client, dsa_aes128_gcm, ciphercmd(AES128_GCM), setup_dsa, teardown) \
+ f(client, dsa_aes256_gcm, ciphercmd(AES256_GCM), setup_dsa, teardown) \
f(client, ed25519_3des_cbc, ciphercmd("3des-cbc"), setup_ed25519, teardown) \
f(client, ed25519_aes128_cbc, ciphercmd("aes128-cbc"), setup_ed25519, teardown) \
f(client, ed25519_aes128_ctr, ciphercmd("aes128-ctr"), setup_ed25519, teardown) \
@@ -401,21 +407,31 @@ static int torture_pkd_setup_ecdsa_521(void **state) {
f(client, ed25519_aes192_cbc, ciphercmd("aes192-cbc"), setup_ed25519, teardown) \
f(client, ed25519_aes192_ctr, ciphercmd("aes192-ctr"), setup_ed25519, teardown) \
f(client, ed25519_chacha20, ciphercmd(CHACHA20), setup_ed25519, teardown) \
+ f(client, ed25519_aes128_gcm, ciphercmd(AES128_GCM), setup_ed25519, teardown) \
+ f(client, ed25519_aes256_gcm, ciphercmd(AES256_GCM), setup_ed25519, teardown) \
f(client, ecdsa_256_aes192_cbc, ciphercmd("aes192-cbc"), setup_ecdsa_256, teardown) \
f(client, ecdsa_256_aes192_ctr, ciphercmd("aes192-ctr"), setup_ecdsa_256, teardown) \
f(client, ecdsa_256_chacha20, ciphercmd(CHACHA20), setup_ecdsa_256, teardown) \
+ f(client, ecdsa_256_aes128_gcm, ciphercmd(AES128_GCM), setup_ecdsa_256, teardown) \
+ f(client, ecdsa_256_aes256_gcm, ciphercmd(AES256_GCM), setup_ecdsa_256, teardown) \
f(client, ecdsa_384_aes192_cbc, ciphercmd("aes192-cbc"), setup_ecdsa_384, teardown) \
f(client, ecdsa_384_aes192_ctr, ciphercmd("aes192-ctr"), setup_ecdsa_384, teardown) \
f(client, ecdsa_384_chacha20, ciphercmd(CHACHA20), setup_ecdsa_384, teardown) \
+ f(client, ecdsa_384_aes128_gcm, ciphercmd(AES128_GCM), setup_ecdsa_384, teardown) \
+ f(client, ecdsa_384_aes256_gcm, ciphercmd(AES256_GCM), setup_ecdsa_384, teardown) \
f(client, ecdsa_521_aes192_cbc, ciphercmd("aes192-cbc"), setup_ecdsa_521, teardown) \
f(client, ecdsa_521_aes192_ctr, ciphercmd("aes192-ctr"), setup_ecdsa_521, teardown) \
- f(client, ecdsa_521_chacha20, ciphercmd(CHACHA20), setup_ecdsa_521, teardown)
+ f(client, ecdsa_521_chacha20, ciphercmd(CHACHA20), setup_ecdsa_521, teardown) \
+ f(client, ecdsa_521_aes128_gcm, ciphercmd(AES128_GCM), setup_ecdsa_521, teardown) \
+ f(client, ecdsa_521_aes256_gcm, ciphercmd(AES256_GCM), setup_ecdsa_521, teardown)
#else
#define PKDTESTS_CIPHER_OPENSSHONLY(f, client, ciphercmd) \
/* Ciphers. */ \
f(client, rsa_aes192_cbc, ciphercmd("aes192-cbc"), setup_rsa, teardown) \
f(client, rsa_aes192_ctr, ciphercmd("aes192-ctr"), setup_rsa, teardown) \
f(client, rsa_chacha20, ciphercmd(CHACHA20), setup_rsa, teardown) \
+ f(client, rsa_aes128_gcm, ciphercmd(AES128_GCM), setup_rsa, teardown) \
+ f(client, rsa_aes256_gcm, ciphercmd(AES256_GCM), setup_rsa, teardown) \
f(client, ed25519_3des_cbc, ciphercmd("3des-cbc"), setup_ed25519, teardown) \
f(client, ed25519_aes128_cbc, ciphercmd("aes128-cbc"), setup_ed25519, teardown) \
f(client, ed25519_aes128_ctr, ciphercmd("aes128-ctr"), setup_ed25519, teardown) \
@@ -424,17 +440,26 @@ static int torture_pkd_setup_ecdsa_521(void **state) {
f(client, ed25519_aes192_cbc, ciphercmd("aes192-cbc"), setup_ed25519, teardown) \
f(client, ed25519_aes192_ctr, ciphercmd("aes192-ctr"), setup_ed25519, teardown) \
f(client, ed25519_chacha20, ciphercmd(CHACHA20), setup_ed25519, teardown) \
+ f(client, ed25519_aes128_gcm, ciphercmd(AES128_GCM), setup_ed25519, teardown) \
+ f(client, ed25519_aes256_gcm, ciphercmd(AES256_GCM), setup_ed25519, teardown) \
f(client, ecdsa_256_aes192_cbc, ciphercmd("aes192-cbc"), setup_ecdsa_256, teardown) \
f(client, ecdsa_256_aes192_ctr, ciphercmd("aes192-ctr"), setup_ecdsa_256, teardown) \
f(client, ecdsa_256_chacha20, ciphercmd(CHACHA20), setup_ecdsa_256, teardown) \
+ f(client, ecdsa_256_aes128_gcm, ciphercmd(AES128_GCM), setup_ecdsa_256, teardown) \
+ f(client, ecdsa_256_aes256_gcm, ciphercmd(AES256_GCM), setup_ecdsa_256, teardown) \
f(client, ecdsa_384_aes192_cbc, ciphercmd("aes192-cbc"), setup_ecdsa_384, teardown) \
f(client, ecdsa_384_aes192_ctr, ciphercmd("aes192-ctr"), setup_ecdsa_384, teardown) \
f(client, ecdsa_384_chacha20, ciphercmd(CHACHA20), setup_ecdsa_384, teardown) \
+ f(client, ecdsa_384_aes128_gcm, ciphercmd(AES128_GCM), setup_ecdsa_384, teardown) \
+ f(client, ecdsa_384_aes256_gcm, ciphercmd(AES256_GCM), setup_ecdsa_384, teardown) \
f(client, ecdsa_521_aes192_cbc, ciphercmd("aes192-cbc"), setup_ecdsa_521, teardown) \
f(client, ecdsa_521_aes192_ctr, ciphercmd("aes192-ctr"), setup_ecdsa_521, teardown) \
- f(client, ecdsa_521_chacha20, ciphercmd(CHACHA20), setup_ecdsa_521, teardown)
+ f(client, ecdsa_521_chacha20, ciphercmd(CHACHA20), setup_ecdsa_521, teardown) \
+ f(client, ecdsa_521_aes128_gcm, ciphercmd(AES128_GCM), setup_ecdsa_521, teardown) \
+ f(client, ecdsa_521_aes256_gcm, ciphercmd(AES256_GCM), setup_ecdsa_521, teardown)
#endif
+
#ifdef HAVE_DSA
#define PKDTESTS_MAC(f, client, maccmd) \
/* MACs. */ \
--
2.21.0
1
0