--- - name: Find out which elliptic curves are supported by installed OpenSSL command: openssl ecparam -list_curves register: openssl_ecc - name: Compile list of elliptic curves supported by OpenSSL set_fact: openssl_ecc_list: | {{ openssl_ecc.stdout_lines | map('regex_search', '^ *([a-zA-Z0-9_-]+) *: .*$') | select() | map('regex_replace', '^ *([a-zA-Z0-9_-]+) *: .*$', '\1') | list }} when: ansible_distribution != 'CentOS' or ansible_distribution_major_version != '6' # CentOS comes with a very old jinja2 which does not include the map() filter... - name: Compile list of elliptic curves supported by OpenSSL (CentOS 6) set_fact: openssl_ecc_list: - secp384r1 - secp521r1 - prime256v1 when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == '6' - name: List of elliptic curves supported by OpenSSL debug: var=openssl_ecc_list - name: Run module with backend autodetection openssl_privatekey: path: '{{ output_dir }}/privatekey_backend_selection.pem' - block: - name: Running tests with pyOpenSSL backend include_tasks: impl.yml vars: select_crypto_backend: pyopenssl - import_tasks: ../tests/validate.yml # FIXME: minimal pyOpenSSL version?! when: pyopenssl_version.stdout is version('0.6', '>=') - name: Remove output directory file: path: "{{ output_dir }}" state: absent - name: Re-create output directory file: path: "{{ output_dir }}" state: directory - block: - name: Running tests with cryptography backend include_tasks: impl.yml vars: select_crypto_backend: cryptography - import_tasks: ../tests/validate.yml when: cryptography_version.stdout is version('0.5', '>=') - name: Check that fingerprints do not depend on the backend block: - name: "Fingerprint comparison: pyOpenSSL" openssl_privatekey: path: '{{ output_dir }}/fingerprint-{{ item }}.pem' type: "{{ item }}" size: 1024 select_crypto_backend: pyopenssl loop: - RSA - DSA register: fingerprint_pyopenssl - name: "Fingerprint comparison: cryptography" openssl_privatekey: path: '{{ output_dir }}/fingerprint-{{ item }}.pem' type: "{{ item }}" size: 1024 select_crypto_backend: cryptography loop: - RSA - DSA register: fingerprint_cryptography - name: Verify that fingerprints match assert: that: item.0.fingerprint[item.2] == item.1.fingerprint[item.2] when: item.0 is not skipped and item.1 is not skipped loop: | {{ query('nested', fingerprint_pyopenssl.results | zip(fingerprint_cryptography.results), fingerprint_pyopenssl.results[0].fingerprint.keys() ) if fingerprint_pyopenssl.results[0].fingerprint else [] }} loop_control: label: "{{ [item.0.item, item.2] }}" when: pyopenssl_version.stdout is version('0.6', '>=') and cryptography_version.stdout is version('0.5', '>=')