Giter Site home page Giter Site logo

obriencj / python-javatools Goto Github PK

View Code? Open in Web Editor NEW
102.0 7.0 31.0 1.79 MB

Tools for examining Java bytecode in Python

License: GNU Lesser General Public License v3.0

Python 96.74% Emacs Lisp 0.22% Shell 1.08% CSS 0.29% JavaScript 0.02% Java 0.62% Makefile 1.03%

python-javatools's Introduction

Overview of python-javatools

A python module for unpacking and inspecting Java Class files, JARs, and collections of either. Supporting features up to JDK 8.

It can do deep checking of classes to perform comparisons of functionality, and output reports in multiple formats.

If you have suggestions, please use the issue tracker on github. Or heck, just fork it!

Requirements

In addition, the following tools are used in building and testing the project.

All of these packages are available in most linux distributions (eg. Fedora), and for OSX via MacPorts and HomeBrew, or available directly from pip.

M2Crypto can be difficult on some platforms, and so is set as an optional dependency. If an execution path attempts to perform an action which requires M2Crypto (primarily Jar signing and Jar signature verification), then a CryptoDisabled exception will be raised, or a message will be printed to stdout explaining that the feature is unavailable. See the M2Crypto Install Guide for workarounds in your environment.

Building

This module uses setuptools, so running the following will build the project:

python setup.py build

to install, run:

python -m pip install . --user

Testing

Tests are written as unittest test cases. If you'd like to run the tests, simply invoke:

python setup.py test

or invoke tests across a wider range of platforms via tox

RPM

If you'd prefer to build an RPM, see the wiki entry for Building as an RPM.

Javatools Scripts

  • classinfo - similar to the javap utility included with most JVMs. Also does provides/requires tracking.

  • classdiff - attempts to find differences between two Java class files

  • jarinfo - prints information about a JAR. Also does provides/requires tracking.

  • jardiff - prints the deltas between the contents of a JAR, and runs classdiff on differing Java class files contained in the JARs

  • jarutil - creates and signs JARs, verifies JAR signatures

  • manifest - creates and queries JAR manifests

  • distinfo - prints information about a mixed multi-jar/class distribution, such as provides/requires lists.

  • distdiff - attempts to find differences between two distributions, deep-checking any JARs or Java class files found in either directory.

Additional References

Contact

Author: Christopher O'Brien [email protected]

If you're interested in my other projects, feel free to visit my blog.

Original Git Repository: https://github.com/obriencj/python-javatools

License

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this library; if not, see http://www.gnu.org/licenses/.

python-javatools's People

Contributors

adrianherrera avatar bmurray7 avatar cebasile avatar danielgf3 avatar dependabot[bot] avatar int3 avatar jgrunzweig avatar konstantinshemyak avatar matmaus avatar obriencj avatar ri0n avatar rumpeltux avatar tehw0lf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

python-javatools's Issues

Error in _unpack_wide() in Python3

Hello,

Noticed an issue present in _unpack_wide() when using javatools in Python 3.7. Information below. The issue appears to be the result of Python3 returning an ordinal already when specifying a single offset in a sequence of bytes.

For example:

Python2

>>> data = "a string of importance"
>>> data[0]
'a'

Python3

>>> data = b"some bytes of importance"
>>> data[0]
115

The easiest fix is to probably just specify a range, adding 1 to the offset:

Python2

>>> data = "a string of importance"
>>> data[0:1]
'a'
>>> len(data)
22
>>> data[21:22]
'e'

Python3

>>> data = b"some bytes of importance"
>>> data[0:1]
b's'
>>> len(data)
24
>>> data[23:24]
b'e'

Replication of Issue

jgrunzweig$ python3 -m pip install javatools --upgrade
Requirement already up-to-date: javatools in /usr/local/lib/python3.7/site-packages (1.5.0)
Requirement already satisfied, skipping upgrade: Cheetah3 in /usr/local/lib/python3.7/site-packages (from javatools) (3.2.4)
Requirement already satisfied, skipping upgrade: M2Crypto>=0.26.0 in /usr/local/lib/python3.7/site-packages (from javatools) (0.35.2)
Requirement already satisfied, skipping upgrade: six in /usr/local/Cellar/protobuf/3.11.4/libexec/lib/python3.7/site-packages (from javatools) (1.14.0)

$ python3
Python 3.7.7 (default, Mar 10 2020, 15:43:33) 
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from javatools import opcodes
>>> code = b'\xb2\x00>6\x07\xb8\x00\x0fL\xbb\x00\x15Y+\xb7\x00\x17M,\xb6\x00\x1a\x99\x00F,\xb6\x00\x1e\x88>\xbb\x00"Y,\xb7\x00$:\x04\x11\x04\x00\xbc\x08:\x05\x036\x06\xbb\x00\'Y\xb7\x00)\x19\x05\xb6\x00*\x19\x04\x19\x05\xb6\x00.\xc4\x84\x00\x06\x04\x00\x15\x06\x1d\xa1\xff\xe4\x19\x04\x15\x07\x9a\xff\xeb\xb6\x001\xb1'
>>> for line in opcodes.disassemble(code): print(line)
... 
(0, 178, (62,))
(3, 54, (7,))
(5, 184, (15,))
(8, 76, ())
(9, 187, (21,))
(12, 89, ())
(13, 43, ())
(14, 183, (23,))
(17, 77, ())
(18, 44, ())
(19, 182, (26,))
(22, 153, (70,))
(25, 44, ())
(26, 182, (30,))
(29, 136, ())
(30, 62, ())
(31, 187, (34,))
(34, 89, ())
(35, 44, ())
(36, 183, (36,))
(39, 58, (4,))
(41, 17, (1024,))
(44, 188, (8,))
(46, 58, (5,))
(48, 3, ())
(49, 54, (6,))
(51, 187, (39,))
(54, 89, ())
(55, 183, (41,))
(58, 25, (5,))
(60, 182, (42,))
(63, 25, (4,))
(65, 25, (5,))
(67, 182, (46,))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.7/site-packages/javatools/opcodes.py", line 253, in disassemble
    args, offset = fmt(bytecode, offset)
  File "/usr/local/lib/python3.7/site-packages/javatools/opcodes.py", line 214, in _unpack_wide
    code = ord(bc[offset])
TypeError: ord() expected string of length 1, but int found

Proposed fix:

code = ord(bc[offset:offset+1])

manifest.py can't write to stream when it's stdout

Inside the write_key_val() function the underlying buffer object needs to be accessed if you want to write bytes to stdout. Not all stream objects support the buffer API though so some checking needs to be done on what type the stream is.

stream.write(key) -> stream.buffer.key(key)

Error when call get_manifest on a JarInfo object

Hello,

I get an UnsupportedOperation exception when calling get_manifest on a JarInfo object.

Example:

jar = JarInfo('/path/to/jar')
jar.get_manifest()

Results in the following exception:

javatools/jarinfo.py", line 165, in get_manifest
    mf.parse(data)
javatools/manifest.py", line 339, in parse
    self.linesep = detect_linesep(data)
javatools/manifest.py", line 627, in detect_linesep
    offset = data.tell()
io.UnsupportedOperation: seek

I think this may be due to the fact that get_manifest passes a zipfile.ZipExtFile object to Manifest's parse method. The ZipExtFile class does not support tell and seek operations, and therefore throws the unsupported operation exception.

Perhaps one solution could be to change JarInfo's get_manifest method from

with self.open(mf_entry) as data:
    mf.parse(data) # data is a ZipExtFile object

to

with self.open(mf_entry) as data:
    mf.parse(data.read()) # data.read() will return a string

However, I'm not sure if this will have other ramifications in the Manifest class. Any thoughts?

Thanks!

Install fails if six is not already installed

When installing from git master, install fails unless six is already installed:

Collecting git+https://github.com/obriencj/python-javatools
  Cloning https://github.com/obriencj/python-javatools to /private/var/folders/kc/nb8dszcs4b91l1z1ql4g8qb00000gn/T/pip-req-build-6i625hwn
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/kc/nb8dszcs4b91l1z1ql4g8qb00000gn/T/pip-req-build-6i625hwn/setup.py", line 27, in <module>
        from javatools.cheetah.setuptools import cheetah_build_py_cmd
      File "/private/var/folders/kc/nb8dszcs4b91l1z1ql4g8qb00000gn/T/pip-req-build-6i625hwn/javatools/__init__.py", line 35, in <module>
        from six.moves import range
    ModuleNotFoundError: No module named 'six'

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/kc/nb8dszcs4b91l1z1ql4g8qb00000gn/T/pip-req-build-6i625hwn/```

Jarinfo --manifest not implemented

Traceback (most recent call last):
  File "/home/me/.local/bin/jarinfo", line 10, in <module>
    sys.exit(main())
  File "/home/me/.local/lib/python3.6/site-packages/javatools/jarinfo.py", line 330, in main
    return cli(parser.parse_args(args[1:]))
  File "/home/me/.local/lib/python3.6/site-packages/javatools/jarinfo.py", line 289, in cli
    cli_jarinfo(options, ji)
  File "/home/me/.local/lib/python3.6/site-packages/javatools/jarinfo.py", line 235, in cli_jarinfo
    cli_jar_manifest_info(info)
  File "/home/me/.local/lib/python3.6/site-packages/javatools/jarinfo.py", line 172, in cli_jar_manifest_info
    mf = jarinfo.get_manifest()
AttributeError: 'JarInfo' object has no attribute 'get_manifest'

jardiff misses changes in "unknown" files

Two JARs with same-name (but different content) files inside are reported as identical by jardiff.

The first JAR:

$ unzip -l tests/data/test_distdiff/dist1/sample.jar 
Archive:  tests/data/test_distdiff/dist1/sample.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-04-30 11:01   META-INF/
       69  2017-04-30 11:01   META-INF/MANIFEST.MF
       12  2017-04-30 10:53   sample.txt
---------                     -------
       81                     3 files

The second JAR:

$ unzip -l tests/data/test_distdiff/dist2/sample.jar 
Archive:  tests/data/test_distdiff/dist2/sample.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-04-30 11:01   META-INF/
       69  2017-04-30 11:01   META-INF/MANIFEST.MF
       13  2017-04-30 11:01   sample.txt
---------                     -------
       82                     3 files

Note the size difference between sample.txt files. But jardiff reports them as identical:

$ jardiff -v tests/data/test_distdiff/blank1/data.jar tests/data/test_distdiff/other1/data.jar 
JAR unchanged
  Jar type unchanged
  JAR Contents unchanged
    Jar Manifest is unchanged: META-INF/MANIFEST.MF
    Jar Content is unchanged: sample.txt

JSON diff fails on binary changes

$ jardiff --report json tests/data/ec.jar tests/data/ec-tampered.jar
[...error backtrace...]
UnicodeDecodeError: 'utf8' codec can't decode byte 0x82 in position 1: invalid start byte

Blank lines?

Sorry for this silly question, but why do you use some many blank lines in your code?

Migrate from distutils to setuptools

I am considering switching python-javatools to using setuptools rather than distutils for the next release. A preview of this change is in the setuptools branch, along with the beginning of some unittests -- facilitated by the change to setuptools.

setuptools is widely available, but I would like to see if any of the users of this project have reservations about such a change.

Please comment with your thoughts on the change.

Cut a 1.4 release

Here's a short list of things to do to get a 1.4 out the door

  • strip out the pylint, since it's always breaking anyway
  • switch to flake8, fix as much as possible
  • switch from scripts to entry_points
  • clean up some imports, etc (part of this is happening with the flake8 fixes)
  • maybe Cheetah can be load-time instead of build-time
  • 2.6 vs 2.7 support (Issue #50)
  • test it a bit

Split off the CLI tools

I don't want those tools and their deps to be packaged with my script that extracts field names from class files and uses them to generate JSONs.

$ pip install javatools
Collecting javatools
  Downloading https://files.pythonhosted.org/packages/c1/06/3a1c067cc4e90bf15db23bfd2c65cb616089d52b5a4312186d98e1d7a141/javatools-1.4.0-py3-none-any.whl (156kB)
     |████████████████████████████████| 163kB 228kB/s 
Collecting six (from javatools)
  Using cached https://files.pythonhosted.org/packages/65/eb/1f97cb97bfc2390a276969c6fae16075da282f5058082d4cb10c6c5c1dba/six-1.14.0-py2.py3-none-any.whl
Collecting Cheetah3 (from javatools)
  Downloading https://files.pythonhosted.org/packages/4e/72/e6a7d92279e3551db1b68fd336fd7a6e3d2f2ec742bf486486e6150d77d2/Cheetah3-3.2.4.tar.gz (294kB)
     |████████████████████████████████| 296kB 2.5MB/s 
Collecting M2Crypto>=0.26.0 (from javatools)
  Downloading https://files.pythonhosted.org/packages/74/18/3beedd4ac48b52d1a4d12f2a8c5cf0ae342ce974859fba838cbbc1580249/M2Crypto-0.35.2.tar.gz (1.1MB)
     |████████████████████████████████| 1.1MB 1.6MB/s 
Installing collected packages: six, Cheetah3, M2Crypto, javatools
  Running setup.py install for Cheetah3 ... done
  Running setup.py install for M2Crypto ... error
    ERROR: Command errored out with exit status 1:
     command: /home/soniex2/git/selfhosted/python.teraco-opgy/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-ujm2rhmo/M2Crypto/setup.py'"'"'; __file__='"'"'/tmp/pip-install-ujm2rhmo/M2Crypto/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-jiai9cji/install-record.txt --single-version-externally-managed --compile --install-headers /home/soniex2/git/selfhosted/python.teraco-opgy/venv/include/site/python3.8/M2Crypto
         cwd: /tmp/pip-install-ujm2rhmo/M2Crypto/
    Complete output (1493 lines):
    running install
    running build
    running build_py
    copying M2Crypto/util.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/threading.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/six.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/m2xmlrpclib.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/m2urllib2.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/m2urllib.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/m2crypto.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/m2.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/httpslib.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/ftpslib.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/callback.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/__init__.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/X509.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/SMIME.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/Rand.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/RSA.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/RC4.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/Err.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/Engine.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/EVP.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/EC.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/DSA.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/DH.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/BN.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/BIO.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/AuthCookie.py -> build/lib.linux-x86_64-3.8/M2Crypto
    copying M2Crypto/ASN1.py -> build/lib.linux-x86_64-3.8/M2Crypto
    creating build/lib.linux-x86_64-3.8/M2Crypto/SSL
    copying M2Crypto/SSL/timeout.py -> build/lib.linux-x86_64-3.8/M2Crypto/SSL
    copying M2Crypto/SSL/ssl_dispatcher.py -> build/lib.linux-x86_64-3.8/M2Crypto/SSL
    copying M2Crypto/SSL/cb.py -> build/lib.linux-x86_64-3.8/M2Crypto/SSL
    copying M2Crypto/SSL/__init__.py -> build/lib.linux-x86_64-3.8/M2Crypto/SSL
    copying M2Crypto/SSL/TwistedProtocolWrapper.py -> build/lib.linux-x86_64-3.8/M2Crypto/SSL
    copying M2Crypto/SSL/Session.py -> build/lib.linux-x86_64-3.8/M2Crypto/SSL
    copying M2Crypto/SSL/SSLServer.py -> build/lib.linux-x86_64-3.8/M2Crypto/SSL
    copying M2Crypto/SSL/Context.py -> build/lib.linux-x86_64-3.8/M2Crypto/SSL
    copying M2Crypto/SSL/Connection.py -> build/lib.linux-x86_64-3.8/M2Crypto/SSL
    copying M2Crypto/SSL/Cipher.py -> build/lib.linux-x86_64-3.8/M2Crypto/SSL
    copying M2Crypto/SSL/Checker.py -> build/lib.linux-x86_64-3.8/M2Crypto/SSL
    running build_ext
    building 'M2Crypto._m2crypto' extension
    creating build/temp.linux-x86_64-3.8
    creating build/temp.linux-x86_64-3.8/SWIG
    gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -march=x86-64 -mtune=generic -O3 -pipe -fno-plt -fPIC -I/home/soniex2/git/selfhosted/python.teraco-opgy/venv/include -I/usr/include/python3.8 -I/tmp/pip-install-ujm2rhmo/M2Crypto/SWIG -c SWIG/_m2crypto_wrap.c -o build/temp.linux-x86_64-3.8/SWIG/_m2crypto_wrap.o -DTHREADING -Wno-deprecated-declarations
    SWIG/_m2crypto_wrap.c: In function ‘SwigPyStaticVar_dealloc’:
    SWIG/_m2crypto_wrap.c:3215:3: warning: implicit declaration of function ‘_PyObject_GC_UNTRACK’; did you mean ‘PyObject_GC_UnTrack’? [-Wimplicit-function-declaration]
     3215 |   _PyObject_GC_UNTRACK(descr);
          |   ^~~~~~~~~~~~~~~~~~~~
          |   PyObject_GC_UnTrack
    SWIG/_m2crypto_wrap.c: In function ‘_wrap__STACK_num_set’:
    SWIG/_m2crypto_wrap.c:9511:19: error: dereferencing pointer to incomplete type ‘struct stack_st’
     9511 |   if (arg1) (arg1)->num = arg2;
          |                   ^~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_new__STACK’:
    SWIG/_m2crypto_wrap.c:9738:48: error: invalid application of ‘sizeof’ to incomplete type ‘struct stack_st’
     9738 |   result = (struct stack_st *)calloc(1, sizeof(struct stack_st));
          |                                                ^~~~~~
    SWIG/_m2crypto_wrap.c:9741:1: warning: label ‘fail’ defined but not used [-Wunused-label]
     9741 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_sk_new_null’:
    SWIG/_m2crypto_wrap.c:9884:1: warning: label ‘fail’ defined but not used [-Wunused-label]
     9884 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_sk_deep_copy’:
    SWIG/_m2crypto_wrap.c:9969:40: warning: passing argument 2 of ‘OPENSSL_sk_deep_copy’ from incompatible pointer type [-Wincompatible-pointer-types]
     9969 |   result = (_STACK *)sk_deep_copy(arg1,arg2,arg3);
          |                                        ^~~~
          |                                        |
          |                                        void * (*)(void *)
    In file included from /usr/include/openssl/safestack.h:13,
                     from /usr/include/openssl/crypto.h:23,
                     from /usr/include/openssl/bio.h:20,
                     from /usr/include/openssl/err.h:21,
                     from SWIG/_m2crypto_wrap.c:3561:
    /usr/include/openssl/stack.h:34:16: note: expected ‘OPENSSL_sk_copyfunc’ {aka ‘void * (*)(const void *)’} but argument is of type ‘void * (*)(void *)’
       34 | OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *,
          |                ^~~~~~~~~~~~~~~~~~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_stack_st_OPENSSL_STRING_stack_set’:
    SWIG/_m2crypto_wrap.c:10372:19: error: dereferencing pointer to incomplete type ‘struct stack_st_OPENSSL_STRING’
    10372 |   if (arg1) (arg1)->stack = *arg2;
          |                   ^~
    SWIG/_m2crypto_wrap.c:10372:29: error: dereferencing pointer to incomplete type ‘OPENSSL_STACK’ {aka ‘struct stack_st’}
    10372 |   if (arg1) (arg1)->stack = *arg2;
          |                             ^~~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_new_stack_st_OPENSSL_STRING’:
    SWIG/_m2crypto_wrap.c:10404:63: error: invalid application of ‘sizeof’ to incomplete type ‘struct stack_st_OPENSSL_STRING’
    10404 |   result = (struct stack_st_OPENSSL_STRING *)calloc(1, sizeof(struct stack_st_OPENSSL_STRING));
          |                                                               ^~~~~~
    SWIG/_m2crypto_wrap.c:10407:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    10407 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_stack_st_OPENSSL_BLOCK_stack_set’:
    SWIG/_m2crypto_wrap.c:10452:19: error: dereferencing pointer to incomplete type ‘struct stack_st_OPENSSL_BLOCK’
    10452 |   if (arg1) (arg1)->stack = *arg2;
          |                   ^~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_new_stack_st_OPENSSL_BLOCK’:
    SWIG/_m2crypto_wrap.c:10484:62: error: invalid application of ‘sizeof’ to incomplete type ‘struct stack_st_OPENSSL_BLOCK’
    10484 |   result = (struct stack_st_OPENSSL_BLOCK *)calloc(1, sizeof(struct stack_st_OPENSSL_BLOCK));
          |                                                              ^~~~~~
    SWIG/_m2crypto_wrap.c:10487:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    10487 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_threading_init’:
    SWIG/_m2crypto_wrap.c:10517:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    10517 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_threading_cleanup’:
    SWIG/_m2crypto_wrap.c:10528:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    10528 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_lib_init’:
    SWIG/_m2crypto_wrap.c:10539:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    10539 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_err_get_error’:
    SWIG/_m2crypto_wrap.c:10706:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    10706 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_err_peek_error’:
    SWIG/_m2crypto_wrap.c:10718:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    10718 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_bio_s_bio’:
    SWIG/_m2crypto_wrap.c:10796:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    10796 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_bio_s_mem’:
    SWIG/_m2crypto_wrap.c:10808:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    10808 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_bio_s_socket’:
    SWIG/_m2crypto_wrap.c:10820:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    10820 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_bio_f_ssl’:
    SWIG/_m2crypto_wrap.c:10832:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    10832 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_bio_f_buffer’:
    SWIG/_m2crypto_wrap.c:10844:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    10844 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_bio_f_cipher’:
    SWIG/_m2crypto_wrap.c:10856:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    10856 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_pyfd_init’:
    SWIG/_m2crypto_wrap.c:11105:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    11105 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_new_BIO_PYFD_CTX’:
    SWIG/_m2crypto_wrap.c:12072:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    12072 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_rand_cleanup’:
    SWIG/_m2crypto_wrap.c:12656:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    12656 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_rand_file_name__SWIG_1’:
    SWIG/_m2crypto_wrap.c:12809:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    12809 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_rand_screen’:
    SWIG/_m2crypto_wrap.c:12857:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    12857 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_md5’:
    SWIG/_m2crypto_wrap.c:12912:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    12912 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_sha1’:
    SWIG/_m2crypto_wrap.c:12924:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    12924 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_ripemd160’:
    SWIG/_m2crypto_wrap.c:12936:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    12936 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_sha224’:
    SWIG/_m2crypto_wrap.c:12948:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    12948 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_sha256’:
    SWIG/_m2crypto_wrap.c:12960:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    12960 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_sha384’:
    SWIG/_m2crypto_wrap.c:12972:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    12972 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_sha512’:
    SWIG/_m2crypto_wrap.c:12984:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    12984 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_des_ecb’:
    SWIG/_m2crypto_wrap.c:13040:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13040 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_des_ede_ecb’:
    SWIG/_m2crypto_wrap.c:13052:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13052 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_des_ede3_ecb’:
    SWIG/_m2crypto_wrap.c:13064:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13064 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_des_cbc’:
    SWIG/_m2crypto_wrap.c:13076:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13076 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_des_ede_cbc’:
    SWIG/_m2crypto_wrap.c:13088:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13088 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_des_ede3_cbc’:
    SWIG/_m2crypto_wrap.c:13100:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13100 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_des_cfb’:
    SWIG/_m2crypto_wrap.c:13112:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13112 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_des_ede_cfb’:
    SWIG/_m2crypto_wrap.c:13124:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13124 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_des_ede3_cfb’:
    SWIG/_m2crypto_wrap.c:13136:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13136 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_des_ofb’:
    SWIG/_m2crypto_wrap.c:13148:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13148 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_des_ede_ofb’:
    SWIG/_m2crypto_wrap.c:13160:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13160 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_des_ede3_ofb’:
    SWIG/_m2crypto_wrap.c:13172:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13172 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_bf_ecb’:
    SWIG/_m2crypto_wrap.c:13184:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13184 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_bf_cbc’:
    SWIG/_m2crypto_wrap.c:13196:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13196 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_bf_cfb’:
    SWIG/_m2crypto_wrap.c:13208:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13208 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_bf_ofb’:
    SWIG/_m2crypto_wrap.c:13220:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13220 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_cast5_ecb’:
    SWIG/_m2crypto_wrap.c:13232:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13232 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_cast5_cbc’:
    SWIG/_m2crypto_wrap.c:13244:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13244 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_cast5_cfb’:
    SWIG/_m2crypto_wrap.c:13256:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13256 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_cast5_ofb’:
    SWIG/_m2crypto_wrap.c:13268:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13268 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_rc4’:
    SWIG/_m2crypto_wrap.c:13280:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13280 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_rc2_40_cbc’:
    SWIG/_m2crypto_wrap.c:13292:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13292 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_128_ecb’:
    SWIG/_m2crypto_wrap.c:13304:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13304 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_128_cbc’:
    SWIG/_m2crypto_wrap.c:13316:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13316 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_128_cfb’:
    SWIG/_m2crypto_wrap.c:13328:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13328 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_128_ofb’:
    SWIG/_m2crypto_wrap.c:13340:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13340 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_128_ctr’:
    SWIG/_m2crypto_wrap.c:13352:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13352 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_192_ecb’:
    SWIG/_m2crypto_wrap.c:13364:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13364 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_192_cbc’:
    SWIG/_m2crypto_wrap.c:13376:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13376 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_192_cfb’:
    SWIG/_m2crypto_wrap.c:13388:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13388 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_192_ofb’:
    SWIG/_m2crypto_wrap.c:13400:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13400 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_192_ctr’:
    SWIG/_m2crypto_wrap.c:13412:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13412 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_256_ecb’:
    SWIG/_m2crypto_wrap.c:13424:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13424 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_256_cbc’:
    SWIG/_m2crypto_wrap.c:13436:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13436 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_256_cfb’:
    SWIG/_m2crypto_wrap.c:13448:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13448 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_256_ofb’:
    SWIG/_m2crypto_wrap.c:13460:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13460 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_256_ctr’:
    SWIG/_m2crypto_wrap.c:13472:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13472 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_md_ctx_new’:
    SWIG/_m2crypto_wrap.c:13921:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    13921 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_hmac_ctx_new’:
    SWIG/_m2crypto_wrap.c:14023:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    14023 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_cipher_ctx_new’:
    SWIG/_m2crypto_wrap.c:14211:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    14211 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_pkey_new’:
    SWIG/_m2crypto_wrap.c:14763:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    14763 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_aes_new’:
    SWIG/_m2crypto_wrap.c:14965:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    14965 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_rc4_new’:
    SWIG/_m2crypto_wrap.c:15137:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    15137 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_dh_new’:
    SWIG/_m2crypto_wrap.c:15273:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    15273 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_rsa_new’:
    SWIG/_m2crypto_wrap.c:15811:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    15811 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_dsa_new’:
    SWIG/_m2crypto_wrap.c:16932:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    16932 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_sslv23_method’:
    SWIG/_m2crypto_wrap.c:18220:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    18220 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_tlsv1_method’:
    SWIG/_m2crypto_wrap.c:19876:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    19876 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_x509_new’:
    SWIG/_m2crypto_wrap.c:21554:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    21554 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_x509_crl_new’:
    SWIG/_m2crypto_wrap.c:21645:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    21645 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_x509_name_new’:
    SWIG/_m2crypto_wrap.c:22481:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    22481 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_x509_name_entry_new’:
    SWIG/_m2crypto_wrap.c:23049:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    23049 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_x509_req_new’:
    SWIG/_m2crypto_wrap.c:23298:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    23298 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_x509_store_new’:
    SWIG/_m2crypto_wrap.c:23697:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    23697 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_x509v3_set_nconf’:
    SWIG/_m2crypto_wrap.c:25177:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    25177 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_sk_x509_extension_new_null’:
    SWIG/_m2crypto_wrap.c:25296:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    25296 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_sk_x509_new_null’:
    SWIG/_m2crypto_wrap.c:25609:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    25609 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_asn1_object_new’:
    SWIG/_m2crypto_wrap.c:25681:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    25681 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_asn1_bit_string_new’:
    SWIG/_m2crypto_wrap.c:25862:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    25862 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_asn1_string_new’:
    SWIG/_m2crypto_wrap.c:25874:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    25874 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_asn1_time_new’:
    SWIG/_m2crypto_wrap.c:26068:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    26068 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_asn1_integer_new’:
    SWIG/_m2crypto_wrap.c:26262:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    26262 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_pkcs7_new’:
    SWIG/_m2crypto_wrap.c:26438:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    26438 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_ec_key_new’:
    SWIG/_m2crypto_wrap.c:27645:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    27645 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_ec_get_builtin_curves’:
    SWIG/_m2crypto_wrap.c:27817:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    27817 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_engine_load_builtin_engines’:
    SWIG/_m2crypto_wrap.c:28507:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    28507 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_engine_load_dynamic’:
    SWIG/_m2crypto_wrap.c:28518:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    28518 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_engine_load_openssl’:
    SWIG/_m2crypto_wrap.c:28529:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    28529 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_engine_cleanup’:
    SWIG/_m2crypto_wrap.c:28540:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    28540 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_engine_new’:
    SWIG/_m2crypto_wrap.c:28552:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    28552 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_ui_openssl’:
    SWIG/_m2crypto_wrap.c:28801:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    28801 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: In function ‘_wrap_new__cbd_t’:
    SWIG/_m2crypto_wrap.c:28929:1: warning: label ‘fail’ defined but not used [-Wunused-label]
    28929 | fail:
          | ^~~~
    SWIG/_m2crypto_wrap.c: At top level:
    SWIG/_m2crypto_wrap.c:30280:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30280 |     (binaryfunc) 0,                           /* nb_add */
          |     ^
    SWIG/_m2crypto_wrap.c:30280:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async.am_await’)
    SWIG/_m2crypto_wrap.c:30281:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30281 |     (binaryfunc) 0,                           /* nb_subtract */
          |     ^
    SWIG/_m2crypto_wrap.c:30281:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async.am_aiter’)
    SWIG/_m2crypto_wrap.c:30282:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30282 |     (binaryfunc) 0,                           /* nb_multiply */
          |     ^
    SWIG/_m2crypto_wrap.c:30282:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async.am_anext’)
    SWIG/_m2crypto_wrap.c:30286:5: warning: excess elements in struct initializer
    30286 |     (binaryfunc) 0,                           /* nb_remainder */
          |     ^
    SWIG/_m2crypto_wrap.c:30286:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30287:5: warning: excess elements in struct initializer
    30287 |     (binaryfunc) 0,                           /* nb_divmod */
          |     ^
    SWIG/_m2crypto_wrap.c:30287:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30288:5: warning: excess elements in struct initializer
    30288 |     (ternaryfunc) 0,                          /* nb_power */
          |     ^
    SWIG/_m2crypto_wrap.c:30288:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30289:5: warning: excess elements in struct initializer
    30289 |     (unaryfunc) 0,                            /* nb_negative */
          |     ^
    SWIG/_m2crypto_wrap.c:30289:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30290:5: warning: excess elements in struct initializer
    30290 |     (unaryfunc) 0,                            /* nb_positive */
          |     ^
    SWIG/_m2crypto_wrap.c:30290:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30291:5: warning: excess elements in struct initializer
    30291 |     (unaryfunc) 0,                            /* nb_absolute */
          |     ^
    SWIG/_m2crypto_wrap.c:30291:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30292:5: warning: excess elements in struct initializer
    30292 |     (inquiry) 0,                              /* nb_nonzero */
          |     ^
    SWIG/_m2crypto_wrap.c:30292:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30293:5: warning: excess elements in struct initializer
    30293 |     (unaryfunc) 0,                            /* nb_invert */
          |     ^
    SWIG/_m2crypto_wrap.c:30293:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30294:5: warning: excess elements in struct initializer
    30294 |     (binaryfunc) 0,                           /* nb_lshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30294:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30295:5: warning: excess elements in struct initializer
    30295 |     (binaryfunc) 0,                           /* nb_rshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30295:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30296:5: warning: excess elements in struct initializer
    30296 |     (binaryfunc) 0,                           /* nb_and */
          |     ^
    SWIG/_m2crypto_wrap.c:30296:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30297:5: warning: excess elements in struct initializer
    30297 |     (binaryfunc) 0,                           /* nb_xor */
          |     ^
    SWIG/_m2crypto_wrap.c:30297:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30298:5: warning: excess elements in struct initializer
    30298 |     (binaryfunc) 0,                           /* nb_or */
          |     ^
    SWIG/_m2crypto_wrap.c:30298:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30302:5: warning: excess elements in struct initializer
    30302 |     (unaryfunc) 0,                            /* nb_int */
          |     ^
    SWIG/_m2crypto_wrap.c:30302:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30304:5: warning: excess elements in struct initializer
    30304 |     (void*) 0,                                /* nb_reserved */
          |     ^
    SWIG/_m2crypto_wrap.c:30304:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30308:5: warning: excess elements in struct initializer
    30308 |     (unaryfunc) 0,                            /* nb_float */
          |     ^
    SWIG/_m2crypto_wrap.c:30308:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30313:5: warning: excess elements in struct initializer
    30313 |     (binaryfunc) 0,                           /* nb_inplace_add */
          |     ^
    SWIG/_m2crypto_wrap.c:30313:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30314:5: warning: excess elements in struct initializer
    30314 |     (binaryfunc) 0,                           /* nb_inplace_subtract */
          |     ^
    SWIG/_m2crypto_wrap.c:30314:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30315:5: warning: excess elements in struct initializer
    30315 |     (binaryfunc) 0,                           /* nb_inplace_multiply */
          |     ^
    SWIG/_m2crypto_wrap.c:30315:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30319:5: warning: excess elements in struct initializer
    30319 |     (binaryfunc) 0,                           /* nb_inplace_remainder */
          |     ^
    SWIG/_m2crypto_wrap.c:30319:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30320:5: warning: excess elements in struct initializer
    30320 |     (ternaryfunc) 0,                          /* nb_inplace_power */
          |     ^
    SWIG/_m2crypto_wrap.c:30320:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30321:5: warning: excess elements in struct initializer
    30321 |     (binaryfunc) 0,                           /* nb_inplace_lshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30321:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30322:5: warning: excess elements in struct initializer
    30322 |     (binaryfunc) 0,                           /* nb_inplace_rshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30322:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30323:5: warning: excess elements in struct initializer
    30323 |     (binaryfunc) 0,                           /* nb_inplace_and */
          |     ^
    SWIG/_m2crypto_wrap.c:30323:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30324:5: warning: excess elements in struct initializer
    30324 |     (binaryfunc) 0,                           /* nb_inplace_xor */
          |     ^
    SWIG/_m2crypto_wrap.c:30324:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30325:5: warning: excess elements in struct initializer
    30325 |     (binaryfunc) 0,                           /* nb_inplace_or */
          |     ^
    SWIG/_m2crypto_wrap.c:30325:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30326:5: warning: excess elements in struct initializer
    30326 |     (binaryfunc) 0,                           /* nb_floor_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30326:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30327:5: warning: excess elements in struct initializer
    30327 |     (binaryfunc) 0,                           /* nb_true_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30327:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30328:5: warning: excess elements in struct initializer
    30328 |     (binaryfunc) 0,                           /* nb_inplace_floor_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30328:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30329:5: warning: excess elements in struct initializer
    30329 |     (binaryfunc) 0,                           /* nb_inplace_true_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30329:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30331:5: warning: excess elements in struct initializer
    30331 |     (unaryfunc) 0,                            /* nb_index */
          |     ^
    SWIG/_m2crypto_wrap.c:30331:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_async’)
    SWIG/_m2crypto_wrap.c:30335:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘Py_ssize_t (*)(PyObject *)’ {aka ‘long int (*)(struct _object *)’} [-Wincompatible-pointer-types]
    30335 |     (lenfunc) 0,                              /* mp_length */
          |     ^
    SWIG/_m2crypto_wrap.c:30335:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_number.nb_add’)
    SWIG/_m2crypto_wrap.c:30337:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘int (*)(PyObject *, PyObject *, PyObject *)’ {aka ‘int (*)(struct _object *, struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30337 |     (objobjargproc) 0,                        /* mp_ass_subscript */
          |     ^
    SWIG/_m2crypto_wrap.c:30337:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_number.nb_multiply’)
    SWIG/_m2crypto_wrap.c:30342:5: warning: initialization of ‘int (*)(PyObject *, PyObject *, PyObject *)’ {aka ‘int (*)(struct _object *, struct _object *, struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, Py_ssize_t)’ {aka ‘struct _object * (*)(struct _object *, long int)’} [-Wincompatible-pointer-types]
    30342 |     (ssizeargfunc) 0,                         /* sq_repeat */
          |     ^
    SWIG/_m2crypto_wrap.c:30342:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_mapping.mp_ass_subscript’)
    SWIG/_m2crypto_wrap.c:30343:5: warning: excess elements in struct initializer
    30343 |     (ssizeargfunc) 0,                         /* sq_item */
          |     ^
    SWIG/_m2crypto_wrap.c:30343:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30345:5: warning: excess elements in struct initializer
    30345 |     (void*) 0,                                /* was_sq_slice */
          |     ^
    SWIG/_m2crypto_wrap.c:30345:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30349:5: warning: excess elements in struct initializer
    30349 |     (ssizeobjargproc) 0,                      /* sq_ass_item */
          |     ^
    SWIG/_m2crypto_wrap.c:30349:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30351:5: warning: excess elements in struct initializer
    30351 |     (void*) 0,                                /* was_sq_ass_slice */
          |     ^
    SWIG/_m2crypto_wrap.c:30351:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30355:5: warning: excess elements in struct initializer
    30355 |     (objobjproc) 0,                           /* sq_contains */
          |     ^
    SWIG/_m2crypto_wrap.c:30355:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30356:5: warning: excess elements in struct initializer
    30356 |     (binaryfunc) 0,                           /* sq_inplace_concat */
          |     ^
    SWIG/_m2crypto_wrap.c:30356:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30357:5: warning: excess elements in struct initializer
    30357 |     (ssizeargfunc) 0,                         /* sq_inplace_repeat */
          |     ^
    SWIG/_m2crypto_wrap.c:30357:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30367:5: warning: initialization of ‘Py_ssize_t (*)(PyObject *)’ {aka ‘long int (*)(struct _object *)’} from incompatible pointer type ‘int (*)(PyObject *, Py_buffer *, int)’ {aka ‘int (*)(struct _object *, struct bufferinfo *, int)’} [-Wincompatible-pointer-types]
    30367 |     (getbufferproc) 0,                        /* bf_getbuffer */
          |     ^
    SWIG/_m2crypto_wrap.c:30367:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_sequence.sq_length’)
    SWIG/_m2crypto_wrap.c:30368:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘void (*)(PyObject *, Py_buffer *)’ {aka ‘void (*)(struct _object *, struct bufferinfo *)’} [-Wincompatible-pointer-types]
    30368 |     (releasebufferproc) 0,                    /* bf_releasebuffer */
          |     ^
    SWIG/_m2crypto_wrap.c:30368:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_sequence.sq_concat’)
    SWIG/_m2crypto_wrap.c:30371:5: warning: initialization of ‘int (*)(PyObject *, Py_buffer *, int)’ {aka ‘int (*)(struct _object *, struct bufferinfo *, int)’} from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
    30371 |     (PyObject*) 0,                            /* ht_name */
          |     ^
    SWIG/_m2crypto_wrap.c:30371:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_buffer.bf_getbuffer’)
    SWIG/_m2crypto_wrap.c:30372:5: warning: initialization of ‘void (*)(PyObject *, Py_buffer *)’ {aka ‘void (*)(struct _object *, struct bufferinfo *)’} from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
    30372 |     (PyObject*) 0,                            /* ht_slots */
          |     ^
    SWIG/_m2crypto_wrap.c:30372:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_type.as_buffer.bf_releasebuffer’)
    SWIG/_m2crypto_wrap.c:30214:56: warning: missing braces around initializer [-Wmissing-braces]
    30214 | static PyHeapTypeObject SwigPyBuiltin__stack_st_type = {
          |                                                        ^
    ......
    30371 |     (PyObject*) 0,                            /* ht_name */
          |     {
    30372 |     (PyObject*) 0,                            /* ht_slots */
    30373 | };
          | }
    SWIG/_m2crypto_wrap.c:30474:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30474 |     (binaryfunc) 0,                           /* nb_add */
          |     ^
    SWIG/_m2crypto_wrap.c:30474:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async.am_await’)
    SWIG/_m2crypto_wrap.c:30475:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30475 |     (binaryfunc) 0,                           /* nb_subtract */
          |     ^
    SWIG/_m2crypto_wrap.c:30475:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async.am_aiter’)
    SWIG/_m2crypto_wrap.c:30476:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30476 |     (binaryfunc) 0,                           /* nb_multiply */
          |     ^
    SWIG/_m2crypto_wrap.c:30476:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async.am_anext’)
    SWIG/_m2crypto_wrap.c:30480:5: warning: excess elements in struct initializer
    30480 |     (binaryfunc) 0,                           /* nb_remainder */
          |     ^
    SWIG/_m2crypto_wrap.c:30480:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30481:5: warning: excess elements in struct initializer
    30481 |     (binaryfunc) 0,                           /* nb_divmod */
          |     ^
    SWIG/_m2crypto_wrap.c:30481:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30482:5: warning: excess elements in struct initializer
    30482 |     (ternaryfunc) 0,                          /* nb_power */
          |     ^
    SWIG/_m2crypto_wrap.c:30482:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30483:5: warning: excess elements in struct initializer
    30483 |     (unaryfunc) 0,                            /* nb_negative */
          |     ^
    SWIG/_m2crypto_wrap.c:30483:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30484:5: warning: excess elements in struct initializer
    30484 |     (unaryfunc) 0,                            /* nb_positive */
          |     ^
    SWIG/_m2crypto_wrap.c:30484:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30485:5: warning: excess elements in struct initializer
    30485 |     (unaryfunc) 0,                            /* nb_absolute */
          |     ^
    SWIG/_m2crypto_wrap.c:30485:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30486:5: warning: excess elements in struct initializer
    30486 |     (inquiry) 0,                              /* nb_nonzero */
          |     ^
    SWIG/_m2crypto_wrap.c:30486:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30487:5: warning: excess elements in struct initializer
    30487 |     (unaryfunc) 0,                            /* nb_invert */
          |     ^
    SWIG/_m2crypto_wrap.c:30487:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30488:5: warning: excess elements in struct initializer
    30488 |     (binaryfunc) 0,                           /* nb_lshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30488:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30489:5: warning: excess elements in struct initializer
    30489 |     (binaryfunc) 0,                           /* nb_rshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30489:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30490:5: warning: excess elements in struct initializer
    30490 |     (binaryfunc) 0,                           /* nb_and */
          |     ^
    SWIG/_m2crypto_wrap.c:30490:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30491:5: warning: excess elements in struct initializer
    30491 |     (binaryfunc) 0,                           /* nb_xor */
          |     ^
    SWIG/_m2crypto_wrap.c:30491:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30492:5: warning: excess elements in struct initializer
    30492 |     (binaryfunc) 0,                           /* nb_or */
          |     ^
    SWIG/_m2crypto_wrap.c:30492:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30496:5: warning: excess elements in struct initializer
    30496 |     (unaryfunc) 0,                            /* nb_int */
          |     ^
    SWIG/_m2crypto_wrap.c:30496:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30498:5: warning: excess elements in struct initializer
    30498 |     (void*) 0,                                /* nb_reserved */
          |     ^
    SWIG/_m2crypto_wrap.c:30498:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30502:5: warning: excess elements in struct initializer
    30502 |     (unaryfunc) 0,                            /* nb_float */
          |     ^
    SWIG/_m2crypto_wrap.c:30502:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30507:5: warning: excess elements in struct initializer
    30507 |     (binaryfunc) 0,                           /* nb_inplace_add */
          |     ^
    SWIG/_m2crypto_wrap.c:30507:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30508:5: warning: excess elements in struct initializer
    30508 |     (binaryfunc) 0,                           /* nb_inplace_subtract */
          |     ^
    SWIG/_m2crypto_wrap.c:30508:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30509:5: warning: excess elements in struct initializer
    30509 |     (binaryfunc) 0,                           /* nb_inplace_multiply */
          |     ^
    SWIG/_m2crypto_wrap.c:30509:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30513:5: warning: excess elements in struct initializer
    30513 |     (binaryfunc) 0,                           /* nb_inplace_remainder */
          |     ^
    SWIG/_m2crypto_wrap.c:30513:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30514:5: warning: excess elements in struct initializer
    30514 |     (ternaryfunc) 0,                          /* nb_inplace_power */
          |     ^
    SWIG/_m2crypto_wrap.c:30514:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30515:5: warning: excess elements in struct initializer
    30515 |     (binaryfunc) 0,                           /* nb_inplace_lshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30515:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30516:5: warning: excess elements in struct initializer
    30516 |     (binaryfunc) 0,                           /* nb_inplace_rshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30516:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30517:5: warning: excess elements in struct initializer
    30517 |     (binaryfunc) 0,                           /* nb_inplace_and */
          |     ^
    SWIG/_m2crypto_wrap.c:30517:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30518:5: warning: excess elements in struct initializer
    30518 |     (binaryfunc) 0,                           /* nb_inplace_xor */
          |     ^
    SWIG/_m2crypto_wrap.c:30518:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30519:5: warning: excess elements in struct initializer
    30519 |     (binaryfunc) 0,                           /* nb_inplace_or */
          |     ^
    SWIG/_m2crypto_wrap.c:30519:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30520:5: warning: excess elements in struct initializer
    30520 |     (binaryfunc) 0,                           /* nb_floor_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30520:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30521:5: warning: excess elements in struct initializer
    30521 |     (binaryfunc) 0,                           /* nb_true_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30521:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30522:5: warning: excess elements in struct initializer
    30522 |     (binaryfunc) 0,                           /* nb_inplace_floor_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30522:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30523:5: warning: excess elements in struct initializer
    30523 |     (binaryfunc) 0,                           /* nb_inplace_true_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30523:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30525:5: warning: excess elements in struct initializer
    30525 |     (unaryfunc) 0,                            /* nb_index */
          |     ^
    SWIG/_m2crypto_wrap.c:30525:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_async’)
    SWIG/_m2crypto_wrap.c:30529:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘Py_ssize_t (*)(PyObject *)’ {aka ‘long int (*)(struct _object *)’} [-Wincompatible-pointer-types]
    30529 |     (lenfunc) 0,                              /* mp_length */
          |     ^
    SWIG/_m2crypto_wrap.c:30529:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_number.nb_add’)
    SWIG/_m2crypto_wrap.c:30531:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘int (*)(PyObject *, PyObject *, PyObject *)’ {aka ‘int (*)(struct _object *, struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30531 |     (objobjargproc) 0,                        /* mp_ass_subscript */
          |     ^
    SWIG/_m2crypto_wrap.c:30531:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_number.nb_multiply’)
    SWIG/_m2crypto_wrap.c:30536:5: warning: initialization of ‘int (*)(PyObject *, PyObject *, PyObject *)’ {aka ‘int (*)(struct _object *, struct _object *, struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, Py_ssize_t)’ {aka ‘struct _object * (*)(struct _object *, long int)’} [-Wincompatible-pointer-types]
    30536 |     (ssizeargfunc) 0,                         /* sq_repeat */
          |     ^
    SWIG/_m2crypto_wrap.c:30536:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_mapping.mp_ass_subscript’)
    SWIG/_m2crypto_wrap.c:30537:5: warning: excess elements in struct initializer
    30537 |     (ssizeargfunc) 0,                         /* sq_item */
          |     ^
    SWIG/_m2crypto_wrap.c:30537:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30539:5: warning: excess elements in struct initializer
    30539 |     (void*) 0,                                /* was_sq_slice */
          |     ^
    SWIG/_m2crypto_wrap.c:30539:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30543:5: warning: excess elements in struct initializer
    30543 |     (ssizeobjargproc) 0,                      /* sq_ass_item */
          |     ^
    SWIG/_m2crypto_wrap.c:30543:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30545:5: warning: excess elements in struct initializer
    30545 |     (void*) 0,                                /* was_sq_ass_slice */
          |     ^
    SWIG/_m2crypto_wrap.c:30545:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30549:5: warning: excess elements in struct initializer
    30549 |     (objobjproc) 0,                           /* sq_contains */
          |     ^
    SWIG/_m2crypto_wrap.c:30549:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30550:5: warning: excess elements in struct initializer
    30550 |     (binaryfunc) 0,                           /* sq_inplace_concat */
          |     ^
    SWIG/_m2crypto_wrap.c:30550:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30551:5: warning: excess elements in struct initializer
    30551 |     (ssizeargfunc) 0,                         /* sq_inplace_repeat */
          |     ^
    SWIG/_m2crypto_wrap.c:30551:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30561:5: warning: initialization of ‘Py_ssize_t (*)(PyObject *)’ {aka ‘long int (*)(struct _object *)’} from incompatible pointer type ‘int (*)(PyObject *, Py_buffer *, int)’ {aka ‘int (*)(struct _object *, struct bufferinfo *, int)’} [-Wincompatible-pointer-types]
    30561 |     (getbufferproc) 0,                        /* bf_getbuffer */
          |     ^
    SWIG/_m2crypto_wrap.c:30561:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_sequence.sq_length’)
    SWIG/_m2crypto_wrap.c:30562:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘void (*)(PyObject *, Py_buffer *)’ {aka ‘void (*)(struct _object *, struct bufferinfo *)’} [-Wincompatible-pointer-types]
    30562 |     (releasebufferproc) 0,                    /* bf_releasebuffer */
          |     ^
    SWIG/_m2crypto_wrap.c:30562:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_sequence.sq_concat’)
    SWIG/_m2crypto_wrap.c:30565:5: warning: initialization of ‘int (*)(PyObject *, Py_buffer *, int)’ {aka ‘int (*)(struct _object *, struct bufferinfo *, int)’} from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
    30565 |     (PyObject*) 0,                            /* ht_name */
          |     ^
    SWIG/_m2crypto_wrap.c:30565:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_buffer.bf_getbuffer’)
    SWIG/_m2crypto_wrap.c:30566:5: warning: initialization of ‘void (*)(PyObject *, Py_buffer *)’ {aka ‘void (*)(struct _object *, struct bufferinfo *)’} from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
    30566 |     (PyObject*) 0,                            /* ht_slots */
          |     ^
    SWIG/_m2crypto_wrap.c:30566:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_STRING_type.as_buffer.bf_releasebuffer’)
    SWIG/_m2crypto_wrap.c:30408:71: warning: missing braces around initializer [-Wmissing-braces]
    30408 | static PyHeapTypeObject SwigPyBuiltin__stack_st_OPENSSL_STRING_type = {
          |                                                                       ^
    ......
    30565 |     (PyObject*) 0,                            /* ht_name */
          |     {
    30566 |     (PyObject*) 0,                            /* ht_slots */
    30567 | };
          | }
    SWIG/_m2crypto_wrap.c:30668:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30668 |     (binaryfunc) 0,                           /* nb_add */
          |     ^
    SWIG/_m2crypto_wrap.c:30668:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async.am_await’)
    SWIG/_m2crypto_wrap.c:30669:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30669 |     (binaryfunc) 0,                           /* nb_subtract */
          |     ^
    SWIG/_m2crypto_wrap.c:30669:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async.am_aiter’)
    SWIG/_m2crypto_wrap.c:30670:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30670 |     (binaryfunc) 0,                           /* nb_multiply */
          |     ^
    SWIG/_m2crypto_wrap.c:30670:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async.am_anext’)
    SWIG/_m2crypto_wrap.c:30674:5: warning: excess elements in struct initializer
    30674 |     (binaryfunc) 0,                           /* nb_remainder */
          |     ^
    SWIG/_m2crypto_wrap.c:30674:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30675:5: warning: excess elements in struct initializer
    30675 |     (binaryfunc) 0,                           /* nb_divmod */
          |     ^
    SWIG/_m2crypto_wrap.c:30675:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30676:5: warning: excess elements in struct initializer
    30676 |     (ternaryfunc) 0,                          /* nb_power */
          |     ^
    SWIG/_m2crypto_wrap.c:30676:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30677:5: warning: excess elements in struct initializer
    30677 |     (unaryfunc) 0,                            /* nb_negative */
          |     ^
    SWIG/_m2crypto_wrap.c:30677:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30678:5: warning: excess elements in struct initializer
    30678 |     (unaryfunc) 0,                            /* nb_positive */
          |     ^
    SWIG/_m2crypto_wrap.c:30678:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30679:5: warning: excess elements in struct initializer
    30679 |     (unaryfunc) 0,                            /* nb_absolute */
          |     ^
    SWIG/_m2crypto_wrap.c:30679:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30680:5: warning: excess elements in struct initializer
    30680 |     (inquiry) 0,                              /* nb_nonzero */
          |     ^
    SWIG/_m2crypto_wrap.c:30680:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30681:5: warning: excess elements in struct initializer
    30681 |     (unaryfunc) 0,                            /* nb_invert */
          |     ^
    SWIG/_m2crypto_wrap.c:30681:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30682:5: warning: excess elements in struct initializer
    30682 |     (binaryfunc) 0,                           /* nb_lshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30682:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30683:5: warning: excess elements in struct initializer
    30683 |     (binaryfunc) 0,                           /* nb_rshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30683:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30684:5: warning: excess elements in struct initializer
    30684 |     (binaryfunc) 0,                           /* nb_and */
          |     ^
    SWIG/_m2crypto_wrap.c:30684:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30685:5: warning: excess elements in struct initializer
    30685 |     (binaryfunc) 0,                           /* nb_xor */
          |     ^
    SWIG/_m2crypto_wrap.c:30685:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30686:5: warning: excess elements in struct initializer
    30686 |     (binaryfunc) 0,                           /* nb_or */
          |     ^
    SWIG/_m2crypto_wrap.c:30686:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30690:5: warning: excess elements in struct initializer
    30690 |     (unaryfunc) 0,                            /* nb_int */
          |     ^
    SWIG/_m2crypto_wrap.c:30690:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30692:5: warning: excess elements in struct initializer
    30692 |     (void*) 0,                                /* nb_reserved */
          |     ^
    SWIG/_m2crypto_wrap.c:30692:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30696:5: warning: excess elements in struct initializer
    30696 |     (unaryfunc) 0,                            /* nb_float */
          |     ^
    SWIG/_m2crypto_wrap.c:30696:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30701:5: warning: excess elements in struct initializer
    30701 |     (binaryfunc) 0,                           /* nb_inplace_add */
          |     ^
    SWIG/_m2crypto_wrap.c:30701:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30702:5: warning: excess elements in struct initializer
    30702 |     (binaryfunc) 0,                           /* nb_inplace_subtract */
          |     ^
    SWIG/_m2crypto_wrap.c:30702:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30703:5: warning: excess elements in struct initializer
    30703 |     (binaryfunc) 0,                           /* nb_inplace_multiply */
          |     ^
    SWIG/_m2crypto_wrap.c:30703:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30707:5: warning: excess elements in struct initializer
    30707 |     (binaryfunc) 0,                           /* nb_inplace_remainder */
          |     ^
    SWIG/_m2crypto_wrap.c:30707:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30708:5: warning: excess elements in struct initializer
    30708 |     (ternaryfunc) 0,                          /* nb_inplace_power */
          |     ^
    SWIG/_m2crypto_wrap.c:30708:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30709:5: warning: excess elements in struct initializer
    30709 |     (binaryfunc) 0,                           /* nb_inplace_lshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30709:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30710:5: warning: excess elements in struct initializer
    30710 |     (binaryfunc) 0,                           /* nb_inplace_rshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30710:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30711:5: warning: excess elements in struct initializer
    30711 |     (binaryfunc) 0,                           /* nb_inplace_and */
          |     ^
    SWIG/_m2crypto_wrap.c:30711:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30712:5: warning: excess elements in struct initializer
    30712 |     (binaryfunc) 0,                           /* nb_inplace_xor */
          |     ^
    SWIG/_m2crypto_wrap.c:30712:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30713:5: warning: excess elements in struct initializer
    30713 |     (binaryfunc) 0,                           /* nb_inplace_or */
          |     ^
    SWIG/_m2crypto_wrap.c:30713:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30714:5: warning: excess elements in struct initializer
    30714 |     (binaryfunc) 0,                           /* nb_floor_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30714:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30715:5: warning: excess elements in struct initializer
    30715 |     (binaryfunc) 0,                           /* nb_true_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30715:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30716:5: warning: excess elements in struct initializer
    30716 |     (binaryfunc) 0,                           /* nb_inplace_floor_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30716:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30717:5: warning: excess elements in struct initializer
    30717 |     (binaryfunc) 0,                           /* nb_inplace_true_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30717:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30719:5: warning: excess elements in struct initializer
    30719 |     (unaryfunc) 0,                            /* nb_index */
          |     ^
    SWIG/_m2crypto_wrap.c:30719:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_async’)
    SWIG/_m2crypto_wrap.c:30723:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘Py_ssize_t (*)(PyObject *)’ {aka ‘long int (*)(struct _object *)’} [-Wincompatible-pointer-types]
    30723 |     (lenfunc) 0,                              /* mp_length */
          |     ^
    SWIG/_m2crypto_wrap.c:30723:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_number.nb_add’)
    SWIG/_m2crypto_wrap.c:30725:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘int (*)(PyObject *, PyObject *, PyObject *)’ {aka ‘int (*)(struct _object *, struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30725 |     (objobjargproc) 0,                        /* mp_ass_subscript */
          |     ^
    SWIG/_m2crypto_wrap.c:30725:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_number.nb_multiply’)
    SWIG/_m2crypto_wrap.c:30730:5: warning: initialization of ‘int (*)(PyObject *, PyObject *, PyObject *)’ {aka ‘int (*)(struct _object *, struct _object *, struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, Py_ssize_t)’ {aka ‘struct _object * (*)(struct _object *, long int)’} [-Wincompatible-pointer-types]
    30730 |     (ssizeargfunc) 0,                         /* sq_repeat */
          |     ^
    SWIG/_m2crypto_wrap.c:30730:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_mapping.mp_ass_subscript’)
    SWIG/_m2crypto_wrap.c:30731:5: warning: excess elements in struct initializer
    30731 |     (ssizeargfunc) 0,                         /* sq_item */
          |     ^
    SWIG/_m2crypto_wrap.c:30731:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30733:5: warning: excess elements in struct initializer
    30733 |     (void*) 0,                                /* was_sq_slice */
          |     ^
    SWIG/_m2crypto_wrap.c:30733:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30737:5: warning: excess elements in struct initializer
    30737 |     (ssizeobjargproc) 0,                      /* sq_ass_item */
          |     ^
    SWIG/_m2crypto_wrap.c:30737:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30739:5: warning: excess elements in struct initializer
    30739 |     (void*) 0,                                /* was_sq_ass_slice */
          |     ^
    SWIG/_m2crypto_wrap.c:30739:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30743:5: warning: excess elements in struct initializer
    30743 |     (objobjproc) 0,                           /* sq_contains */
          |     ^
    SWIG/_m2crypto_wrap.c:30743:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30744:5: warning: excess elements in struct initializer
    30744 |     (binaryfunc) 0,                           /* sq_inplace_concat */
          |     ^
    SWIG/_m2crypto_wrap.c:30744:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30745:5: warning: excess elements in struct initializer
    30745 |     (ssizeargfunc) 0,                         /* sq_inplace_repeat */
          |     ^
    SWIG/_m2crypto_wrap.c:30745:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30755:5: warning: initialization of ‘Py_ssize_t (*)(PyObject *)’ {aka ‘long int (*)(struct _object *)’} from incompatible pointer type ‘int (*)(PyObject *, Py_buffer *, int)’ {aka ‘int (*)(struct _object *, struct bufferinfo *, int)’} [-Wincompatible-pointer-types]
    30755 |     (getbufferproc) 0,                        /* bf_getbuffer */
          |     ^
    SWIG/_m2crypto_wrap.c:30755:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_sequence.sq_length’)
    SWIG/_m2crypto_wrap.c:30756:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘void (*)(PyObject *, Py_buffer *)’ {aka ‘void (*)(struct _object *, struct bufferinfo *)’} [-Wincompatible-pointer-types]
    30756 |     (releasebufferproc) 0,                    /* bf_releasebuffer */
          |     ^
    SWIG/_m2crypto_wrap.c:30756:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_sequence.sq_concat’)
    SWIG/_m2crypto_wrap.c:30759:5: warning: initialization of ‘int (*)(PyObject *, Py_buffer *, int)’ {aka ‘int (*)(struct _object *, struct bufferinfo *, int)’} from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
    30759 |     (PyObject*) 0,                            /* ht_name */
          |     ^
    SWIG/_m2crypto_wrap.c:30759:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_buffer.bf_getbuffer’)
    SWIG/_m2crypto_wrap.c:30760:5: warning: initialization of ‘void (*)(PyObject *, Py_buffer *)’ {aka ‘void (*)(struct _object *, struct bufferinfo *)’} from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
    30760 |     (PyObject*) 0,                            /* ht_slots */
          |     ^
    SWIG/_m2crypto_wrap.c:30760:5: note: (near initialization for ‘SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type.as_buffer.bf_releasebuffer’)
    SWIG/_m2crypto_wrap.c:30602:70: warning: missing braces around initializer [-Wmissing-braces]
    30602 | static PyHeapTypeObject SwigPyBuiltin__stack_st_OPENSSL_BLOCK_type = {
          |                                                                      ^
    ......
    30759 |     (PyObject*) 0,                            /* ht_name */
          |     {
    30760 |     (PyObject*) 0,                            /* ht_slots */
    30761 | };
          | }
    SWIG/_m2crypto_wrap.c:30862:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30862 |     (binaryfunc) 0,                           /* nb_add */
          |     ^
    SWIG/_m2crypto_wrap.c:30862:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async.am_await’)
    SWIG/_m2crypto_wrap.c:30863:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30863 |     (binaryfunc) 0,                           /* nb_subtract */
          |     ^
    SWIG/_m2crypto_wrap.c:30863:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async.am_aiter’)
    SWIG/_m2crypto_wrap.c:30864:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30864 |     (binaryfunc) 0,                           /* nb_multiply */
          |     ^
    SWIG/_m2crypto_wrap.c:30864:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async.am_anext’)
    SWIG/_m2crypto_wrap.c:30868:5: warning: excess elements in struct initializer
    30868 |     (binaryfunc) 0,                           /* nb_remainder */
          |     ^
    SWIG/_m2crypto_wrap.c:30868:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30869:5: warning: excess elements in struct initializer
    30869 |     (binaryfunc) 0,                           /* nb_divmod */
          |     ^
    SWIG/_m2crypto_wrap.c:30869:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30870:5: warning: excess elements in struct initializer
    30870 |     (ternaryfunc) 0,                          /* nb_power */
          |     ^
    SWIG/_m2crypto_wrap.c:30870:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30871:5: warning: excess elements in struct initializer
    30871 |     (unaryfunc) 0,                            /* nb_negative */
          |     ^
    SWIG/_m2crypto_wrap.c:30871:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30872:5: warning: excess elements in struct initializer
    30872 |     (unaryfunc) 0,                            /* nb_positive */
          |     ^
    SWIG/_m2crypto_wrap.c:30872:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30873:5: warning: excess elements in struct initializer
    30873 |     (unaryfunc) 0,                            /* nb_absolute */
          |     ^
    SWIG/_m2crypto_wrap.c:30873:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30874:5: warning: excess elements in struct initializer
    30874 |     (inquiry) 0,                              /* nb_nonzero */
          |     ^
    SWIG/_m2crypto_wrap.c:30874:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30875:5: warning: excess elements in struct initializer
    30875 |     (unaryfunc) 0,                            /* nb_invert */
          |     ^
    SWIG/_m2crypto_wrap.c:30875:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30876:5: warning: excess elements in struct initializer
    30876 |     (binaryfunc) 0,                           /* nb_lshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30876:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30877:5: warning: excess elements in struct initializer
    30877 |     (binaryfunc) 0,                           /* nb_rshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30877:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30878:5: warning: excess elements in struct initializer
    30878 |     (binaryfunc) 0,                           /* nb_and */
          |     ^
    SWIG/_m2crypto_wrap.c:30878:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30879:5: warning: excess elements in struct initializer
    30879 |     (binaryfunc) 0,                           /* nb_xor */
          |     ^
    SWIG/_m2crypto_wrap.c:30879:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30880:5: warning: excess elements in struct initializer
    30880 |     (binaryfunc) 0,                           /* nb_or */
          |     ^
    SWIG/_m2crypto_wrap.c:30880:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30884:5: warning: excess elements in struct initializer
    30884 |     (unaryfunc) 0,                            /* nb_int */
          |     ^
    SWIG/_m2crypto_wrap.c:30884:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30886:5: warning: excess elements in struct initializer
    30886 |     (void*) 0,                                /* nb_reserved */
          |     ^
    SWIG/_m2crypto_wrap.c:30886:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30890:5: warning: excess elements in struct initializer
    30890 |     (unaryfunc) 0,                            /* nb_float */
          |     ^
    SWIG/_m2crypto_wrap.c:30890:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30895:5: warning: excess elements in struct initializer
    30895 |     (binaryfunc) 0,                           /* nb_inplace_add */
          |     ^
    SWIG/_m2crypto_wrap.c:30895:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30896:5: warning: excess elements in struct initializer
    30896 |     (binaryfunc) 0,                           /* nb_inplace_subtract */
          |     ^
    SWIG/_m2crypto_wrap.c:30896:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30897:5: warning: excess elements in struct initializer
    30897 |     (binaryfunc) 0,                           /* nb_inplace_multiply */
          |     ^
    SWIG/_m2crypto_wrap.c:30897:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30901:5: warning: excess elements in struct initializer
    30901 |     (binaryfunc) 0,                           /* nb_inplace_remainder */
          |     ^
    SWIG/_m2crypto_wrap.c:30901:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30902:5: warning: excess elements in struct initializer
    30902 |     (ternaryfunc) 0,                          /* nb_inplace_power */
          |     ^
    SWIG/_m2crypto_wrap.c:30902:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30903:5: warning: excess elements in struct initializer
    30903 |     (binaryfunc) 0,                           /* nb_inplace_lshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30903:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30904:5: warning: excess elements in struct initializer
    30904 |     (binaryfunc) 0,                           /* nb_inplace_rshift */
          |     ^
    SWIG/_m2crypto_wrap.c:30904:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30905:5: warning: excess elements in struct initializer
    30905 |     (binaryfunc) 0,                           /* nb_inplace_and */
          |     ^
    SWIG/_m2crypto_wrap.c:30905:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30906:5: warning: excess elements in struct initializer
    30906 |     (binaryfunc) 0,                           /* nb_inplace_xor */
          |     ^
    SWIG/_m2crypto_wrap.c:30906:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30907:5: warning: excess elements in struct initializer
    30907 |     (binaryfunc) 0,                           /* nb_inplace_or */
          |     ^
    SWIG/_m2crypto_wrap.c:30907:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30908:5: warning: excess elements in struct initializer
    30908 |     (binaryfunc) 0,                           /* nb_floor_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30908:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30909:5: warning: excess elements in struct initializer
    30909 |     (binaryfunc) 0,                           /* nb_true_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30909:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30910:5: warning: excess elements in struct initializer
    30910 |     (binaryfunc) 0,                           /* nb_inplace_floor_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30910:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30911:5: warning: excess elements in struct initializer
    30911 |     (binaryfunc) 0,                           /* nb_inplace_true_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:30911:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30913:5: warning: excess elements in struct initializer
    30913 |     (unaryfunc) 0,                            /* nb_index */
          |     ^
    SWIG/_m2crypto_wrap.c:30913:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_async’)
    SWIG/_m2crypto_wrap.c:30917:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘Py_ssize_t (*)(PyObject *)’ {aka ‘long int (*)(struct _object *)’} [-Wincompatible-pointer-types]
    30917 |     (lenfunc) 0,                              /* mp_length */
          |     ^
    SWIG/_m2crypto_wrap.c:30917:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_number.nb_add’)
    SWIG/_m2crypto_wrap.c:30919:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘int (*)(PyObject *, PyObject *, PyObject *)’ {aka ‘int (*)(struct _object *, struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    30919 |     (objobjargproc) 0,                        /* mp_ass_subscript */
          |     ^
    SWIG/_m2crypto_wrap.c:30919:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_number.nb_multiply’)
    SWIG/_m2crypto_wrap.c:30924:5: warning: initialization of ‘int (*)(PyObject *, PyObject *, PyObject *)’ {aka ‘int (*)(struct _object *, struct _object *, struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, Py_ssize_t)’ {aka ‘struct _object * (*)(struct _object *, long int)’} [-Wincompatible-pointer-types]
    30924 |     (ssizeargfunc) 0,                         /* sq_repeat */
          |     ^
    SWIG/_m2crypto_wrap.c:30924:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_mapping.mp_ass_subscript’)
    SWIG/_m2crypto_wrap.c:30925:5: warning: excess elements in struct initializer
    30925 |     (ssizeargfunc) 0,                         /* sq_item */
          |     ^
    SWIG/_m2crypto_wrap.c:30925:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30927:5: warning: excess elements in struct initializer
    30927 |     (void*) 0,                                /* was_sq_slice */
          |     ^
    SWIG/_m2crypto_wrap.c:30927:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30931:5: warning: excess elements in struct initializer
    30931 |     (ssizeobjargproc) 0,                      /* sq_ass_item */
          |     ^
    SWIG/_m2crypto_wrap.c:30931:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30933:5: warning: excess elements in struct initializer
    30933 |     (void*) 0,                                /* was_sq_ass_slice */
          |     ^
    SWIG/_m2crypto_wrap.c:30933:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30937:5: warning: excess elements in struct initializer
    30937 |     (objobjproc) 0,                           /* sq_contains */
          |     ^
    SWIG/_m2crypto_wrap.c:30937:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30938:5: warning: excess elements in struct initializer
    30938 |     (binaryfunc) 0,                           /* sq_inplace_concat */
          |     ^
    SWIG/_m2crypto_wrap.c:30938:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30939:5: warning: excess elements in struct initializer
    30939 |     (ssizeargfunc) 0,                         /* sq_inplace_repeat */
          |     ^
    SWIG/_m2crypto_wrap.c:30939:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:30949:5: warning: initialization of ‘Py_ssize_t (*)(PyObject *)’ {aka ‘long int (*)(struct _object *)’} from incompatible pointer type ‘int (*)(PyObject *, Py_buffer *, int)’ {aka ‘int (*)(struct _object *, struct bufferinfo *, int)’} [-Wincompatible-pointer-types]
    30949 |     (getbufferproc) 0,                        /* bf_getbuffer */
          |     ^
    SWIG/_m2crypto_wrap.c:30949:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_sequence.sq_length’)
    SWIG/_m2crypto_wrap.c:30950:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘void (*)(PyObject *, Py_buffer *)’ {aka ‘void (*)(struct _object *, struct bufferinfo *)’} [-Wincompatible-pointer-types]
    30950 |     (releasebufferproc) 0,                    /* bf_releasebuffer */
          |     ^
    SWIG/_m2crypto_wrap.c:30950:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_sequence.sq_concat’)
    SWIG/_m2crypto_wrap.c:30953:5: warning: initialization of ‘int (*)(PyObject *, Py_buffer *, int)’ {aka ‘int (*)(struct _object *, struct bufferinfo *, int)’} from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
    30953 |     (PyObject*) 0,                            /* ht_name */
          |     ^
    SWIG/_m2crypto_wrap.c:30953:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_buffer.bf_getbuffer’)
    SWIG/_m2crypto_wrap.c:30954:5: warning: initialization of ‘void (*)(PyObject *, Py_buffer *)’ {aka ‘void (*)(struct _object *, struct bufferinfo *)’} from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
    30954 |     (PyObject*) 0,                            /* ht_slots */
          |     ^
    SWIG/_m2crypto_wrap.c:30954:5: note: (near initialization for ‘SwigPyBuiltin__pyfd_struct_type.as_buffer.bf_releasebuffer’)
    SWIG/_m2crypto_wrap.c:30796:59: warning: missing braces around initializer [-Wmissing-braces]
    30796 | static PyHeapTypeObject SwigPyBuiltin__pyfd_struct_type = {
          |                                                           ^
    ......
    30953 |     (PyObject*) 0,                            /* ht_name */
          |     {
    30954 |     (PyObject*) 0,                            /* ht_slots */
    30955 | };
          | }
    SWIG/_m2crypto_wrap.c:31059:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    31059 |     (binaryfunc) 0,                           /* nb_add */
          |     ^
    SWIG/_m2crypto_wrap.c:31059:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async.am_await’)
    SWIG/_m2crypto_wrap.c:31060:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    31060 |     (binaryfunc) 0,                           /* nb_subtract */
          |     ^
    SWIG/_m2crypto_wrap.c:31060:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async.am_aiter’)
    SWIG/_m2crypto_wrap.c:31061:5: warning: initialization of ‘PyObject * (*)(PyObject *)’ {aka ‘struct _object * (*)(struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    31061 |     (binaryfunc) 0,                           /* nb_multiply */
          |     ^
    SWIG/_m2crypto_wrap.c:31061:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async.am_anext’)
    SWIG/_m2crypto_wrap.c:31065:5: warning: excess elements in struct initializer
    31065 |     (binaryfunc) 0,                           /* nb_remainder */
          |     ^
    SWIG/_m2crypto_wrap.c:31065:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31066:5: warning: excess elements in struct initializer
    31066 |     (binaryfunc) 0,                           /* nb_divmod */
          |     ^
    SWIG/_m2crypto_wrap.c:31066:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31067:5: warning: excess elements in struct initializer
    31067 |     (ternaryfunc) 0,                          /* nb_power */
          |     ^
    SWIG/_m2crypto_wrap.c:31067:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31068:5: warning: excess elements in struct initializer
    31068 |     (unaryfunc) 0,                            /* nb_negative */
          |     ^
    SWIG/_m2crypto_wrap.c:31068:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31069:5: warning: excess elements in struct initializer
    31069 |     (unaryfunc) 0,                            /* nb_positive */
          |     ^
    SWIG/_m2crypto_wrap.c:31069:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31070:5: warning: excess elements in struct initializer
    31070 |     (unaryfunc) 0,                            /* nb_absolute */
          |     ^
    SWIG/_m2crypto_wrap.c:31070:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31071:5: warning: excess elements in struct initializer
    31071 |     (inquiry) 0,                              /* nb_nonzero */
          |     ^
    SWIG/_m2crypto_wrap.c:31071:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31072:5: warning: excess elements in struct initializer
    31072 |     (unaryfunc) 0,                            /* nb_invert */
          |     ^
    SWIG/_m2crypto_wrap.c:31072:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31073:5: warning: excess elements in struct initializer
    31073 |     (binaryfunc) 0,                           /* nb_lshift */
          |     ^
    SWIG/_m2crypto_wrap.c:31073:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31074:5: warning: excess elements in struct initializer
    31074 |     (binaryfunc) 0,                           /* nb_rshift */
          |     ^
    SWIG/_m2crypto_wrap.c:31074:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31075:5: warning: excess elements in struct initializer
    31075 |     (binaryfunc) 0,                           /* nb_and */
          |     ^
    SWIG/_m2crypto_wrap.c:31075:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31076:5: warning: excess elements in struct initializer
    31076 |     (binaryfunc) 0,                           /* nb_xor */
          |     ^
    SWIG/_m2crypto_wrap.c:31076:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31077:5: warning: excess elements in struct initializer
    31077 |     (binaryfunc) 0,                           /* nb_or */
          |     ^
    SWIG/_m2crypto_wrap.c:31077:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31081:5: warning: excess elements in struct initializer
    31081 |     (unaryfunc) 0,                            /* nb_int */
          |     ^
    SWIG/_m2crypto_wrap.c:31081:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31083:5: warning: excess elements in struct initializer
    31083 |     (void*) 0,                                /* nb_reserved */
          |     ^
    SWIG/_m2crypto_wrap.c:31083:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31087:5: warning: excess elements in struct initializer
    31087 |     (unaryfunc) 0,                            /* nb_float */
          |     ^
    SWIG/_m2crypto_wrap.c:31087:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31092:5: warning: excess elements in struct initializer
    31092 |     (binaryfunc) 0,                           /* nb_inplace_add */
          |     ^
    SWIG/_m2crypto_wrap.c:31092:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31093:5: warning: excess elements in struct initializer
    31093 |     (binaryfunc) 0,                           /* nb_inplace_subtract */
          |     ^
    SWIG/_m2crypto_wrap.c:31093:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31094:5: warning: excess elements in struct initializer
    31094 |     (binaryfunc) 0,                           /* nb_inplace_multiply */
          |     ^
    SWIG/_m2crypto_wrap.c:31094:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31098:5: warning: excess elements in struct initializer
    31098 |     (binaryfunc) 0,                           /* nb_inplace_remainder */
          |     ^
    SWIG/_m2crypto_wrap.c:31098:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31099:5: warning: excess elements in struct initializer
    31099 |     (ternaryfunc) 0,                          /* nb_inplace_power */
          |     ^
    SWIG/_m2crypto_wrap.c:31099:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31100:5: warning: excess elements in struct initializer
    31100 |     (binaryfunc) 0,                           /* nb_inplace_lshift */
          |     ^
    SWIG/_m2crypto_wrap.c:31100:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31101:5: warning: excess elements in struct initializer
    31101 |     (binaryfunc) 0,                           /* nb_inplace_rshift */
          |     ^
    SWIG/_m2crypto_wrap.c:31101:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31102:5: warning: excess elements in struct initializer
    31102 |     (binaryfunc) 0,                           /* nb_inplace_and */
          |     ^
    SWIG/_m2crypto_wrap.c:31102:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31103:5: warning: excess elements in struct initializer
    31103 |     (binaryfunc) 0,                           /* nb_inplace_xor */
          |     ^
    SWIG/_m2crypto_wrap.c:31103:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31104:5: warning: excess elements in struct initializer
    31104 |     (binaryfunc) 0,                           /* nb_inplace_or */
          |     ^
    SWIG/_m2crypto_wrap.c:31104:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31105:5: warning: excess elements in struct initializer
    31105 |     (binaryfunc) 0,                           /* nb_floor_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:31105:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31106:5: warning: excess elements in struct initializer
    31106 |     (binaryfunc) 0,                           /* nb_true_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:31106:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31107:5: warning: excess elements in struct initializer
    31107 |     (binaryfunc) 0,                           /* nb_inplace_floor_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:31107:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31108:5: warning: excess elements in struct initializer
    31108 |     (binaryfunc) 0,                           /* nb_inplace_true_divide */
          |     ^
    SWIG/_m2crypto_wrap.c:31108:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31110:5: warning: excess elements in struct initializer
    31110 |     (unaryfunc) 0,                            /* nb_index */
          |     ^
    SWIG/_m2crypto_wrap.c:31110:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_async’)
    SWIG/_m2crypto_wrap.c:31114:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘Py_ssize_t (*)(PyObject *)’ {aka ‘long int (*)(struct _object *)’} [-Wincompatible-pointer-types]
    31114 |     (lenfunc) 0,                              /* mp_length */
          |     ^
    SWIG/_m2crypto_wrap.c:31114:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_number.nb_add’)
    SWIG/_m2crypto_wrap.c:31116:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘int (*)(PyObject *, PyObject *, PyObject *)’ {aka ‘int (*)(struct _object *, struct _object *, struct _object *)’} [-Wincompatible-pointer-types]
    31116 |     (objobjargproc) 0,                        /* mp_ass_subscript */
          |     ^
    SWIG/_m2crypto_wrap.c:31116:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_number.nb_multiply’)
    SWIG/_m2crypto_wrap.c:31121:5: warning: initialization of ‘int (*)(PyObject *, PyObject *, PyObject *)’ {aka ‘int (*)(struct _object *, struct _object *, struct _object *)’} from incompatible pointer type ‘PyObject * (*)(PyObject *, Py_ssize_t)’ {aka ‘struct _object * (*)(struct _object *, long int)’} [-Wincompatible-pointer-types]
    31121 |     (ssizeargfunc) 0,                         /* sq_repeat */
          |     ^
    SWIG/_m2crypto_wrap.c:31121:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_mapping.mp_ass_subscript’)
    SWIG/_m2crypto_wrap.c:31122:5: warning: excess elements in struct initializer
    31122 |     (ssizeargfunc) 0,                         /* sq_item */
          |     ^
    SWIG/_m2crypto_wrap.c:31122:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:31124:5: warning: excess elements in struct initializer
    31124 |     (void*) 0,                                /* was_sq_slice */
          |     ^
    SWIG/_m2crypto_wrap.c:31124:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:31128:5: warning: excess elements in struct initializer
    31128 |     (ssizeobjargproc) 0,                      /* sq_ass_item */
          |     ^
    SWIG/_m2crypto_wrap.c:31128:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:31130:5: warning: excess elements in struct initializer
    31130 |     (void*) 0,                                /* was_sq_ass_slice */
          |     ^
    SWIG/_m2crypto_wrap.c:31130:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:31134:5: warning: excess elements in struct initializer
    31134 |     (objobjproc) 0,                           /* sq_contains */
          |     ^
    SWIG/_m2crypto_wrap.c:31134:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:31135:5: warning: excess elements in struct initializer
    31135 |     (binaryfunc) 0,                           /* sq_inplace_concat */
          |     ^
    SWIG/_m2crypto_wrap.c:31135:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:31136:5: warning: excess elements in struct initializer
    31136 |     (ssizeargfunc) 0,                         /* sq_inplace_repeat */
          |     ^
    SWIG/_m2crypto_wrap.c:31136:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_mapping’)
    SWIG/_m2crypto_wrap.c:31146:5: warning: initialization of ‘Py_ssize_t (*)(PyObject *)’ {aka ‘long int (*)(struct _object *)’} from incompatible pointer type ‘int (*)(PyObject *, Py_buffer *, int)’ {aka ‘int (*)(struct _object *, struct bufferinfo *, int)’} [-Wincompatible-pointer-types]
    31146 |     (getbufferproc) 0,                        /* bf_getbuffer */
          |     ^
    SWIG/_m2crypto_wrap.c:31146:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_sequence.sq_length’)
    SWIG/_m2crypto_wrap.c:31147:5: warning: initialization of ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _object *, struct _object *)’} from incompatible pointer type ‘void (*)(PyObject *, Py_buffer *)’ {aka ‘void (*)(struct _object *, struct bufferinfo *)’} [-Wincompatible-pointer-types]
    31147 |     (releasebufferproc) 0,                    /* bf_releasebuffer */
          |     ^
    SWIG/_m2crypto_wrap.c:31147:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_sequence.sq_concat’)
    SWIG/_m2crypto_wrap.c:31150:5: warning: initialization of ‘int (*)(PyObject *, Py_buffer *, int)’ {aka ‘int (*)(struct _object *, struct bufferinfo *, int)’} from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
    31150 |     (PyObject*) 0,                            /* ht_name */
          |     ^
    SWIG/_m2crypto_wrap.c:31150:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_buffer.bf_getbuffer’)
    SWIG/_m2crypto_wrap.c:31151:5: warning: initialization of ‘void (*)(PyObject *, Py_buffer *)’ {aka ‘void (*)(struct _object *, struct bufferinfo *)’} from incompatible pointer type ‘PyObject *’ {aka ‘struct _object *’} [-Wincompatible-pointer-types]
    31151 |     (PyObject*) 0,                            /* ht_slots */
          |     ^
    SWIG/_m2crypto_wrap.c:31151:5: note: (near initialization for ‘SwigPyBuiltin___cbd_t_type.as_buffer.bf_releasebuffer’)
    SWIG/_m2crypto_wrap.c:30993:54: warning: missing braces around initializer [-Wmissing-braces]
    30993 | static PyHeapTypeObject SwigPyBuiltin___cbd_t_type = {
          |                                                      ^
    ......
    31150 |     (PyObject*) 0,                            /* ht_name */
          |     {
    31151 |     (PyObject*) 0,                            /* ht_slots */
    31152 | };
          | }
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /home/soniex2/git/selfhosted/python.teraco-opgy/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-ujm2rhmo/M2Crypto/setup.py'"'"'; __file__='"'"'/tmp/pip-install-ujm2rhmo/M2Crypto/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-jiai9cji/install-record.txt --single-version-externally-managed --compile --install-headers /home/soniex2/git/selfhosted/python.teraco-opgy/venv/include/site/python3.8/M2Crypto Check the logs for full command output.
WARNING: You are using pip version 19.2.3, however version 20.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

Wanted: UX HTML/CSS/Javascript Work

The Cheetah templates for javatools are currently horrible. I have to admit that my eye for visual design is not really that good. To that end, this project needs someone with a good feeling for UX to go over the reporting output (especially the output for classdiff) and make it something that is significantly more friendly to read.

PyPI version of the package does not state dependencies

setup.py of the package (in PyPI) does not state dependencies:

$ pip install javatools
Collecting javatools
Installing collected packages: javatools
Successfully installed javatools-1.3
$ pip show javatools

---
Metadata-Version: 2.0
Name: javatools
Version: 1.3
Summary: Tools for finding meaningful deltas in Java class files and JARs
Home-page: https://github.com/obriencj/python-javatools
Author: Christopher O'Brien
Author-email: [email protected]
Installer: pip
License: GNU Lesser General Public License
Location: /data/KS/src/p-j-venv/lib/python2.7/site-packages
Requires: 
Classifiers:
  Development Status :: 5 - Production/Stable
  Environment :: Console
  Intended Audience :: Developers
  Intended Audience :: Information Technology
  Natural Language :: English
  Programming Language :: Python :: 2
  Topic :: Software Development :: Disassemblers

Version 1.3 has line

requires = ["Cheetah", "PyXML"]

in setup.py, but the correct keyword is install_requires.

Installation fails on MacOS

Fresh checkout:

$ python setup.py install
[...]
Processing dependencies for javatools==1.5.1
Searching for M2Crypto>=0.26.0
Reading https://pypi.org/simple/M2Crypto/
Downloading https://files.pythonhosted.org/packages/aa/36/9fef97358e378c1d3bd567c4e8f8ca0428a8d7e869852cef445ee6da91fd/M2Crypto-0.37.1.tar.gz#sha256=e4e42f068b78ccbf113e5d0a72ae5f480f6c3ace4940b91e4fff5598cfff6fb3
Best match: M2Crypto 0.37.1
Processing M2Crypto-0.37.1.tar.gz
Writing /var/folders/4j/gxtcg7_j4mj7_j52f3glc6dh0000gn/T/easy_install-rnynee5s/M2Crypto-0.37.1/setup.cfg
Running M2Crypto-0.37.1/setup.py -q bdist_egg --dist-dir /var/folders/4j/gxtcg7_j4mj7_j52f3glc6dh0000gn/T/easy_install-rnynee5s/M2Crypto-0.37.1/egg-dist-tmp-3hsch9op
unable to execute 'swig': No such file or directory
error: Setup script exited with error: command 'swig' failed with exit status 1

'openssl' system calls should be replaced with Python module

At present, all cryptographic operations are done by issuing a system call to openssl. This is slow, not portable, and does not state the dependency. Such calls should be replaced with a Python module providing corresponding functionality.

Error 'javatools.Unimplemented'.

I have the following error:
javatools.Unimplemented: _next_argsig is '\x00' in �L�j�a�v�a�.�l�a�n�g�.�r�e�f�l�e�c�t�.�M�e�t�h�o�d�;�

running:
ci = unpack_classfile(full_filename)
print( ci.get_requires() )

where full_filename is the attached file (GitHub forced me to zip to upload):
SimplePropertyAccessor.class.zip

Seems to be a missing corner case somewhere. Please let me know if I can provide any additional information that helps on debugging.

No output from JarInfo

Hi,

Im trying to list all public methods in a JAR using:

jarinfo --public scala-library-2.12.8.jar

But Im getting no output from this command. Am I using it incorrecly?

Thanks

Option --json-indent does not work

$ classdiff --json --json-indent 10 tests/data/Sample2A.class tests/data/Sample2.class 
[...backtrace...]
  File "/usr/lib/python2.7/json/encoder.py", line 353, in _iterencode_dict
    newline_indent = '\n' + (' ' * (_indent * _current_indent_level))
TypeError: can't multiply sequence by non-int of type 'str'

manifest.py -r flag expects an argument

Change needed:
parser.add_argument("-r", "--recursive", help="process directories recursively") --> parser.add_argument("-r", "--recursive", action='store_true', help="process directories recursively")

Text strings are not a valid API return

Descriptive English text is not a valid return type for API calls.

TODO, fix:

  • javatools.manifest.verify_jar_checksums
  • javatools.manifest.verify_manifest_checksums

And any other places where a text string is returned from an API method or function rather than structured data.

eg: verify_jar_checksums can return a list of entries which could not be verified (making this change currently)

@KonstantinShemyak while I'm at this, would you please see if there are other entries in your code or tests which behave this way?

Things which spit out English text should be named with a cli_ prefix on the function name, and should print directly to stdout. Everything else should return data.

Java identifiers in .class files containing characters outside of BMP can fail to decode

Java class file specification defines the encoding of the bytes in CONSTANT_Utf8_info structure. Currently, python-javatools handle zero byte in this "modified utf-8". But there is one more difference, all codepoints in the supplementary planes are encoded using 6 bytes, not 4 as in UTF-8. (Such codec has been proposed for Python in 2008, but rejected in 2012.)

On such input, UTF-8 decoder behaves differently in my Python 2 and Python 3 environments:

  • Python 2.7 just decodes the consecutive surrogates and leaves them as is. (I do not yet see why, but classinfo even shows the original character, as though it's decoded with UTF-16... strange.)
  • Python 3.6 raises UnicodeDecodeError, as expected. (Python-javatools would catch it, replace C0 80 with 00 in the data, and attempt to UTF-8-decode again. Two consecutive UTF-16 surrogates cannot contain substring C0 80, thus nothing gets replaced, and the second decoding attempt fails at the same place.)

Illustration with the Wikipedia example U+10400:

Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34) [GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> b'\xed\xa0\x81\xed\xb0\x80'.decode('utf-8')
u'\ud801\udc00'
Python 3.6.5 (default, Jun  1 2018, 18:28:15) [GCC 5.4.0 20160609] on linux
>>> b'\xed\xa0\x81\xed\xb0\x80'.decode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 0: invalid continuation byte

It looks like an unlikely case that someone will use codepoints from outside the Basic Multilingual Plane for Java identifiers, so this is probably a low priority issue.

Python 2.6 has been broken

The following features are not available in Python 2.6:

  • Commit b354df8 (from year 2012) used zipfile.ZipFile as context manager.
  • Commit 342af49 introduced line with multiple with contexts into jardiff.py.
  • Commit 675987d imports OrderedDict.
  • Multiple commits added assertIsNone()/assertIsNotNone() to tests.
  • assertRaises() is used as context manager.
  • argparse is not avilable in 2.6.

Mixed line endings in tests causing failures

Fresh checkout (also fails under unittests, but examples below are being run with pytest) fails due to platform-specific line endings.

Failures:

FAILED tests/manifest.py::ManifestTest::test_create_sha1 - AssertionError: 'Manifest-Version: 1.0\n\nName: example.t[187 chars]\n\n' != b'Manifest-Version: 1.0\r\n\r\nName: exam[206 chars]\r\n' : Result of "...
FAILED tests/manifest.py::ManifestTest::test_create_sha512 - AssertionError: 'Manifest-Version: 1.0\n\nName: example.t[319 chars]\n\n' != b'Manifest-Version: 1.0\r\n\r\nName: exam[342 chars]\r\n' : Result of...
FAILED tests/manifest.py::ManifestTest::test_create_with_ignore - AssertionError: 'Manifest-Version: 1.0\n\nName: filename-[227 chars]\n\n' != b'Manifest-Version: 1.0\r\n\r\nName: file[244 chars]\r\n' : Resu...

Example:

E Expected:
E   b'Manifest-Version: 1.0\r\n\r\nName: filename-which-is-longer-than-80-characters-and-does-not-fit-in-\r\n java-manifest-line.txt\r\nMD5-Digest: JqsNuQ1y4orQuh4i7lEFEA==\r\nSHA-512-Digest: Y+Iuwvvuur8AXlj7+w7uYHxKpBcEWmigzGN2ewSONVkmjTXnLzZ9Oy\r\n 29Xb3fEvxDl3YroUkmCzeVoDkXE73c1w==\r\n\r\n'
E Received:
E   b'Manifest-Version: 1.0\n\nName: filename-which-is-longer-than-80-characters-and-does-not-fit-in-\n java-manifest-line.txt\nMD5-Digest: JqsNuQ1y4orQuh4i7lEFEA==\nSHA-512-Digest: Y+Iuwvvuur8AXlj7+w7uYHxKpBcEWmigzGN2ewSONVkmjTXnLzZ9Oy\n 29Xb3fEvxDl3YroUkmCzeVoDkXE73c1w==\n\n'                                                                                    

This fails due to the manifests having \r\n line endings, and reading from the subprocess we get Linux-style \n.

On Py3, the fix is simply using universal newline mode, with NamedTemporaryFile('rt') as tmp_out: (in py3, t implies the U from py2).

Note that the specification states that manifest are valid with any line endings:

   newline:                      CR LF | LF | CR (not followed by LF)

@KonstantinShemyak
#119

multianewarray unpack missing format for arguments

Максим Соколов was kind enough to send in the following

Hello, Christopher O'Brien!

I use your library https://github.com/obriencj/python-javatools and i find a bug in javatools.opcedes.py:454 line. Opcode 0xC5 is a multianewarra and have size not 1 byte, size = 4 bytes. You can check this in http://cs.au.dk/~mis/dOvs/jvmspec/ref--46.html or https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings .

Change line 454 in file "javatools.opcedes.py":
OP_multianewarray = __op('multianewarray', 0xc5)
to
OP_multianewarray = __op('multianewarray', 0xc5, fmt='>HB')

P.s: sorry for my English
Thanks for your library!
Best regards.

how to use jardiff

hi.
I was downloaded your project and install but help how I can for example compare 2 jar file with jardiff.py?

Thank you

Documentation

This project seems amazing to me. Where I can find some examples? I would like to use it to read some Class files (Java 8 format) to read the name and signatures of methods and fields. Is that possible?

Incompatible with Python 3.x

As a trivial example, the use of dict.has_key is no longer supported in Python 3.0 and later:

I'm sure there are more Python 3.x gotchas, just pointing out the one that is preventing me from adopting this library. If I can find time in the next week or so I might submit a PR implementing Python 3.x compatibility. Is this project automatically tested at all?

Signature, created by 'jarutil s', is not recognized by 'jarsigner'

Create a sample JAR:

$ touch data.txt
$ jar -c data.txt > data.jar

Add checksums to its manifest:

$ unzip data.jar
$ manifest -c data.jar > META-INF/MANIFEST.MF
$ zip -u data.jar META-INF/MANIFEST.MF

Sign the jar with python-javatools:

$ jarutil s data.jar cert.pem private-key.pem signing

Attempt to verify the JAR with jarsigner:

$ jarsigner -verify -verbose -debug -keystore cert.pfx data.jar 

           0 Sun Nov 13 19:55:49 EET 2016 META-INF/
         118 Sun Nov 13 19:55:02 EET 2016 META-INF/MANIFEST.MF
         259 Sun Nov 13 20:14:22 EET 2016 META-INF/SIGNING.SF
        1613 Sun Nov 13 20:14:22 EET 2016 META-INF/SIGNING.RSA
 m         0 Mon Sep 05 20:25:28 EEST 2016 data.txt

  s = signature was verified 
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar is unsigned. (signatures missing or not parsable)

Note that the signature verifies with python-javatools themselves:

$ jarutil v data.jar cert.pem SIGNING
Jar verified.

Convert bytes to str

Is there any way to convert method bytes to a readable string? I encountered a decoding error when using the decode method to convert bytes to a string.

Support for JDK 9 features

Javatools 1.y only supports java bytecode features up to JDK 8. Constant types and magic fields introduced later can lead to backtraces.

Goal: add JDK 9 (and maybe even 11) support for Javatools 2.0.0

pylint fails

$ python setup.py pylint
running pylint
running build
running build_py
copying javatools/manifest.py -> build/lib.linux-x86_64-2.7/javatools
error: could not delete 'build/lib.linux-x86_64-2.7/javatools/manifest.py': Permission denied

I'm not (yet) familiar with pylint; I'd expect that the user does not need to install anything in order to run the report, but anyway:

$ sudo python setup.py pylint
[sudo] password for konstantin: 
running pylint
running build
running build_py
copying javatools/manifest.py -> build/lib.linux-x86_64-2.7/javatools
running build_scripts
Traceback (most recent call last):
  File "setup.py", line 78, in <module>
    'pylint': pylint_cmd } )
  File "/usr/lib/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/usr/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/home/konstantin/python-javatools/extras/pylint_cmd.py", line 143, in run
    self.run_linter()
  File "/home/konstantin/python-javatools/extras/pylint_cmd.py", line 107, in run_linter
    linter.disable('suppressed-message')
  File "/usr/lib/python2.7/dist-packages/pylint/utils.py", line 192, in disable
    msg = self.check_message_id(msgid)
  File "/usr/lib/python2.7/dist-packages/pylint/utils.py", line 256, in check_message_id
    raise UnknownMessage('No such message id %s' % msgid)
pylint.utils.UnknownMessage: No such message id SUPPRESSED-MESSAGE

javatools does not full support java class 52.0 (JDK 8)

When parse the following java class build with the code

File "/usr/lib/python2.7/site-packages/javatools/init.py", line 1943, in _unpack_const_item
raise Unimplemented("unknown constant type %r" % type)

javatools.Unimplemented: unknown constant type <type 'type'>

import java.time.Instant;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public final class JavaCompatibilityUtil {

/**

  • A comparator that can be used to sort objects into increasing order of

  • their toString() length.
    */
    private static final Comparator LAMBDA_COMPARATOR = (Comparator) (Object a, Object b) -> {
    int alen = a.toString().length();
    int blen = b.toString().length();
    if (alen < blen) {
    return -1;
    }
    if (alen > blen) {
    return 1;
    }
    return 0;
    };

    private static void functionalAppend(List addto, List addfrom) {
    addfrom.stream().forEach((addfrom1) -> {
    addto.add(addfrom1);
    });
    }

    private static void featureTest() {
    Instant inst = Instant.now();
    long time = inst.getEpochSecond();
    time *= 1000000000l; //convert to nanoseconds
    time += inst.getNano(); //the nanoseconds returned by inst.getNano() are the na
    System.out.print("time="+time+"\n");

    Map<String, String> map = new HashMap<>();
    map.put("One", "One");
    map.put("Two", "Two");
    map.put("Tree", "Tree");
    map.put("Four", "Four");
    map.entrySet().stream().filter((entry) -> (entry.getKey().equals("Two"))).forEach((entry) -> {
    System.out.println("is 2 = " + entry.getValue());
    });

    String[] atp = {"Rafael Nadal", "Novak Djokovic", "Stanislas Wawrinka", "David Ferrer", "Roger Federer", "Andy Murray", "Tomas Berdych", "Juan Martin Del Potro"};
    List players = Arrays.asList(atp);
    // Using lambda expression and functional operations
    players.forEach(
    (player) -> {
    System.out.print(player + " ; " + map.size());
    }
    );
    // Using double colon operator in Java 8
    players.forEach(System.out::println);
    }

    public static void main(String [] args){
    featureTest();
    }

}

Release 1.6.0

  • Update ChangeLog
  • Update setup.cfg and javatools.spec
  • Rebuild docs
  • Tag release
  • PyPI upload
  • Announcement

Error running jarinfo with --jar-requires

Traceback (most recent call last):
  File "/home/me/.local/bin/jarinfo", line 10, in <module>
    sys.exit(main())
  File "/home/me/.local/lib/python3.6/site-packages/javatools/jarinfo.py", line 330, in main
    return cli(parser.parse_args(args[1:]))
  File "/home/me/.local/lib/python3.6/site-packages/javatools/jarinfo.py", line 289, in cli
    cli_jarinfo(options, ji)
  File "/home/me/.local/lib/python3.6/site-packages/javatools/jarinfo.py", line 241, in cli_jarinfo
    cli_jar_requires(options, info)
  File "/home/me/.local/lib/python3.6/site-packages/javatools/jarinfo.py", line 224, in cli_jar_requires
    for required in sorted(jarinfo.get_requires().keys()):
  File "/home/me/.local/lib/python3.6/site-packages/javatools/jarinfo.py", line 120, in get_requires
    self._collect_requires_provides()
  File "/home/me/.local/lib/python3.6/site-packages/javatools/jarinfo.py", line 105, in _collect_requires_provides
    for sym in ci.get_requires():
  File "/home/me/.local/lib/python3.6/site-packages/javatools/__init__.py", line 963, in get_requires
    self._requires = set(self._get_requires())
  File "/home/me/.local/lib/python3.6/site-packages/javatools/__init__.py", line 929, in _get_requires
    if t[1] == "L":
IndexError: tuple index out of range

jarutil:cli_sign_jar should place META-INF in the beginning of the zip archive

Currently, jarutil:cli_sign_jar() appends signature-related files META-INF/KEY.SF and META-INF/KEY.RSA to the end of the archive.

Jarsigner places these files into the beginning of the archive. This allows for easier processing of the signed JAR in one pass. It will be good to have the same behavior for jarutil.

javatools.Unimplemented: unknown constant type 19

Hi,

Got a different Unimplemented error with constant type 19 while querying a Java 9/10/11/12 modules:

❯ jarinfo --jar-classes --public /Users/alvaro/.sdkman/candidates/java/9.0.4-open/jmods/java.base.jmod
Traceback (most recent call last):
  File "/Users/alvaro/.pyenv/versions/3.7.0/bin/jarinfo", line 11, in <module>
    load_entry_point('javatools==1.4.0', 'console_scripts', 'jarinfo')()
  File "/Users/alvaro/.pyenv/versions/3.7.0/lib/python3.7/site-packages/javatools-1.4.0-py3.7.egg/javatools/jarinfo.py", line 330, in main
    return cli(parser.parse_args(args[1:]))
  File "/Users/alvaro/.pyenv/versions/3.7.0/lib/python3.7/site-packages/javatools-1.4.0-py3.7.egg/javatools/jarinfo.py", line 289, in cli
    cli_jarinfo(options, ji)
  File "/Users/alvaro/.pyenv/versions/3.7.0/lib/python3.7/site-packages/javatools-1.4.0-py3.7.egg/javatools/jarinfo.py", line 244, in cli_jarinfo
    cli_jar_classes(options, info)
  File "/Users/alvaro/.pyenv/versions/3.7.0/lib/python3.7/site-packages/javatools-1.4.0-py3.7.egg/javatools/jarinfo.py", line 206, in cli_jar_classes
    ci = jarinfo.get_classinfo(entry)
  File "/Users/alvaro/.pyenv/versions/3.7.0/lib/python3.7/site-packages/javatools-1.4.0-py3.7.egg/javatools/jarinfo.py", line 156, in get_classinfo
    return unpack_class(cfd)
  File "/Users/alvaro/.pyenv/versions/3.7.0/lib/python3.7/site-packages/javatools-1.4.0-py3.7.egg/javatools/__init__.py", line 2355, in unpack_class
    o.unpack(up, magic=magic)
  File "/Users/alvaro/.pyenv/versions/3.7.0/lib/python3.7/site-packages/javatools-1.4.0-py3.7.egg/javatools/__init__.py", line 451, in unpack
    self.cpool.unpack(unpacker)
  File "/Users/alvaro/.pyenv/versions/3.7.0/lib/python3.7/site-packages/javatools-1.4.0-py3.7.egg/javatools/__init__.py", line 203, in unpack
    item = _unpack_const_item(unpacker)
  File "/Users/alvaro/.pyenv/versions/3.7.0/lib/python3.7/site-packages/javatools-1.4.0-py3.7.egg/javatools/__init__.py", line 2093, in _unpack_const_item
    raise Unimplemented("unknown constant type %r" % typecode)
javatools.Unimplemented: unknown constant type 19

Thanks!

After rebuilding test data, 3 tests fail

After make clean all in tests/data (copying just some lines of the long output):

FAIL: test_const_pool (tests.Sample1Tests)
AssertionError: Tuples differ: ((0, (None, None)), (1, (7, 24... != ((0, (None, None)), (1, (8, 24...

FAIL: test_method_code_name (tests.Sample1Tests)
AssertionError: Tuples differ: ((0, 42, ()), (1, 180, (5,)), ... != ((0, 42, ()), (1, 180, (4,)), ...

FAIL: test_method_code_recent_name (tests.Sample1Tests)
AssertionError: Tuples differ: ((0, 178, (6,)), (3, 176, ())) != ((0, 178, (5,)), (3, 176, ()))

Is there any value in giving the user possibility to rebuild the classes? Maybe we should just throw away Makefile?

Signing with jarutil should support embedding certificate chains

Typical scenario is that JAR file is signed with some "signing" certificate, which is chaining to some "trusted CA" certificate. When the JAR is verified, only the "trusted CA" certificate is available (and configured as "trusted") to the verifying user. All other certificates, which chain the "signing" to the "trusted CA", are embedded in the signature.

jarsigner has option -certchain for embedding extra certificates. jarutil -s should be capable of this, too.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.