Compare commits
No commits in common. "master" and "gh-pages" have entirely different histories.
33
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
@ -1,33 +0,0 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Write some steps to reproduce the behavior. Be sure to include the vant hardware required, if any.
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen. A reproducible sketch is especially helpful.
|
||||
|
||||
**Screenshots/Serial Output**
|
||||
If applicable, add screenshots or serial logs to help explain your problem.
|
||||
|
||||
**Context (please complete the following information):**
|
||||
- Device Type [e.g. ESP32]
|
||||
- Arduino Core Version [e.g. Adafruit SAMD core 1.5.3]
|
||||
- Relevant Library Versions [PubSubClient, etc.]
|
||||
- SSLClient Version [e.g. v1.2.0]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
17
.github/ISSUE_TEMPLATE/feature_request.md
vendored
|
@ -1,17 +0,0 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
14
.github/ISSUE_TEMPLATE/question.md
vendored
|
@ -1,14 +0,0 @@
|
|||
---
|
||||
name: Question
|
||||
about: Ask for clarification on this project
|
||||
title: ''
|
||||
labels: question
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your question related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
29
.github/PULL_REQUEST_TEMPLATE.md
vendored
|
@ -1,29 +0,0 @@
|
|||
# Description
|
||||
|
||||
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
|
||||
|
||||
Fixes # (issue)
|
||||
|
||||
## Type of change
|
||||
|
||||
Please uncheck options that are not relevant.
|
||||
|
||||
- [ ] Bug fix (non-breaking change which fixes an issue)
|
||||
- [ ] New feature (non-breaking change which adds functionality)
|
||||
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
||||
- [ ] This change requires a documentation update
|
||||
- [ ] I have made the appropriate changes to documentation already
|
||||
|
||||
# How Has This Been Tested?
|
||||
|
||||
Please describe the tests that you ran to verify your changes, including relevant hardware setups. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
|
||||
|
||||
- [ ] Test A
|
||||
- [ ] Test B
|
||||
|
||||
**Test Configuration**:
|
||||
* Device type:
|
||||
* SSLClient version:
|
||||
* Arduino core version:
|
||||
* Additional library versions:
|
||||
* Hardware:
|
281
.github/workflows/ci.yml
vendored
|
@ -1,281 +0,0 @@
|
|||
name: CI
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- v*
|
||||
branches-ignore:
|
||||
- gh-pages
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
ARDUINO_BOARD_MANAGER_ADDITIONAL_URLS: "https://adafruit.github.io/arduino-board-index/package_adafruit_index.json https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json"
|
||||
|
||||
jobs:
|
||||
build-examples-arduino:
|
||||
name: Arduino ${{ matrix.example }} for ${{ matrix.board.fqbn }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
example:
|
||||
- EthernetHTTPS
|
||||
- EthernetMultiHTTPS
|
||||
- EthernetMQTT
|
||||
- EthernetAWSIoT
|
||||
board:
|
||||
# Arduino Zero
|
||||
- arduino-platform: arduino:samd
|
||||
fqbn: arduino:samd:mzero_bl
|
||||
# Adafruit Feather M0
|
||||
- arduino-platform: arduino:samd adafruit:samd
|
||||
fqbn: adafruit:samd:adafruit_feather_m0
|
||||
# Arduino Due
|
||||
- arduino-platform: arduino:sam
|
||||
fqbn: arduino:sam:arduino_due_x
|
||||
# ESP32
|
||||
- arduino-platform: esp32:esp32
|
||||
fqbn: esp32:esp32:d32
|
||||
include:
|
||||
# STM32 Nucleo 144
|
||||
- board:
|
||||
arduino-platform: STM32:stm32
|
||||
fqbn: STM32:stm32:Nucleo_144:pnum=NUCLEO_F767ZI
|
||||
pio-platform: nucleo_f767zi
|
||||
example: stm32/EthernetHTTPSstm32
|
||||
steps:
|
||||
# Setup pyserial for esptool.py
|
||||
- name: Setup Python
|
||||
if: matrix.board.arduino-platform == 'esp32:esp32'
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax
|
||||
- name: Install Pyserial
|
||||
if: matrix.board.arduino-platform == 'esp32:esp32'
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install pyserial
|
||||
|
||||
# Setup Arduino-CLI
|
||||
- name: Install Arduino CLI
|
||||
uses: arduino/setup-arduino-cli@v1.1.1
|
||||
|
||||
# Install Dependencies
|
||||
- name: Install Core(s)
|
||||
run: arduino-cli core install ${{ matrix.board.arduino-platform }} -v
|
||||
- name: Install EthernetLarge
|
||||
run: git clone https://github.com/OPEnSLab-OSU/EthernetLarge.git ~/Arduino/libraries/EthernetLarge
|
||||
- name: Install Other Libraries
|
||||
run: arduino-cli lib install "STM32duino STM32Ethernet" PubSubClient -v
|
||||
|
||||
# Checkout
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
path: SSLClient
|
||||
|
||||
# Compile
|
||||
- name: Compile Sketch
|
||||
run: arduino-cli compile -v --libraries . --warnings all --fqbn ${{ matrix.board.fqbn }} SSLClient/examples/${{ matrix.example }}
|
||||
|
||||
build-examples-platformio:
|
||||
name: PIO ${{ matrix.example }} for ${{ matrix.board.pio-platform }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# Copy of the above matrix (no anchors :( )
|
||||
example:
|
||||
- EthernetHTTPS
|
||||
- EthernetMultiHTTPS
|
||||
- EthernetMQTT
|
||||
- EthernetAWSIoT
|
||||
board:
|
||||
# Arduino Zero
|
||||
- pio-platform: zeroUSB
|
||||
# Adafruit Feather M0
|
||||
- pio-platform: adafruit_feather_m0
|
||||
# Arduino Due
|
||||
- pio-platform: dueUSB
|
||||
# ESP32
|
||||
- pio-platform: lolin32
|
||||
# Teensy 4.0
|
||||
- pio-platform: teensy40
|
||||
# Teensy 3.6
|
||||
- pio-platform: teensy36
|
||||
# Teensy 3.5
|
||||
- pio-platform: teensy35
|
||||
# Teensy 3.1/3.2
|
||||
- pio-platform: teensy31
|
||||
# Teensy 3.0
|
||||
- pio-platform: teensy30
|
||||
include:
|
||||
# STM32 Nucleo 144
|
||||
- board:
|
||||
pio-platform: nucleo_f767zi
|
||||
example: stm32/EthernetHTTPSstm32
|
||||
# TIVA-C
|
||||
- board:
|
||||
pio-platform: lptm4c1294ncpdt
|
||||
extra-flags: -O "lib_deps=SPI"
|
||||
example: tivac/EthernetHTTPStivac
|
||||
steps:
|
||||
# Setup python for platformio
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax
|
||||
|
||||
# Setup PlatformIO
|
||||
- name: Install Python Dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install pyserial platformio
|
||||
|
||||
# Install Dependencies
|
||||
- name: Install Libraries
|
||||
run: |
|
||||
pio lib -g install "stm32duino/STM32duino LwIP"
|
||||
pio lib -g install stm32duino/STM32Ethernet
|
||||
pio lib -g install PubSubClient
|
||||
pio lib -g install https://github.com/OPEnSLab-OSU/EthernetLarge.git
|
||||
|
||||
# Checkout
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Compile
|
||||
- name: Compile Sketch
|
||||
run: pio ci -l . -b ${{ matrix.board.pio-platform }} ${{ matrix.board.extra-flags }} ${{ github.workspace }}/examples/${{ matrix.example }}
|
||||
|
||||
compile-archives:
|
||||
name: Compile Archives
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build-examples-arduino, build-examples-platformio]
|
||||
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
include:
|
||||
# Adafruit Feather M0
|
||||
- board:
|
||||
arduino-platform: arduino:samd adafruit:samd
|
||||
fqbn: adafruit:samd:adafruit_feather_m0
|
||||
arch: cortex-m0plus
|
||||
example: EthernetHTTPS
|
||||
# Arduino Due
|
||||
- board:
|
||||
arduino-platform: arduino:sam
|
||||
fqbn: arduino:sam:arduino_due_x
|
||||
arch: cortex-m3
|
||||
example: EthernetHTTPS
|
||||
# ESP32
|
||||
- board:
|
||||
arduino-platform: esp32:esp32
|
||||
fqbn: esp32:esp32:d32
|
||||
arch: esp32
|
||||
example: EthernetHTTPS
|
||||
# STM32
|
||||
- board:
|
||||
arduino-platform: STM32:stm32
|
||||
fqbn: STM32:stm32:Nucleo_144:pnum=NUCLEO_F767ZI
|
||||
arch: cortex-m7
|
||||
example: stm32/EthernetHTTPSstm32
|
||||
steps:
|
||||
# Setup pyserial for esptool.py
|
||||
- name: Setup Python
|
||||
if: matrix.board.arduino-platform == 'esp32:esp32'
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax
|
||||
- name: Install Pyserial
|
||||
if: matrix.board.arduino-platform == 'esp32:esp32'
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install pyserial
|
||||
|
||||
# Setup Arduino-CLI
|
||||
- name: Install Arduino CLI
|
||||
uses: arduino/setup-arduino-cli@v1.1.1
|
||||
|
||||
# Install Dependencies
|
||||
- name: Install Core(s)
|
||||
run: arduino-cli core install ${{ matrix.board.arduino-platform }} -v
|
||||
- name: Install EthernetLarge
|
||||
run: git clone https://github.com/OPEnSLab-OSU/EthernetLarge.git ~/Arduino/libraries/EthernetLarge
|
||||
- name: Install Other Libraries
|
||||
run: arduino-cli lib install "STM32duino STM32Ethernet" PubSubClient -v
|
||||
|
||||
# Checkout
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
path: SSLClient
|
||||
|
||||
# Compile with dot-a-linkage
|
||||
- name: Compile with Archive
|
||||
run: |
|
||||
echo "dot_a_linkage=true" >> SSLClient/library.properties
|
||||
arduino-cli compile -v --build-path ${{ github.workspace }}/build --libraries . --warnings all --fqbn ${{ matrix.board.fqbn }} SSLClient/examples/${{ matrix.example }}
|
||||
|
||||
# Upload as an artifact
|
||||
- name: Emit Compiled SSLClient
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ${{ matrix.board.arch }}
|
||||
path: build/libraries/SSLClient/SSLClient.a
|
||||
|
||||
generate-release:
|
||||
name: Generate Release
|
||||
runs-on: ubuntu-latest
|
||||
needs: compile-archives
|
||||
steps:
|
||||
# Checkout
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
# Build the release changelog
|
||||
- name: Build Changelog
|
||||
id: build_changelog
|
||||
uses: heineiuo/create-changelogs@master
|
||||
|
||||
# Create a release
|
||||
- name: Publish Release
|
||||
id: publish_release
|
||||
uses: actions/create-release@v1
|
||||
with:
|
||||
tag_name: ${{ github.ref }}
|
||||
release_name: ${{ github.ref }}
|
||||
body: ${{ steps.build_changelog.outputs.changelogs }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Create SSLClient-precompiled
|
||||
- name: Convert Library to Precompiled Format
|
||||
run: |
|
||||
echo "precompiled=true" >> library.properties
|
||||
rm -rf .git
|
||||
find src/ -iname "*.c" -delete
|
||||
find src/ -iname "*.cpp" -delete
|
||||
|
||||
# Download all the artifacts
|
||||
- name: Add Precompiled Artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
with:
|
||||
path: src
|
||||
|
||||
# Zip the result
|
||||
- name: Generate SSLClient-precompiled
|
||||
run: zip -r SSLClient-precompiled.zip .
|
||||
|
||||
# Upload SSLClient-precompiled.zip to the release created
|
||||
- name: Upload SSLClient-precompiled
|
||||
uses: actions/upload-release-asset@v1
|
||||
with:
|
||||
upload_url: ${{ steps.publish_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
|
||||
asset_path: ./SSLClient-precompiled.zip
|
||||
asset_name: SSLClient-precompiled.zip
|
||||
asset_content_type: application/zip
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
26
.github/workflows/docs.yml
vendored
|
@ -1,26 +0,0 @@
|
|||
name: Documentation
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
documentation:
|
||||
name: Documentation
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Build Documentation
|
||||
uses: mattnotmitt/doxygen-action@v1
|
||||
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: JamesIves/github-pages-deploy-action@3.7.1
|
||||
with:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
BRANCH: gh-pages # The branch the action should deploy to.
|
||||
FOLDER: docs # The folder the action should deploy.
|
||||
CLEAN: true # Automatically remove deleted files from the deploy branch
|
37
.gitignore
vendored
|
@ -1,37 +0,0 @@
|
|||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
*.smod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
|
||||
# vscode IDE settings
|
||||
.vscode/**
|
||||
|
||||
doxy
|
|
@ -1,76 +0,0 @@
|
|||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at open.sensing@oregonstate.edu. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
|
@ -1,19 +0,0 @@
|
|||
# Contributing
|
||||
|
||||
Thank you for contributing to SSLClient! This library is a single-person effort, so help is always appreciated.
|
||||
|
||||
There is no formal style guide, however this project does attempt to provide detailed documentation through the README and [Doxygen block comments](https://www.doxygen.nl/manual/docblocks.html) which are highly encouraged. If you get stuck or have a question, please feel free to [submit an issue](https://github.com/OPEnSLab-OSU/SSLClient/issues/new?assignees=&labels=question&template=question.md&title=). Below are some resources to get you started:
|
||||
* **TLS**
|
||||
* [How does SSL work? (StackOverflow)](https://security.stackexchange.com/questions/20803/how-does-ssl-tls-work)
|
||||
* [What happens in a TLS handshake? (Cloudflare)](https://www.cloudflare.com/learning/ssl/what-happens-in-a-tls-handshake/)
|
||||
* [What is mTLS? (wott.io)](https://wott.io/blog/tutorials/2019/09/09/what-is-mtls)
|
||||
* **BearSSL**
|
||||
* [BearSSL Homepage](https://bearssl.org/)
|
||||
* [BearSSL TLS API Overview](https://bearssl.org/api1.html) (SSLClient uses the Generic I/O version ot the API).
|
||||
* [BearSSL Certificate API Overview](https://bearssl.org/x509.html) (SSLClient uses the Minimal Engine)
|
||||
* [BearSSL Doxygen](https://bearssl.org/apidoc/index.html)
|
||||
* **SSLClient**
|
||||
* [README](./README.md)
|
||||
* [Trust Anchors Overview](./TrustAnchors.md)
|
||||
* [Known ESP32 Issue with PubSubClient](https://github.com/OPEnSLab-OSU/SSLClient/issues/9)
|
||||
* [Known ESP8266 Issue with any TLS Connection](https://github.com/OPEnSLab-OSU/SSLClient/issues/5)
|
674
LICENSE
|
@ -1,674 +0,0 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
292
README.md
|
@ -1,292 +0,0 @@
|
|||
# SSLClient
|
||||
|
||||
![CI](https://github.com/OPEnSLab-OSU/SSLClient/workflows/CI/badge.svg)
|
||||
|
||||
SSLClient adds [TLS 1.2](https://www.websecurity.symantec.com/security-topics/what-is-ssl-tls-https) functionality to any network library implementing the [Arduino Client interface](https://www.arduino.cc/en/Reference/ClientConstructor), including the Arduino [EthernetClient](https://www.arduino.cc/en/Reference/EthernetClient) and [WiFiClient](https://www.arduino.cc/en/Reference/WiFiClient) classes. SSLClient was created to integrate TLS seamlessly with the Arduino infrastructure using [BearSSL](https://bearssl.org/) as an underlying TLS engine. Unlike [ArduinoBearSSL](https://github.com/arduino-libraries/ArduinoBearSSL), SSLClient is completly self-contained, and does not require any additional hardware (other than a network connection).
|
||||
|
||||
SSLClient officially supports SAMD21, SAM3X, ESP32, TIVA C, STM32F7, and Teensy >= 3.0; but it should work on any board with at least 110kB flash and 7kB RAM. SSClient does not currently support ESP8266 (see [this issue](https://github.com/OPEnSLab-OSU/SSLClient/issues/5#issuecomment-569968546)) or AVR due to memory constraints on both platforms.
|
||||
|
||||
You can also view this README in [doxygen](https://openslab-osu.github.io/SSLClient/index.html).
|
||||
|
||||
## Overview
|
||||
|
||||
Using SSLClient is similar to using any other Arduino-based Client class, as this library was developed around compatibility with [EthernetClient](https://www.arduino.cc/en/Reference/EthernetClient). There are a few extra things, however, that you will need to get started:
|
||||
|
||||
1. **Board and Network Peripheral** - Your board should have a lot of resources (>110kB flash and >7kB RAM), and your network peripheral should have a large internal buffer (>7kB). This library was tested with the [Adafruit Feather M0](https://www.adafruit.com/product/2772) (256K flash, 32K RAM) and the [Adafruit Ethernet Featherwing](https://www.adafruit.com/product/3201) (16kB Buffer), and we still had to modify the Arduino Ethernet library to support larger internal buffers per socket (see the [Implementation Gotchas](#sslclient-with-ethernet)).
|
||||
2. **Trust Anchors** - You will need a header containing array of trust anchors ([example](./readme/cert.h)), which are used to verify the SSL connection later on. **This file must generated for every project.** Check out [TrustAnchors.md](./TrustAnchors.md#generating-trust-anchors) on how to generate this file for your project, and for more information about what a trust anchor is.
|
||||
3. **Network Peripheral Driver Implementing `Client`** - Examples include `EthernetClient`, `WiFiClient`, and so on—SSLClient will run on top of any network driver exposing the `Client` interface.
|
||||
4. **Analog Pin** - Used for generating random data at the start of the connection (see the [Implementation Gotchas](#implementation-gotchas)).
|
||||
|
||||
Once all those are ready, you can create an SSLClient object like this:
|
||||
```C++
|
||||
BaseClientType baseClientInstance;
|
||||
SSLClient client(baseClientInstance, TAs, (size_t)TAs_NUM, AnalogPin);
|
||||
```
|
||||
Where:
|
||||
* BaseClientType - The type of baseClientInstance
|
||||
* BaseClientInstance - An instance of the class you are using for SSLClient (the class associated with the network interface, from step 3). It is important that this instance be stored *outside* the SSLClient declaration (for instance, `SSLClient(BaseClientType() ...)` wouldn't work).
|
||||
* TAs - The name of the trust anchor array created in step 2. If you generated a header using the tutorial this will probably be `TAs`.
|
||||
* TAs_NUM - The number of trust anchors in TAs. If you generated a header using the tutorial this will probably be `TAs_NUM`.
|
||||
* AnalogPin - The analog pin to pull random data from (step 4).
|
||||
|
||||
For example, if I am using EthernetClient, a generated array of 2 trust anchors, and the analog pin A7, I would declare an SSLClient instance using:
|
||||
```C++
|
||||
EthernetClient baseClient;
|
||||
SSLClient client(baseClient, TAs, 2, A7);
|
||||
```
|
||||
Given this client, simply use SSLClient as you would the base client class:
|
||||
```C++
|
||||
// connect to ardiuino.cc over ssl (port 443 for websites)
|
||||
client.connect("www.arduino.cc", 443);
|
||||
// Make a HTTP request
|
||||
client.println("GET /asciilogo.txt HTTP/1.1");
|
||||
client.println("User-Agent: AdafruitFeatherM0WiFi");
|
||||
client.print("Host: ");
|
||||
client.println(server);
|
||||
client.println("Connection: close");
|
||||
client.println();
|
||||
client.flush();
|
||||
// read and print the data
|
||||
...
|
||||
```
|
||||
**Note**: `client.connect("www.arduino.cc", 443)` can take 5-15 seconds to finish on some low-power devices. This an unavoidable consequence of the SSL protocol, and is detailed more in [Implementation Gotchas](#resources).
|
||||
|
||||
For more information on SSLClient, check out the [examples](./examples), [API documentation](https://openslab-osu.github.io/SSLClient/html/index.html), or the rest of this README.
|
||||
|
||||
## Other Features
|
||||
|
||||
### Logging
|
||||
SSLClient also allows for changing the debugging level by adding an additional parameter to the constructor:
|
||||
```C++
|
||||
EthernetClient baseClient;
|
||||
SSLClient client(baseClient, TAs, (size_t)2, A7, 1, SSLClient::SSL_INFO);
|
||||
```
|
||||
Logging is always outputted through the [Arduino Serial interface](https://www.arduino.cc/reference/en/language/functions/communication/serial/), so you'll need to setup Serial before you can view the SSL logs. Log levels are enumerated in ::DebugLevel. The log level is set to `SSL_WARN` by default.
|
||||
|
||||
### Errors
|
||||
When SSLClient encounters an error, it will attempt to terminate the SSL session gracefully if possible, and then close the socket. Simple error information can be found from SSLClient::getWriteError, which will return a value from the ::Error enum. For more detailed diagnostics, you can look at the serial logs, which will be displayed if the log level is at `SSL_ERROR` or lower.
|
||||
|
||||
### Write Buffering
|
||||
As you may have noticed in the documentation for SSLClient::write, calling this function does not actually write to the network. Instead, you must call SSLClient::available or SSLClient::flush, which will detect that the buffer is ready and write to the network (see SSLClient::write for details).
|
||||
|
||||
This was implemented as a buffered function because examples in Arduino libraries will often write to the network like so:
|
||||
```C++
|
||||
EthernetClient client;
|
||||
// ...
|
||||
// connect to ardiuino.cc over ssl (port 443 for websites)
|
||||
client.connect("www.arduino.cc", 443);
|
||||
// ...
|
||||
// write an http request to the network
|
||||
client.write("GET /asciilogo.txt HTTP/1.1\r\n");
|
||||
client.write("Host: arduino.cc\r\n");
|
||||
client.write("Connection: close\r\n");
|
||||
// wait for response
|
||||
while (!client.available()) { /* ... */ }
|
||||
// ...
|
||||
```
|
||||
Notice that every single `client.write()` call immediately writes to the network. This behavior is fine for most network clients; with SSL, however, it results in many small encryption tasks that consume resources. To reduce the overhead of an SSL connection, SSLClient::write implicitly buffers until the developer states that they are waiting for data to be received with SSLClient::available. A simple example can be found below:
|
||||
|
||||
```C++
|
||||
EthernetClient baseClient;
|
||||
SSLClient client(baseClient, TAs, (size_t)2, A7);
|
||||
// ...
|
||||
// connect to ardiuino.cc over ssl (port 443 for websites)
|
||||
client.connect("www.arduino.cc", 443);
|
||||
// ...
|
||||
// add http request to the buffer
|
||||
client.write("GET /asciilogo.txt HTTP/1.1\r\n");
|
||||
client.write("Host: arduino.cc\r\n");
|
||||
client.write("Connection: close\r\n");
|
||||
// write the bytes to the network, then wait for response
|
||||
while (!client.available()) { /* ... */ }
|
||||
// ...
|
||||
```
|
||||
|
||||
If you would like to trigger a network write manually without using the SSLClient::available, you can also call SSLClient::flush, which will write all data and return when finished.
|
||||
|
||||
### Session Caching
|
||||
As detailed in the [resources section](#resources), SSL handshakes take an extended period (1-4sec) to negotiate. BearSSL is able to keep a [SSL session cache](https://bearssl.org/api1.html#session-cache) of the clients it has connected to which can drastically reduce this time: if BearSSL successfully resumes an SSL session, connection time is typically 100-500ms.
|
||||
|
||||
In order to use SSL session resumption:
|
||||
* The website you are connecting to must support it. Support is widespread, and you can verify it using [SSLLabs](https://www.ssllabs.com/ssltest/).
|
||||
* You must reuse the same SSLClient object (SSL Sessions are stored in the object itself).
|
||||
* You must reconnect to the exact same server (detailed below).
|
||||
|
||||
> NOTE: SSLClient automatically stores an IP address and hostname in each session, ensuring that if you call `connect("www.google.com")` SSLClient will use the same SSL session for that hostname. Unfortunately some websites have multiple servers on a single IP address (github.com being an example), so you may find that even if you are connecting to the same host the connection will not resume. This is a flaw in the SSL session protocol—though it has been resolved in TLS 1.3, the lack of widespread adoption of the new protocol prevents it from being resolved here.
|
||||
>
|
||||
> SSL sessions can also expire based on server criteria (ex. timeout), which will result in a standard 4-10 second connection.
|
||||
|
||||
SSL sessions take memory to store, so by default SSLClient will only store one at a time. You can change this behavior by adding the following to your SSLClient declaration:
|
||||
```C++
|
||||
EthernetClient baseClient;
|
||||
SSLClient client(baseClient, TAs, (size_t)2, A7, SomeNumber);
|
||||
```
|
||||
Where `SomeNumber` is the number of sessions you would like to store. For example this declaration can store 3 sessions:
|
||||
```C++
|
||||
EthernetClient baseClient;
|
||||
SSLClient client(baseClient, TAs, (size_t)2, A7, 3);
|
||||
```
|
||||
Sessions are managed internally using the SSLSession::getSession function. This function will cycle through sessions in a rotating order, allowing the session cache to continually overwrite old sessions. In general, it is a good idea to use a SessionCache size equal to the number of domains you plan on connecting to.
|
||||
|
||||
If you need to clear a session, you can do so using the SSLSession::removeSession function.
|
||||
|
||||
### mTLS
|
||||
|
||||
As of `v1.6.0`, SSLClient supports [mutual TLS authentication](https://developers.cloudflare.com/access/service-auth/mtls/). mTLS is a varient of TLS that verifies both the server and device identities before a connection, and is commonly used in IoT protocols as a secure layer (MQTT over TLS, HTTP over TLS, etc.).
|
||||
|
||||
To use mTLS with SSLClient you will need to a client certificate and client private key associated with the server you are attempting to connect to. Depending on your use case, you will either generate these yourself (ex. [Mosquito MQTT setup](http://www.steves-internet-guide.com/creating-and-using-client-certificates-with-mqtt-and-mosquitto/)), or have them generated for you (ex. [AWS IoT Certificate Generation](https://docs.aws.amazon.com/iot/latest/developerguide/create-device-certificate.html)). Given this cryptographic information, you can modify the standard SSLClient connection sketch to enable mTLS authentication:
|
||||
```C++
|
||||
...
|
||||
/* Somewhere above setup() */
|
||||
|
||||
// The client certificate, can be PEM or DER format
|
||||
// DER format will be an array of raw bytes, and PEM format will be a string
|
||||
// PEM format is shown below
|
||||
const char my_cert[] =
|
||||
"-----BEGIN CERTIFICATE-----\n"
|
||||
"MIIDpDCCAowCCQC7mCk5Iu3YmDANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UEBhMC\n"
|
||||
...
|
||||
"-----END CERTIFICATE-----\n";
|
||||
|
||||
// The client private key, must be the same format as the client certificate
|
||||
// Both RSA and ECC are supported, ECC is shown below
|
||||
const char my_key[] =
|
||||
"-----BEGIN EC PRIVATE KEY-----\n"
|
||||
...
|
||||
"-----END EC PRIVATE KEY-----\n";
|
||||
|
||||
// This line will parse and store the above information so SSLClient can use it later
|
||||
// Replace `fromPEM` with `fromDER` if you are using DER formatted certificates.
|
||||
SSLClientParameters mTLS = SSLClientParameters::fromPEM(my_cert, sizeof(cert), my_key, sizeof(key));
|
||||
SSLClient my_client(...);
|
||||
...
|
||||
void setup() {
|
||||
...
|
||||
/* Before SSLClient connects */
|
||||
|
||||
my_client.setMutualAuthParams(mTLS);
|
||||
...
|
||||
}
|
||||
...
|
||||
```
|
||||
|
||||
> NOTE: Certificates are finicky, and it is easy to make mistakes when generating a certificate chain yourself. If SSLClient raises an error that says `Expected server name not found in chain`, double check that the common name, distinguished name, and issuer name are being set correctly (check out [this article](https://medium.com/@superseb/get-your-certificate-chain-right-4b117a9c0fce) for how to do that).
|
||||
|
||||
The client certificate must be formatted correctly (according to [BearSSL's specification](https://bearssl.org/apidoc/bearssl__pem_8h.html)) in order for mTLS to work. If the certificate is improperly formatted, SSLClient will attempt to make a regular TLS connection instead of an mTLS one, and fail to connect as a result. Because of this, if you are seeing errors similar to `"peer did not send certificate chain"` on your server, check that your certificate and key are formatted correctly (see https://github.com/OPEnSLab-OSU/SSLClient/issues/7#issuecomment-593704969). For more information on SSLClient's mTLS functionality, please see the [SSLClientParameters documentation](https://openslab-osu.github.io/SSLClient/class_s_s_l_client_parameters.html).
|
||||
|
||||
Note that both the above client certificate information *as well as* the correct trust anchors associated with the server are needed for the connection to succeed. Trust anchors will typically be generated from the CA used to generate the server certificate. More information on generating trust anchors can be found in [TrustAnchors.md](./TrustAnchors.md).
|
||||
|
||||
## Implementation Gotchas
|
||||
|
||||
Some ideas that didn't quite fit in the API documentation.
|
||||
|
||||
### SSLClient with Ethernet
|
||||
If you are using the [Arduino Ethernet library](https://github.com/arduino-libraries/Ethernet) you will need to modify the library to support the large buffer sizes required by SSL (detailed in [resources](#resources)). You can either modify the library yourself, or use [this fork of the Ethernet library with the modification](https://github.com/OPEnSLab-OSU/EthernetLarge). To use the fork: download a zipped copy of the fork through GiThub, use the "add a .zip library" button in Arduino to install the library, and replace `#include "Ethernet.h"` with `#include "EthernetLarge.h"` in your sketch. Alternatively if for some reason this solution does not work, you can apply the modification manually using the instructions below.
|
||||
|
||||
#### Manual Modification
|
||||
|
||||
First find the location of the library in the directory where Arduino is installed (`C:\Program Files (x86)\Arduino` on Windows). Inside of this directory, navigate to `libraries\Ethernet\src` (`C:\Program Files (x86)\Arduino\libraries\Ethernet\src` on Windows). Modify `Ethernet.h` to replace these lines:
|
||||
```C++
|
||||
...
|
||||
// Configure the maximum number of sockets to support. W5100 chips can have
|
||||
// up to 4 sockets. W5200 & W5500 can have up to 8 sockets. Several bytes
|
||||
// of RAM are used for each socket. Reducing the maximum can save RAM, but
|
||||
// you are limited to fewer simultaneous connections.
|
||||
#if defined(RAMEND) && defined(RAMSTART) && ((RAMEND - RAMSTART) <= 2048)
|
||||
#define MAX_SOCK_NUM 4
|
||||
#else
|
||||
#define MAX_SOCK_NUM 8
|
||||
#endif
|
||||
|
||||
// By default, each socket uses 2K buffers inside the Wiznet chip. If
|
||||
// MAX_SOCK_NUM is set to fewer than the chip's maximum, uncommenting
|
||||
// this will use larger buffers within the Wiznet chip. Large buffers
|
||||
// can really help with UDP protocols like Artnet. In theory larger
|
||||
// buffers should allow faster TCP over high-latency links, but this
|
||||
// does not always seem to work in practice (maybe Wiznet bugs?)
|
||||
//#define ETHERNET_LARGE_BUFFERS
|
||||
...
|
||||
```
|
||||
With this:
|
||||
```C++
|
||||
...
|
||||
// Configure the maximum number of sockets to support. W5100 chips can have
|
||||
// up to 4 sockets. W5200 & W5500 can have up to 8 sockets. Several bytes
|
||||
// of RAM are used for each socket. Reducing the maximum can save RAM, but
|
||||
// you are limited to fewer simultaneous connections.
|
||||
#define MAX_SOCK_NUM 2
|
||||
|
||||
// By default, each socket uses 2K buffers inside the Wiznet chip. If
|
||||
// MAX_SOCK_NUM is set to fewer than the chip's maximum, uncommenting
|
||||
// this will use larger buffers within the Wiznet chip. Large buffers
|
||||
// can really help with UDP protocols like Artnet. In theory larger
|
||||
// buffers should allow faster TCP over high-latency links, but this
|
||||
// does not always seem to work in practice (maybe Wiznet bugs?)
|
||||
#define ETHERNET_LARGE_BUFFERS
|
||||
...
|
||||
```
|
||||
You may need to use `sudo` or administrator permissions to make this modification. We change `MAX_SOCK_NUM` and `ETHERNET_LARGE_BUFFERS` so the Ethernet hardware can allocate a larger space for SSLClient, however a downside of this modification is we are now only able to have two sockets concurrently. As most microprocessors barely have enough memory for one SSL connection, this limitation will rarely be encountered in practice.
|
||||
|
||||
### Seeding Random Data
|
||||
The SSL protocol requires that SSLClient generate some random bits before connecting with a server. BearSSL provides a random number generator but requires a [some entropy for a seed](https://bearssl.org/apidoc/bearssl__ssl_8h.html#a7d8e8de2afd49d6794eae02f56f81152). Normally this seed is generated by taking the microsecond time using the internal clock, however since most microcontrollers are not build with this feature another source must be found. As a simple solution, SSLClient uses a floating analog pin as an external source of random data, passed through to the constructor in the `analog_pin` argument. Before every connection, SSLClient will take the bottom byte from 16 analog reads on `analog_pin`, and combine these bytes into a 16 byte random number, which is used as a seed for BearSSL. To ensure the most random data, it is recommended that this analog pin be either floating or connected to a location not modifiable by the microcontroller (i.e. a battery voltage readout).
|
||||
|
||||
### Certificate Verification
|
||||
SSLClient uses BearSSL's [minimal x509 verification engine](https://bearssl.org/x509.html#the-minimal-engine) to verify the certificate of an SSL connection. This engine requires the developer create a trust anchor array using values stored in trusted root certificates. Check out [this document](./TrustAnchors.md) for more details on this component of SSLClient.
|
||||
|
||||
BearSSL also features a [known certificate validation engine](https://bearssl.org/x509.html#the-known-key-engine), which only allows for a single domain in exchange for a significantly reduced resource usage (flash and CPU time). This functionality is planned to be implemented in the future.
|
||||
|
||||
#### Time
|
||||
The minimal x509 verification engine requires an accurate source of time to properly verify the creation and expiration dates of a certificate. As most embedded devices do not have a reliable source of time, by default SSLClient opts to use the compilation timestamp ([`__DATE__` and `__TIME__`](https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html)) as the "current time" during the verification process. While this approach reduces the complexity of using SSLClient, it is inherently insecure, and can cause errors if certificates are redeployed (see [#27](https://github.com/OPEnSLab-OSU/SSLClient/issues/27)): to accommodate these edge cases, SSLClient::setVerificationTime can be used to update the timestamp before connecting, resolving the above issues.
|
||||
|
||||
### Resources
|
||||
The SSL/TLS protocol recommends a device support many different encryption and handshake algorithms. The complexity of these components results in many medium-footprint algorithms forming an extremely large whole. Compilation size of the [EthernetHTTPS](examples/EthernetHTTPS/EthernetHTTPS.ino) example in SSLClient `v1.6.11` for various boards is shown below:
|
||||
|
||||
| Board | Size
|
||||
| :--- | :--- |
|
||||
| Arduino Zero | <pre>`RAM: [=== ] 33.7% (used 11052 bytes from 32768 bytes)`<br/>`Flash: [=== ] 34.7% (used 90988 bytes from 262144 bytes)`</pre> |
|
||||
| Arduino Due | <pre>`RAM: [= ] 11.7% (used 11548 bytes from 98304 bytes)`<br/>`Flash: [== ] 16.7% (used 87572 bytes from 524288 bytes)`</pre> |
|
||||
| Adafruit Feather M0 | <pre>`RAM: [==== ] 40.4% (used 13240 bytes from 32768 bytes)`<br/>`Flash: [==== ] 40.0% (used 104800 bytes from 262144 bytes)`</pre> |
|
||||
| ESP32 (Lolin32) | <pre>`RAM: [= ] 6.9% (used 22476 bytes from 327680 bytes)`<br/>`Flash: [== ] 24.0% (used 314956 bytes from 1310720 bytes)`</pre> |
|
||||
| Teensy 3.0 | <pre>`RAM: [======== ] 78.2% (used 12812 bytes from 16384 bytes)`<br/>`Flash: [======== ] 79.8% (used 104532 bytes from 131072 bytes)`</pre> |
|
||||
| Teensy 3.1 | <pre>`RAM: [== ] 19.9% (used 13020 bytes from 65536 bytes)`<br/>`Flash: [==== ] 40.6% (used 106332 bytes from 262144 bytes)`</pre> |
|
||||
| Teensy 3.5 | <pre>`RAM: [ ] 5.0% (used 12996 bytes from 262136 bytes)`<br/>`Flash: [== ] 20.1% (used 105476 bytes from 524288 bytes)`</pre>
|
||||
| Teensy 3.6 | <pre>`RAM: [ ] 5.0% (used 13060 bytes from 262144 bytes)`<br/>`Flash: [= ] 10.2% (used 106828 bytes from 1048576 bytes)`</pre> |
|
||||
| Teensy 4.0 | <pre>`RAM: [=== ] 25.9% (used 135860 bytes from 524288 bytes)`<br/>`Flash: [= ] 5.7% (used 115344 bytes from 2031616 bytes)`</pre> |
|
||||
|
||||
In addition to the above, most embedded processors lack the sophisticated math hardware commonly found in a modern CPU, which results in slow and memory intensive execution of these algorithms. Because of this, it is recommended that SSLClient have 8kb of memory available on the stack during a connection, and 4-10 seconds should be allowed for the connection to complete. Note that this requirement is based on the SAMD21—more powerful processors (such as the ESP32) will see faster connection times.
|
||||
|
||||
> NOTE: If flash footprint is becoming a problem, there are numerous debugging strings (~3kB estimated) that can be removed from `SSLClient.h`, `SSLClientImpl.h`, and `SSLClientImpl.cpp`. Unfortunately I have not figured out a way to configure compilation of these strings, so you will need to modify the library to remove them yourself.
|
||||
|
||||
### Read Buffer Overflow
|
||||
SSL is a buffered protocol, and since most microcontrollers have limited resources (see [Resources](#resources)), SSLClient is limited in the size of its buffers. A common problem I encountered with SSL connections is buffer overflow caused by the server sending too much data at once. This problem is caused by the microcontroller being unable to copy and decrypt data faster than it is being received—forcing some data to be discarded. This usually puts BearSSL in an unrecoverable state, forcing SSLClient to close the connection with a write error. If you are experiencing frequent timeout problems this could be the reason why.
|
||||
|
||||
In order to remedy this problem, the device must be able to read the data faster than it is being received or have a cache large enough to store the entire payload. Since the device is typically already reading as fast as it can, we must increase the cache size in order to resolve this issue. Depending on your platform there are a number of ways this can be done:
|
||||
* Sometimes your communication shield will have an internal buffer which can be expanded through the driver code: this is the case with the Arduino Ethernet library (in the form of the `MAX_SOCK_NUM` and `ETHERNET_LARGE_BUFFERS` macros show [here](#manual-modification)), but mileage may vary with other drivers.
|
||||
* SSLClient has an internal buffer SSLClient::m_iobuf which can be expanded. Unfortunately, BearSSL limits the amount of data that can be put into the buffer based on the stage in the SSL handshake, and so increasing the buffer will have limited usefulness.
|
||||
* In some cases, a website will send so much data that even with the above solutions SSLClient will be unable to keep up. In these cases you will have to find another method of retrieving the data you need.
|
||||
* If none of the above are viable, it is possible to implement your own Client class which has an internal buffer much larger than both the driver and BearSSL. This implementation would require in-depth knowledge of communication shield you are working with and a microcontroller with a significant amount of RAM, but would be the most robust solution available.
|
||||
|
||||
### Cipher Support
|
||||
By default, SSLClient supports only TLS1.2 and the ciphers listed in [this file](./src/TLS12_only_profile.c) under `suites[]`, and the list is relatively small to keep the connection secure and the flash footprint down. These ciphers should work for most applications, however if for some reason you would like to use an older version of TLS or a different cipher you can change the BearSSL profile being used by SSLClient to an [alternate one with support for older protocols](./src/bearssl/src/ssl/ssl_client_full.c). To do this, edit `SSLClientImpl::SSLClientImpl` to change these lines:
|
||||
```C++
|
||||
br_client_init_TLS12_only(&m_sslctx, &m_x509ctx, m_trust_anchors, m_trust_anchors_num);
|
||||
// comment the above line and uncomment the line below if you're having trouble connecting over SSL
|
||||
// br_ssl_client_init_full(&m_sslctx, &m_x509ctx, m_trust_anchors, m_trust_anchors_num);
|
||||
```
|
||||
to this:
|
||||
```C++
|
||||
// br_client_init_TLS12_only(&m_sslctx, &m_x509ctx, m_trust_anchors, m_trust_anchors_num);
|
||||
// comment the above line and uncomment the line below if you're having trouble connecting over SSL
|
||||
br_ssl_client_init_full(&m_sslctx, &m_x509ctx, m_trust_anchors, m_trust_anchors_num);
|
||||
```
|
||||
If for some unfortunate reason you need SSL 3.0 or SSL 2.0, you will need to modify the BearSSL profile to enable support. Check out the [BearSSL profiles documentation](https://bearssl.org/api1.html#profiles) and I wish you the best of luck.
|
||||
|
||||
### Security
|
||||
Unlike BearSSL, SSLClient is not rigorously vetted to be secure. If your project has security requirements I recommend you utilize BearSSL directly.
|
||||
|
||||
### Known Issues
|
||||
* In some drivers (Ethernet), calls to `Client::flush` will hang if internet is available but there is no route to the destination. Unfortunately SSLClient cannot correct for this without modifying the driver itself, and as a result the recommended solution is ensuring you choose a driver with built-in timeouts to prevent freezing. [More information here](https://github.com/OPEnSLab-OSU/SSLClient/issues/13#issuecomment-643855923).
|
||||
* Previous to SSLClient `v1.6.11`, `SSLClient::write` would sometimes call `br_ssl_engine_sendapp_ack` with zero bytes, which resulted in a variety of issues including (but not limited to) and infinite recursion loop on the esp32 ([#9](https://github.com/OPEnSLab-OSU/SSLClient/issues/9), [#30](https://github.com/OPEnSLab-OSU/SSLClient/issues/30)).
|
||||
* Previous to SSLClient `v1.6.7`, calls to `SSLClient::stop` would sometimes hang the device. More information in issue https://github.com/OPEnSLab-OSU/SSLClient/issues/13.
|
||||
* Previous to SSLClient `v1.6.6`, calls to `SSLClient::connect` would fail if the driver indicated that a socket was already opened (`Client::connected` returned true). This behavior created unintentional permanent failures when `Client::stop` would fail to close the socket, and as a result was downgraded to a warning in v1.6.6.
|
||||
* Previous to SSLClient `v1.6.3`, calling `SSLClient::write` with more than 2kB of total data before flushing the write buffer would cause a buffer overflow.
|
|
@ -1,68 +0,0 @@
|
|||
# Trust Anchors
|
||||
## Background
|
||||
|
||||
SSLClient uses BearSSL's [minimal x509 verification engine](https://bearssl.org/x509.html#the-minimal-engine) to verify the certificate of an SSL connection. This engine requires the developer create a trust anchor array using values stored in trusted root certificates. In short, these trust anchor arrays allow BearSSL to verify that the server being connected to is who they say they are, and not someone malicious. You can read more about certificates and why they are important [here](https://www.globalsign.com/en/ssl-information-center/what-is-an-ssl-certificate/).
|
||||
|
||||
SSLClient stores trust anchors in hardcoded constant variables, passed into `SSLClient::SSLClient` during setup. These constants are generally stored in their own header file as found in [the BearSSL docs](https://bearssl.org/api1.html#profiles). This header file will look something like:
|
||||
```C++
|
||||
#define TAs_NUM 1
|
||||
|
||||
static const unsigned char TA_DN0[] = {
|
||||
// lots of raw bytes here
|
||||
// ...
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_N0[] = {
|
||||
// lots of raw bytes here
|
||||
//...
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_E0[] = {
|
||||
// 1-3 bytes here
|
||||
};
|
||||
|
||||
static const br_x509_trust_anchor TAs[] = {
|
||||
{
|
||||
{ (unsigned char *)TA_DN0, sizeof TA_DN0 },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ .rsa = {
|
||||
(unsigned char *)TA_RSA_N0, sizeof TA_RSA_N0,
|
||||
(unsigned char *)TA_RSA_E0, sizeof TA_RSA_E0,
|
||||
} }
|
||||
}
|
||||
},
|
||||
};
|
||||
```
|
||||
A full example of a trust anchor header can be found in [this file](./readme/cert.h). Full documentation for the format of these variables can be found in the [BearSSL documentation for br_x509_trust_anchor](https://bearssl.org/apidoc/structbr__x509__trust__anchor.html).
|
||||
|
||||
|
||||
|
||||
## Generating Trust Anchors
|
||||
|
||||
Typically a trust anchor header file is generated using [brssl](https://bearssl.org/gitweb/?p=BearSSL;a=tree;f=tools;h=0fa053e41d6bf88a28472f3b22dde41b21f14292;hb=dda1f8a0c46e15b4a235163470ff700b2f13dcc5), a command-line utility included in BearSSL. As it is a fairly involded process to get brssl working, SSLClient provides a number of alternative tools to make the generation process a bit easier.
|
||||
|
||||
**Note:** When working with certificates (particularly in complicated mTLS setups), it can easily become confusing which certificate does what. If you aren't sure what certificate to put into the Trust Anchor tool, remember that Trust Anchors *only care about the verifying the server*: in other words, the certificate that goes into a Trust Anchor generation tool should be the certificate used to generate the server's certificate (usually a CA). Trust Anchors will never contain any information about client certificates, which should be passed into [SSLClientParams](https://github.com/OPEnSLab-OSU/SSLClient#mtls) instead.
|
||||
|
||||
### HTTPS
|
||||
|
||||
For HTTPS, there a couple of tools you can use. Ordered from easiest to hardest:
|
||||
* This website, written to simplify the creation of trust anchor headers: https://openslab-osu.github.io/bearssl-certificate-utility/. Simply plug and play.
|
||||
* [pycert_bearssl](./tools/pycert_bearssl/pycert_bearssl.py), a command line utility based on a [pycert](https://learn.adafruit.com/introducing-the-adafruit-wiced-feather-wifi/pycert-dot-py). You will need to install Python 3, and follow the instructions in the [pycert_bearssl.py file](./tools/pycert_bearssl/pycert_bearssl.py). You'll want to use the `pycert_bearssl.py download` command once the utility is set up.
|
||||
* The `brssl` command line utility, included in the [BearSSL source](https://bearssl.org/gitweb/?p=BearSSL;a=blob_plain;f=tools/brssl.h;hb=HEAD). You will need to compile this file yourself.
|
||||
|
||||
### Other Connections
|
||||
|
||||
For other kinds of SSL connections, you will need to find the root certificate being used by your host. You can check out [this StackExchange post](https://superuser.com/questions/97201/how-to-save-a-remote-server-ssl-certificate-locally-as-a-file) for numerous methods of acquiring this certificate from a server. If these methods are not sufficient, you may need to request this certificate from your network administrator. Once you have the certificate, convert it to PEM format if needed (I use [this website](https://www.sslshopper.com/ssl-converter.html)), and use the `pycert_bearssl.py convert --no-search` command to convert the certificate into a trust anchor header.
|
||||
|
||||
## Using Trust Anchors
|
||||
|
||||
Once you've generated a trust anchor array, add it to your Arduino sketch using the `Sketch->Add File` button in the Arduino IDE, and link it to your SSLClient like so:
|
||||
```C++
|
||||
#include "yourtrustanchorfile.h"
|
||||
// ...
|
||||
SSLClient client(SomeClient, TAs, (size_t)TAs_NUM, SomePin);
|
||||
// ...
|
||||
```
|
||||
Where `yourtrustanchorfile.h` contains a generated trust anchor array names `TAs`, with length `TAs_NUM`. BearSSL will now automatically use these trust anchors when `SSLClient::connect` is called.
|
99
_c_o_d_e___o_f___c_o_n_d_u_c_t_8md.html
Normal file
|
@ -0,0 +1,99 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: CODE_OF_CONDUCT.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('_c_o_d_e___o_f___c_o_n_d_u_c_t_8md.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">CODE_OF_CONDUCT.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="_c_o_d_e___o_f___c_o_n_d_u_c_t_8md.html">CODE_OF_CONDUCT.md</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
99
_c_o_n_t_r_i_b_u_t_i_n_g_8md.html
Normal file
|
@ -0,0 +1,99 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: CONTRIBUTING.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('_c_o_n_t_r_i_b_u_t_i_n_g_8md.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">CONTRIBUTING.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="_c_o_n_t_r_i_b_u_t_i_n_g_8md.html">CONTRIBUTING.md</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
99
_r_e_a_d_m_e_8md.html
Normal file
|
@ -0,0 +1,99 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: README.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('_r_e_a_d_m_e_8md.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">README.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="_r_e_a_d_m_e_8md.html">README.md</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
100
_s_s_l_client_8cpp.html
Normal file
|
@ -0,0 +1,100 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: src/SSLClient.cpp File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('_s_s_l_client_8cpp.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">SSLClient.cpp File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><code>#include "<a class="el" href="_s_s_l_client_8h_source.html">SSLClient.h</a>"</code><br />
|
||||
</div></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="_s_s_l_client_8cpp.html">SSLClient.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
114
_s_s_l_client_8h.html
Normal file
|
@ -0,0 +1,114 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: src/SSLClient.h File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('_s_s_l_client_8h.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#nested-classes">Classes</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">SSLClient.h File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><code>#include "Client.h"</code><br />
|
||||
<code>#include "<a class="el" href="_s_s_l_session_8h_source.html">SSLSession.h</a>"</code><br />
|
||||
<code>#include "<a class="el" href="_s_s_l_client_parameters_8h_source.html">SSLClientParameters.h</a>"</code><br />
|
||||
<code>#include <vector></code><br />
|
||||
</div>
|
||||
<p><a href="_s_s_l_client_8h_source.html">Go to the source code of this file.</a></p>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||||
Classes</h2></td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td></tr>
|
||||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The main <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> class. Check out <a class="el" href="_r_e_a_d_m_e_8md.html">README.md</a> for more info. <a href="class_s_s_l_client.html#details">More...</a><br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="_s_s_l_client_8h.html">SSLClient.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
310
_s_s_l_client_8h_source.html
Normal file
|
@ -0,0 +1,310 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: src/SSLClient.h Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('_s_s_l_client_8h_source.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">SSLClient.h</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="_s_s_l_client_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/* Copyright 2019 OSU OPEnS Lab</span></div>
|
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> *</span></div>
|
||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy of this</span></div>
|
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * software and associated documentation files (the "Software"), to deal in the Software</span></div>
|
||||
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * without restriction, including without limitation the rights to use, copy, modify,</span></div>
|
||||
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to</span></div>
|
||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * permit persons to whom the Software is furnished to do so, subject to the following</span></div>
|
||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * conditions:</span></div>
|
||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
|
||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * The above copyright notice and this permission notice shall be included in all</span></div>
|
||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * copies or substantial portions of the Software.</span></div>
|
||||
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> *</span></div>
|
||||
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,</span></div>
|
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A</span></div>
|
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT</span></div>
|
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION</span></div>
|
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE</span></div>
|
||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> */</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  </div>
|
||||
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "Client.h"</span></div>
|
||||
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "<a class="code" href="_s_s_l_session_8h.html">SSLSession.h</a>"</span></div>
|
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "<a class="code" href="_s_s_l_client_parameters_8h.html">SSLClientParameters.h</a>"</span></div>
|
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <vector></span></div>
|
||||
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  </div>
|
||||
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#ifndef SSLClient_H_</span></div>
|
||||
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#define SSLClient_H_</span></div>
|
||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div>
|
||||
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html"> 34</a></span> <span class="keyword">class </span><a class="code" href="class_s_s_l_client.html">SSLClient</a> : <span class="keyword">public</span> Client {</div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">public</span>:</div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6cea"> 44</a></span>  <span class="keyword">enum</span> <a class="code" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6cea">Error</a> {</div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa18dbddc0a3d4a94ee0f298fe55a06a94"> 45</a></span>  <a class="code" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa18dbddc0a3d4a94ee0f298fe55a06a94">SSL_OK</a> = 0,</div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa7510402478ffbecd6e1aa3811b175cfd"> 47</a></span>  <a class="code" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa7510402478ffbecd6e1aa3811b175cfd">SSL_CLIENT_CONNECT_FAIL</a> = 2,</div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa6a9cc2412a53b5981e937a41523eece5"> 49</a></span>  <a class="code" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa6a9cc2412a53b5981e937a41523eece5">SSL_BR_CONNECT_FAIL</a> = 3,</div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaab8581e1172fbf15067d435706d3a03a8"> 51</a></span>  <a class="code" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaab8581e1172fbf15067d435706d3a03a8">SSL_CLIENT_WRTIE_ERROR</a> = 4,</div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa37bef298be71b84a57e59fadbfbd9016"> 53</a></span>  <a class="code" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa37bef298be71b84a57e59fadbfbd9016">SSL_BR_WRITE_ERROR</a> = 5,</div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaaf66f8d5f6601f9e7607b78bf7a07fc84"> 55</a></span>  <a class="code" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaaf66f8d5f6601f9e7607b78bf7a07fc84">SSL_INTERNAL_ERROR</a> = 6,</div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa0a4f8af0226cf29ede8f6fe4a9047b08">SSL_OUT_OF_MEMORY</a> = 7</div>
|
||||
<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa0a4f8af0226cf29ede8f6fe4a9047b08"> 58</a></span>  };</div>
|
||||
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1"> 66</a></span>  <span class="keyword">enum</span> <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1">DebugLevel</a> {</div>
|
||||
<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a24122d1e1bb724237f305a0b4a21ff75"> 68</a></span>  <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a24122d1e1bb724237f305a0b4a21ff75">SSL_NONE</a> = 0,</div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a199742ec5c99c72d9cede1fda0f125c5"> 70</a></span>  <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a199742ec5c99c72d9cede1fda0f125c5">SSL_ERROR</a> = 1,</div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a26f3e5f1481f3ea22ea4ab5370b0fa97"> 72</a></span>  <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a26f3e5f1481f3ea22ea4ab5370b0fa97">SSL_WARN</a> = 2,</div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a8d5f7561f9cc0a2f3e5f362b02f4a5b2"> 74</a></span>  <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a8d5f7561f9cc0a2f3e5f362b02f4a5b2">SSL_INFO</a> = 3,</div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1ad1cf0d4d876daa655edb8331bfe2ce39"> 76</a></span>  <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1ad1cf0d4d876daa655edb8331bfe2ce39">SSL_DUMP</a> = 4,</div>
|
||||
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  };</div>
|
||||
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  </div>
|
||||
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">explicit</span> <a class="code" href="class_s_s_l_client.html#a68f026a625ca1ccd1aba87bb6e670376">SSLClient</a>( Client& client, </div>
|
||||
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keyword">const</span> br_x509_trust_anchor *trust_anchors, </div>
|
||||
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> trust_anchors_num, </div>
|
||||
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> analog_pin, </div>
|
||||
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> max_sessions = 1,</div>
|
||||
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">const</span> <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1">DebugLevel</a> debug = <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a26f3e5f1481f3ea22ea4ab5370b0fa97">SSL_WARN</a>);</div>
|
||||
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  </div>
|
||||
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">//========================================</span></div>
|
||||
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="comment">//= Functions implemented in SSLClient.cpp</span></div>
|
||||
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="comment">//========================================</span></div>
|
||||
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  </div>
|
||||
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordtype">int</span> <a class="code" href="class_s_s_l_client.html#ab97c0745f65a6c6009ac938b3b9912c3">connect</a>(IPAddress ip, uint16_t port) <span class="keyword">override</span>;</div>
|
||||
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  </div>
|
||||
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordtype">int</span> <a class="code" href="class_s_s_l_client.html#ab97c0745f65a6c6009ac938b3b9912c3">connect</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *host, uint16_t port) <span class="keyword">override</span>;</div>
|
||||
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  </div>
|
||||
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordtype">size_t</span> <a class="code" href="class_s_s_l_client.html#a03c7926938acd57cfc3b982edf725a86">write</a>(<span class="keyword">const</span> uint8_t *buf, <span class="keywordtype">size_t</span> size) <span class="keyword">override</span>;</div>
|
||||
<div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#a7343a58457b4659f83b61cac1f442c3d"> 211</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="class_s_s_l_client.html#a7343a58457b4659f83b61cac1f442c3d">write</a>(uint8_t b)<span class="keyword"> override </span>{ <span class="keywordflow">return</span> <a class="code" href="class_s_s_l_client.html#a7343a58457b4659f83b61cac1f442c3d">write</a>(&b, 1); }</div>
|
||||
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  </div>
|
||||
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordtype">int</span> <a class="code" href="class_s_s_l_client.html#a0e775669b4a040fbd3f281dcbcd2de78">available</a>() <span class="keyword">override</span>;</div>
|
||||
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  </div>
|
||||
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordtype">int</span> <a class="code" href="class_s_s_l_client.html#aef1b52f4ad9633126cb68739175920eb">read</a>(uint8_t *buf, <span class="keywordtype">size_t</span> size) <span class="keyword">override</span>;</div>
|
||||
<div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#aef1b52f4ad9633126cb68739175920eb"> 259</a></span>  <span class="keywordtype">int</span> <a class="code" href="class_s_s_l_client.html#aef1b52f4ad9633126cb68739175920eb">read</a>()<span class="keyword"> override </span>{ uint8_t read_val; <span class="keywordflow">return</span> <a class="code" href="class_s_s_l_client.html#aef1b52f4ad9633126cb68739175920eb">read</a>(&read_val, 1) > 0 ? read_val : -1; };</div>
|
||||
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  </div>
|
||||
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordtype">int</span> <a class="code" href="class_s_s_l_client.html#a0c0b6f2ad25701d1e45adb613d072d86">peek</a>() <span class="keyword">override</span>;</div>
|
||||
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  </div>
|
||||
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordtype">void</span> <a class="code" href="class_s_s_l_client.html#aaf2192a6621fdf2f89cc26a9a1584f8c">flush</a>() <span class="keyword">override</span>;</div>
|
||||
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  </div>
|
||||
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordtype">void</span> <a class="code" href="class_s_s_l_client.html#ad8ed697371748e31e01c3f697bc36cbe">stop</a>() <span class="keyword">override</span>;</div>
|
||||
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  </div>
|
||||
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  uint8_t <a class="code" href="class_s_s_l_client.html#a5488f01ccfddfd9e41f54dfbda48bcae">connected</a>() <span class="keyword">override</span>;</div>
|
||||
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  </div>
|
||||
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="comment">//========================================</span></div>
|
||||
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="comment">//= Functions Not in the Client Interface</span></div>
|
||||
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="comment">//========================================</span></div>
|
||||
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  </div>
|
||||
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordtype">void</span> <a class="code" href="class_s_s_l_client.html#aeee217b5558dfb0724f2319888a77256">setMutualAuthParams</a>(<span class="keyword">const</span> <a class="code" href="class_s_s_l_client_parameters.html">SSLClientParameters</a>& params);</div>
|
||||
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  </div>
|
||||
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <a class="code" href="class_s_s_l_session.html">SSLSession</a>* <a class="code" href="class_s_s_l_client.html#a2bd012ef6f01df9694ba9fd0a3c227c3">getSession</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* host);</div>
|
||||
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  </div>
|
||||
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordtype">void</span> <a class="code" href="class_s_s_l_client.html#ad5d9d8a4187a3f8918bf66af83e733c4">removeSession</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* host);</div>
|
||||
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  </div>
|
||||
<div class="line"><a name="l00350"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#ae3f9e6f8e8a50e520c936239abecfd22"> 350</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="class_s_s_l_client.html#ae3f9e6f8e8a50e520c936239abecfd22">getSessionCount</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_sessions.size(); }</div>
|
||||
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  </div>
|
||||
<div class="line"><a name="l00357"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#a4192ee3562c4806d4a6829356ca2636b"> 357</a></span>  <span class="keyword">operator</span> bool() { <span class="keywordflow">return</span> <a class="code" href="class_s_s_l_client.html#a5488f01ccfddfd9e41f54dfbda48bcae">connected</a>() > 0; }</div>
|
||||
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  </div>
|
||||
<div class="line"><a name="l00360"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#a9a4e9c9877ab73cf7e82d6942cc7db21"> 360</a></span>  Client& <a class="code" href="class_s_s_l_client.html#a9a4e9c9877ab73cf7e82d6942cc7db21">getClient</a>() { <span class="keywordflow">return</span> m_client; }</div>
|
||||
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  </div>
|
||||
<div class="line"><a name="l00366"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#a8da354f30537c1064d554921937a73ae"> 366</a></span>  <span class="keywordtype">void</span> <a class="code" href="class_s_s_l_client.html#a8da354f30537c1064d554921937a73ae">setTimeout</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> t) { m_timeout = t; }</div>
|
||||
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  </div>
|
||||
<div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="class_s_s_l_client.html#a2a178251978e0622f7e241da702ae498"> 372</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_s_s_l_client.html#a2a178251978e0622f7e241da702ae498">getTimeout</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_timeout; }</div>
|
||||
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  </div>
|
||||
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="keywordtype">void</span> <a class="code" href="class_s_s_l_client.html#ab285c2f5a03124558ef7f74b9f3d12ad">setVerificationTime</a>(uint32_t days, uint32_t seconds);</div>
|
||||
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  </div>
|
||||
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="keyword">private</span>:</div>
|
||||
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  Client& get_arduino_client() { <span class="keywordflow">return</span> m_client; }</div>
|
||||
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keyword">const</span> Client& get_arduino_client()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_client; }</div>
|
||||
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  </div>
|
||||
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordtype">bool</span> m_soft_connected(<span class="keyword">const</span> <span class="keywordtype">char</span>* func_name);</div>
|
||||
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keywordtype">int</span> m_start_ssl(<span class="keyword">const</span> <span class="keywordtype">char</span>* host = <span class="keyword">nullptr</span>, <a class="code" href="class_s_s_l_session.html">SSLSession</a>* ssl_ses = <span class="keyword">nullptr</span>);</div>
|
||||
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordtype">int</span> m_run_until(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> target);</div>
|
||||
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordtype">unsigned</span> m_update_engine();</div>
|
||||
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordtype">int</span> m_get_session_index(<span class="keyword">const</span> <span class="keywordtype">char</span>* host) <span class="keyword">const</span>; </div>
|
||||
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  </div>
|
||||
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordtype">void</span> m_print_prefix(<span class="keyword">const</span> <span class="keywordtype">char</span>* func_name, <span class="keyword">const</span> <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1">DebugLevel</a> level) <span class="keyword">const</span>;</div>
|
||||
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  </div>
|
||||
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordtype">void</span> m_print_ssl_error(<span class="keyword">const</span> <span class="keywordtype">int</span> ssl_error, <span class="keyword">const</span> <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1">DebugLevel</a> level) <span class="keyword">const</span>;</div>
|
||||
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  </div>
|
||||
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keywordtype">void</span> m_print_br_error(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> br_error_code, <span class="keyword">const</span> <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1">DebugLevel</a> level) <span class="keyword">const</span>;</div>
|
||||
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  </div>
|
||||
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordtype">void</span> m_print_br_state(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> br_state, <span class="keyword">const</span> <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1">DebugLevel</a> level) <span class="keyword">const</span>;</div>
|
||||
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  </div>
|
||||
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
||||
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordtype">void</span> m_print(<span class="keyword">const</span> T str, <span class="keyword">const</span> <span class="keywordtype">char</span>* func_name, <span class="keyword">const</span> <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1">DebugLevel</a> level)<span class="keyword"> const </span>{ </div>
|
||||
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="comment">// check the current debug level and serial status</span></div>
|
||||
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">if</span> (level > m_debug || !Serial) <span class="keywordflow">return</span>;</div>
|
||||
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="comment">// print prefix</span></div>
|
||||
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  m_print_prefix(func_name, level);</div>
|
||||
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="comment">// print the message</span></div>
|
||||
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  Serial.println(str);</div>
|
||||
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  }</div>
|
||||
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  </div>
|
||||
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
||||
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordtype">void</span> m_info(<span class="keyword">const</span> T str, <span class="keyword">const</span> <span class="keywordtype">char</span>* func_name)<span class="keyword"> const </span>{ m_print(str, func_name, <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a8d5f7561f9cc0a2f3e5f362b02f4a5b2">SSL_INFO</a>); }</div>
|
||||
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  </div>
|
||||
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
||||
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keywordtype">void</span> m_warn(<span class="keyword">const</span> T str, <span class="keyword">const</span> <span class="keywordtype">char</span>* func_name)<span class="keyword"> const </span>{ m_print(str, func_name, <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a26f3e5f1481f3ea22ea4ab5370b0fa97">SSL_WARN</a>); }</div>
|
||||
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  </div>
|
||||
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
||||
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordtype">void</span> m_error(<span class="keyword">const</span> T str, <span class="keyword">const</span> <span class="keywordtype">char</span>* func_name)<span class="keyword"> const </span>{ m_print(str, func_name, <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a199742ec5c99c72d9cede1fda0f125c5">SSL_ERROR</a>); }</div>
|
||||
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  </div>
|
||||
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="comment">//============================================</span></div>
|
||||
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="comment">//= Data Members</span></div>
|
||||
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="comment">//============================================</span></div>
|
||||
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="comment">// create a reference the client</span></div>
|
||||
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  Client& m_client;</div>
|
||||
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="comment">// also store an array of SSLSessions, so we can resume communication with multiple websites</span></div>
|
||||
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  std::vector<SSLSession> m_sessions;</div>
|
||||
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="comment">// as well as the maximmum number of sessions we can store</span></div>
|
||||
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> m_max_sessions;</div>
|
||||
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="comment">// store the pin to fetch an RNG see from</span></div>
|
||||
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> m_analog_pin;</div>
|
||||
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="comment">// store whether to enable debug logging</span></div>
|
||||
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keyword">const</span> <a class="code" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1">DebugLevel</a> m_debug;</div>
|
||||
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="comment">// store if we are connected in bearssl or not</span></div>
|
||||
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordtype">bool</span> m_is_connected;</div>
|
||||
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="comment">// store the timeout for SSL internals</span></div>
|
||||
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_timeout;</div>
|
||||
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="comment">// store the context values required for SSL</span></div>
|
||||
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  br_ssl_client_context m_sslctx;</div>
|
||||
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  br_x509_minimal_context m_x509ctx;</div>
|
||||
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="comment">// use a mono-directional buffer by default to cut memory in half</span></div>
|
||||
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="comment">// can expand to a bi-directional buffer with maximum of BR_SSL_BUFSIZE_BIDI</span></div>
|
||||
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="comment">// or shrink to below BR_SSL_BUFSIZE_MONO, and bearSSL will adapt automatically</span></div>
|
||||
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="comment">// simply edit this value to change the buffer size to the desired value</span></div>
|
||||
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="comment">// additionally, we need to correct buffer size based off of how many sessions we decide to cache</span></div>
|
||||
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="comment">// since SSL takes so much memory if we don't it will cause the stack and heap to collide </span></div>
|
||||
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="comment"></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> m_iobuf[2048];</div>
|
||||
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">// store the index of where we are writing in the buffer</span></div>
|
||||
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="comment">// so we can send our records all at once to prevent</span></div>
|
||||
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="comment">// weird timing issues</span></div>
|
||||
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordtype">size_t</span> m_write_idx;</div>
|
||||
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="comment">// store the last BearSSL state so we can print changes to the console</span></div>
|
||||
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keywordtype">unsigned</span> m_br_last_state;</div>
|
||||
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> };</div>
|
||||
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  </div>
|
||||
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor">#endif </span></div>
|
||||
<div class="ttc" id="a_s_s_l_client_parameters_8h_html"><div class="ttname"><a href="_s_s_l_client_parameters_8h.html">SSLClientParameters.h</a></div></div>
|
||||
<div class="ttc" id="a_s_s_l_session_8h_html"><div class="ttname"><a href="_s_s_l_session_8h.html">SSLSession.h</a></div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html"><div class="ttname"><a href="class_s_s_l_client.html">SSLClient</a></div><div class="ttdoc">The main SSLClient class. Check out README.md for more info.</div><div class="ttdef"><b>Definition:</b> SSLClient.h:34</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a03c7926938acd57cfc3b982edf725a86"><div class="ttname"><a href="class_s_s_l_client.html#a03c7926938acd57cfc3b982edf725a86">SSLClient::write</a></div><div class="ttdeci">size_t write(const uint8_t *buf, size_t size) override</div><div class="ttdoc">Write some bytes to the SSL connection.</div><div class="ttdef"><b>Definition:</b> SSLClient.cpp:93</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a0c0b6f2ad25701d1e45adb613d072d86"><div class="ttname"><a href="class_s_s_l_client.html#a0c0b6f2ad25701d1e45adb613d072d86">SSLClient::peek</a></div><div class="ttdeci">int peek() override</div><div class="ttdoc">View the first byte of the buffer, without removing it from the SSLClient Buffer.</div><div class="ttdef"><b>Definition:</b> SSLClient.cpp:179</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a0e775669b4a040fbd3f281dcbcd2de78"><div class="ttname"><a href="class_s_s_l_client.html#a0e775669b4a040fbd3f281dcbcd2de78">SSLClient::available</a></div><div class="ttdeci">int available() override</div><div class="ttdoc">Returns the number of bytes available to read from the data that has been received and decrypted.</div><div class="ttdef"><b>Definition:</b> SSLClient.cpp:143</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a2a178251978e0622f7e241da702ae498"><div class="ttname"><a href="class_s_s_l_client.html#a2a178251978e0622f7e241da702ae498">SSLClient::getTimeout</a></div><div class="ttdeci">unsigned int getTimeout() const</div><div class="ttdoc">Get the timeout when waiting for an SSL response.</div><div class="ttdef"><b>Definition:</b> SSLClient.h:372</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a2bd012ef6f01df9694ba9fd0a3c227c3"><div class="ttname"><a href="class_s_s_l_client.html#a2bd012ef6f01df9694ba9fd0a3c227c3">SSLClient::getSession</a></div><div class="ttdeci">SSLSession * getSession(const char *host)</div><div class="ttdoc">Gets a session reference corresponding to a host and IP, or a reference to a empty session if none ex...</div><div class="ttdef"><b>Definition:</b> SSLClient.cpp:263</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a48239f60f1b4318cc112706fc40c6cea"><div class="ttname"><a href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6cea">SSLClient::Error</a></div><div class="ttdeci">Error</div><div class="ttdoc">Static constants defining the possible errors encountered.</div><div class="ttdef"><b>Definition:</b> SSLClient.h:44</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a48239f60f1b4318cc112706fc40c6ceaa0a4f8af0226cf29ede8f6fe4a9047b08"><div class="ttname"><a href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa0a4f8af0226cf29ede8f6fe4a9047b08">SSLClient::SSL_OUT_OF_MEMORY</a></div><div class="ttdeci">@ SSL_OUT_OF_MEMORY</div><div class="ttdef"><b>Definition:</b> SSLClient.h:57</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a48239f60f1b4318cc112706fc40c6ceaa18dbddc0a3d4a94ee0f298fe55a06a94"><div class="ttname"><a href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa18dbddc0a3d4a94ee0f298fe55a06a94">SSLClient::SSL_OK</a></div><div class="ttdeci">@ SSL_OK</div><div class="ttdef"><b>Definition:</b> SSLClient.h:45</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a48239f60f1b4318cc112706fc40c6ceaa37bef298be71b84a57e59fadbfbd9016"><div class="ttname"><a href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa37bef298be71b84a57e59fadbfbd9016">SSLClient::SSL_BR_WRITE_ERROR</a></div><div class="ttdeci">@ SSL_BR_WRITE_ERROR</div><div class="ttdef"><b>Definition:</b> SSLClient.h:53</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a48239f60f1b4318cc112706fc40c6ceaa6a9cc2412a53b5981e937a41523eece5"><div class="ttname"><a href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa6a9cc2412a53b5981e937a41523eece5">SSLClient::SSL_BR_CONNECT_FAIL</a></div><div class="ttdeci">@ SSL_BR_CONNECT_FAIL</div><div class="ttdef"><b>Definition:</b> SSLClient.h:49</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a48239f60f1b4318cc112706fc40c6ceaa7510402478ffbecd6e1aa3811b175cfd"><div class="ttname"><a href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa7510402478ffbecd6e1aa3811b175cfd">SSLClient::SSL_CLIENT_CONNECT_FAIL</a></div><div class="ttdeci">@ SSL_CLIENT_CONNECT_FAIL</div><div class="ttdef"><b>Definition:</b> SSLClient.h:47</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a48239f60f1b4318cc112706fc40c6ceaab8581e1172fbf15067d435706d3a03a8"><div class="ttname"><a href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaab8581e1172fbf15067d435706d3a03a8">SSLClient::SSL_CLIENT_WRTIE_ERROR</a></div><div class="ttdeci">@ SSL_CLIENT_WRTIE_ERROR</div><div class="ttdef"><b>Definition:</b> SSLClient.h:51</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a48239f60f1b4318cc112706fc40c6ceaaf66f8d5f6601f9e7607b78bf7a07fc84"><div class="ttname"><a href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaaf66f8d5f6601f9e7607b78bf7a07fc84">SSLClient::SSL_INTERNAL_ERROR</a></div><div class="ttdeci">@ SSL_INTERNAL_ERROR</div><div class="ttdef"><b>Definition:</b> SSLClient.h:55</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a5488f01ccfddfd9e41f54dfbda48bcae"><div class="ttname"><a href="class_s_s_l_client.html#a5488f01ccfddfd9e41f54dfbda48bcae">SSLClient::connected</a></div><div class="ttdeci">uint8_t connected() override</div><div class="ttdoc">Check if the device is connected.</div><div class="ttdef"><b>Definition:</b> SSLClient.cpp:232</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a68f026a625ca1ccd1aba87bb6e670376"><div class="ttname"><a href="class_s_s_l_client.html#a68f026a625ca1ccd1aba87bb6e670376">SSLClient::SSLClient</a></div><div class="ttdeci">SSLClient(Client &client, const br_x509_trust_anchor *trust_anchors, const size_t trust_anchors_num, const int analog_pin, const size_t max_sessions=1, const DebugLevel debug=SSL_WARN)</div><div class="ttdoc">Initialize SSLClient with all of the prerequisites needed.</div><div class="ttdef"><b>Definition:</b> SSLClient.cpp:24</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a7343a58457b4659f83b61cac1f442c3d"><div class="ttname"><a href="class_s_s_l_client.html#a7343a58457b4659f83b61cac1f442c3d">SSLClient::write</a></div><div class="ttdeci">size_t write(uint8_t b) override</div><div class="ttdef"><b>Definition:</b> SSLClient.h:211</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a8da354f30537c1064d554921937a73ae"><div class="ttname"><a href="class_s_s_l_client.html#a8da354f30537c1064d554921937a73ae">SSLClient::setTimeout</a></div><div class="ttdeci">void setTimeout(unsigned int t)</div><div class="ttdoc">Set the timeout when waiting for an SSL response.</div><div class="ttdef"><b>Definition:</b> SSLClient.h:366</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_a9a4e9c9877ab73cf7e82d6942cc7db21"><div class="ttname"><a href="class_s_s_l_client.html#a9a4e9c9877ab73cf7e82d6942cc7db21">SSLClient::getClient</a></div><div class="ttdeci">Client & getClient()</div><div class="ttdoc">Returns a reference to the client object stored in this class. Take care not to break it.</div><div class="ttdef"><b>Definition:</b> SSLClient.h:360</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_aaf2192a6621fdf2f89cc26a9a1584f8c"><div class="ttname"><a href="class_s_s_l_client.html#aaf2192a6621fdf2f89cc26a9a1584f8c">SSLClient::flush</a></div><div class="ttdeci">void flush() override</div><div class="ttdoc">Force writing the buffered bytes from SSLClient::write to the network.</div><div class="ttdef"><b>Definition:</b> SSLClient.cpp:191</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_ab285c2f5a03124558ef7f74b9f3d12ad"><div class="ttname"><a href="class_s_s_l_client.html#ab285c2f5a03124558ef7f74b9f3d12ad">SSLClient::setVerificationTime</a></div><div class="ttdeci">void setVerificationTime(uint32_t days, uint32_t seconds)</div><div class="ttdoc">Change the time used during x509 verification to a different value.</div><div class="ttdef"><b>Definition:</b> SSLClient.cpp:309</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_ab97c0745f65a6c6009ac938b3b9912c3"><div class="ttname"><a href="class_s_s_l_client.html#ab97c0745f65a6c6009ac938b3b9912c3">SSLClient::connect</a></div><div class="ttdeci">int connect(IPAddress ip, uint16_t port) override</div><div class="ttdoc">Connect over SSL to a host specified by an IP address.</div><div class="ttdef"><b>Definition:</b> SSLClient.cpp:52</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_ad5d9d8a4187a3f8918bf66af83e733c4"><div class="ttname"><a href="class_s_s_l_client.html#ad5d9d8a4187a3f8918bf66af83e733c4">SSLClient::removeSession</a></div><div class="ttdeci">void removeSession(const char *host)</div><div class="ttdoc">Clear the session corresponding to a host and IP.</div><div class="ttdef"><b>Definition:</b> SSLClient.cpp:276</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_ad8ed697371748e31e01c3f697bc36cbe"><div class="ttname"><a href="class_s_s_l_client.html#ad8ed697371748e31e01c3f697bc36cbe">SSLClient::stop</a></div><div class="ttdeci">void stop() override</div><div class="ttdoc">Close the connection.</div><div class="ttdef"><b>Definition:</b> SSLClient.cpp:205</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_ae3f9e6f8e8a50e520c936239abecfd22"><div class="ttname"><a href="class_s_s_l_client.html#ae3f9e6f8e8a50e520c936239abecfd22">SSLClient::getSessionCount</a></div><div class="ttdeci">size_t getSessionCount() const</div><div class="ttdoc">Get the maximum number of SSL sessions that can be stored at once.</div><div class="ttdef"><b>Definition:</b> SSLClient.h:350</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_aeee217b5558dfb0724f2319888a77256"><div class="ttname"><a href="class_s_s_l_client.html#aeee217b5558dfb0724f2319888a77256">SSLClient::setMutualAuthParams</a></div><div class="ttdeci">void setMutualAuthParams(const SSLClientParameters &params)</div><div class="ttdoc">Add a client certificate and enable support for mutual auth.</div><div class="ttdef"><b>Definition:</b> SSLClient.cpp:287</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_aef1b52f4ad9633126cb68739175920eb"><div class="ttname"><a href="class_s_s_l_client.html#aef1b52f4ad9633126cb68739175920eb">SSLClient::read</a></div><div class="ttdeci">int read() override</div><div class="ttdoc">Read a single byte, or -1 if none is available.</div><div class="ttdef"><b>Definition:</b> SSLClient.h:259</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_af632625f8d247f3885c81e1f05043ad1"><div class="ttname"><a href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1">SSLClient::DebugLevel</a></div><div class="ttdeci">DebugLevel</div><div class="ttdoc">Level of verbosity used in logging for SSLClient.</div><div class="ttdef"><b>Definition:</b> SSLClient.h:66</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_af632625f8d247f3885c81e1f05043ad1a199742ec5c99c72d9cede1fda0f125c5"><div class="ttname"><a href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a199742ec5c99c72d9cede1fda0f125c5">SSLClient::SSL_ERROR</a></div><div class="ttdeci">@ SSL_ERROR</div><div class="ttdef"><b>Definition:</b> SSLClient.h:70</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_af632625f8d247f3885c81e1f05043ad1a24122d1e1bb724237f305a0b4a21ff75"><div class="ttname"><a href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a24122d1e1bb724237f305a0b4a21ff75">SSLClient::SSL_NONE</a></div><div class="ttdeci">@ SSL_NONE</div><div class="ttdef"><b>Definition:</b> SSLClient.h:68</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_af632625f8d247f3885c81e1f05043ad1a26f3e5f1481f3ea22ea4ab5370b0fa97"><div class="ttname"><a href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a26f3e5f1481f3ea22ea4ab5370b0fa97">SSLClient::SSL_WARN</a></div><div class="ttdeci">@ SSL_WARN</div><div class="ttdef"><b>Definition:</b> SSLClient.h:72</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_af632625f8d247f3885c81e1f05043ad1a8d5f7561f9cc0a2f3e5f362b02f4a5b2"><div class="ttname"><a href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a8d5f7561f9cc0a2f3e5f362b02f4a5b2">SSLClient::SSL_INFO</a></div><div class="ttdeci">@ SSL_INFO</div><div class="ttdef"><b>Definition:</b> SSLClient.h:74</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_html_af632625f8d247f3885c81e1f05043ad1ad1cf0d4d876daa655edb8331bfe2ce39"><div class="ttname"><a href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1ad1cf0d4d876daa655edb8331bfe2ce39">SSLClient::SSL_DUMP</a></div><div class="ttdeci">@ SSL_DUMP</div><div class="ttdef"><b>Definition:</b> SSLClient.h:76</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_parameters_html"><div class="ttname"><a href="class_s_s_l_client_parameters.html">SSLClientParameters</a></div><div class="ttdoc">This class stores data required for SSLClient to use mutual authentication.</div><div class="ttdef"><b>Definition:</b> SSLClientParameters.h:52</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_session_html"><div class="ttname"><a href="class_s_s_l_session.html">SSLSession</a></div><div class="ttdoc">This class stores values which allow SSLClient to save and resume SSL sessions.</div><div class="ttdef"><b>Definition:</b> SSLSession.h:51</div></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="_s_s_l_client_8h.html">SSLClient.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
120
_s_s_l_client_parameters_8cpp.html
Normal file
|
@ -0,0 +1,120 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: src/SSLClientParameters.cpp File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('_s_s_l_client_parameters_8cpp.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#nested-classes">Classes</a> |
|
||||
<a href="#namespaces">Namespaces</a> |
|
||||
<a href="#func-members">Functions</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">SSLClientParameters.cpp File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><code>#include "<a class="el" href="_s_s_l_client_parameters_8h_source.html">SSLClientParameters.h</a>"</code><br />
|
||||
</div><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||||
Classes</h2></td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structssl__pem__decode__state.html">ssl_pem_decode_state</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
|
||||
Namespaces</h2></td></tr>
|
||||
<tr class="memitem:namespacestd"><td class="memItemLeft" align="right" valign="top">  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacestd.html">std</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
||||
Functions</h2></td></tr>
|
||||
<tr class="memitem:a39074ff6e8f24ae9df1cabe6767f8a4d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacestd.html#a39074ff6e8f24ae9df1cabe6767f8a4d">std::__attribute__</a> ((weak)) __throw_length_error(char const *)</td></tr>
|
||||
<tr class="separator:a39074ff6e8f24ae9df1cabe6767f8a4d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="_s_s_l_client_parameters_8cpp.html">SSLClientParameters.cpp</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
5
_s_s_l_client_parameters_8cpp.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
var _s_s_l_client_parameters_8cpp =
|
||||
[
|
||||
[ "ssl_pem_decode_state", "structssl__pem__decode__state.html", "structssl__pem__decode__state" ],
|
||||
[ "__attribute__", "_s_s_l_client_parameters_8cpp.html#a39074ff6e8f24ae9df1cabe6767f8a4d", null ]
|
||||
];
|
112
_s_s_l_client_parameters_8h.html
Normal file
|
@ -0,0 +1,112 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: src/SSLClientParameters.h File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('_s_s_l_client_parameters_8h.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#nested-classes">Classes</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">SSLClientParameters.h File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><code>#include "bearssl.h"</code><br />
|
||||
<code>#include <vector></code><br />
|
||||
</div>
|
||||
<p><a href="_s_s_l_client_parameters_8h_source.html">Go to the source code of this file.</a></p>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||||
Classes</h2></td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a></td></tr>
|
||||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">This class stores data required for <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> to use mutual authentication. <a href="class_s_s_l_client_parameters.html#details">More...</a><br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="_s_s_l_client_parameters_8h.html">SSLClientParameters.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
159
_s_s_l_client_parameters_8h_source.html
Normal file
|
@ -0,0 +1,159 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: src/SSLClientParameters.h Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('_s_s_l_client_parameters_8h_source.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">SSLClientParameters.h</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="_s_s_l_client_parameters_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/* Copyright 2019 OSU OPEnS Lab</span></div>
|
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> *</span></div>
|
||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy of this</span></div>
|
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * software and associated documentation files (the "Software"), to deal in the Software</span></div>
|
||||
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * without restriction, including without limitation the rights to use, copy, modify,</span></div>
|
||||
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to</span></div>
|
||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * permit persons to whom the Software is furnished to do so, subject to the following</span></div>
|
||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * conditions:</span></div>
|
||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
|
||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * The above copyright notice and this permission notice shall be included in all</span></div>
|
||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * copies or substantial portions of the Software.</span></div>
|
||||
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> *</span></div>
|
||||
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,</span></div>
|
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A</span></div>
|
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT</span></div>
|
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION</span></div>
|
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE</span></div>
|
||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> */</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  </div>
|
||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "bearssl.h"</span></div>
|
||||
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#undef min</span></div>
|
||||
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#undef max</span></div>
|
||||
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <vector></span></div>
|
||||
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  </div>
|
||||
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#ifndef SSLClientParameters_H_</span></div>
|
||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#define SSLClientParameters_H_</span></div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  </div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="class_s_s_l_client_parameters.html"> 52</a></span> <span class="keyword">class </span><a class="code" href="class_s_s_l_client_parameters.html">SSLClientParameters</a> {</div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">public</span>:</div>
|
||||
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">static</span> <a class="code" href="class_s_s_l_client_parameters.html">SSLClientParameters</a> <a class="code" href="class_s_s_l_client_parameters.html#ac5ddf993f7d560581297471593051ea6">fromPEM</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* cert_pem, <span class="keyword">const</span> <span class="keywordtype">size_t</span> cert_len, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_pem, <span class="keyword">const</span> <span class="keywordtype">size_t</span> key_len);</div>
|
||||
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  </div>
|
||||
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">static</span> <a class="code" href="class_s_s_l_client_parameters.html">SSLClientParameters</a> <a class="code" href="class_s_s_l_client_parameters.html#a12e44f4b8340ef7f1dcbbed7649e4bef">fromDER</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* cert_der, <span class="keyword">const</span> <span class="keywordtype">size_t</span> cert_len, <span class="keyword">const</span> <span class="keywordtype">char</span>* key_der, <span class="keyword">const</span> <span class="keywordtype">size_t</span> key_len);</div>
|
||||
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  </div>
|
||||
<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="class_s_s_l_client_parameters.html#af5686b2c601812f55477a7089b3b2c2d"> 115</a></span>  <span class="keyword">const</span> br_x509_certificate* <a class="code" href="class_s_s_l_client_parameters.html#af5686b2c601812f55477a7089b3b2c2d">getCertChain</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> &m_cert_struct; }</div>
|
||||
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  </div>
|
||||
<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="class_s_s_l_client_parameters.html#a90d581703308881714d64d1ada785ad2"> 118</a></span>  <span class="keywordtype">int</span> <a class="code" href="class_s_s_l_client_parameters.html#a90d581703308881714d64d1ada785ad2">getCertType</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> br_skey_decoder_key_type(&m_key_struct); }</div>
|
||||
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  </div>
|
||||
<div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="class_s_s_l_client_parameters.html#ad9beb80ce98ed9aa34db28783f0264c5"> 121</a></span>  <span class="keyword">const</span> br_ec_private_key* <a class="code" href="class_s_s_l_client_parameters.html#ad9beb80ce98ed9aa34db28783f0264c5">getECKey</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> br_skey_decoder_get_ec(&m_key_struct); }</div>
|
||||
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  </div>
|
||||
<div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="class_s_s_l_client_parameters.html#a82c21b0ae4690a6b7842a0d74b12f67f"> 124</a></span>  <span class="keyword">const</span> br_rsa_private_key* <a class="code" href="class_s_s_l_client_parameters.html#a82c21b0ae4690a6b7842a0d74b12f67f">getRSAKey</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> br_skey_decoder_get_rsa(&m_key_struct); }</div>
|
||||
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  </div>
|
||||
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="keyword">protected</span>:</div>
|
||||
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <a class="code" href="class_s_s_l_client_parameters.html#a97213b5554e90908fbf284669b5f22f3">SSLClientParameters</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* cert, <span class="keyword">const</span> <span class="keywordtype">size_t</span> cert_len, <span class="keyword">const</span> <span class="keywordtype">char</span>* key, <span class="keyword">const</span> <span class="keywordtype">size_t</span> key_len, <span class="keywordtype">bool</span> is_der);</div>
|
||||
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  </div>
|
||||
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">private</span>:</div>
|
||||
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keyword">const</span> std::vector<char> m_cert;</div>
|
||||
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keyword">const</span> br_x509_certificate m_cert_struct;</div>
|
||||
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keyword">const</span> br_skey_decoder_context m_key_struct;</div>
|
||||
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> };</div>
|
||||
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  </div>
|
||||
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor">#endif</span></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_parameters_html"><div class="ttname"><a href="class_s_s_l_client_parameters.html">SSLClientParameters</a></div><div class="ttdoc">This class stores data required for SSLClient to use mutual authentication.</div><div class="ttdef"><b>Definition:</b> SSLClientParameters.h:52</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_parameters_html_a12e44f4b8340ef7f1dcbbed7649e4bef"><div class="ttname"><a href="class_s_s_l_client_parameters.html#a12e44f4b8340ef7f1dcbbed7649e4bef">SSLClientParameters::fromDER</a></div><div class="ttdeci">static SSLClientParameters fromDER(const char *cert_der, const size_t cert_len, const char *key_der, const size_t key_len)</div><div class="ttdoc">Create mutual authentication parameters from a DER certificate and private key.</div><div class="ttdef"><b>Definition:</b> SSLClientParameters.cpp:91</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_parameters_html_a82c21b0ae4690a6b7842a0d74b12f67f"><div class="ttname"><a href="class_s_s_l_client_parameters.html#a82c21b0ae4690a6b7842a0d74b12f67f">SSLClientParameters::getRSAKey</a></div><div class="ttdeci">const br_rsa_private_key * getRSAKey() const</div><div class="ttdef"><b>Definition:</b> SSLClientParameters.h:124</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_parameters_html_a90d581703308881714d64d1ada785ad2"><div class="ttname"><a href="class_s_s_l_client_parameters.html#a90d581703308881714d64d1ada785ad2">SSLClientParameters::getCertType</a></div><div class="ttdeci">int getCertType() const</div><div class="ttdef"><b>Definition:</b> SSLClientParameters.h:118</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_parameters_html_a97213b5554e90908fbf284669b5f22f3"><div class="ttname"><a href="class_s_s_l_client_parameters.html#a97213b5554e90908fbf284669b5f22f3">SSLClientParameters::SSLClientParameters</a></div><div class="ttdeci">SSLClientParameters(const char *cert, const size_t cert_len, const char *key, const size_t key_len, bool is_der)</div><div class="ttdef"><b>Definition:</b> SSLClientParameters.cpp:80</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_parameters_html_ac5ddf993f7d560581297471593051ea6"><div class="ttname"><a href="class_s_s_l_client_parameters.html#ac5ddf993f7d560581297471593051ea6">SSLClientParameters::fromPEM</a></div><div class="ttdeci">static SSLClientParameters fromPEM(const char *cert_pem, const size_t cert_len, const char *key_pem, const size_t key_len)</div><div class="ttdoc">Create mutual authentication parameters from a PEM certificate and private key.</div><div class="ttdef"><b>Definition:</b> SSLClientParameters.cpp:86</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_parameters_html_ad9beb80ce98ed9aa34db28783f0264c5"><div class="ttname"><a href="class_s_s_l_client_parameters.html#ad9beb80ce98ed9aa34db28783f0264c5">SSLClientParameters::getECKey</a></div><div class="ttdeci">const br_ec_private_key * getECKey() const</div><div class="ttdef"><b>Definition:</b> SSLClientParameters.h:121</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_client_parameters_html_af5686b2c601812f55477a7089b3b2c2d"><div class="ttname"><a href="class_s_s_l_client_parameters.html#af5686b2c601812f55477a7089b3b2c2d">SSLClientParameters::getCertChain</a></div><div class="ttdeci">const br_x509_certificate * getCertChain() const</div><div class="ttdef"><b>Definition:</b> SSLClientParameters.h:115</div></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="_s_s_l_client_parameters_8h.html">SSLClientParameters.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
112
_s_s_l_session_8h.html
Normal file
|
@ -0,0 +1,112 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: src/SSLSession.h File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('_s_s_l_session_8h.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#nested-classes">Classes</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">SSLSession.h File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><code>#include "bearssl.h"</code><br />
|
||||
<code>#include "Arduino.h"</code><br />
|
||||
</div>
|
||||
<p><a href="_s_s_l_session_8h_source.html">Go to the source code of this file.</a></p>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
||||
Classes</h2></td></tr>
|
||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_s_l_session.html">SSLSession</a></td></tr>
|
||||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">This class stores values which allow <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> to save and resume SSL sessions. <a href="class_s_s_l_session.html#details">More...</a><br /></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="_s_s_l_session_8h.html">SSLSession.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
147
_s_s_l_session_8h_source.html
Normal file
|
@ -0,0 +1,147 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: src/SSLSession.h Source File</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('_s_s_l_session_8h_source.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">SSLSession.h</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="_s_s_l_session_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/* Copyright 2019 OSU OPEnS Lab</span></div>
|
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> *</span></div>
|
||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy of this</span></div>
|
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * software and associated documentation files (the "Software"), to deal in the Software</span></div>
|
||||
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * without restriction, including without limitation the rights to use, copy, modify,</span></div>
|
||||
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to</span></div>
|
||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * permit persons to whom the Software is furnished to do so, subject to the following</span></div>
|
||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * conditions:</span></div>
|
||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div>
|
||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * The above copyright notice and this permission notice shall be included in all</span></div>
|
||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * copies or substantial portions of the Software.</span></div>
|
||||
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> *</span></div>
|
||||
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,</span></div>
|
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A</span></div>
|
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT</span></div>
|
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION</span></div>
|
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE</span></div>
|
||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> */</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  </div>
|
||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "bearssl.h"</span></div>
|
||||
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "Arduino.h"</span></div>
|
||||
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  </div>
|
||||
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#ifndef SSLSession_H_</span></div>
|
||||
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#define SSLSession_H_</span></div>
|
||||
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  </div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="class_s_s_l_session.html"> 51</a></span> <span class="keyword">class </span><a class="code" href="class_s_s_l_session.html">SSLSession</a> : <span class="keyword">public</span> br_ssl_session_parameters {</div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  </div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">public</span>:</div>
|
||||
<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="class_s_s_l_session.html#a0c8e01b0944c1f4b0ec6d4c423c95b74"> 59</a></span>  <a class="code" href="class_s_s_l_session.html#a0c8e01b0944c1f4b0ec6d4c423c95b74">SSLSession</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* hostname)</div>
|
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  : m_hostname(hostname) {}</div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="class_s_s_l_session.html#a825373c5ba1aa6c45e74dc8a72b21820"> 70</a></span>  <span class="keyword">const</span> String& <a class="code" href="class_s_s_l_session.html#a825373c5ba1aa6c45e74dc8a72b21820">get_hostname</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_hostname; }</div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div>
|
||||
<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="class_s_s_l_session.html#acbe6549b55d50541d09a16f770e65afc"> 73</a></span>  br_ssl_session_parameters* <a class="code" href="class_s_s_l_session.html#acbe6549b55d50541d09a16f770e65afc">to_br_session</a>() { <span class="keywordflow">return</span> (br_ssl_session_parameters *)<span class="keyword">this</span>; }</div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  </div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">private</span>:</div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="comment">// aparently a hostname has a max length of 256 chars. Go figure.</span></div>
|
||||
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  String m_hostname;</div>
|
||||
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> };</div>
|
||||
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  </div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  </div>
|
||||
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  </div>
|
||||
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor">#endif </span><span class="comment">/* SSLSession_H_ */</span><span class="preprocessor"></span></div>
|
||||
<div class="ttc" id="aclass_s_s_l_session_html"><div class="ttname"><a href="class_s_s_l_session.html">SSLSession</a></div><div class="ttdoc">This class stores values which allow SSLClient to save and resume SSL sessions.</div><div class="ttdef"><b>Definition:</b> SSLSession.h:51</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_session_html_a0c8e01b0944c1f4b0ec6d4c423c95b74"><div class="ttname"><a href="class_s_s_l_session.html#a0c8e01b0944c1f4b0ec6d4c423c95b74">SSLSession::SSLSession</a></div><div class="ttdeci">SSLSession(const char *hostname)</div><div class="ttdoc">SSLSession constructor.</div><div class="ttdef"><b>Definition:</b> SSLSession.h:59</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_session_html_a825373c5ba1aa6c45e74dc8a72b21820"><div class="ttname"><a href="class_s_s_l_session.html#a825373c5ba1aa6c45e74dc8a72b21820">SSLSession::get_hostname</a></div><div class="ttdeci">const String & get_hostname() const</div><div class="ttdoc">Get the hostname string associated with this session.</div><div class="ttdef"><b>Definition:</b> SSLSession.h:70</div></div>
|
||||
<div class="ttc" id="aclass_s_s_l_session_html_acbe6549b55d50541d09a16f770e65afc"><div class="ttname"><a href="class_s_s_l_session.html#acbe6549b55d50541d09a16f770e65afc">SSLSession::to_br_session</a></div><div class="ttdeci">br_ssl_session_parameters * to_br_session()</div><div class="ttdoc">Returns a pointer to the ::br_ssl_session_parameters component of this class.</div><div class="ttdef"><b>Definition:</b> SSLSession.h:73</div></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="_s_s_l_session_8h.html">SSLSession.h</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
99
_trust_anchors_8md.html
Normal file
|
@ -0,0 +1,99 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: TrustAnchors.md File Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('_trust_anchors_8md.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">TrustAnchors.md File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="_trust_anchors_8md.html">TrustAnchors.md</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
106
annotated.html
Normal file
|
@ -0,0 +1,106 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Class List</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('annotated.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Class List</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
|
||||
<table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structssl__pem__decode__state.html" target="_self">ssl_pem_decode_state</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_s_s_l_client.html" target="_self">SSLClient</a></td><td class="desc">The main <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> class. Check out <a class="el" href="_r_e_a_d_m_e_8md.html">README.md</a> for more info </td></tr>
|
||||
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_s_s_l_client_parameters.html" target="_self">SSLClientParameters</a></td><td class="desc">This class stores data required for <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> to use mutual authentication </td></tr>
|
||||
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_s_s_l_session.html" target="_self">SSLSession</a></td><td class="desc">This class stores values which allow <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> to save and resume SSL sessions </td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
7
annotated_dup.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
var annotated_dup =
|
||||
[
|
||||
[ "ssl_pem_decode_state", "structssl__pem__decode__state.html", "structssl__pem__decode__state" ],
|
||||
[ "SSLClient", "class_s_s_l_client.html", "class_s_s_l_client" ],
|
||||
[ "SSLClientParameters", "class_s_s_l_client_parameters.html", "class_s_s_l_client_parameters" ],
|
||||
[ "SSLSession", "class_s_s_l_session.html", "class_s_s_l_session" ]
|
||||
];
|
BIN
bc_s.png
Normal file
After Width: | Height: | Size: 676 B |
BIN
bdwn.png
Normal file
After Width: | Height: | Size: 147 B |
136
class_s_s_l_client-members.html
Normal file
|
@ -0,0 +1,136 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Member List</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('class_s_s_l_client.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">SSLClient Member List</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p>This is the complete list of members for <a class="el" href="class_s_s_l_client.html">SSLClient</a>, including all inherited members.</p>
|
||||
<table class="directory">
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#a0e775669b4a040fbd3f281dcbcd2de78">available</a>() override</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#ab97c0745f65a6c6009ac938b3b9912c3">connect</a>(IPAddress ip, uint16_t port) override</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#a248a5152cc3c3e7666bf5443bfd57c90">connect</a>(const char *host, uint16_t port) override</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#a5488f01ccfddfd9e41f54dfbda48bcae">connected</a>() override</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1">DebugLevel</a> enum name</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6cea">Error</a> enum name</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#aaf2192a6621fdf2f89cc26a9a1584f8c">flush</a>() override</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#a9a4e9c9877ab73cf7e82d6942cc7db21">getClient</a>()</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#a2bd012ef6f01df9694ba9fd0a3c227c3">getSession</a>(const char *host)</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#ae3f9e6f8e8a50e520c936239abecfd22">getSessionCount</a>() const</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#a2a178251978e0622f7e241da702ae498">getTimeout</a>() const</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#a4192ee3562c4806d4a6829356ca2636b">operator bool</a>()</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#a0c0b6f2ad25701d1e45adb613d072d86">peek</a>() override</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#a4c5420541a06213133ae308a3bca1c95">read</a>(uint8_t *buf, size_t size) override</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#aef1b52f4ad9633126cb68739175920eb">read</a>() override</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#ad5d9d8a4187a3f8918bf66af83e733c4">removeSession</a>(const char *host)</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#aeee217b5558dfb0724f2319888a77256">setMutualAuthParams</a>(const SSLClientParameters &params)</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#a8da354f30537c1064d554921937a73ae">setTimeout</a>(unsigned int t)</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#ab285c2f5a03124558ef7f74b9f3d12ad">setVerificationTime</a>(uint32_t days, uint32_t seconds)</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa6a9cc2412a53b5981e937a41523eece5">SSL_BR_CONNECT_FAIL</a> enum value</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa37bef298be71b84a57e59fadbfbd9016">SSL_BR_WRITE_ERROR</a> enum value</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa7510402478ffbecd6e1aa3811b175cfd">SSL_CLIENT_CONNECT_FAIL</a> enum value</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaab8581e1172fbf15067d435706d3a03a8">SSL_CLIENT_WRTIE_ERROR</a> enum value</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1ad1cf0d4d876daa655edb8331bfe2ce39">SSL_DUMP</a> enum value</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a199742ec5c99c72d9cede1fda0f125c5">SSL_ERROR</a> enum value</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a8d5f7561f9cc0a2f3e5f362b02f4a5b2">SSL_INFO</a> enum value</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaaf66f8d5f6601f9e7607b78bf7a07fc84">SSL_INTERNAL_ERROR</a> enum value</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a24122d1e1bb724237f305a0b4a21ff75">SSL_NONE</a> enum value</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa18dbddc0a3d4a94ee0f298fe55a06a94">SSL_OK</a> enum value</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa0a4f8af0226cf29ede8f6fe4a9047b08">SSL_OUT_OF_MEMORY</a> enum value</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a26f3e5f1481f3ea22ea4ab5370b0fa97">SSL_WARN</a> enum value</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#a68f026a625ca1ccd1aba87bb6e670376">SSLClient</a>(Client &client, const br_x509_trust_anchor *trust_anchors, const size_t trust_anchors_num, const int analog_pin, const size_t max_sessions=1, const DebugLevel debug=SSL_WARN)</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#ad8ed697371748e31e01c3f697bc36cbe">stop</a>() override</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client.html#a03c7926938acd57cfc3b982edf725a86">write</a>(const uint8_t *buf, size_t size) override</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client.html#a7343a58457b4659f83b61cac1f442c3d">write</a>(uint8_t b) override</td><td class="entry"><a class="el" href="class_s_s_l_client.html">SSLClient</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
</table></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
1032
class_s_s_l_client.html
Normal file
40
class_s_s_l_client.js
Normal file
|
@ -0,0 +1,40 @@
|
|||
var class_s_s_l_client =
|
||||
[
|
||||
[ "DebugLevel", "class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1", [
|
||||
[ "SSL_NONE", "class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a24122d1e1bb724237f305a0b4a21ff75", null ],
|
||||
[ "SSL_ERROR", "class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a199742ec5c99c72d9cede1fda0f125c5", null ],
|
||||
[ "SSL_WARN", "class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a26f3e5f1481f3ea22ea4ab5370b0fa97", null ],
|
||||
[ "SSL_INFO", "class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a8d5f7561f9cc0a2f3e5f362b02f4a5b2", null ],
|
||||
[ "SSL_DUMP", "class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1ad1cf0d4d876daa655edb8331bfe2ce39", null ]
|
||||
] ],
|
||||
[ "Error", "class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6cea", [
|
||||
[ "SSL_OK", "class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa18dbddc0a3d4a94ee0f298fe55a06a94", null ],
|
||||
[ "SSL_CLIENT_CONNECT_FAIL", "class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa7510402478ffbecd6e1aa3811b175cfd", null ],
|
||||
[ "SSL_BR_CONNECT_FAIL", "class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa6a9cc2412a53b5981e937a41523eece5", null ],
|
||||
[ "SSL_CLIENT_WRTIE_ERROR", "class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaab8581e1172fbf15067d435706d3a03a8", null ],
|
||||
[ "SSL_BR_WRITE_ERROR", "class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa37bef298be71b84a57e59fadbfbd9016", null ],
|
||||
[ "SSL_INTERNAL_ERROR", "class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaaf66f8d5f6601f9e7607b78bf7a07fc84", null ],
|
||||
[ "SSL_OUT_OF_MEMORY", "class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa0a4f8af0226cf29ede8f6fe4a9047b08", null ]
|
||||
] ],
|
||||
[ "SSLClient", "class_s_s_l_client.html#a68f026a625ca1ccd1aba87bb6e670376", null ],
|
||||
[ "available", "class_s_s_l_client.html#a0e775669b4a040fbd3f281dcbcd2de78", null ],
|
||||
[ "connect", "class_s_s_l_client.html#a248a5152cc3c3e7666bf5443bfd57c90", null ],
|
||||
[ "connect", "class_s_s_l_client.html#ab97c0745f65a6c6009ac938b3b9912c3", null ],
|
||||
[ "connected", "class_s_s_l_client.html#a5488f01ccfddfd9e41f54dfbda48bcae", null ],
|
||||
[ "flush", "class_s_s_l_client.html#aaf2192a6621fdf2f89cc26a9a1584f8c", null ],
|
||||
[ "getClient", "class_s_s_l_client.html#a9a4e9c9877ab73cf7e82d6942cc7db21", null ],
|
||||
[ "getSession", "class_s_s_l_client.html#a2bd012ef6f01df9694ba9fd0a3c227c3", null ],
|
||||
[ "getSessionCount", "class_s_s_l_client.html#ae3f9e6f8e8a50e520c936239abecfd22", null ],
|
||||
[ "getTimeout", "class_s_s_l_client.html#a2a178251978e0622f7e241da702ae498", null ],
|
||||
[ "operator bool", "class_s_s_l_client.html#a4192ee3562c4806d4a6829356ca2636b", null ],
|
||||
[ "peek", "class_s_s_l_client.html#a0c0b6f2ad25701d1e45adb613d072d86", null ],
|
||||
[ "read", "class_s_s_l_client.html#aef1b52f4ad9633126cb68739175920eb", null ],
|
||||
[ "read", "class_s_s_l_client.html#a4c5420541a06213133ae308a3bca1c95", null ],
|
||||
[ "removeSession", "class_s_s_l_client.html#ad5d9d8a4187a3f8918bf66af83e733c4", null ],
|
||||
[ "setMutualAuthParams", "class_s_s_l_client.html#aeee217b5558dfb0724f2319888a77256", null ],
|
||||
[ "setTimeout", "class_s_s_l_client.html#a8da354f30537c1064d554921937a73ae", null ],
|
||||
[ "setVerificationTime", "class_s_s_l_client.html#ab285c2f5a03124558ef7f74b9f3d12ad", null ],
|
||||
[ "stop", "class_s_s_l_client.html#ad8ed697371748e31e01c3f697bc36cbe", null ],
|
||||
[ "write", "class_s_s_l_client.html#a03c7926938acd57cfc3b982edf725a86", null ],
|
||||
[ "write", "class_s_s_l_client.html#a7343a58457b4659f83b61cac1f442c3d", null ]
|
||||
];
|
BIN
class_s_s_l_client.png
Normal file
After Width: | Height: | Size: 380 B |
108
class_s_s_l_client_parameters-members.html
Normal file
|
@ -0,0 +1,108 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Member List</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('class_s_s_l_client_parameters.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">SSLClientParameters Member List</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p>This is the complete list of members for <a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a>, including all inherited members.</p>
|
||||
<table class="directory">
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html#a12e44f4b8340ef7f1dcbbed7649e4bef">fromDER</a>(const char *cert_der, const size_t cert_len, const char *key_der, const size_t key_len)</td><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html#ac5ddf993f7d560581297471593051ea6">fromPEM</a>(const char *cert_pem, const size_t cert_len, const char *key_pem, const size_t key_len)</td><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html#af5686b2c601812f55477a7089b3b2c2d">getCertChain</a>() const</td><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html#a90d581703308881714d64d1ada785ad2">getCertType</a>() const</td><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html#ad9beb80ce98ed9aa34db28783f0264c5">getECKey</a>() const</td><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html#a82c21b0ae4690a6b7842a0d74b12f67f">getRSAKey</a>() const</td><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html#a97213b5554e90908fbf284669b5f22f3">SSLClientParameters</a>(const char *cert, const size_t cert_len, const char *key, const size_t key_len, bool is_der)</td><td class="entry"><a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
|
||||
</table></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
431
class_s_s_l_client_parameters.html
Normal file
|
@ -0,0 +1,431 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: SSLClientParameters Class Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('class_s_s_l_client_parameters.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#pub-methods">Public Member Functions</a> |
|
||||
<a href="#pub-static-methods">Static Public Member Functions</a> |
|
||||
<a href="#pro-methods">Protected Member Functions</a> |
|
||||
<a href="class_s_s_l_client_parameters-members.html">List of all members</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">SSLClientParameters Class Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p>This class stores data required for <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> to use mutual authentication.
|
||||
<a href="class_s_s_l_client_parameters.html#details">More...</a></p>
|
||||
|
||||
<p><code>#include <<a class="el" href="_s_s_l_client_parameters_8h_source.html">SSLClientParameters.h</a>></code></p>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
|
||||
Public Member Functions</h2></td></tr>
|
||||
<tr class="memitem:af5686b2c601812f55477a7089b3b2c2d"><td class="memItemLeft" align="right" valign="top">const br_x509_certificate * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_s_l_client_parameters.html#af5686b2c601812f55477a7089b3b2c2d">getCertChain</a> () const</td></tr>
|
||||
<tr class="separator:af5686b2c601812f55477a7089b3b2c2d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a90d581703308881714d64d1ada785ad2"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_s_l_client_parameters.html#a90d581703308881714d64d1ada785ad2">getCertType</a> () const</td></tr>
|
||||
<tr class="separator:a90d581703308881714d64d1ada785ad2"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ad9beb80ce98ed9aa34db28783f0264c5"><td class="memItemLeft" align="right" valign="top">const br_ec_private_key * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_s_l_client_parameters.html#ad9beb80ce98ed9aa34db28783f0264c5">getECKey</a> () const</td></tr>
|
||||
<tr class="separator:ad9beb80ce98ed9aa34db28783f0264c5"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a82c21b0ae4690a6b7842a0d74b12f67f"><td class="memItemLeft" align="right" valign="top">const br_rsa_private_key * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_s_l_client_parameters.html#a82c21b0ae4690a6b7842a0d74b12f67f">getRSAKey</a> () const</td></tr>
|
||||
<tr class="separator:a82c21b0ae4690a6b7842a0d74b12f67f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
|
||||
Static Public Member Functions</h2></td></tr>
|
||||
<tr class="memitem:ac5ddf993f7d560581297471593051ea6"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_s_l_client_parameters.html#ac5ddf993f7d560581297471593051ea6">fromPEM</a> (const char *cert_pem, const size_t cert_len, const char *key_pem, const size_t key_len)</td></tr>
|
||||
<tr class="memdesc:ac5ddf993f7d560581297471593051ea6"><td class="mdescLeft"> </td><td class="mdescRight">Create mutual authentication parameters from a PEM certificate and private key. <a href="class_s_s_l_client_parameters.html#ac5ddf993f7d560581297471593051ea6">More...</a><br /></td></tr>
|
||||
<tr class="separator:ac5ddf993f7d560581297471593051ea6"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a12e44f4b8340ef7f1dcbbed7649e4bef"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_s_l_client_parameters.html#a12e44f4b8340ef7f1dcbbed7649e4bef">fromDER</a> (const char *cert_der, const size_t cert_len, const char *key_der, const size_t key_len)</td></tr>
|
||||
<tr class="memdesc:a12e44f4b8340ef7f1dcbbed7649e4bef"><td class="mdescLeft"> </td><td class="mdescRight">Create mutual authentication parameters from a DER certificate and private key. <a href="class_s_s_l_client_parameters.html#a12e44f4b8340ef7f1dcbbed7649e4bef">More...</a><br /></td></tr>
|
||||
<tr class="separator:a12e44f4b8340ef7f1dcbbed7649e4bef"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table><table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
|
||||
Protected Member Functions</h2></td></tr>
|
||||
<tr class="memitem:a97213b5554e90908fbf284669b5f22f3"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_s_l_client_parameters.html#a97213b5554e90908fbf284669b5f22f3">SSLClientParameters</a> (const char *cert, const size_t cert_len, const char *key, const size_t key_len, bool is_der)</td></tr>
|
||||
<tr class="separator:a97213b5554e90908fbf284669b5f22f3"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>This class stores data required for <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> to use mutual authentication. </p>
|
||||
<p><a class="el" href="_s_s_l_client_parameters_8h.html">SSLClientParameters.h</a></p>
|
||||
<p>This file contains a simple utility class to store parameters about an SSL Session for reuse later.</p>
|
||||
<p>TLS mutual authentication is a process in which both the server and client perform cryptographic operations to verify the authenticity of eachother, for more information check out this article: <a href="https://medium.com/sitewards/the-magic-of-tls-x509-and-mutual-authentication-explained-b2162dec4401">https://medium.com/sitewards/the-magic-of-tls-x509-and-mutual-authentication-explained-b2162dec4401</a> . If this struct is provided to <a class="el" href="class_s_s_l_client.html#a68f026a625ca1ccd1aba87bb6e670376" title="Initialize SSLClient with all of the prerequisites needed.">SSLClient::SSLClient</a> via <a class="el" href="class_s_s_l_client.html#aeee217b5558dfb0724f2319888a77256" title="Add a client certificate and enable support for mutual auth.">SSLClient::setMutualAuthParams</a>, <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> will automatically send a client certificate if one is requested by the server. This will happen for all <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> connections, and may cause issues for websites that do not need mutual authentication—as a result, please only turn on mutual authentication if you are sure it is neccesary.</p>
|
||||
<p><a class="el" href="class_s_s_l_client_parameters.html" title="This class stores data required for SSLClient to use mutual authentication.">SSLClientParameters</a> supports both ECC and RSA client certificates. I recommend using ECC certificates if possible, as <a class="el" href="class_s_s_l_client_parameters.html" title="This class stores data required for SSLClient to use mutual authentication.">SSLClientParameters</a> will make a copy of both the certificate and the private key in memory, and ECC keys tend to be smaller than RSA ones. </p>
|
||||
</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
|
||||
<a id="a97213b5554e90908fbf284669b5f22f3"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a97213b5554e90908fbf284669b5f22f3">◆ </a></span>SSLClientParameters()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">SSLClientParameters::SSLClientParameters </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">const char * </td>
|
||||
<td class="paramname"><em>cert</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">const size_t </td>
|
||||
<td class="paramname"><em>cert_len</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">const char * </td>
|
||||
<td class="paramname"><em>key</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">const size_t </td>
|
||||
<td class="paramname"><em>key_len</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">bool </td>
|
||||
<td class="paramname"><em>is_der</em> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<h2 class="groupheader">Member Function Documentation</h2>
|
||||
<a id="a12e44f4b8340ef7f1dcbbed7649e4bef"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a12e44f4b8340ef7f1dcbbed7649e4bef">◆ </a></span>fromDER()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a> SSLClientParameters::fromDER </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">const char * </td>
|
||||
<td class="paramname"><em>cert_der</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">const size_t </td>
|
||||
<td class="paramname"><em>cert_len</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">const char * </td>
|
||||
<td class="paramname"><em>key_der</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">const size_t </td>
|
||||
<td class="paramname"><em>key_len</em> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">static</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Create mutual authentication parameters from a DER certificate and private key. </p>
|
||||
<p>Use this function to create a mutual tls context from a DER client certificate and DER private key. This function will copy the certificate and private key, extract the needed information from the private key, and store both that information and the copied cert into a <a class="el" href="class_s_s_l_client_parameters.html" title="This class stores data required for SSLClient to use mutual authentication.">SSLClientParameters</a> object. Given the key parsed correctly, you can then use <a class="el" href="class_s_s_l_client.html#aeee217b5558dfb0724f2319888a77256" title="Add a client certificate and enable support for mutual auth.">SSLClient::setMutualAuthParams</a> at the begining of your sketch to enable mTLS with <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a>. This function supports both ECC and RSA certificate/private keys (use EC keys wherever possible, as they are signifigantly smaller and faster), however <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> only supports the p256, p384, and p512 curves for ECC.</p>
|
||||
<p>Because <a class="el" href="class_s_s_l_client_parameters.html" title="This class stores data required for SSLClient to use mutual authentication.">SSLClientParameters</a> creates a copy of both the certificate and key, you do not need to ensure that the data pointed to by cert_der or key_der is accessible after this function (i.e. you can free them afterwards).</p>
|
||||
<p>Please note that if the private key is incorrect, this function will not report an error, and instead <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> will fall back to regular TLS when making a connection.</p>
|
||||
<dl class="params"><dt>Parameters</dt><dd>
|
||||
<table class="params">
|
||||
<tr><td class="paramname">cert_der</td><td>A DER encoded certificate, can be ECC or RSA. </td></tr>
|
||||
<tr><td class="paramname">cert_len</td><td>The number of bytes in cert_der. </td></tr>
|
||||
<tr><td class="paramname">key_der</td><td>A DER encoded private key, can be ECC or RSA. </td></tr>
|
||||
<tr><td class="paramname">key_len</td><td>The number of bytes in key_ders </td></tr>
|
||||
</table>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>An <a class="el" href="class_s_s_l_client_parameters.html" title="This class stores data required for SSLClient to use mutual authentication.">SSLClientParameters</a> context, to be used with <a class="el" href="class_s_s_l_client.html#aeee217b5558dfb0724f2319888a77256" title="Add a client certificate and enable support for mutual auth.">SSLClient::setMutualAuthParams</a>. </dd></dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="ac5ddf993f7d560581297471593051ea6"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ac5ddf993f7d560581297471593051ea6">◆ </a></span>fromPEM()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname"><a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a> SSLClientParameters::fromPEM </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">const char * </td>
|
||||
<td class="paramname"><em>cert_pem</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">const size_t </td>
|
||||
<td class="paramname"><em>cert_len</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">const char * </td>
|
||||
<td class="paramname"><em>key_pem</em>, </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="paramkey"></td>
|
||||
<td></td>
|
||||
<td class="paramtype">const size_t </td>
|
||||
<td class="paramname"><em>key_len</em> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>)</td>
|
||||
<td></td><td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">static</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Create mutual authentication parameters from a PEM certificate and private key. </p>
|
||||
<p>Use this function to create a mutual tls context from a PEM client certificate and PEM private key. This function will convert the PEM certificates into DER format (creating a copy in the process), extract the needed information from the private key, and store that information into a <a class="el" href="class_s_s_l_client_parameters.html" title="This class stores data required for SSLClient to use mutual authentication.">SSLClientParameters</a> object. Given the certifiate and key parsed correctly, you can then use <a class="el" href="class_s_s_l_client.html#aeee217b5558dfb0724f2319888a77256" title="Add a client certificate and enable support for mutual auth.">SSLClient::setMutualAuthParams</a> at the begining of your sketch to enable mTLS with <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a>. This function supports both ECC and RSA certificate/private keys (use EC keys wherever possible, as they are signifigantly smaller and faster), however <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> only supports the p256, p384, and p512 curves for ECC.</p>
|
||||
<p>Because <a class="el" href="class_s_s_l_client_parameters.html" title="This class stores data required for SSLClient to use mutual authentication.">SSLClientParameters</a> creates a copy of both the certificate and key, you do not need to ensure that the data pointed to by cert_pem or key_pem is accessible after this function (i.e. you can free them afterwards).</p>
|
||||
<p>Please note that if the certificate or private key are incorrect, this function will not report an error, and instead <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> will fall back to regular TLS when making a connection.</p>
|
||||
<dl class="params"><dt>Parameters</dt><dd>
|
||||
<table class="params">
|
||||
<tr><td class="paramname">cert_pem</td><td>A PEM formatted certificate, including the "BEGIN" and "END" header/footers. Can be ECC or RSA. cert_pem supports both LF and CRLF for endlines, but all other constraints on a valid PEM file apply. </td></tr>
|
||||
<tr><td class="paramname">cert_len</td><td>The number of bytes in cert_pem. </td></tr>
|
||||
<tr><td class="paramname">key_pem</td><td>A PEM formatted private key, including the "BEGIN" and "END" header/footers. Can be ECC or RSA. key_pem supports both LF and CRLF for endlines, but all other constraints \ on a valid PEM file apply. </td></tr>
|
||||
<tr><td class="paramname">key_len</td><td>The number of bytes in key_pem </td></tr>
|
||||
</table>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="section return"><dt>Returns</dt><dd>An <a class="el" href="class_s_s_l_client_parameters.html" title="This class stores data required for SSLClient to use mutual authentication.">SSLClientParameters</a> context, to be used with <a class="el" href="class_s_s_l_client.html#aeee217b5558dfb0724f2319888a77256" title="Add a client certificate and enable support for mutual auth.">SSLClient::setMutualAuthParams</a>. </dd></dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="af5686b2c601812f55477a7089b3b2c2d"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#af5686b2c601812f55477a7089b3b2c2d">◆ </a></span>getCertChain()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">const br_x509_certificate* SSLClientParameters::getCertChain </td>
|
||||
<td>(</td>
|
||||
<td class="paramname"></td><td>)</td>
|
||||
<td> const</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<p>mTLS information used by <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> during authentication </p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a90d581703308881714d64d1ada785ad2"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a90d581703308881714d64d1ada785ad2">◆ </a></span>getCertType()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">int SSLClientParameters::getCertType </td>
|
||||
<td>(</td>
|
||||
<td class="paramname"></td><td>)</td>
|
||||
<td> const</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<p>mTLS information used by <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> during authentication </p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="ad9beb80ce98ed9aa34db28783f0264c5"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#ad9beb80ce98ed9aa34db28783f0264c5">◆ </a></span>getECKey()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">const br_ec_private_key* SSLClientParameters::getECKey </td>
|
||||
<td>(</td>
|
||||
<td class="paramname"></td><td>)</td>
|
||||
<td> const</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<p>mTLS information used by <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> during authentication </p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="a82c21b0ae4690a6b7842a0d74b12f67f"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a82c21b0ae4690a6b7842a0d74b12f67f">◆ </a></span>getRSAKey()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">const br_rsa_private_key* SSLClientParameters::getRSAKey </td>
|
||||
<td>(</td>
|
||||
<td class="paramname"></td><td>)</td>
|
||||
<td> const</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
<p>mTLS information used by <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> during authentication </p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<hr/>The documentation for this class was generated from the following files:<ul>
|
||||
<li>src/<a class="el" href="_s_s_l_client_parameters_8h_source.html">SSLClientParameters.h</a></li>
|
||||
<li>src/<a class="el" href="_s_s_l_client_parameters_8cpp.html">SSLClientParameters.cpp</a></li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
8
class_s_s_l_client_parameters.js
Normal file
|
@ -0,0 +1,8 @@
|
|||
var class_s_s_l_client_parameters =
|
||||
[
|
||||
[ "SSLClientParameters", "class_s_s_l_client_parameters.html#a97213b5554e90908fbf284669b5f22f3", null ],
|
||||
[ "getCertChain", "class_s_s_l_client_parameters.html#af5686b2c601812f55477a7089b3b2c2d", null ],
|
||||
[ "getCertType", "class_s_s_l_client_parameters.html#a90d581703308881714d64d1ada785ad2", null ],
|
||||
[ "getECKey", "class_s_s_l_client_parameters.html#ad9beb80ce98ed9aa34db28783f0264c5", null ],
|
||||
[ "getRSAKey", "class_s_s_l_client_parameters.html#a82c21b0ae4690a6b7842a0d74b12f67f", null ]
|
||||
];
|
104
class_s_s_l_session-members.html
Normal file
|
@ -0,0 +1,104 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Member List</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('class_s_s_l_session.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">SSLSession Member List</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p>This is the complete list of members for <a class="el" href="class_s_s_l_session.html">SSLSession</a>, including all inherited members.</p>
|
||||
<table class="directory">
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_session.html#a825373c5ba1aa6c45e74dc8a72b21820">get_hostname</a>() const</td><td class="entry"><a class="el" href="class_s_s_l_session.html">SSLSession</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
<tr><td class="entry"><a class="el" href="class_s_s_l_session.html#a0c8e01b0944c1f4b0ec6d4c423c95b74">SSLSession</a>(const char *hostname)</td><td class="entry"><a class="el" href="class_s_s_l_session.html">SSLSession</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
<tr class="even"><td class="entry"><a class="el" href="class_s_s_l_session.html#acbe6549b55d50541d09a16f770e65afc">to_br_session</a>()</td><td class="entry"><a class="el" href="class_s_s_l_session.html">SSLSession</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
|
||||
</table></div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
222
class_s_s_l_session.html
Normal file
|
@ -0,0 +1,222 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: SSLSession Class Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('class_s_s_l_session.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#pub-methods">Public Member Functions</a> |
|
||||
<a href="class_s_s_l_session-members.html">List of all members</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">SSLSession Class Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p>This class stores values which allow <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> to save and resume SSL sessions.
|
||||
<a href="class_s_s_l_session.html#details">More...</a></p>
|
||||
|
||||
<p><code>#include <<a class="el" href="_s_s_l_session_8h_source.html">SSLSession.h</a>></code></p>
|
||||
<div class="dynheader">
|
||||
Inheritance diagram for SSLSession:</div>
|
||||
<div class="dyncontent">
|
||||
<div class="center">
|
||||
<img src="class_s_s_l_session.png" alt=""/>
|
||||
</div></div>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
|
||||
Public Member Functions</h2></td></tr>
|
||||
<tr class="memitem:a0c8e01b0944c1f4b0ec6d4c423c95b74"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_s_l_session.html#a0c8e01b0944c1f4b0ec6d4c423c95b74">SSLSession</a> (const char *hostname)</td></tr>
|
||||
<tr class="memdesc:a0c8e01b0944c1f4b0ec6d4c423c95b74"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="class_s_s_l_session.html" title="This class stores values which allow SSLClient to save and resume SSL sessions.">SSLSession</a> constructor. <a href="class_s_s_l_session.html#a0c8e01b0944c1f4b0ec6d4c423c95b74">More...</a><br /></td></tr>
|
||||
<tr class="separator:a0c8e01b0944c1f4b0ec6d4c423c95b74"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:a825373c5ba1aa6c45e74dc8a72b21820"><td class="memItemLeft" align="right" valign="top">const String & </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_s_l_session.html#a825373c5ba1aa6c45e74dc8a72b21820">get_hostname</a> () const</td></tr>
|
||||
<tr class="memdesc:a825373c5ba1aa6c45e74dc8a72b21820"><td class="mdescLeft"> </td><td class="mdescRight">Get the hostname string associated with this session. <a href="class_s_s_l_session.html#a825373c5ba1aa6c45e74dc8a72b21820">More...</a><br /></td></tr>
|
||||
<tr class="separator:a825373c5ba1aa6c45e74dc8a72b21820"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:acbe6549b55d50541d09a16f770e65afc"><td class="memItemLeft" align="right" valign="top">br_ssl_session_parameters * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_s_l_session.html#acbe6549b55d50541d09a16f770e65afc">to_br_session</a> ()</td></tr>
|
||||
<tr class="memdesc:acbe6549b55d50541d09a16f770e65afc"><td class="mdescLeft"> </td><td class="mdescRight">Returns a pointer to the ::br_ssl_session_parameters component of this class. <a href="class_s_s_l_session.html#acbe6549b55d50541d09a16f770e65afc">More...</a><br /></td></tr>
|
||||
<tr class="separator:acbe6549b55d50541d09a16f770e65afc"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||
<div class="textblock"><p>This class stores values which allow <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> to save and resume SSL sessions. </p>
|
||||
<p><a class="el" href="_s_s_l_session_8h.html">SSLSession.h</a></p>
|
||||
<p>This file contains a simple utility class to store parameters about an SSL Session for reuse later.</p>
|
||||
<p>This class was created to extend the values stored in br_ssl_session_parameters, which allow BearSSL to resume an SSL session. When testing BearSSL's session resumption feature, it was observed that BearSSL can only resume a session that was was started with the same server. This becomes an issue when using repeated requests to a domain name which can resolve to multiple IP addresses ("api.github.com"), as the device will switch between two or three servers. Since BearSSL only stores one session at a time, this results in session resumption being few and far between.</p>
|
||||
<p>To remedy this problem, an <a class="el" href="class_s_s_l_session.html" title="This class stores values which allow SSLClient to save and resume SSL sessions.">SSLSession</a> stores the IPAddress and hostname, along with the parameters in br_ssl_session_parameters struct. Using this data, <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> is able to remember which IPAddress is associated with which session, allowing it to reconnect to the last IPAddress, as opposed to any associated with the domain. </p>
|
||||
</div><h2 class="groupheader">Constructor & Destructor Documentation</h2>
|
||||
<a id="a0c8e01b0944c1f4b0ec6d4c423c95b74"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a0c8e01b0944c1f4b0ec6d4c423c95b74">◆ </a></span>SSLSession()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">SSLSession::SSLSession </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">const char * </td>
|
||||
<td class="paramname"><em>hostname</em></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p><a class="el" href="class_s_s_l_session.html" title="This class stores values which allow SSLClient to save and resume SSL sessions.">SSLSession</a> constructor. </p>
|
||||
<p>Sets all parameters to zero, and invalidates the session </p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<h2 class="groupheader">Member Function Documentation</h2>
|
||||
<a id="a825373c5ba1aa6c45e74dc8a72b21820"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a825373c5ba1aa6c45e74dc8a72b21820">◆ </a></span>get_hostname()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">const String& SSLSession::get_hostname </td>
|
||||
<td>(</td>
|
||||
<td class="paramname"></td><td>)</td>
|
||||
<td> const</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Get the hostname string associated with this session. </p>
|
||||
<dl class="section return"><dt>Returns</dt><dd>A String object or "" if there is no hostname </dd></dl>
|
||||
<dl class="section pre"><dt>Precondition</dt><dd>must check isValidSession before getting this value, as if this session in invalid this value is not guarenteed to be reset to "". </dd></dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<a id="acbe6549b55d50541d09a16f770e65afc"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#acbe6549b55d50541d09a16f770e65afc">◆ </a></span>to_br_session()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="mlabels">
|
||||
<tr>
|
||||
<td class="mlabels-left">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">br_ssl_session_parameters* SSLSession::to_br_session </td>
|
||||
<td>(</td>
|
||||
<td class="paramname"></td><td>)</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="mlabels-right">
|
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
<p>Returns a pointer to the ::br_ssl_session_parameters component of this class. </p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<hr/>The documentation for this class was generated from the following file:<ul>
|
||||
<li>src/<a class="el" href="_s_s_l_session_8h_source.html">SSLSession.h</a></li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="class_s_s_l_session.html">SSLSession</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
6
class_s_s_l_session.js
Normal file
|
@ -0,0 +1,6 @@
|
|||
var class_s_s_l_session =
|
||||
[
|
||||
[ "SSLSession", "class_s_s_l_session.html#a0c8e01b0944c1f4b0ec6d4c423c95b74", null ],
|
||||
[ "get_hostname", "class_s_s_l_session.html#a825373c5ba1aa6c45e74dc8a72b21820", null ],
|
||||
[ "to_br_session", "class_s_s_l_session.html#acbe6549b55d50541d09a16f770e65afc", null ]
|
||||
];
|
BIN
class_s_s_l_session.png
Normal file
After Width: | Height: | Size: 609 B |
104
classes.html
Normal file
|
@ -0,0 +1,104 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Class Index</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('classes.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Class Index</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="qindex"><a class="qindex" href="#letter_S">S</a></div>
|
||||
<div class="classindex">
|
||||
<dl class="classindex even">
|
||||
<dt class="alphachar"><a name="letter_S">S</a></dt>
|
||||
<dd><a class="el" href="structssl__pem__decode__state.html">ssl_pem_decode_state</a></dd><dd><a class="el" href="class_s_s_l_client.html">SSLClient</a></dd><dd><a class="el" href="class_s_s_l_client_parameters.html">SSLClientParameters</a></dd><dd><a class="el" href="class_s_s_l_session.html">SSLSession</a></dd></dl>
|
||||
</div>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
BIN
closed.png
Normal file
After Width: | Height: | Size: 132 B |
115
dir_68267d1309a1af8e8297ef4c3efbcdba.html
Normal file
|
@ -0,0 +1,115 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: src Directory Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('dir_68267d1309a1af8e8297ef4c3efbcdba.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">src Directory Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
|
||||
Files</h2></td></tr>
|
||||
<tr class="memitem:_s_s_l_client_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="_s_s_l_client_8cpp.html">SSLClient.cpp</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:_s_s_l_client_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="_s_s_l_client_8h.html">SSLClient.h</a> <a href="_s_s_l_client_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:_s_s_l_client_parameters_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="_s_s_l_client_parameters_8cpp.html">SSLClientParameters.cpp</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:_s_s_l_client_parameters_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="_s_s_l_client_parameters_8h.html">SSLClientParameters.h</a> <a href="_s_s_l_client_parameters_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:_s_s_l_session_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="_s_s_l_session_8h.html">SSLSession.h</a> <a href="_s_s_l_session_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:time__macros_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="time__macros_8h.html">time_macros.h</a> <a href="time__macros_8h_source.html">[code]</a></td></tr>
|
||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
15
dir_68267d1309a1af8e8297ef4c3efbcdba.js
Normal file
|
@ -0,0 +1,15 @@
|
|||
var dir_68267d1309a1af8e8297ef4c3efbcdba =
|
||||
[
|
||||
[ "SSLClient.cpp", "_s_s_l_client_8cpp.html", null ],
|
||||
[ "SSLClient.h", "_s_s_l_client_8h.html", [
|
||||
[ "SSLClient", "class_s_s_l_client.html", "class_s_s_l_client" ]
|
||||
] ],
|
||||
[ "SSLClientParameters.cpp", "_s_s_l_client_parameters_8cpp.html", "_s_s_l_client_parameters_8cpp" ],
|
||||
[ "SSLClientParameters.h", "_s_s_l_client_parameters_8h.html", [
|
||||
[ "SSLClientParameters", "class_s_s_l_client_parameters.html", "class_s_s_l_client_parameters" ]
|
||||
] ],
|
||||
[ "SSLSession.h", "_s_s_l_session_8h.html", [
|
||||
[ "SSLSession", "class_s_s_l_session.html", "class_s_s_l_session" ]
|
||||
] ],
|
||||
[ "time_macros.h", "time__macros_8h.html", "time__macros_8h" ]
|
||||
];
|
BIN
doc.png
Normal file
After Width: | Height: | Size: 746 B |
1793
doxygen.css
Normal file
26
doxygen.svg
Normal file
After Width: | Height: | Size: 15 KiB |
121
dynsections.js
Normal file
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@licend The above is the entire license notice for the JavaScript code in this file
|
||||
*/
|
||||
function toggleVisibility(linkObj)
|
||||
{
|
||||
var base = $(linkObj).attr('id');
|
||||
var summary = $('#'+base+'-summary');
|
||||
var content = $('#'+base+'-content');
|
||||
var trigger = $('#'+base+'-trigger');
|
||||
var src=$(trigger).attr('src');
|
||||
if (content.is(':visible')===true) {
|
||||
content.hide();
|
||||
summary.show();
|
||||
$(linkObj).addClass('closed').removeClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
content.show();
|
||||
summary.hide();
|
||||
$(linkObj).removeClass('closed').addClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function updateStripes()
|
||||
{
|
||||
$('table.directory tr').
|
||||
removeClass('even').filter(':visible:even').addClass('even');
|
||||
}
|
||||
|
||||
function toggleLevel(level)
|
||||
{
|
||||
$('table.directory tr').each(function() {
|
||||
var l = this.id.split('_').length-1;
|
||||
var i = $('#img'+this.id.substring(3));
|
||||
var a = $('#arr'+this.id.substring(3));
|
||||
if (l<level+1) {
|
||||
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
|
||||
a.html('▼');
|
||||
$(this).show();
|
||||
} else if (l==level+1) {
|
||||
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
|
||||
a.html('►');
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
function toggleFolder(id)
|
||||
{
|
||||
// the clicked row
|
||||
var currentRow = $('#row_'+id);
|
||||
|
||||
// all rows after the clicked row
|
||||
var rows = currentRow.nextAll("tr");
|
||||
|
||||
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||
|
||||
// only match elements AFTER this one (can't hide elements before)
|
||||
var childRows = rows.filter(function() { return this.id.match(re); });
|
||||
|
||||
// first row is visible we are HIDING
|
||||
if (childRows.filter(':first').is(':visible')===true) {
|
||||
// replace down arrow by right arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
currentRowSpans.filter(".arrow").html('►');
|
||||
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
|
||||
} else { // we are SHOWING
|
||||
// replace right arrow by down arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
|
||||
currentRowSpans.filter(".arrow").html('▼');
|
||||
// replace down arrows by right arrows for child rows
|
||||
var childRowsSpans = childRows.find("span");
|
||||
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
childRowsSpans.filter(".arrow").html('►');
|
||||
childRows.show(); //show all children
|
||||
}
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
|
||||
function toggleInherit(id)
|
||||
{
|
||||
var rows = $('tr.inherit.'+id);
|
||||
var img = $('tr.inherit_header.'+id+' img');
|
||||
var src = $(img).attr('src');
|
||||
if (rows.filter(':first').is(':visible')===true) {
|
||||
rows.css('display','none');
|
||||
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
rows.css('display','table-row'); // using show() causes jump in firefox
|
||||
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
}
|
||||
/* @license-end */
|
|
@ -1,74 +0,0 @@
|
|||
#ifndef _CERTIFICATES_H_
|
||||
#define _CERTIFICATES_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/* This file is auto-generated by the pycert_bearssl tool. Do not change it manually.
|
||||
* Certificates are BearSSL br_x509_trust_anchor format. Included certs:
|
||||
*
|
||||
* Index: 0
|
||||
* Label: Amazon Root CA 1
|
||||
* Subject: CN=Amazon Root CA 1,O=Amazon,C=US
|
||||
*/
|
||||
|
||||
#define TAs_NUM 1
|
||||
|
||||
static const unsigned char TA_DN0[] = {
|
||||
0x30, 0x39, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
|
||||
0x02, 0x55, 0x53, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x0a,
|
||||
0x13, 0x06, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x31, 0x19, 0x30, 0x17,
|
||||
0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x10, 0x41, 0x6d, 0x61, 0x7a, 0x6f,
|
||||
0x6e, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x20, 0x31,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_N0[] = {
|
||||
0xb2, 0x78, 0x80, 0x71, 0xca, 0x78, 0xd5, 0xe3, 0x71, 0xaf, 0x47, 0x80,
|
||||
0x50, 0x74, 0x7d, 0x6e, 0xd8, 0xd7, 0x88, 0x76, 0xf4, 0x99, 0x68, 0xf7,
|
||||
0x58, 0x21, 0x60, 0xf9, 0x74, 0x84, 0x01, 0x2f, 0xac, 0x02, 0x2d, 0x86,
|
||||
0xd3, 0xa0, 0x43, 0x7a, 0x4e, 0xb2, 0xa4, 0xd0, 0x36, 0xba, 0x01, 0xbe,
|
||||
0x8d, 0xdb, 0x48, 0xc8, 0x07, 0x17, 0x36, 0x4c, 0xf4, 0xee, 0x88, 0x23,
|
||||
0xc7, 0x3e, 0xeb, 0x37, 0xf5, 0xb5, 0x19, 0xf8, 0x49, 0x68, 0xb0, 0xde,
|
||||
0xd7, 0xb9, 0x76, 0x38, 0x1d, 0x61, 0x9e, 0xa4, 0xfe, 0x82, 0x36, 0xa5,
|
||||
0xe5, 0x4a, 0x56, 0xe4, 0x45, 0xe1, 0xf9, 0xfd, 0xb4, 0x16, 0xfa, 0x74,
|
||||
0xda, 0x9c, 0x9b, 0x35, 0x39, 0x2f, 0xfa, 0xb0, 0x20, 0x50, 0x06, 0x6c,
|
||||
0x7a, 0xd0, 0x80, 0xb2, 0xa6, 0xf9, 0xaf, 0xec, 0x47, 0x19, 0x8f, 0x50,
|
||||
0x38, 0x07, 0xdc, 0xa2, 0x87, 0x39, 0x58, 0xf8, 0xba, 0xd5, 0xa9, 0xf9,
|
||||
0x48, 0x67, 0x30, 0x96, 0xee, 0x94, 0x78, 0x5e, 0x6f, 0x89, 0xa3, 0x51,
|
||||
0xc0, 0x30, 0x86, 0x66, 0xa1, 0x45, 0x66, 0xba, 0x54, 0xeb, 0xa3, 0xc3,
|
||||
0x91, 0xf9, 0x48, 0xdc, 0xff, 0xd1, 0xe8, 0x30, 0x2d, 0x7d, 0x2d, 0x74,
|
||||
0x70, 0x35, 0xd7, 0x88, 0x24, 0xf7, 0x9e, 0xc4, 0x59, 0x6e, 0xbb, 0x73,
|
||||
0x87, 0x17, 0xf2, 0x32, 0x46, 0x28, 0xb8, 0x43, 0xfa, 0xb7, 0x1d, 0xaa,
|
||||
0xca, 0xb4, 0xf2, 0x9f, 0x24, 0x0e, 0x2d, 0x4b, 0xf7, 0x71, 0x5c, 0x5e,
|
||||
0x69, 0xff, 0xea, 0x95, 0x02, 0xcb, 0x38, 0x8a, 0xae, 0x50, 0x38, 0x6f,
|
||||
0xdb, 0xfb, 0x2d, 0x62, 0x1b, 0xc5, 0xc7, 0x1e, 0x54, 0xe1, 0x77, 0xe0,
|
||||
0x67, 0xc8, 0x0f, 0x9c, 0x87, 0x23, 0xd6, 0x3f, 0x40, 0x20, 0x7f, 0x20,
|
||||
0x80, 0xc4, 0x80, 0x4c, 0x3e, 0x3b, 0x24, 0x26, 0x8e, 0x04, 0xae, 0x6c,
|
||||
0x9a, 0xc8, 0xaa, 0x0d,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_E0[] = {
|
||||
0x01, 0x00, 0x01,
|
||||
};
|
||||
|
||||
static const br_x509_trust_anchor TAs[] = {
|
||||
{
|
||||
{ (unsigned char *)TA_DN0, sizeof TA_DN0 },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ .rsa = {
|
||||
(unsigned char *)TA_RSA_N0, sizeof TA_RSA_N0,
|
||||
(unsigned char *)TA_RSA_E0, sizeof TA_RSA_E0,
|
||||
} }
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* ifndef _CERTIFICATES_H_ */
|
|
@ -1,167 +0,0 @@
|
|||
/*
|
||||
Connect to AWS IOT using SSLClient and Wiz850io Ethernet Mdoule
|
||||
AWS_Root_CA.h is the trust anchor created using the Root CA from:
|
||||
https://www.amazontrust.com/repository/AmazonRootCA1.pem
|
||||
You can re-create it again using the python file present
|
||||
in SSLClient/tools/pycert_bearssl/pycert_bearssl.py
|
||||
python pycert_bearssl.py convert --no-search <certificate PEM file>
|
||||
refer: https://github.com/OPEnSLab-OSU/SSLClient/issues/17#issuecomment-700143405
|
||||
|
||||
Circuit:
|
||||
Ethernet shield WIZ850io:
|
||||
CS 10
|
||||
MOSI 11
|
||||
MISO 12
|
||||
SCK 13
|
||||
|
||||
created 10 October 2020
|
||||
by Ram Rohit Gannavarapu
|
||||
*/
|
||||
|
||||
#include <SPI.h>
|
||||
#include <EthernetLarge.h>
|
||||
#include <SSLClient.h>
|
||||
#include <PubSubClient.h>
|
||||
#include "AWS_Root_CA.h" // This file is created using AmazonRootCA1.pem from https://www.amazontrust.com/repository/AmazonRootCA1.pem
|
||||
|
||||
#define THING_NAME "<Thing_Name>"
|
||||
#define MQTT_PACKET_SIZE 1024
|
||||
|
||||
void MQTTPublish(const char *topic, char *payload);
|
||||
void updateThing();
|
||||
|
||||
const char my_cert[] = \
|
||||
"-----BEGIN CERTIFICATE-----\n" \
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \
|
||||
"-----END CERTIFICATE-----\n";
|
||||
|
||||
const char my_key[] = \
|
||||
"-----BEGIN RSA PRIVATE KEY-----\n" \
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \
|
||||
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" \
|
||||
"-----END RSA PRIVATE KEY-----\n";
|
||||
|
||||
SSLClientParameters mTLS = SSLClientParameters::fromPEM(my_cert, sizeof my_cert, my_key, sizeof my_key);
|
||||
|
||||
const char* mqttServer = "xxxxxxxxxxxx-ats.iot.us-east-1.amazonaws.com";
|
||||
const char publishShadowUpdate[] = "$aws/things/" THING_NAME "/shadow/update";
|
||||
char publishPayload[MQTT_PACKET_SIZE];
|
||||
char *subscribeTopic[5] =
|
||||
{
|
||||
"$aws/things/" THING_NAME "/shadow/update/accepted",
|
||||
"$aws/things/" THING_NAME "/shadow/update/rejected",
|
||||
"$aws/things/" THING_NAME "/shadow/update/delta",
|
||||
"$aws/things/" THING_NAME "/shadow/get/accepted",
|
||||
"$aws/things/" THING_NAME "/shadow/get/rejected"
|
||||
};
|
||||
|
||||
void callback(char* topic, byte* payload, unsigned int length)
|
||||
{
|
||||
Serial.print("Message arrived [");
|
||||
Serial.print(topic);
|
||||
Serial.print("] ");
|
||||
for (int i=0;i<length;i++)
|
||||
{
|
||||
Serial.print((char)payload[i]);
|
||||
}
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
|
||||
EthernetClient ethClient;
|
||||
SSLClient ethClientSSL(ethClient, TAs, (size_t)TAs_NUM, A5);
|
||||
PubSubClient mqtt(mqttServer, 8883, callback, ethClientSSL);
|
||||
|
||||
// Enter a MAC address for your controller below.
|
||||
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
|
||||
byte mac[] = {
|
||||
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
|
||||
};
|
||||
|
||||
void reconnect()
|
||||
{
|
||||
while (!mqtt.connected())
|
||||
{
|
||||
Serial.print("Attempting MQTT connection...");
|
||||
if (mqtt.connect("arduinoClient"))
|
||||
{
|
||||
Serial.println("connected");
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
// Serial.println(subscribeTopic[i]);
|
||||
mqtt.subscribe(subscribeTopic[i]);
|
||||
}
|
||||
Serial.println("Started updateThing ");
|
||||
updateThing();
|
||||
Serial.println("Done updateThing ");
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.print("failed, rc=");
|
||||
Serial.print(mqtt.state());
|
||||
Serial.println(" try again in 5 seconds");
|
||||
delay(5000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void setup() {
|
||||
// You can use Ethernet.init(pin) to configure the CS pin
|
||||
Ethernet.init(10); // Most Arduino shields
|
||||
|
||||
// Open serial communications and wait for port to open:
|
||||
Serial.begin(9600);
|
||||
while (!Serial) {
|
||||
; // wait for serial port to connect. Needed for native USB port only
|
||||
}
|
||||
ethClientSSL.setMutualAuthParams(mTLS);
|
||||
mqtt.setBufferSize(MQTT_PACKET_SIZE);
|
||||
|
||||
// start the Ethernet connection:
|
||||
Serial.println("Initialize Ethernet with DHCP:");
|
||||
if (Ethernet.begin(mac) == 0) {
|
||||
Serial.println("Failed to configure Ethernet using DHCP");
|
||||
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
|
||||
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
|
||||
} else if (Ethernet.linkStatus() == LinkOFF) {
|
||||
Serial.println("Ethernet cable is not connected.");
|
||||
}
|
||||
// no point in carrying on, so do nothing forevermore:
|
||||
while (true) {
|
||||
delay(1);
|
||||
}
|
||||
}
|
||||
// print your local IP address:
|
||||
Serial.print("My IP address: ");
|
||||
Serial.println(Ethernet.localIP());
|
||||
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if (!mqtt.connected())
|
||||
{
|
||||
reconnect();
|
||||
}
|
||||
mqtt.loop();
|
||||
}
|
||||
|
||||
|
||||
void updateThing()
|
||||
{
|
||||
strcpy(publishPayload, "{\"state\": {\"reported\": {\"powerState\":\"ON\"}}}");
|
||||
MQTTPublish(publishShadowUpdate, publishPayload);
|
||||
|
||||
}
|
||||
|
||||
void MQTTPublish(const char *topic, char *payload)
|
||||
{
|
||||
mqtt.publish(topic, payload);
|
||||
Serial.print("Published [");
|
||||
Serial.print(topic);
|
||||
Serial.print("] ");
|
||||
Serial.println(payload);
|
||||
}
|
|
@ -1,151 +0,0 @@
|
|||
/*
|
||||
Web client
|
||||
|
||||
This sketch connects to a website (http://www.arduino.cc/asciilogo.txt)
|
||||
using an Arduino Wiznet Ethernet shield.
|
||||
|
||||
Circuit:
|
||||
* Ethernet shield attached to pins 10, 11, 12, 13
|
||||
|
||||
created 18 Dec 2009
|
||||
by David A. Mellis
|
||||
modified 9 Apr 2012
|
||||
by Noah Koontz, based on work by Adrian McEwen and Tom Igoe
|
||||
|
||||
*/
|
||||
|
||||
// NOTE: This example REQUIRES the EthernetLarge library.
|
||||
// You can get it here: https://github.com/OPEnSLab-OSU/EthernetLarge
|
||||
|
||||
#include <SPI.h>
|
||||
#include <EthernetLarge.h>
|
||||
#include <SSLClient.h>
|
||||
#include "trust_anchors.h"
|
||||
|
||||
// Enter a MAC address for your controller below.
|
||||
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
|
||||
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
|
||||
|
||||
// if you don't want to use DNS (and reduce your sketch size)
|
||||
// use the numeric IP instead of the name for the server:
|
||||
//IPAddress server(54,85,55,79); // numeric IP for Google (no DNS)
|
||||
const char server[] = "www.arduino.cc"; // name address for Arduino (using DNS)
|
||||
const char server_host[] = "www.arduino.cc"; // leave this alone, change only above two
|
||||
|
||||
// Set the static IP address to use if the DHCP fails to assign
|
||||
IPAddress ip(192, 168, 0, 177);
|
||||
IPAddress myDns(8, 8, 8, 8);
|
||||
|
||||
// Choose the analog pin to get semi-random data from for SSL
|
||||
// Pick a pin that's not connected or attached to a randomish voltage source
|
||||
const int rand_pin = A5;
|
||||
|
||||
// Initialize the SSL client library
|
||||
// We input an EthernetClient, our trust anchors, and the analog pin
|
||||
EthernetClient base_client;
|
||||
SSLClient client(base_client, TAs, (size_t)TAs_NUM, rand_pin);
|
||||
// Variables to measure the speed
|
||||
unsigned long beginMicros, endMicros;
|
||||
unsigned long byteCount = 0;
|
||||
bool printWebData = true; // set to false for better speed measurement
|
||||
|
||||
void setup() {
|
||||
// You can use Ethernet.init(pin) to configure the CS pin
|
||||
Ethernet.init(10); // Most Arduino shields
|
||||
//Ethernet.init(5); // MKR ETH shield
|
||||
//Ethernet.init(0); // Teensy 2.0
|
||||
//Ethernet.init(20); // Teensy++ 2.0
|
||||
//Ethernet.init(15); // ESP8266 with Adafruit Featherwing Ethernet
|
||||
//Ethernet.init(33); // ESP32 with Adafruit Featherwing Ethernet
|
||||
|
||||
// Open serial communications and wait for port to open:
|
||||
Serial.begin(115200);
|
||||
while (!Serial) {
|
||||
; // wait for serial port to connect. Needed for native USB port only
|
||||
}
|
||||
|
||||
// start the Ethernet connection:
|
||||
Serial.println("Initialize Ethernet with DHCP:");
|
||||
if (Ethernet.begin(mac) == 0) {
|
||||
Serial.println("Failed to configure Ethernet using DHCP");
|
||||
// Check for Ethernet hardware present
|
||||
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
|
||||
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
|
||||
while (true) {
|
||||
delay(1); // do nothing, no point running without Ethernet hardware
|
||||
}
|
||||
}
|
||||
if (Ethernet.linkStatus() == LinkOFF) {
|
||||
Serial.println("Ethernet cable is not connected.");
|
||||
}
|
||||
// try to configure using IP address instead of DHCP:
|
||||
Ethernet.begin(mac, ip, myDns);
|
||||
} else {
|
||||
Serial.print(" DHCP assigned IP ");
|
||||
Serial.println(Ethernet.localIP());
|
||||
}
|
||||
// give the Ethernet shield a second to initialize:
|
||||
delay(2000);
|
||||
|
||||
Serial.print("connecting to ");
|
||||
Serial.print(server);
|
||||
Serial.println("...");
|
||||
|
||||
// if you get a connection, report back via serial:
|
||||
auto start = millis();
|
||||
// specify the server and port, 443 is the standard port for HTTPS
|
||||
if (client.connect(server, 443)) {
|
||||
auto time = millis() - start;
|
||||
Serial.print("Took: ");
|
||||
Serial.println(time);
|
||||
// Make a HTTP request:
|
||||
client.println("GET /asciilogo.txt HTTP/1.1");
|
||||
client.println("User-Agent: SSLClientOverEthernet");
|
||||
client.print("Host: ");
|
||||
client.println(server_host);
|
||||
client.println("Connection: close");
|
||||
client.println();
|
||||
} else {
|
||||
// if you didn't get a connection to the server:
|
||||
Serial.println("connection failed");
|
||||
}
|
||||
beginMicros = micros();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// if there are incoming bytes available
|
||||
// from the server, read them and print them:
|
||||
int len = client.available();
|
||||
if (len > 0) {
|
||||
byte buffer[80];
|
||||
if (len > 80) len = 80;
|
||||
client.read(buffer, len);
|
||||
if (printWebData) {
|
||||
Serial.write(buffer, len); // show in the serial monitor (slows some boards)
|
||||
}
|
||||
byteCount = byteCount + len;
|
||||
}
|
||||
|
||||
// if the server's disconnected, stop the client:
|
||||
if (!client.connected()) {
|
||||
endMicros = micros();
|
||||
Serial.println();
|
||||
Serial.println("disconnecting.");
|
||||
client.stop();
|
||||
Serial.print("Received ");
|
||||
Serial.print(byteCount);
|
||||
Serial.print(" bytes in ");
|
||||
float seconds = (float)(endMicros - beginMicros) / 1000000.0;
|
||||
Serial.print(seconds, 4);
|
||||
float rate = (float)byteCount / seconds / 1000.0;
|
||||
Serial.print(", rate = ");
|
||||
Serial.print(rate);
|
||||
Serial.print(" kbytes/second");
|
||||
Serial.println();
|
||||
|
||||
// do nothing forevermore:
|
||||
while (true) {
|
||||
delay(1);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
#ifndef _CERTIFICATES_H_
|
||||
#define _CERTIFICATES_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/* This file is auto-generated by the pycert_bearssl tool. Do not change it manually.
|
||||
* Certificates are BearSSL br_x509_trust_anchor format. Included certs:
|
||||
*
|
||||
* Index: 0
|
||||
* Label: Baltimore CyberTrust Root
|
||||
* Subject: C=IE,O=Baltimore,OU=CyberTrust,CN=Baltimore CyberTrust Root
|
||||
* Domain(s): www.arduino.cc
|
||||
*/
|
||||
|
||||
#define TAs_NUM 1
|
||||
|
||||
static const unsigned char TA_DN0[] = {
|
||||
0x30, 0x5a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
|
||||
0x02, 0x49, 0x45, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a,
|
||||
0x13, 0x09, 0x42, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x72, 0x65, 0x31,
|
||||
0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x43, 0x79,
|
||||
0x62, 0x65, 0x72, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x22, 0x30, 0x20,
|
||||
0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x19, 0x42, 0x61, 0x6c, 0x74, 0x69,
|
||||
0x6d, 0x6f, 0x72, 0x65, 0x20, 0x43, 0x79, 0x62, 0x65, 0x72, 0x54, 0x72,
|
||||
0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_N0[] = {
|
||||
0xa3, 0x04, 0xbb, 0x22, 0xab, 0x98, 0x3d, 0x57, 0xe8, 0x26, 0x72, 0x9a,
|
||||
0xb5, 0x79, 0xd4, 0x29, 0xe2, 0xe1, 0xe8, 0x95, 0x80, 0xb1, 0xb0, 0xe3,
|
||||
0x5b, 0x8e, 0x2b, 0x29, 0x9a, 0x64, 0xdf, 0xa1, 0x5d, 0xed, 0xb0, 0x09,
|
||||
0x05, 0x6d, 0xdb, 0x28, 0x2e, 0xce, 0x62, 0xa2, 0x62, 0xfe, 0xb4, 0x88,
|
||||
0xda, 0x12, 0xeb, 0x38, 0xeb, 0x21, 0x9d, 0xc0, 0x41, 0x2b, 0x01, 0x52,
|
||||
0x7b, 0x88, 0x77, 0xd3, 0x1c, 0x8f, 0xc7, 0xba, 0xb9, 0x88, 0xb5, 0x6a,
|
||||
0x09, 0xe7, 0x73, 0xe8, 0x11, 0x40, 0xa7, 0xd1, 0xcc, 0xca, 0x62, 0x8d,
|
||||
0x2d, 0xe5, 0x8f, 0x0b, 0xa6, 0x50, 0xd2, 0xa8, 0x50, 0xc3, 0x28, 0xea,
|
||||
0xf5, 0xab, 0x25, 0x87, 0x8a, 0x9a, 0x96, 0x1c, 0xa9, 0x67, 0xb8, 0x3f,
|
||||
0x0c, 0xd5, 0xf7, 0xf9, 0x52, 0x13, 0x2f, 0xc2, 0x1b, 0xd5, 0x70, 0x70,
|
||||
0xf0, 0x8f, 0xc0, 0x12, 0xca, 0x06, 0xcb, 0x9a, 0xe1, 0xd9, 0xca, 0x33,
|
||||
0x7a, 0x77, 0xd6, 0xf8, 0xec, 0xb9, 0xf1, 0x68, 0x44, 0x42, 0x48, 0x13,
|
||||
0xd2, 0xc0, 0xc2, 0xa4, 0xae, 0x5e, 0x60, 0xfe, 0xb6, 0xa6, 0x05, 0xfc,
|
||||
0xb4, 0xdd, 0x07, 0x59, 0x02, 0xd4, 0x59, 0x18, 0x98, 0x63, 0xf5, 0xa5,
|
||||
0x63, 0xe0, 0x90, 0x0c, 0x7d, 0x5d, 0xb2, 0x06, 0x7a, 0xf3, 0x85, 0xea,
|
||||
0xeb, 0xd4, 0x03, 0xae, 0x5e, 0x84, 0x3e, 0x5f, 0xff, 0x15, 0xed, 0x69,
|
||||
0xbc, 0xf9, 0x39, 0x36, 0x72, 0x75, 0xcf, 0x77, 0x52, 0x4d, 0xf3, 0xc9,
|
||||
0x90, 0x2c, 0xb9, 0x3d, 0xe5, 0xc9, 0x23, 0x53, 0x3f, 0x1f, 0x24, 0x98,
|
||||
0x21, 0x5c, 0x07, 0x99, 0x29, 0xbd, 0xc6, 0x3a, 0xec, 0xe7, 0x6e, 0x86,
|
||||
0x3a, 0x6b, 0x97, 0x74, 0x63, 0x33, 0xbd, 0x68, 0x18, 0x31, 0xf0, 0x78,
|
||||
0x8d, 0x76, 0xbf, 0xfc, 0x9e, 0x8e, 0x5d, 0x2a, 0x86, 0xa7, 0x4d, 0x90,
|
||||
0xdc, 0x27, 0x1a, 0x39,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_E0[] = {
|
||||
0x01, 0x00, 0x01,
|
||||
};
|
||||
|
||||
static const br_x509_trust_anchor TAs[] = {
|
||||
{
|
||||
{ (unsigned char *)TA_DN0, sizeof TA_DN0 },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ .rsa = {
|
||||
(unsigned char *)TA_RSA_N0, sizeof TA_RSA_N0,
|
||||
(unsigned char *)TA_RSA_E0, sizeof TA_RSA_E0,
|
||||
} }
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* ifndef _CERTIFICATES_H_ */
|
|
@ -1,87 +0,0 @@
|
|||
/*
|
||||
Basic MQTT example (with SSL!)
|
||||
This sketch demonstrates the basic capabilities of the library.
|
||||
It connects to an MQTT server then:
|
||||
- publishes "hello world" to the topic "outTopic"
|
||||
- subscribes to the topic "inTopic", printing out any messages
|
||||
it receives. NB - it assumes the received payloads are strings not binary
|
||||
It will reconnect to the server if the connection is lost using a blocking
|
||||
reconnect function. See the 'mqtt_reconnect_nonblocking' example for how to
|
||||
achieve the same result without blocking the main loop.
|
||||
|
||||
You will need to populate "certificates.h" with your trust anchors
|
||||
(see https://github.com/OPEnSLab-OSU/SSLClient/blob/master/TrustAnchors.md)
|
||||
and my_cert/my_key with your certificate/private key pair
|
||||
(see https://github.com/OPEnSLab-OSU/SSLClient#mtls).
|
||||
*/
|
||||
#include <SPI.h>
|
||||
#include <EthernetLarge.h>
|
||||
#include <SSLClient.h>
|
||||
#include "certificates.h" // This file must be regenerated
|
||||
#include <PubSubClient.h>
|
||||
|
||||
const char my_cert[] = "FIXME";
|
||||
const char my_key[] = "FIXME";
|
||||
SSLClientParameters mTLS = SSLClientParameters::fromPEM(my_cert, sizeof my_cert, my_key, sizeof my_key);
|
||||
|
||||
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
|
||||
const char* mqttServer = "broker.example"; // Broker address
|
||||
IPAddress ip (192, 168, 1, 2); // Custom client static IP
|
||||
|
||||
void callback(char* topic, byte* payload, unsigned int length) {
|
||||
Serial.print("Message arrived [");
|
||||
Serial.print(topic);
|
||||
Serial.print("] ");
|
||||
for (int i=0;i<length;i++) {
|
||||
Serial.print((char)payload[i]);
|
||||
}
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
EthernetClient ethClient;
|
||||
SSLClient ethClientSSL(ethClient, TAs, (size_t)TAs_NUM, A5);
|
||||
PubSubClient client(mqttServer, 8883, callback, ethClientSSL);
|
||||
|
||||
void reconnect() {
|
||||
// Loop until we're reconnected
|
||||
while (!client.connected()) {
|
||||
Serial.print("Attempting MQTT connection...");
|
||||
// Attempt to connect
|
||||
if (client.connect("arduinoClient")) {
|
||||
Serial.println("connected");
|
||||
// Once connected, publish an announcement...
|
||||
client.publish("outTopic","hello world");
|
||||
// ... and resubscribe
|
||||
client.subscribe("inTopic");
|
||||
} else {
|
||||
Serial.print("failed, rc=");
|
||||
Serial.print(client.state());
|
||||
Serial.println(" try again in 5 seconds");
|
||||
// Wait 5 seconds before retrying
|
||||
delay(5000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void setup(){
|
||||
// Start Serial
|
||||
Serial.begin(115200);
|
||||
while(!Serial);
|
||||
// Enable mutual TLS with SSLClient
|
||||
ethClientSSL.setMutualAuthParams(mTLS);
|
||||
// You can use Ethernet.init(pin) to configure the CS pin
|
||||
Ethernet.init(10); // Most Arduino shields
|
||||
//Ethernet.init(5); // MKR ETH shield
|
||||
//Ethernet.init(0); // Teensy 2.0
|
||||
//Ethernet.init(20); // Teensy++ 2.0
|
||||
//Ethernet.init(15); // ESP8266 with Adafruit Featherwing Ethernet
|
||||
//Ethernet.init(33); // ESP32 with Adafruit Featherwing Ethernet
|
||||
Ethernet.begin(mac, ip);
|
||||
}
|
||||
|
||||
void loop(){
|
||||
if (!client.connected()) {
|
||||
reconnect();
|
||||
}
|
||||
client.loop();
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
#ifndef _CERTIFICATES_H_
|
||||
#define _CERTIFICATES_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/* You will need to generate the information in this file manually
|
||||
* using pycert_bearssl. For more information, please see
|
||||
* https://github.com/OPEnSLab-OSU/SSLClient/blob/master/TrustAnchors.md
|
||||
*/
|
||||
|
||||
#define TAs_NUM 1
|
||||
|
||||
static const unsigned char TA_DN0[] = {
|
||||
// FIXME
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_N0[] = {
|
||||
// FIXME
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_E0[] = {
|
||||
// FIXME
|
||||
};
|
||||
|
||||
static const br_x509_trust_anchor TAs[] = {
|
||||
{
|
||||
{ (unsigned char *)TA_DN0, sizeof TA_DN0 },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ .rsa = {
|
||||
(unsigned char *)TA_RSA_N0, sizeof TA_RSA_N0,
|
||||
(unsigned char *)TA_RSA_E0, sizeof TA_RSA_E0,
|
||||
} }
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* ifndef _CERTIFICATES_H_ */
|
|
@ -1,166 +0,0 @@
|
|||
/*
|
||||
Multi Domain HTTPS Client
|
||||
|
||||
This sketch connects to a website (http://www.arduino.cc/asciilogo.txt)
|
||||
using an Arduino Wiznet Ethernet shield.
|
||||
|
||||
Circuit:
|
||||
* Ethernet shield attached to pins 10, 11, 12, 13
|
||||
|
||||
created 18 Dec 2009
|
||||
by David A. Mellis
|
||||
modified 9 Apr 2012
|
||||
by Noah Koontz, based on work by Adrian McEwen and Tom Igoe
|
||||
|
||||
*/
|
||||
|
||||
|
||||
// NOTE: This example REQUIRES the EthernetLarge library.
|
||||
// You can get it here: https://github.com/OPEnSLab-OSU/EthernetLarge
|
||||
|
||||
#include <SPI.h>
|
||||
#include <EthernetLarge.h>
|
||||
#include <SSLClient.h>
|
||||
#include "trustanchors.h"
|
||||
// Enter a MAC address for your controller below.
|
||||
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
|
||||
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
|
||||
|
||||
// the two domains we want to query
|
||||
char server1[] = "www.arduino.cc";
|
||||
char server2[] = "www.cloudflare.com";
|
||||
// and the queries we want to send to them
|
||||
char query1[] = "GET /asciilogo.txt HTTP/1.1";
|
||||
char query2[] = "GET /cdn-cgi/trace HTTP/1.1";
|
||||
|
||||
// Set the static IP address to use if the DHCP fails to assign
|
||||
IPAddress ip(192, 168, 0, 177);
|
||||
IPAddress myDns(8, 8, 8, 8);
|
||||
|
||||
// Choose the analog pin to get semi-random data from for SSL
|
||||
// Pick a pin that's not connected or attached to a randomish voltage source
|
||||
const int rand_pin = A5;
|
||||
|
||||
// Initialize the SSL client library
|
||||
// We input an EthernetClient, our trust anchors, and the analog pin
|
||||
// Additionally specify that we want to store 2 sessions since we are connecting to 2 domains
|
||||
EthernetClient base_client;
|
||||
SSLClient client(base_client, TAs, (size_t)TAs_NUM, rand_pin);
|
||||
// Variables to measure the speed
|
||||
unsigned long beginMicros, endMicros;
|
||||
unsigned long byteCount = 0;
|
||||
bool printWebData = true; // set to false for better speed measurement
|
||||
|
||||
void setup() {
|
||||
// You can use Ethernet.init(pin) to configure the CS pin
|
||||
Ethernet.init(10); // Most Arduino shields
|
||||
//Ethernet.init(5); // MKR ETH shield
|
||||
//Ethernet.init(0); // Teensy 2.0
|
||||
//Ethernet.init(20); // Teensy++ 2.0
|
||||
//Ethernet.init(15); // ESP8266 with Adafruit Featherwing Ethernet
|
||||
//Ethernet.init(33); // ESP32 with Adafruit Featherwing Ethernet
|
||||
|
||||
// Open serial communications and wait for port to open:
|
||||
Serial.begin(115200);
|
||||
while (!Serial) {
|
||||
; // wait for serial port to connect. Needed for native USB port only
|
||||
}
|
||||
|
||||
// start the Ethernet connection:
|
||||
Serial.println("Initialize Ethernet with DHCP:");
|
||||
if (Ethernet.begin(mac) == 0) {
|
||||
Serial.println("Failed to configure Ethernet using DHCP");
|
||||
// Check for Ethernet hardware present
|
||||
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
|
||||
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
|
||||
while (true) {
|
||||
delay(1); // do nothing, no point running without Ethernet hardware
|
||||
}
|
||||
}
|
||||
if (Ethernet.linkStatus() == LinkOFF) {
|
||||
Serial.println("Ethernet cable is not connected.");
|
||||
}
|
||||
// try to congifure using IP address instead of DHCP:
|
||||
Ethernet.begin(mac, ip, myDns);
|
||||
} else {
|
||||
Serial.print(" DHCP assigned IP ");
|
||||
Serial.println(Ethernet.localIP());
|
||||
}
|
||||
// give the Ethernet shield a second to initialize:
|
||||
delay(2000);
|
||||
// connect!
|
||||
connectSSL();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// if there are incoming bytes available
|
||||
// from the server, read them and print them:
|
||||
int len = client.available();
|
||||
if (len > 0) {
|
||||
byte buffer[80];
|
||||
if (len > 80) len = 80;
|
||||
client.read(buffer, len);
|
||||
if (printWebData) {
|
||||
Serial.write(buffer, len); // show in the serial monitor (slows some boards)
|
||||
}
|
||||
byteCount = byteCount + len;
|
||||
}
|
||||
|
||||
// if the server's disconnected, stop the client:
|
||||
if (!client.connected()) {
|
||||
endMicros = micros();
|
||||
Serial.println();
|
||||
Serial.println("disconnecting.");
|
||||
client.stop();
|
||||
Serial.print("Received ");
|
||||
Serial.print(byteCount);
|
||||
Serial.print(" bytes in ");
|
||||
float seconds = (float)(endMicros - beginMicros) / 1000000.0;
|
||||
Serial.print(seconds, 4);
|
||||
float rate = (float)byteCount / seconds / 1000.0;
|
||||
Serial.print(", rate = ");
|
||||
Serial.print(rate);
|
||||
Serial.print(" kbytes/second");
|
||||
Serial.println();
|
||||
|
||||
//quick delay
|
||||
delay(1000);
|
||||
// connect again!
|
||||
connectSSL();
|
||||
}
|
||||
}
|
||||
|
||||
bool r = false;
|
||||
|
||||
void connectSSL() {
|
||||
// cycle the server we want to connect to back and forth
|
||||
char* server;
|
||||
if (r) server = server1;
|
||||
else server = server2;
|
||||
r = !r;
|
||||
|
||||
Serial.print("connecting to ");
|
||||
Serial.print(server);
|
||||
Serial.println("...");
|
||||
|
||||
// if you get a connection, report back via serial:
|
||||
auto start = millis();
|
||||
if (client.connect(server, 443)) {
|
||||
auto time = millis() - start;
|
||||
Serial.print("Took: ");
|
||||
Serial.println(time);
|
||||
// Make a HTTP request:
|
||||
if (server == server1) client.println(query1);
|
||||
else client.println(query2);
|
||||
client.println("User-Agent: SSLClientOverEthernet");
|
||||
client.print("Host: ");
|
||||
client.println(server);
|
||||
client.println("Connection: close");
|
||||
client.println();
|
||||
client.flush();
|
||||
} else {
|
||||
// if you didn't get a connection to the server:
|
||||
Serial.println("connection failed");
|
||||
}
|
||||
beginMicros = micros();
|
||||
}
|
|
@ -1,136 +0,0 @@
|
|||
#ifndef _CERTIFICATES_H_
|
||||
#define _CERTIFICATES_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/* This file is auto-generated by the pycert_bearssl tool. Do not change it manually.
|
||||
* Certificates are BearSSL br_x509_trust_anchor format. Included certs:
|
||||
*
|
||||
* Index: 0
|
||||
* Label: Baltimore CyberTrust Root
|
||||
* Subject: C=IE,O=Baltimore,OU=CyberTrust,CN=Baltimore CyberTrust Root
|
||||
* Domain(s): www.arduino.cc
|
||||
*
|
||||
* Index: 1
|
||||
* Label: DigiCert High Assurance EV Root CA
|
||||
* Subject: C=US,O=DigiCert Inc,OU=www.digicert.com,CN=DigiCert High Assurance EV Root CA
|
||||
* Domain(s): www.cloudflare.com
|
||||
*/
|
||||
|
||||
#define TAs_NUM 2
|
||||
|
||||
static const unsigned char TA_DN0[] = {
|
||||
0x30, 0x5a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
|
||||
0x02, 0x49, 0x45, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a,
|
||||
0x13, 0x09, 0x42, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x72, 0x65, 0x31,
|
||||
0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x43, 0x79,
|
||||
0x62, 0x65, 0x72, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x22, 0x30, 0x20,
|
||||
0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x19, 0x42, 0x61, 0x6c, 0x74, 0x69,
|
||||
0x6d, 0x6f, 0x72, 0x65, 0x20, 0x43, 0x79, 0x62, 0x65, 0x72, 0x54, 0x72,
|
||||
0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_N0[] = {
|
||||
0xa3, 0x04, 0xbb, 0x22, 0xab, 0x98, 0x3d, 0x57, 0xe8, 0x26, 0x72, 0x9a,
|
||||
0xb5, 0x79, 0xd4, 0x29, 0xe2, 0xe1, 0xe8, 0x95, 0x80, 0xb1, 0xb0, 0xe3,
|
||||
0x5b, 0x8e, 0x2b, 0x29, 0x9a, 0x64, 0xdf, 0xa1, 0x5d, 0xed, 0xb0, 0x09,
|
||||
0x05, 0x6d, 0xdb, 0x28, 0x2e, 0xce, 0x62, 0xa2, 0x62, 0xfe, 0xb4, 0x88,
|
||||
0xda, 0x12, 0xeb, 0x38, 0xeb, 0x21, 0x9d, 0xc0, 0x41, 0x2b, 0x01, 0x52,
|
||||
0x7b, 0x88, 0x77, 0xd3, 0x1c, 0x8f, 0xc7, 0xba, 0xb9, 0x88, 0xb5, 0x6a,
|
||||
0x09, 0xe7, 0x73, 0xe8, 0x11, 0x40, 0xa7, 0xd1, 0xcc, 0xca, 0x62, 0x8d,
|
||||
0x2d, 0xe5, 0x8f, 0x0b, 0xa6, 0x50, 0xd2, 0xa8, 0x50, 0xc3, 0x28, 0xea,
|
||||
0xf5, 0xab, 0x25, 0x87, 0x8a, 0x9a, 0x96, 0x1c, 0xa9, 0x67, 0xb8, 0x3f,
|
||||
0x0c, 0xd5, 0xf7, 0xf9, 0x52, 0x13, 0x2f, 0xc2, 0x1b, 0xd5, 0x70, 0x70,
|
||||
0xf0, 0x8f, 0xc0, 0x12, 0xca, 0x06, 0xcb, 0x9a, 0xe1, 0xd9, 0xca, 0x33,
|
||||
0x7a, 0x77, 0xd6, 0xf8, 0xec, 0xb9, 0xf1, 0x68, 0x44, 0x42, 0x48, 0x13,
|
||||
0xd2, 0xc0, 0xc2, 0xa4, 0xae, 0x5e, 0x60, 0xfe, 0xb6, 0xa6, 0x05, 0xfc,
|
||||
0xb4, 0xdd, 0x07, 0x59, 0x02, 0xd4, 0x59, 0x18, 0x98, 0x63, 0xf5, 0xa5,
|
||||
0x63, 0xe0, 0x90, 0x0c, 0x7d, 0x5d, 0xb2, 0x06, 0x7a, 0xf3, 0x85, 0xea,
|
||||
0xeb, 0xd4, 0x03, 0xae, 0x5e, 0x84, 0x3e, 0x5f, 0xff, 0x15, 0xed, 0x69,
|
||||
0xbc, 0xf9, 0x39, 0x36, 0x72, 0x75, 0xcf, 0x77, 0x52, 0x4d, 0xf3, 0xc9,
|
||||
0x90, 0x2c, 0xb9, 0x3d, 0xe5, 0xc9, 0x23, 0x53, 0x3f, 0x1f, 0x24, 0x98,
|
||||
0x21, 0x5c, 0x07, 0x99, 0x29, 0xbd, 0xc6, 0x3a, 0xec, 0xe7, 0x6e, 0x86,
|
||||
0x3a, 0x6b, 0x97, 0x74, 0x63, 0x33, 0xbd, 0x68, 0x18, 0x31, 0xf0, 0x78,
|
||||
0x8d, 0x76, 0xbf, 0xfc, 0x9e, 0x8e, 0x5d, 0x2a, 0x86, 0xa7, 0x4d, 0x90,
|
||||
0xdc, 0x27, 0x1a, 0x39,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_E0[] = {
|
||||
0x01, 0x00, 0x01,
|
||||
};
|
||||
|
||||
static const unsigned char TA_DN1[] = {
|
||||
0x30, 0x6c, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
|
||||
0x02, 0x55, 0x53, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x0a,
|
||||
0x13, 0x0c, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74, 0x20, 0x49,
|
||||
0x6e, 0x63, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13,
|
||||
0x10, 0x77, 0x77, 0x77, 0x2e, 0x64, 0x69, 0x67, 0x69, 0x63, 0x65, 0x72,
|
||||
0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55,
|
||||
0x04, 0x03, 0x13, 0x22, 0x44, 0x69, 0x67, 0x69, 0x43, 0x65, 0x72, 0x74,
|
||||
0x20, 0x48, 0x69, 0x67, 0x68, 0x20, 0x41, 0x73, 0x73, 0x75, 0x72, 0x61,
|
||||
0x6e, 0x63, 0x65, 0x20, 0x45, 0x56, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20,
|
||||
0x43, 0x41,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_N1[] = {
|
||||
0xc6, 0xcc, 0xe5, 0x73, 0xe6, 0xfb, 0xd4, 0xbb, 0xe5, 0x2d, 0x2d, 0x32,
|
||||
0xa6, 0xdf, 0xe5, 0x81, 0x3f, 0xc9, 0xcd, 0x25, 0x49, 0xb6, 0x71, 0x2a,
|
||||
0xc3, 0xd5, 0x94, 0x34, 0x67, 0xa2, 0x0a, 0x1c, 0xb0, 0x5f, 0x69, 0xa6,
|
||||
0x40, 0xb1, 0xc4, 0xb7, 0xb2, 0x8f, 0xd0, 0x98, 0xa4, 0xa9, 0x41, 0x59,
|
||||
0x3a, 0xd3, 0xdc, 0x94, 0xd6, 0x3c, 0xdb, 0x74, 0x38, 0xa4, 0x4a, 0xcc,
|
||||
0x4d, 0x25, 0x82, 0xf7, 0x4a, 0xa5, 0x53, 0x12, 0x38, 0xee, 0xf3, 0x49,
|
||||
0x6d, 0x71, 0x91, 0x7e, 0x63, 0xb6, 0xab, 0xa6, 0x5f, 0xc3, 0xa4, 0x84,
|
||||
0xf8, 0x4f, 0x62, 0x51, 0xbe, 0xf8, 0xc5, 0xec, 0xdb, 0x38, 0x92, 0xe3,
|
||||
0x06, 0xe5, 0x08, 0x91, 0x0c, 0xc4, 0x28, 0x41, 0x55, 0xfb, 0xcb, 0x5a,
|
||||
0x89, 0x15, 0x7e, 0x71, 0xe8, 0x35, 0xbf, 0x4d, 0x72, 0x09, 0x3d, 0xbe,
|
||||
0x3a, 0x38, 0x50, 0x5b, 0x77, 0x31, 0x1b, 0x8d, 0xb3, 0xc7, 0x24, 0x45,
|
||||
0x9a, 0xa7, 0xac, 0x6d, 0x00, 0x14, 0x5a, 0x04, 0xb7, 0xba, 0x13, 0xeb,
|
||||
0x51, 0x0a, 0x98, 0x41, 0x41, 0x22, 0x4e, 0x65, 0x61, 0x87, 0x81, 0x41,
|
||||
0x50, 0xa6, 0x79, 0x5c, 0x89, 0xde, 0x19, 0x4a, 0x57, 0xd5, 0x2e, 0xe6,
|
||||
0x5d, 0x1c, 0x53, 0x2c, 0x7e, 0x98, 0xcd, 0x1a, 0x06, 0x16, 0xa4, 0x68,
|
||||
0x73, 0xd0, 0x34, 0x04, 0x13, 0x5c, 0xa1, 0x71, 0xd3, 0x5a, 0x7c, 0x55,
|
||||
0xdb, 0x5e, 0x64, 0xe1, 0x37, 0x87, 0x30, 0x56, 0x04, 0xe5, 0x11, 0xb4,
|
||||
0x29, 0x80, 0x12, 0xf1, 0x79, 0x39, 0x88, 0xa2, 0x02, 0x11, 0x7c, 0x27,
|
||||
0x66, 0xb7, 0x88, 0xb7, 0x78, 0xf2, 0xca, 0x0a, 0xa8, 0x38, 0xab, 0x0a,
|
||||
0x64, 0xc2, 0xbf, 0x66, 0x5d, 0x95, 0x84, 0xc1, 0xa1, 0x25, 0x1e, 0x87,
|
||||
0x5d, 0x1a, 0x50, 0x0b, 0x20, 0x12, 0xcc, 0x41, 0xbb, 0x6e, 0x0b, 0x51,
|
||||
0x38, 0xb8, 0x4b, 0xcb,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_E1[] = {
|
||||
0x01, 0x00, 0x01,
|
||||
};
|
||||
|
||||
static const br_x509_trust_anchor TAs[] = {
|
||||
{
|
||||
{ (unsigned char *)TA_DN0, sizeof TA_DN0 },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ .rsa = {
|
||||
(unsigned char *)TA_RSA_N0, sizeof TA_RSA_N0,
|
||||
(unsigned char *)TA_RSA_E0, sizeof TA_RSA_E0,
|
||||
} }
|
||||
}
|
||||
},
|
||||
{
|
||||
{ (unsigned char *)TA_DN1, sizeof TA_DN1 },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ .rsa = {
|
||||
(unsigned char *)TA_RSA_N1, sizeof TA_RSA_N1,
|
||||
(unsigned char *)TA_RSA_E1, sizeof TA_RSA_E1,
|
||||
} }
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* ifndef _CERTIFICATES_H_ */
|
|
@ -1,130 +0,0 @@
|
|||
/*
|
||||
Web client
|
||||
|
||||
This sketch connects to a website (http://www.arduino.cc/asciilogo.txt)
|
||||
using an Arduino Wiznet Ethernet shield or STM32 built-in Ethernet.
|
||||
Tested on ST Micro Nucleo-F767ZI.
|
||||
|
||||
Circuit:
|
||||
* Ethernet shield attached to pins 10, 11, 12, 13
|
||||
|
||||
created 18 Dec 2009
|
||||
by David A. Mellis
|
||||
modified 9 Apr 2012
|
||||
by Noah Koontz, based on work by Adrian McEwen and Tom Igoe
|
||||
|
||||
Modified 16 Oct 2019 by gdsports625@gmail.com for STM32duino_STM32Ethernet
|
||||
*/
|
||||
|
||||
#include <LwIP.h>
|
||||
#include <STM32Ethernet.h>
|
||||
#include <SSLClient.h>
|
||||
#include "trust_anchors.h"
|
||||
|
||||
// if you don't want to use DNS (and reduce your sketch size)
|
||||
// use the numeric IP instead of the name for the server:
|
||||
//IPAddress server(54,85,55,79); // numeric IP for Google (no DNS)
|
||||
const char server[] = "www.arduino.cc"; // name address for Arduino (using DNS)
|
||||
const char server_host[] = "www.arduino.cc"; // leave this alone, change only above two
|
||||
|
||||
// Set the static IP address to use if the DHCP fails to assign
|
||||
IPAddress ip(192, 168, 0, 177);
|
||||
IPAddress myDns(8, 8, 8, 8);
|
||||
|
||||
// Choose the analog pin to get semi-random data from for SSL
|
||||
// Pick a pin that's not connected or attached to a randomish voltage source
|
||||
const int rand_pin = A5;
|
||||
|
||||
// Initialize the SSL client library
|
||||
// We input an EthernetClient, our trust anchors, and the analog pin
|
||||
EthernetClient base_client;
|
||||
SSLClient client(base_client, TAs, (size_t)TAs_NUM, rand_pin);
|
||||
// Variables to measure the speed
|
||||
unsigned long beginMicros, endMicros;
|
||||
unsigned long byteCount = 0;
|
||||
bool printWebData = true; // set to false for better speed measurement
|
||||
|
||||
void setup() {
|
||||
// Open serial communications and wait for port to open:
|
||||
Serial.begin(115200);
|
||||
while (!Serial) {
|
||||
; // wait for serial port to connect. Needed for native USB port only
|
||||
}
|
||||
|
||||
// start the Ethernet connection:
|
||||
Serial.println("Initialize Ethernet with DHCP:");
|
||||
// STM32 built-in Ethernet has a factory installed MAC address.
|
||||
if (Ethernet.begin() == 0) {
|
||||
Serial.println("Failed to configure Ethernet using DHCP");
|
||||
while (1) delay(1);
|
||||
} else {
|
||||
Serial.print(" DHCP assigned IP ");
|
||||
Serial.println(Ethernet.localIP());
|
||||
}
|
||||
// give the Ethernet shield a second to initialize:
|
||||
delay(2000);
|
||||
|
||||
Serial.print("connecting to ");
|
||||
Serial.print(server);
|
||||
Serial.println("...");
|
||||
|
||||
// if you get a connection, report back via serial:
|
||||
auto start = millis();
|
||||
// specify the server and port, 443 is the standard port for HTTPS
|
||||
if (client.connect(server, 443)) {
|
||||
auto time = millis() - start;
|
||||
Serial.print("connected to ");
|
||||
Serial.println(base_client.remoteIP());
|
||||
Serial.print("Took: ");
|
||||
Serial.println(time);
|
||||
// Make a HTTP request:
|
||||
client.println("GET /asciilogo.txt HTTP/1.1");
|
||||
client.println("User-Agent: SSLClientOverEthernet");
|
||||
client.print("Host: ");
|
||||
client.println(server_host);
|
||||
client.println("Connection: close");
|
||||
client.println();
|
||||
} else {
|
||||
// if you didn't get a connection to the server:
|
||||
Serial.println("connection failed");
|
||||
}
|
||||
beginMicros = micros();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// if there are incoming bytes available
|
||||
// from the server, read them and print them:
|
||||
int len = client.available();
|
||||
if (len > 0) {
|
||||
byte buffer[80];
|
||||
if (len > 80) len = 80;
|
||||
client.read(buffer, len);
|
||||
if (printWebData) {
|
||||
Serial.write(buffer, len); // show in the serial monitor (slows some boards)
|
||||
}
|
||||
byteCount = byteCount + len;
|
||||
}
|
||||
|
||||
// if the server's disconnected, stop the client:
|
||||
if (!client.connected()) {
|
||||
endMicros = micros();
|
||||
Serial.println();
|
||||
Serial.println("disconnecting.");
|
||||
client.stop();
|
||||
Serial.print("Received ");
|
||||
Serial.print(byteCount);
|
||||
Serial.print(" bytes in ");
|
||||
float seconds = (float)(endMicros - beginMicros) / 1000000.0;
|
||||
Serial.print(seconds, 4);
|
||||
float rate = (float)byteCount / seconds / 1000.0;
|
||||
Serial.print(", rate = ");
|
||||
Serial.print(rate);
|
||||
Serial.print(" kbytes/second");
|
||||
Serial.println();
|
||||
|
||||
// do nothing forevermore:
|
||||
while (true) {
|
||||
delay(1);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
#ifndef _CERTIFICATES_H_
|
||||
#define _CERTIFICATES_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/* This file is auto-generated by the pycert_bearssl tool. Do not change it manually.
|
||||
* Certificates are BearSSL br_x509_trust_anchor format. Included certs:
|
||||
*
|
||||
* Index: 0
|
||||
* Label: Baltimore CyberTrust Root
|
||||
* Subject: C=IE,O=Baltimore,OU=CyberTrust,CN=Baltimore CyberTrust Root
|
||||
* Domain(s): www.arduino.cc
|
||||
*/
|
||||
|
||||
#define TAs_NUM 1
|
||||
|
||||
static const unsigned char TA_DN0[] = {
|
||||
0x30, 0x5a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
|
||||
0x02, 0x49, 0x45, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a,
|
||||
0x13, 0x09, 0x42, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x72, 0x65, 0x31,
|
||||
0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x43, 0x79,
|
||||
0x62, 0x65, 0x72, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x22, 0x30, 0x20,
|
||||
0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x19, 0x42, 0x61, 0x6c, 0x74, 0x69,
|
||||
0x6d, 0x6f, 0x72, 0x65, 0x20, 0x43, 0x79, 0x62, 0x65, 0x72, 0x54, 0x72,
|
||||
0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_N0[] = {
|
||||
0xa3, 0x04, 0xbb, 0x22, 0xab, 0x98, 0x3d, 0x57, 0xe8, 0x26, 0x72, 0x9a,
|
||||
0xb5, 0x79, 0xd4, 0x29, 0xe2, 0xe1, 0xe8, 0x95, 0x80, 0xb1, 0xb0, 0xe3,
|
||||
0x5b, 0x8e, 0x2b, 0x29, 0x9a, 0x64, 0xdf, 0xa1, 0x5d, 0xed, 0xb0, 0x09,
|
||||
0x05, 0x6d, 0xdb, 0x28, 0x2e, 0xce, 0x62, 0xa2, 0x62, 0xfe, 0xb4, 0x88,
|
||||
0xda, 0x12, 0xeb, 0x38, 0xeb, 0x21, 0x9d, 0xc0, 0x41, 0x2b, 0x01, 0x52,
|
||||
0x7b, 0x88, 0x77, 0xd3, 0x1c, 0x8f, 0xc7, 0xba, 0xb9, 0x88, 0xb5, 0x6a,
|
||||
0x09, 0xe7, 0x73, 0xe8, 0x11, 0x40, 0xa7, 0xd1, 0xcc, 0xca, 0x62, 0x8d,
|
||||
0x2d, 0xe5, 0x8f, 0x0b, 0xa6, 0x50, 0xd2, 0xa8, 0x50, 0xc3, 0x28, 0xea,
|
||||
0xf5, 0xab, 0x25, 0x87, 0x8a, 0x9a, 0x96, 0x1c, 0xa9, 0x67, 0xb8, 0x3f,
|
||||
0x0c, 0xd5, 0xf7, 0xf9, 0x52, 0x13, 0x2f, 0xc2, 0x1b, 0xd5, 0x70, 0x70,
|
||||
0xf0, 0x8f, 0xc0, 0x12, 0xca, 0x06, 0xcb, 0x9a, 0xe1, 0xd9, 0xca, 0x33,
|
||||
0x7a, 0x77, 0xd6, 0xf8, 0xec, 0xb9, 0xf1, 0x68, 0x44, 0x42, 0x48, 0x13,
|
||||
0xd2, 0xc0, 0xc2, 0xa4, 0xae, 0x5e, 0x60, 0xfe, 0xb6, 0xa6, 0x05, 0xfc,
|
||||
0xb4, 0xdd, 0x07, 0x59, 0x02, 0xd4, 0x59, 0x18, 0x98, 0x63, 0xf5, 0xa5,
|
||||
0x63, 0xe0, 0x90, 0x0c, 0x7d, 0x5d, 0xb2, 0x06, 0x7a, 0xf3, 0x85, 0xea,
|
||||
0xeb, 0xd4, 0x03, 0xae, 0x5e, 0x84, 0x3e, 0x5f, 0xff, 0x15, 0xed, 0x69,
|
||||
0xbc, 0xf9, 0x39, 0x36, 0x72, 0x75, 0xcf, 0x77, 0x52, 0x4d, 0xf3, 0xc9,
|
||||
0x90, 0x2c, 0xb9, 0x3d, 0xe5, 0xc9, 0x23, 0x53, 0x3f, 0x1f, 0x24, 0x98,
|
||||
0x21, 0x5c, 0x07, 0x99, 0x29, 0xbd, 0xc6, 0x3a, 0xec, 0xe7, 0x6e, 0x86,
|
||||
0x3a, 0x6b, 0x97, 0x74, 0x63, 0x33, 0xbd, 0x68, 0x18, 0x31, 0xf0, 0x78,
|
||||
0x8d, 0x76, 0xbf, 0xfc, 0x9e, 0x8e, 0x5d, 0x2a, 0x86, 0xa7, 0x4d, 0x90,
|
||||
0xdc, 0x27, 0x1a, 0x39,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_E0[] = {
|
||||
0x01, 0x00, 0x01,
|
||||
};
|
||||
|
||||
static const br_x509_trust_anchor TAs[] = {
|
||||
{
|
||||
{ (unsigned char *)TA_DN0, sizeof TA_DN0 },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ .rsa = {
|
||||
(unsigned char *)TA_RSA_N0, sizeof TA_RSA_N0,
|
||||
(unsigned char *)TA_RSA_E0, sizeof TA_RSA_E0,
|
||||
} }
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* ifndef _CERTIFICATES_H_ */
|
|
@ -1,135 +0,0 @@
|
|||
/*
|
||||
Web client
|
||||
|
||||
This sketch connects to a website (http://www.arduino.cc/asciilogo.txt)
|
||||
using an Arduino Wiznet Ethernet shield and TLS. This
|
||||
|
||||
Circuit:
|
||||
* Ethernet shield attached to pins 10, 11, 12, 13
|
||||
|
||||
created 18 Dec 2009
|
||||
by David A. Mellis
|
||||
modified 9 March 2020
|
||||
by Noah Koontz, based on work by Adrian McEwen and Tom Igoe
|
||||
*/
|
||||
|
||||
#include <SPI.h>
|
||||
#include <Ethernet.h>
|
||||
#include <SSLClient.h>
|
||||
#include "trust_anchors.h"
|
||||
|
||||
#define BUFFLEN 80
|
||||
|
||||
// Enter a MAC address for your controller below.
|
||||
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
|
||||
// byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
|
||||
// With Tiva C the mac address could be changed with LM Flash Programmer
|
||||
|
||||
// if you don't want to use DNS (and reduce your sketch size)
|
||||
// use the numeric IP instead of the name for the server:
|
||||
//IPAddress server(54,85,55,79); // numeric IP for Google (no DNS)
|
||||
const char server[] = "www.arduino.cc"; // name address for Arduino (using DNS)
|
||||
const char server_host[] = "www.arduino.cc"; // leave this alone, change only above two
|
||||
|
||||
// Set the static IP address to use if the DHCP fails to assign
|
||||
IPAddress ip(192,168,2,177);
|
||||
IPAddress myDns(8, 8, 8, 8);
|
||||
IPAddress gw = IPAddress(192,168,2,1);
|
||||
IPAddress mask = IPAddress(255,255,255,0);
|
||||
|
||||
// Choose the analog pin to get semi-random data from for SSL
|
||||
// Pick a pin that's not connected or attached to a randomish voltage source
|
||||
const int rand_pin = A5;
|
||||
|
||||
// Initialize the SSL client library
|
||||
// We input an EthernetClient, our trust anchors, and the analog pin
|
||||
EthernetClient base_client;
|
||||
SSLClient client(base_client, TAs, (size_t)TAs_NUM, rand_pin);
|
||||
// Variables to measure the speed
|
||||
unsigned long beginMicros, endMicros;
|
||||
unsigned long byteCount = 0;
|
||||
bool printWebData = true; // set to false for better speed measurement
|
||||
|
||||
void setup() {
|
||||
// Open serial communications and wait for port to open:
|
||||
Serial.begin(115200);
|
||||
while (!Serial) {
|
||||
; // wait for serial port to connect. Needed for native USB port only
|
||||
}
|
||||
|
||||
// start the Ethernet connection:
|
||||
Serial.println(F("Initialize Ethernet with DHCP:"));
|
||||
//if (Ethernet.begin(mac) == 0) {
|
||||
if (Ethernet.begin(0) == 0) {
|
||||
Serial.println(F("Failed to configure Ethernet using DHCP"));
|
||||
Ethernet.begin(0, ip, myDns, gw, mask);
|
||||
} else {
|
||||
Serial.print(F(" DHCP assigned IP "));
|
||||
Serial.println(Ethernet.localIP());
|
||||
}
|
||||
// give the Ethernet shield a second to initialize:
|
||||
delay(2000);
|
||||
|
||||
Serial.print(F("connecting to "));
|
||||
Serial.print(server);
|
||||
Serial.println(F("..."));
|
||||
|
||||
// if you get a connection, report back via serial:
|
||||
auto start = millis();
|
||||
// specify the server and port, 443 is the standard port for HTTPS
|
||||
if (client.connect(server, 443)) {
|
||||
auto time = millis() - start;
|
||||
Serial.print(F("Took: "));
|
||||
Serial.println(time);
|
||||
// Make a HTTP request:
|
||||
client.println(F("GET /asciilogo.txt HTTP/1.1"));
|
||||
client.println(F("User-Agent: SSLClientOverEthernet"));
|
||||
client.print(F("Host: "));
|
||||
client.println(server_host);
|
||||
client.println(F("Connection: close"));
|
||||
client.println();
|
||||
} else {
|
||||
// if you didn't get a connection to the server:
|
||||
Serial.println(F("connection failed"));
|
||||
}
|
||||
beginMicros = micros();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// if there are incoming bytes available
|
||||
// from the server, read them and print them:
|
||||
int len = client.available();
|
||||
while (len > 0) {
|
||||
byte buffer[BUFFLEN];
|
||||
if (len > BUFFLEN) len = BUFFLEN;
|
||||
client.read(buffer, len);
|
||||
if (printWebData) {
|
||||
Serial.write(buffer, len); // show in the serial monitor (slows some boards)
|
||||
}
|
||||
byteCount = byteCount + len;
|
||||
len = client.available();
|
||||
}
|
||||
|
||||
// if the server's disconnected, stop the client:
|
||||
if (!client.connected()) {
|
||||
endMicros = micros();
|
||||
Serial.println();
|
||||
Serial.println(F("disconnecting."));
|
||||
client.stop();
|
||||
Serial.print(F("Received "));
|
||||
Serial.print(byteCount);
|
||||
Serial.print(F(" bytes in "));
|
||||
float seconds = (float)(endMicros - beginMicros) / 1000000.0;
|
||||
Serial.print(seconds, 4);
|
||||
float rate = (float)byteCount / seconds / 1000.0;
|
||||
Serial.print(F(", rate = "));
|
||||
Serial.print(rate);
|
||||
Serial.print(F(" kbytes/second"));
|
||||
Serial.println();
|
||||
|
||||
// do nothing forevermore:
|
||||
while (true) {
|
||||
delay(1);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
#ifndef _CERTIFICATES_H_
|
||||
#define _CERTIFICATES_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/* This file is auto-generated by the pycert_bearssl tool. Do not change it manually.
|
||||
* Certificates are BearSSL br_x509_trust_anchor format. Included certs:
|
||||
*
|
||||
* Index: 0
|
||||
* Label: Baltimore CyberTrust Root
|
||||
* Subject: C=IE,O=Baltimore,OU=CyberTrust,CN=Baltimore CyberTrust Root
|
||||
* Domain(s): www.arduino.cc
|
||||
*/
|
||||
|
||||
#define TAs_NUM 1
|
||||
|
||||
static const unsigned char TA_DN0[] = {
|
||||
0x30, 0x5a, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13,
|
||||
0x02, 0x49, 0x45, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x0a,
|
||||
0x13, 0x09, 0x42, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x6f, 0x72, 0x65, 0x31,
|
||||
0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x0a, 0x43, 0x79,
|
||||
0x62, 0x65, 0x72, 0x54, 0x72, 0x75, 0x73, 0x74, 0x31, 0x22, 0x30, 0x20,
|
||||
0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x19, 0x42, 0x61, 0x6c, 0x74, 0x69,
|
||||
0x6d, 0x6f, 0x72, 0x65, 0x20, 0x43, 0x79, 0x62, 0x65, 0x72, 0x54, 0x72,
|
||||
0x75, 0x73, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_N0[] = {
|
||||
0xa3, 0x04, 0xbb, 0x22, 0xab, 0x98, 0x3d, 0x57, 0xe8, 0x26, 0x72, 0x9a,
|
||||
0xb5, 0x79, 0xd4, 0x29, 0xe2, 0xe1, 0xe8, 0x95, 0x80, 0xb1, 0xb0, 0xe3,
|
||||
0x5b, 0x8e, 0x2b, 0x29, 0x9a, 0x64, 0xdf, 0xa1, 0x5d, 0xed, 0xb0, 0x09,
|
||||
0x05, 0x6d, 0xdb, 0x28, 0x2e, 0xce, 0x62, 0xa2, 0x62, 0xfe, 0xb4, 0x88,
|
||||
0xda, 0x12, 0xeb, 0x38, 0xeb, 0x21, 0x9d, 0xc0, 0x41, 0x2b, 0x01, 0x52,
|
||||
0x7b, 0x88, 0x77, 0xd3, 0x1c, 0x8f, 0xc7, 0xba, 0xb9, 0x88, 0xb5, 0x6a,
|
||||
0x09, 0xe7, 0x73, 0xe8, 0x11, 0x40, 0xa7, 0xd1, 0xcc, 0xca, 0x62, 0x8d,
|
||||
0x2d, 0xe5, 0x8f, 0x0b, 0xa6, 0x50, 0xd2, 0xa8, 0x50, 0xc3, 0x28, 0xea,
|
||||
0xf5, 0xab, 0x25, 0x87, 0x8a, 0x9a, 0x96, 0x1c, 0xa9, 0x67, 0xb8, 0x3f,
|
||||
0x0c, 0xd5, 0xf7, 0xf9, 0x52, 0x13, 0x2f, 0xc2, 0x1b, 0xd5, 0x70, 0x70,
|
||||
0xf0, 0x8f, 0xc0, 0x12, 0xca, 0x06, 0xcb, 0x9a, 0xe1, 0xd9, 0xca, 0x33,
|
||||
0x7a, 0x77, 0xd6, 0xf8, 0xec, 0xb9, 0xf1, 0x68, 0x44, 0x42, 0x48, 0x13,
|
||||
0xd2, 0xc0, 0xc2, 0xa4, 0xae, 0x5e, 0x60, 0xfe, 0xb6, 0xa6, 0x05, 0xfc,
|
||||
0xb4, 0xdd, 0x07, 0x59, 0x02, 0xd4, 0x59, 0x18, 0x98, 0x63, 0xf5, 0xa5,
|
||||
0x63, 0xe0, 0x90, 0x0c, 0x7d, 0x5d, 0xb2, 0x06, 0x7a, 0xf3, 0x85, 0xea,
|
||||
0xeb, 0xd4, 0x03, 0xae, 0x5e, 0x84, 0x3e, 0x5f, 0xff, 0x15, 0xed, 0x69,
|
||||
0xbc, 0xf9, 0x39, 0x36, 0x72, 0x75, 0xcf, 0x77, 0x52, 0x4d, 0xf3, 0xc9,
|
||||
0x90, 0x2c, 0xb9, 0x3d, 0xe5, 0xc9, 0x23, 0x53, 0x3f, 0x1f, 0x24, 0x98,
|
||||
0x21, 0x5c, 0x07, 0x99, 0x29, 0xbd, 0xc6, 0x3a, 0xec, 0xe7, 0x6e, 0x86,
|
||||
0x3a, 0x6b, 0x97, 0x74, 0x63, 0x33, 0xbd, 0x68, 0x18, 0x31, 0xf0, 0x78,
|
||||
0x8d, 0x76, 0xbf, 0xfc, 0x9e, 0x8e, 0x5d, 0x2a, 0x86, 0xa7, 0x4d, 0x90,
|
||||
0xdc, 0x27, 0x1a, 0x39,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_E0[] = {
|
||||
0x01, 0x00, 0x01,
|
||||
};
|
||||
|
||||
static const br_x509_trust_anchor TAs[] = {
|
||||
{
|
||||
{ (unsigned char *)TA_DN0, sizeof TA_DN0 },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ .rsa = {
|
||||
(unsigned char *)TA_RSA_N0, sizeof TA_RSA_N0,
|
||||
(unsigned char *)TA_RSA_E0, sizeof TA_RSA_E0,
|
||||
} }
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* ifndef _CERTIFICATES_H_ */
|
109
files.html
Normal file
|
@ -0,0 +1,109 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: File List</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('files.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">File List</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
|
||||
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')"> </span><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_self">src</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icondoc"></span><a class="el" href="_s_s_l_client_8cpp.html" target="_self">SSLClient.cpp</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="_s_s_l_client_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_s_s_l_client_8h.html" target="_self">SSLClient.h</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_2_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icondoc"></span><a class="el" href="_s_s_l_client_parameters_8cpp.html" target="_self">SSLClientParameters.cpp</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="_s_s_l_client_parameters_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_s_s_l_client_parameters_8h.html" target="_self">SSLClientParameters.h</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_4_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="_s_s_l_session_8h_source.html"><span class="icondoc"></span></a><a class="el" href="_s_s_l_session_8h.html" target="_self">SSLSession.h</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;"> </span><a href="time__macros_8h_source.html"><span class="icondoc"></span></a><a class="el" href="time__macros_8h.html" target="_self">time_macros.h</a></td><td class="desc"></td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
4
files_dup.js
Normal file
|
@ -0,0 +1,4 @@
|
|||
var files_dup =
|
||||
[
|
||||
[ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ]
|
||||
];
|
BIN
folderclosed.png
Normal file
After Width: | Height: | Size: 616 B |
BIN
folderopen.png
Normal file
After Width: | Height: | Size: 597 B |
282
functions.html
Normal file
|
@ -0,0 +1,282 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Class Members</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('functions.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all class members with links to the classes they belong to:</div>
|
||||
|
||||
<h3><a id="index_a"></a>- a -</h3><ul>
|
||||
<li>available()
|
||||
: <a class="el" href="class_s_s_l_client.html#a0e775669b4a040fbd3f281dcbcd2de78">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_c"></a>- c -</h3><ul>
|
||||
<li>connect()
|
||||
: <a class="el" href="class_s_s_l_client.html#ab97c0745f65a6c6009ac938b3b9912c3">SSLClient</a>
|
||||
</li>
|
||||
<li>connected()
|
||||
: <a class="el" href="class_s_s_l_client.html#a5488f01ccfddfd9e41f54dfbda48bcae">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_d"></a>- d -</h3><ul>
|
||||
<li>DebugLevel
|
||||
: <a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_e"></a>- e -</h3><ul>
|
||||
<li>Error
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6cea">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_f"></a>- f -</h3><ul>
|
||||
<li>flush()
|
||||
: <a class="el" href="class_s_s_l_client.html#aaf2192a6621fdf2f89cc26a9a1584f8c">SSLClient</a>
|
||||
</li>
|
||||
<li>fromDER()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#a12e44f4b8340ef7f1dcbbed7649e4bef">SSLClientParameters</a>
|
||||
</li>
|
||||
<li>fromPEM()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#ac5ddf993f7d560581297471593051ea6">SSLClientParameters</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_g"></a>- g -</h3><ul>
|
||||
<li>get_hostname()
|
||||
: <a class="el" href="class_s_s_l_session.html#a825373c5ba1aa6c45e74dc8a72b21820">SSLSession</a>
|
||||
</li>
|
||||
<li>getCertChain()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#af5686b2c601812f55477a7089b3b2c2d">SSLClientParameters</a>
|
||||
</li>
|
||||
<li>getCertType()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#a90d581703308881714d64d1ada785ad2">SSLClientParameters</a>
|
||||
</li>
|
||||
<li>getClient()
|
||||
: <a class="el" href="class_s_s_l_client.html#a9a4e9c9877ab73cf7e82d6942cc7db21">SSLClient</a>
|
||||
</li>
|
||||
<li>getECKey()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#ad9beb80ce98ed9aa34db28783f0264c5">SSLClientParameters</a>
|
||||
</li>
|
||||
<li>getRSAKey()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#a82c21b0ae4690a6b7842a0d74b12f67f">SSLClientParameters</a>
|
||||
</li>
|
||||
<li>getSession()
|
||||
: <a class="el" href="class_s_s_l_client.html#a2bd012ef6f01df9694ba9fd0a3c227c3">SSLClient</a>
|
||||
</li>
|
||||
<li>getSessionCount()
|
||||
: <a class="el" href="class_s_s_l_client.html#ae3f9e6f8e8a50e520c936239abecfd22">SSLClient</a>
|
||||
</li>
|
||||
<li>getTimeout()
|
||||
: <a class="el" href="class_s_s_l_client.html#a2a178251978e0622f7e241da702ae498">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_i"></a>- i -</h3><ul>
|
||||
<li>index
|
||||
: <a class="el" href="structssl__pem__decode__state.html#a8abbaad636bfcf50ef38f529e3cfd5f3">ssl_pem_decode_state</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_o"></a>- o -</h3><ul>
|
||||
<li>operator bool()
|
||||
: <a class="el" href="class_s_s_l_client.html#a4192ee3562c4806d4a6829356ca2636b">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_p"></a>- p -</h3><ul>
|
||||
<li>peek()
|
||||
: <a class="el" href="class_s_s_l_client.html#a0c0b6f2ad25701d1e45adb613d072d86">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_r"></a>- r -</h3><ul>
|
||||
<li>read()
|
||||
: <a class="el" href="class_s_s_l_client.html#a4c5420541a06213133ae308a3bca1c95">SSLClient</a>
|
||||
</li>
|
||||
<li>removeSession()
|
||||
: <a class="el" href="class_s_s_l_client.html#ad5d9d8a4187a3f8918bf66af83e733c4">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_s"></a>- s -</h3><ul>
|
||||
<li>setMutualAuthParams()
|
||||
: <a class="el" href="class_s_s_l_client.html#aeee217b5558dfb0724f2319888a77256">SSLClient</a>
|
||||
</li>
|
||||
<li>setTimeout()
|
||||
: <a class="el" href="class_s_s_l_client.html#a8da354f30537c1064d554921937a73ae">SSLClient</a>
|
||||
</li>
|
||||
<li>setVerificationTime()
|
||||
: <a class="el" href="class_s_s_l_client.html#ab285c2f5a03124558ef7f74b9f3d12ad">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_BR_CONNECT_FAIL
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa6a9cc2412a53b5981e937a41523eece5">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_BR_WRITE_ERROR
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa37bef298be71b84a57e59fadbfbd9016">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_CLIENT_CONNECT_FAIL
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa7510402478ffbecd6e1aa3811b175cfd">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_CLIENT_WRTIE_ERROR
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaab8581e1172fbf15067d435706d3a03a8">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_DUMP
|
||||
: <a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1ad1cf0d4d876daa655edb8331bfe2ce39">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_ERROR
|
||||
: <a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a199742ec5c99c72d9cede1fda0f125c5">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_INFO
|
||||
: <a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a8d5f7561f9cc0a2f3e5f362b02f4a5b2">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_INTERNAL_ERROR
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaaf66f8d5f6601f9e7607b78bf7a07fc84">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_NONE
|
||||
: <a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a24122d1e1bb724237f305a0b4a21ff75">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_OK
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa18dbddc0a3d4a94ee0f298fe55a06a94">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_OUT_OF_MEMORY
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa0a4f8af0226cf29ede8f6fe4a9047b08">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_WARN
|
||||
: <a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a26f3e5f1481f3ea22ea4ab5370b0fa97">SSLClient</a>
|
||||
</li>
|
||||
<li>SSLClient()
|
||||
: <a class="el" href="class_s_s_l_client.html#a68f026a625ca1ccd1aba87bb6e670376">SSLClient</a>
|
||||
</li>
|
||||
<li>SSLClientParameters()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#a97213b5554e90908fbf284669b5f22f3">SSLClientParameters</a>
|
||||
</li>
|
||||
<li>SSLSession()
|
||||
: <a class="el" href="class_s_s_l_session.html#a0c8e01b0944c1f4b0ec6d4c423c95b74">SSLSession</a>
|
||||
</li>
|
||||
<li>stop()
|
||||
: <a class="el" href="class_s_s_l_client.html#ad8ed697371748e31e01c3f697bc36cbe">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_t"></a>- t -</h3><ul>
|
||||
<li>to_br_session()
|
||||
: <a class="el" href="class_s_s_l_session.html#acbe6549b55d50541d09a16f770e65afc">SSLSession</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_v"></a>- v -</h3><ul>
|
||||
<li>vect
|
||||
: <a class="el" href="structssl__pem__decode__state.html#aa004af7ee6bfb65161dc47558e3a2ac2">ssl_pem_decode_state</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_w"></a>- w -</h3><ul>
|
||||
<li>write()
|
||||
: <a class="el" href="class_s_s_l_client.html#a03c7926938acd57cfc3b982edf725a86">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
102
functions_enum.html
Normal file
|
@ -0,0 +1,102 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Class Members - Enumerations</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('functions_enum.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="contents">
|
||||
 <ul>
|
||||
<li>DebugLevel
|
||||
: <a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1">SSLClient</a>
|
||||
</li>
|
||||
<li>Error
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6cea">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
132
functions_eval.html
Normal file
|
@ -0,0 +1,132 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Class Members - Enumerator</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('functions_eval.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="contents">
|
||||
 <ul>
|
||||
<li>SSL_BR_CONNECT_FAIL
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa6a9cc2412a53b5981e937a41523eece5">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_BR_WRITE_ERROR
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa37bef298be71b84a57e59fadbfbd9016">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_CLIENT_CONNECT_FAIL
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa7510402478ffbecd6e1aa3811b175cfd">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_CLIENT_WRTIE_ERROR
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaab8581e1172fbf15067d435706d3a03a8">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_DUMP
|
||||
: <a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1ad1cf0d4d876daa655edb8331bfe2ce39">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_ERROR
|
||||
: <a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a199742ec5c99c72d9cede1fda0f125c5">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_INFO
|
||||
: <a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a8d5f7561f9cc0a2f3e5f362b02f4a5b2">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_INTERNAL_ERROR
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaaf66f8d5f6601f9e7607b78bf7a07fc84">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_NONE
|
||||
: <a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a24122d1e1bb724237f305a0b4a21ff75">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_OK
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa18dbddc0a3d4a94ee0f298fe55a06a94">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_OUT_OF_MEMORY
|
||||
: <a class="el" href="class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa0a4f8af0226cf29ede8f6fe4a9047b08">SSLClient</a>
|
||||
</li>
|
||||
<li>SSL_WARN
|
||||
: <a class="el" href="class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a26f3e5f1481f3ea22ea4ab5370b0fa97">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
218
functions_func.html
Normal file
|
@ -0,0 +1,218 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Class Members - Functions</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('functions_func.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="contents">
|
||||
 
|
||||
|
||||
<h3><a id="index_a"></a>- a -</h3><ul>
|
||||
<li>available()
|
||||
: <a class="el" href="class_s_s_l_client.html#a0e775669b4a040fbd3f281dcbcd2de78">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_c"></a>- c -</h3><ul>
|
||||
<li>connect()
|
||||
: <a class="el" href="class_s_s_l_client.html#ab97c0745f65a6c6009ac938b3b9912c3">SSLClient</a>
|
||||
</li>
|
||||
<li>connected()
|
||||
: <a class="el" href="class_s_s_l_client.html#a5488f01ccfddfd9e41f54dfbda48bcae">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_f"></a>- f -</h3><ul>
|
||||
<li>flush()
|
||||
: <a class="el" href="class_s_s_l_client.html#aaf2192a6621fdf2f89cc26a9a1584f8c">SSLClient</a>
|
||||
</li>
|
||||
<li>fromDER()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#a12e44f4b8340ef7f1dcbbed7649e4bef">SSLClientParameters</a>
|
||||
</li>
|
||||
<li>fromPEM()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#ac5ddf993f7d560581297471593051ea6">SSLClientParameters</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_g"></a>- g -</h3><ul>
|
||||
<li>get_hostname()
|
||||
: <a class="el" href="class_s_s_l_session.html#a825373c5ba1aa6c45e74dc8a72b21820">SSLSession</a>
|
||||
</li>
|
||||
<li>getCertChain()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#af5686b2c601812f55477a7089b3b2c2d">SSLClientParameters</a>
|
||||
</li>
|
||||
<li>getCertType()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#a90d581703308881714d64d1ada785ad2">SSLClientParameters</a>
|
||||
</li>
|
||||
<li>getClient()
|
||||
: <a class="el" href="class_s_s_l_client.html#a9a4e9c9877ab73cf7e82d6942cc7db21">SSLClient</a>
|
||||
</li>
|
||||
<li>getECKey()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#ad9beb80ce98ed9aa34db28783f0264c5">SSLClientParameters</a>
|
||||
</li>
|
||||
<li>getRSAKey()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#a82c21b0ae4690a6b7842a0d74b12f67f">SSLClientParameters</a>
|
||||
</li>
|
||||
<li>getSession()
|
||||
: <a class="el" href="class_s_s_l_client.html#a2bd012ef6f01df9694ba9fd0a3c227c3">SSLClient</a>
|
||||
</li>
|
||||
<li>getSessionCount()
|
||||
: <a class="el" href="class_s_s_l_client.html#ae3f9e6f8e8a50e520c936239abecfd22">SSLClient</a>
|
||||
</li>
|
||||
<li>getTimeout()
|
||||
: <a class="el" href="class_s_s_l_client.html#a2a178251978e0622f7e241da702ae498">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_o"></a>- o -</h3><ul>
|
||||
<li>operator bool()
|
||||
: <a class="el" href="class_s_s_l_client.html#a4192ee3562c4806d4a6829356ca2636b">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_p"></a>- p -</h3><ul>
|
||||
<li>peek()
|
||||
: <a class="el" href="class_s_s_l_client.html#a0c0b6f2ad25701d1e45adb613d072d86">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_r"></a>- r -</h3><ul>
|
||||
<li>read()
|
||||
: <a class="el" href="class_s_s_l_client.html#a4c5420541a06213133ae308a3bca1c95">SSLClient</a>
|
||||
</li>
|
||||
<li>removeSession()
|
||||
: <a class="el" href="class_s_s_l_client.html#ad5d9d8a4187a3f8918bf66af83e733c4">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_s"></a>- s -</h3><ul>
|
||||
<li>setMutualAuthParams()
|
||||
: <a class="el" href="class_s_s_l_client.html#aeee217b5558dfb0724f2319888a77256">SSLClient</a>
|
||||
</li>
|
||||
<li>setTimeout()
|
||||
: <a class="el" href="class_s_s_l_client.html#a8da354f30537c1064d554921937a73ae">SSLClient</a>
|
||||
</li>
|
||||
<li>setVerificationTime()
|
||||
: <a class="el" href="class_s_s_l_client.html#ab285c2f5a03124558ef7f74b9f3d12ad">SSLClient</a>
|
||||
</li>
|
||||
<li>SSLClient()
|
||||
: <a class="el" href="class_s_s_l_client.html#a68f026a625ca1ccd1aba87bb6e670376">SSLClient</a>
|
||||
</li>
|
||||
<li>SSLClientParameters()
|
||||
: <a class="el" href="class_s_s_l_client_parameters.html#a97213b5554e90908fbf284669b5f22f3">SSLClientParameters</a>
|
||||
</li>
|
||||
<li>SSLSession()
|
||||
: <a class="el" href="class_s_s_l_session.html#a0c8e01b0944c1f4b0ec6d4c423c95b74">SSLSession</a>
|
||||
</li>
|
||||
<li>stop()
|
||||
: <a class="el" href="class_s_s_l_client.html#ad8ed697371748e31e01c3f697bc36cbe">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_t"></a>- t -</h3><ul>
|
||||
<li>to_br_session()
|
||||
: <a class="el" href="class_s_s_l_session.html#acbe6549b55d50541d09a16f770e65afc">SSLSession</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3><a id="index_w"></a>- w -</h3><ul>
|
||||
<li>write()
|
||||
: <a class="el" href="class_s_s_l_client.html#a03c7926938acd57cfc3b982edf725a86">SSLClient</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
102
functions_vars.html
Normal file
|
@ -0,0 +1,102 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Class Members - Variables</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('functions_vars.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="contents">
|
||||
 <ul>
|
||||
<li>index
|
||||
: <a class="el" href="structssl__pem__decode__state.html#a8abbaad636bfcf50ef38f529e3cfd5f3">ssl_pem_decode_state</a>
|
||||
</li>
|
||||
<li>vect
|
||||
: <a class="el" href="structssl__pem__decode__state.html#aa004af7ee6bfb65161dc47558e3a2ac2">ssl_pem_decode_state</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
159
globals.html
Normal file
|
@ -0,0 +1,159 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: File Members</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('globals.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all file members with links to the files they belong to:</div><ul>
|
||||
<li>__TIME_DAYS__
|
||||
: <a class="el" href="time__macros_8h.html#a7f2cdee2eebbccd45c179a50a0bbabcf">time_macros.h</a>
|
||||
</li>
|
||||
<li>__TIME_HOURS__
|
||||
: <a class="el" href="time__macros_8h.html#a2488d1ddab7e5fa119da3421462231c4">time_macros.h</a>
|
||||
</li>
|
||||
<li>__TIME_MINUTES__
|
||||
: <a class="el" href="time__macros_8h.html#ab3592442029a102b388fafeadc4a6ab8">time_macros.h</a>
|
||||
</li>
|
||||
<li>__TIME_MONTH__
|
||||
: <a class="el" href="time__macros_8h.html#ac8f6b75d9e04634818984ba400d0dee1">time_macros.h</a>
|
||||
</li>
|
||||
<li>__TIME_SECONDS__
|
||||
: <a class="el" href="time__macros_8h.html#a38ac93dd8bfe385ff915a82c92bbfc97">time_macros.h</a>
|
||||
</li>
|
||||
<li>__TIME_YEARS__
|
||||
: <a class="el" href="time__macros_8h.html#a56482fcc86a55713dee595c2092ed376">time_macros.h</a>
|
||||
</li>
|
||||
<li>_UNIX_TIMESTAMP
|
||||
: <a class="el" href="time__macros_8h.html#a868143e0521daf07b25a2f3947cf54a3">time_macros.h</a>
|
||||
</li>
|
||||
<li>_UNIX_TIMESTAMP_FDAY
|
||||
: <a class="el" href="time__macros_8h.html#ab6c76862964ff7e543fd9d5807b2fa79">time_macros.h</a>
|
||||
</li>
|
||||
<li>_UNIX_TIMESTAMP_YDAY
|
||||
: <a class="el" href="time__macros_8h.html#a5ab60a7e3e1b6e0a919b3a37bc0d4b97">time_macros.h</a>
|
||||
</li>
|
||||
<li>CONV_STR2DEC_1
|
||||
: <a class="el" href="time__macros_8h.html#ae0574ced3f997b97d357c1cb68000e3a">time_macros.h</a>
|
||||
</li>
|
||||
<li>CONV_STR2DEC_2
|
||||
: <a class="el" href="time__macros_8h.html#ae90924c33a05839b3eb1426472f40eb3">time_macros.h</a>
|
||||
</li>
|
||||
<li>CONV_STR2DEC_3
|
||||
: <a class="el" href="time__macros_8h.html#aad01b5fb233c0091aff2a837a8de32f4">time_macros.h</a>
|
||||
</li>
|
||||
<li>CONV_STR2DEC_4
|
||||
: <a class="el" href="time__macros_8h.html#a9da779a8ca64782ea49babce14122d34">time_macros.h</a>
|
||||
</li>
|
||||
<li>GET_MONTH
|
||||
: <a class="el" href="time__macros_8h.html#a4dbe4cf7c879a2cdac386ce72c5e5994">time_macros.h</a>
|
||||
</li>
|
||||
<li>PST_OFFSET
|
||||
: <a class="el" href="time__macros_8h.html#a243cf438274412bbecf4b8d5eeb02ccb">time_macros.h</a>
|
||||
</li>
|
||||
<li>SEC_PER_DAY
|
||||
: <a class="el" href="time__macros_8h.html#a3aaee30ddedb3f6675aac341a66e39e2">time_macros.h</a>
|
||||
</li>
|
||||
<li>SEC_PER_HOUR
|
||||
: <a class="el" href="time__macros_8h.html#a2d540510d5860d7f190d13124956bc57">time_macros.h</a>
|
||||
</li>
|
||||
<li>SEC_PER_MIN
|
||||
: <a class="el" href="time__macros_8h.html#ac47b302f1b8d2a7a9c035c417247be76">time_macros.h</a>
|
||||
</li>
|
||||
<li>SEC_PER_YEAR
|
||||
: <a class="el" href="time__macros_8h.html#a8cd8e04105fec7cd442d078c303e46b9">time_macros.h</a>
|
||||
</li>
|
||||
<li>UNIX_TIMESTAMP
|
||||
: <a class="el" href="time__macros_8h.html#a04e76e262f0920441e5f0c5552e83487">time_macros.h</a>
|
||||
</li>
|
||||
<li>UNIX_TIMESTAMP_UTC
|
||||
: <a class="el" href="time__macros_8h.html#a2af3d1d741ae2b49627adf56bbc95dc3">time_macros.h</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
159
globals_defs.html
Normal file
|
@ -0,0 +1,159 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: File Members</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('globals_defs.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="contents">
|
||||
 <ul>
|
||||
<li>__TIME_DAYS__
|
||||
: <a class="el" href="time__macros_8h.html#a7f2cdee2eebbccd45c179a50a0bbabcf">time_macros.h</a>
|
||||
</li>
|
||||
<li>__TIME_HOURS__
|
||||
: <a class="el" href="time__macros_8h.html#a2488d1ddab7e5fa119da3421462231c4">time_macros.h</a>
|
||||
</li>
|
||||
<li>__TIME_MINUTES__
|
||||
: <a class="el" href="time__macros_8h.html#ab3592442029a102b388fafeadc4a6ab8">time_macros.h</a>
|
||||
</li>
|
||||
<li>__TIME_MONTH__
|
||||
: <a class="el" href="time__macros_8h.html#ac8f6b75d9e04634818984ba400d0dee1">time_macros.h</a>
|
||||
</li>
|
||||
<li>__TIME_SECONDS__
|
||||
: <a class="el" href="time__macros_8h.html#a38ac93dd8bfe385ff915a82c92bbfc97">time_macros.h</a>
|
||||
</li>
|
||||
<li>__TIME_YEARS__
|
||||
: <a class="el" href="time__macros_8h.html#a56482fcc86a55713dee595c2092ed376">time_macros.h</a>
|
||||
</li>
|
||||
<li>_UNIX_TIMESTAMP
|
||||
: <a class="el" href="time__macros_8h.html#a868143e0521daf07b25a2f3947cf54a3">time_macros.h</a>
|
||||
</li>
|
||||
<li>_UNIX_TIMESTAMP_FDAY
|
||||
: <a class="el" href="time__macros_8h.html#ab6c76862964ff7e543fd9d5807b2fa79">time_macros.h</a>
|
||||
</li>
|
||||
<li>_UNIX_TIMESTAMP_YDAY
|
||||
: <a class="el" href="time__macros_8h.html#a5ab60a7e3e1b6e0a919b3a37bc0d4b97">time_macros.h</a>
|
||||
</li>
|
||||
<li>CONV_STR2DEC_1
|
||||
: <a class="el" href="time__macros_8h.html#ae0574ced3f997b97d357c1cb68000e3a">time_macros.h</a>
|
||||
</li>
|
||||
<li>CONV_STR2DEC_2
|
||||
: <a class="el" href="time__macros_8h.html#ae90924c33a05839b3eb1426472f40eb3">time_macros.h</a>
|
||||
</li>
|
||||
<li>CONV_STR2DEC_3
|
||||
: <a class="el" href="time__macros_8h.html#aad01b5fb233c0091aff2a837a8de32f4">time_macros.h</a>
|
||||
</li>
|
||||
<li>CONV_STR2DEC_4
|
||||
: <a class="el" href="time__macros_8h.html#a9da779a8ca64782ea49babce14122d34">time_macros.h</a>
|
||||
</li>
|
||||
<li>GET_MONTH
|
||||
: <a class="el" href="time__macros_8h.html#a4dbe4cf7c879a2cdac386ce72c5e5994">time_macros.h</a>
|
||||
</li>
|
||||
<li>PST_OFFSET
|
||||
: <a class="el" href="time__macros_8h.html#a243cf438274412bbecf4b8d5eeb02ccb">time_macros.h</a>
|
||||
</li>
|
||||
<li>SEC_PER_DAY
|
||||
: <a class="el" href="time__macros_8h.html#a3aaee30ddedb3f6675aac341a66e39e2">time_macros.h</a>
|
||||
</li>
|
||||
<li>SEC_PER_HOUR
|
||||
: <a class="el" href="time__macros_8h.html#a2d540510d5860d7f190d13124956bc57">time_macros.h</a>
|
||||
</li>
|
||||
<li>SEC_PER_MIN
|
||||
: <a class="el" href="time__macros_8h.html#ac47b302f1b8d2a7a9c035c417247be76">time_macros.h</a>
|
||||
</li>
|
||||
<li>SEC_PER_YEAR
|
||||
: <a class="el" href="time__macros_8h.html#a8cd8e04105fec7cd442d078c303e46b9">time_macros.h</a>
|
||||
</li>
|
||||
<li>UNIX_TIMESTAMP
|
||||
: <a class="el" href="time__macros_8h.html#a04e76e262f0920441e5f0c5552e83487">time_macros.h</a>
|
||||
</li>
|
||||
<li>UNIX_TIMESTAMP_UTC
|
||||
: <a class="el" href="time__macros_8h.html#a2af3d1d741ae2b49627adf56bbc95dc3">time_macros.h</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
108
hierarchy.html
Normal file
|
@ -0,0 +1,108 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Class Hierarchy</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('hierarchy.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Class Hierarchy</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
|
||||
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</span><span class="icona"><span class="icon">C</span></span><b>br_ssl_session_parameters</b></td><td class="desc"></td></tr>
|
||||
<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_s_s_l_session.html" target="_self">SSLSession</a></td><td class="desc">This class stores values which allow <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> to save and resume SSL sessions </td></tr>
|
||||
<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">▼</span><span class="icona"><span class="icon">C</span></span><b>Client</b></td><td class="desc"></td></tr>
|
||||
<tr id="row_1_0_"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_s_s_l_client.html" target="_self">SSLClient</a></td><td class="desc">The main <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> class. Check out <a class="el" href="_r_e_a_d_m_e_8md.html">README.md</a> for more info </td></tr>
|
||||
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structssl__pem__decode__state.html" target="_self">ssl_pem_decode_state</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_s_s_l_client_parameters.html" target="_self">SSLClientParameters</a></td><td class="desc">This class stores data required for <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> to use mutual authentication </td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
11
hierarchy.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
var hierarchy =
|
||||
[
|
||||
[ "br_ssl_session_parameters", null, [
|
||||
[ "SSLSession", "class_s_s_l_session.html", null ]
|
||||
] ],
|
||||
[ "Client", null, [
|
||||
[ "SSLClient", "class_s_s_l_client.html", null ]
|
||||
] ],
|
||||
[ "ssl_pem_decode_state", "structssl__pem__decode__state.html", null ],
|
||||
[ "SSLClientParameters", "class_s_s_l_client_parameters.html", null ]
|
||||
];
|
352
index.html
Normal file
|
@ -0,0 +1,352 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: SSLClient</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('index.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="PageDoc"><div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title"><a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> </div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><p><a class="anchor" id="md_README"></a> <img src="https://github.com/OPEnSLab-OSU/SSLClient/workflows/CI/badge.svg" alt="CI" style="pointer-events: none;" class="inline"/></p>
|
||||
<p><a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> adds <a href="https://www.websecurity.symantec.com/security-topics/what-is-ssl-tls-https">TLS 1.2</a> functionality to any network library implementing the <a href="https://www.arduino.cc/en/Reference/ClientConstructor">Arduino Client interface</a>, including the Arduino <a href="https://www.arduino.cc/en/Reference/EthernetClient">EthernetClient</a> and <a href="https://www.arduino.cc/en/Reference/WiFiClient">WiFiClient</a> classes. <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> was created to integrate TLS seamlessly with the Arduino infrastructure using <a href="https://bearssl.org/">BearSSL</a> as an underlying TLS engine. Unlike <a href="https://github.com/arduino-libraries/ArduinoBearSSL">ArduinoBearSSL</a>, <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> is completly self-contained, and does not require any additional hardware (other than a network connection).</p>
|
||||
<p><a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> officially supports SAMD21, SAM3X, ESP32, TIVA C, STM32F7, and Teensy >= 3.0; but it should work on any board with at least 110kB flash and 7kB RAM. SSClient does not currently support ESP8266 (see <a href="https://github.com/OPEnSLab-OSU/SSLClient/issues/5#issuecomment-569968546">this issue</a>) or AVR due to memory constraints on both platforms.</p>
|
||||
<p>You can also view this README in <a href="https://openslab-osu.github.io/SSLClient/index.html">doxygen</a>.</p>
|
||||
<h1>Overview</h1>
|
||||
<p>Using <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> is similar to using any other Arduino-based Client class, as this library was developed around compatibility with <a href="https://www.arduino.cc/en/Reference/EthernetClient">EthernetClient</a>. There are a few extra things, however, that you will need to get started:</p>
|
||||
<ol type="1">
|
||||
<li><b>Board and Network Peripheral</b> - Your board should have a lot of resources (>110kB flash and >7kB RAM), and your network peripheral should have a large internal buffer (>7kB). This library was tested with the <a href="https://www.adafruit.com/product/2772">Adafruit Feather M0</a> (256K flash, 32K RAM) and the <a href="https://www.adafruit.com/product/3201">Adafruit Ethernet Featherwing</a> (16kB Buffer), and we still had to modify the Arduino Ethernet library to support larger internal buffers per socket (see the <a href="#sslclient-with-ethernet">Implementation Gotchas</a>).</li>
|
||||
<li><b>Trust Anchors</b> - You will need a header containing array of trust anchors (<a href="./readme/cert.h">example</a>), which are used to verify the SSL connection later on. <b>This file must generated for every project.</b> Check out <a href="./TrustAnchors.md#generating-trust-anchors">TrustAnchors.md</a> on how to generate this file for your project, and for more information about what a trust anchor is.</li>
|
||||
<li><b>Network Peripheral Driver Implementing <code>Client</code></b> - Examples include <code>EthernetClient</code>, <code>WiFiClient</code>, and so on—SSLClient will run on top of any network driver exposing the <code>Client</code> interface.</li>
|
||||
<li><b>Analog Pin</b> - Used for generating random data at the start of the connection (see the <a href="#implementation-gotchas">Implementation Gotchas</a>).</li>
|
||||
</ol>
|
||||
<p>Once all those are ready, you can create an <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> object like this: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">BaseClientType baseClientInstance;</div>
|
||||
<div class="line">SSLClient client(baseClientInstance, TAs, (size_t)TAs_NUM, AnalogPin);</div>
|
||||
</div><!-- fragment --><p> Where:</p><ul>
|
||||
<li>BaseClientType - The type of baseClientInstance</li>
|
||||
<li>BaseClientInstance - An instance of the class you are using for <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> (the class associated with the network interface, from step 3). It is important that this instance be stored <em>outside</em> the <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> declaration (for instance, <code><a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient(BaseClientType() ...)</a></code> wouldn't work).</li>
|
||||
<li>TAs - The name of the trust anchor array created in step 2. If you generated a header using the tutorial this will probably be <code>TAs</code>.</li>
|
||||
<li>TAs_NUM - The number of trust anchors in TAs. If you generated a header using the tutorial this will probably be <code>TAs_NUM</code>.</li>
|
||||
<li><p class="startli">AnalogPin - The analog pin to pull random data from (step 4).</p>
|
||||
<p class="startli">For example, if I am using EthernetClient, a generated array of 2 trust anchors, and the analog pin A7, I would declare an <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> instance using: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">EthernetClient baseClient;</div>
|
||||
<div class="line">SSLClient client(baseClient, TAs, 2, A7);</div>
|
||||
</div><!-- fragment --><p> Given this client, simply use <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> as you would the base client class: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">// connect to ardiuino.cc over ssl (port 443 for websites)</div>
|
||||
<div class="line">client.connect("www.arduino.cc", 443);</div>
|
||||
<div class="line">// Make a HTTP request</div>
|
||||
<div class="line">client.println("GET /asciilogo.txt HTTP/1.1");</div>
|
||||
<div class="line">client.println("User-Agent: AdafruitFeatherM0WiFi");</div>
|
||||
<div class="line">client.print("Host: ");</div>
|
||||
<div class="line">client.println(server);</div>
|
||||
<div class="line">client.println("Connection: close");</div>
|
||||
<div class="line">client.println();</div>
|
||||
<div class="line">client.flush();</div>
|
||||
<div class="line">// read and print the data</div>
|
||||
<div class="line">...</div>
|
||||
</div><!-- fragment --><p> <b>Note</b>: <code>client.connect("www.arduino.cc", 443)</code> can take 5-15 seconds to finish on some low-power devices. This an unavoidable consequence of the SSL protocol, and is detailed more in <a href="#resources">Implementation Gotchas</a>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>For more information on <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a>, check out the <a href="./examples">examples</a>, <a href="https://openslab-osu.github.io/SSLClient/html/index.html">API documentation</a>, or the rest of this README.</p>
|
||||
<h1>Other Features</h1>
|
||||
<h2>Logging</h2>
|
||||
<p><a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> also allows for changing the debugging level by adding an additional parameter to the constructor: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">EthernetClient baseClient;</div>
|
||||
<div class="line">SSLClient client(baseClient, TAs, (size_t)2, A7, 1, SSLClient::SSL_INFO);</div>
|
||||
</div><!-- fragment --><p> Logging is always outputted through the <a href="https://www.arduino.cc/reference/en/language/functions/communication/serial/">Arduino Serial interface</a>, so you'll need to setup Serial before you can view the SSL logs. Log levels are enumerated in ::DebugLevel. The log level is set to <code>SSL_WARN</code> by default.</p>
|
||||
<h2>Errors</h2>
|
||||
<p>When <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> encounters an error, it will attempt to terminate the SSL session gracefully if possible, and then close the socket. Simple error information can be found from SSLClient::getWriteError, which will return a value from the ::Error enum. For more detailed diagnostics, you can look at the serial logs, which will be displayed if the log level is at <code>SSL_ERROR</code> or lower.</p>
|
||||
<h2>Write Buffering</h2>
|
||||
<p>As you may have noticed in the documentation for <a class="el" href="class_s_s_l_client.html#a03c7926938acd57cfc3b982edf725a86" title="Write some bytes to the SSL connection.">SSLClient::write</a>, calling this function does not actually write to the network. Instead, you must call <a class="el" href="class_s_s_l_client.html#a0e775669b4a040fbd3f281dcbcd2de78" title="Returns the number of bytes available to read from the data that has been received and decrypted.">SSLClient::available</a> or <a class="el" href="class_s_s_l_client.html#aaf2192a6621fdf2f89cc26a9a1584f8c" title="Force writing the buffered bytes from SSLClient::write to the network.">SSLClient::flush</a>, which will detect that the buffer is ready and write to the network (see <a class="el" href="class_s_s_l_client.html#a03c7926938acd57cfc3b982edf725a86" title="Write some bytes to the SSL connection.">SSLClient::write</a> for details).</p>
|
||||
<p>This was implemented as a buffered function because examples in Arduino libraries will often write to the network like so: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">EthernetClient client;</div>
|
||||
<div class="line">// ...</div>
|
||||
<div class="line">// connect to ardiuino.cc over ssl (port 443 for websites)</div>
|
||||
<div class="line">client.connect("www.arduino.cc", 443);</div>
|
||||
<div class="line">// ...</div>
|
||||
<div class="line">// write an http request to the network</div>
|
||||
<div class="line">client.write("GET /asciilogo.txt HTTP/1.1\r\n");</div>
|
||||
<div class="line">client.write("Host: arduino.cc\r\n");</div>
|
||||
<div class="line">client.write("Connection: close\r\n");</div>
|
||||
<div class="line">// wait for response</div>
|
||||
<div class="line">while (!client.available()) { /* ... */ }</div>
|
||||
<div class="line">// ...</div>
|
||||
</div><!-- fragment --><p> Notice that every single <code>client.write()</code> call immediately writes to the network. This behavior is fine for most network clients; with SSL, however, it results in many small encryption tasks that consume resources. To reduce the overhead of an SSL connection, <a class="el" href="class_s_s_l_client.html#a03c7926938acd57cfc3b982edf725a86" title="Write some bytes to the SSL connection.">SSLClient::write</a> implicitly buffers until the developer states that they are waiting for data to be received with <a class="el" href="class_s_s_l_client.html#a0e775669b4a040fbd3f281dcbcd2de78" title="Returns the number of bytes available to read from the data that has been received and decrypted.">SSLClient::available</a>. A simple example can be found below:</p>
|
||||
<div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">EthernetClient baseClient;</div>
|
||||
<div class="line">SSLClient client(baseClient, TAs, (size_t)2, A7);</div>
|
||||
<div class="line">// ...</div>
|
||||
<div class="line">// connect to ardiuino.cc over ssl (port 443 for websites)</div>
|
||||
<div class="line">client.connect("www.arduino.cc", 443);</div>
|
||||
<div class="line">// ...</div>
|
||||
<div class="line">// add http request to the buffer</div>
|
||||
<div class="line">client.write("GET /asciilogo.txt HTTP/1.1\r\n");</div>
|
||||
<div class="line">client.write("Host: arduino.cc\r\n");</div>
|
||||
<div class="line">client.write("Connection: close\r\n");</div>
|
||||
<div class="line">// write the bytes to the network, then wait for response</div>
|
||||
<div class="line">while (!client.available()) { /* ... */ }</div>
|
||||
<div class="line">// ...</div>
|
||||
</div><!-- fragment --><p>If you would like to trigger a network write manually without using the <a class="el" href="class_s_s_l_client.html#a0e775669b4a040fbd3f281dcbcd2de78" title="Returns the number of bytes available to read from the data that has been received and decrypted.">SSLClient::available</a>, you can also call <a class="el" href="class_s_s_l_client.html#aaf2192a6621fdf2f89cc26a9a1584f8c" title="Force writing the buffered bytes from SSLClient::write to the network.">SSLClient::flush</a>, which will write all data and return when finished.</p>
|
||||
<h2>Session Caching</h2>
|
||||
<p>As detailed in the <a href="#resources">resources section</a>, SSL handshakes take an extended period (1-4sec) to negotiate. BearSSL is able to keep a <a href="https://bearssl.org/api1.html#session-cache">SSL session cache</a> of the clients it has connected to which can drastically reduce this time: if BearSSL successfully resumes an SSL session, connection time is typically 100-500ms.</p>
|
||||
<p>In order to use SSL session resumption:</p><ul>
|
||||
<li>The website you are connecting to must support it. Support is widespread, and you can verify it using <a href="https://www.ssllabs.com/ssltest/">SSLLabs</a>.</li>
|
||||
<li>You must reuse the same <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> object (SSL Sessions are stored in the object itself).</li>
|
||||
<li>You must reconnect to the exact same server (detailed below).</li>
|
||||
</ul>
|
||||
<blockquote class="doxtable">
|
||||
<p>NOTE: <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> automatically stores an IP address and hostname in each session, ensuring that if you call <code>connect("www.google.com")</code> <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> will use the same SSL session for that hostname. Unfortunately some websites have multiple servers on a single IP address (github.com being an example), so you may find that even if you are connecting to the same host the connection will not resume. This is a flaw in the SSL session protocol—though it has been resolved in TLS 1.3, the lack of widespread adoption of the new protocol prevents it from being resolved here.</p>
|
||||
<p>SSL sessions can also expire based on server criteria (ex. timeout), which will result in a standard 4-10 second connection. </p>
|
||||
</blockquote>
|
||||
<p>SSL sessions take memory to store, so by default <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> will only store one at a time. You can change this behavior by adding the following to your <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> declaration: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">EthernetClient baseClient;</div>
|
||||
<div class="line">SSLClient client(baseClient, TAs, (size_t)2, A7, SomeNumber);</div>
|
||||
</div><!-- fragment --><p> Where <code>SomeNumber</code> is the number of sessions you would like to store. For example this declaration can store 3 sessions: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">EthernetClient baseClient;</div>
|
||||
<div class="line">SSLClient client(baseClient, TAs, (size_t)2, A7, 3);</div>
|
||||
</div><!-- fragment --><p> Sessions are managed internally using the SSLSession::getSession function. This function will cycle through sessions in a rotating order, allowing the session cache to continually overwrite old sessions. In general, it is a good idea to use a SessionCache size equal to the number of domains you plan on connecting to.</p>
|
||||
<p>If you need to clear a session, you can do so using the SSLSession::removeSession function.</p>
|
||||
<h2>mTLS</h2>
|
||||
<p>As of <code>v1.6.0</code>, <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> supports <a href="https://developers.cloudflare.com/access/service-auth/mtls/">mutual TLS authentication</a>. mTLS is a varient of TLS that verifies both the server and device identities before a connection, and is commonly used in IoT protocols as a secure layer (MQTT over TLS, HTTP over TLS, etc.).</p>
|
||||
<p>To use mTLS with <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> you will need to a client certificate and client private key associated with the server you are attempting to connect to. Depending on your use case, you will either generate these yourself (ex. <a href="http://www.steves-internet-guide.com/creating-and-using-client-certificates-with-mqtt-and-mosquitto/">Mosquito MQTT setup</a>), or have them generated for you (ex. <a href="https://docs.aws.amazon.com/iot/latest/developerguide/create-device-certificate.html">AWS IoT Certificate Generation</a>). Given this cryptographic information, you can modify the standard <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> connection sketch to enable mTLS authentication: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">...</div>
|
||||
<div class="line">/* Somewhere above setup() */</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">// The client certificate, can be PEM or DER format</div>
|
||||
<div class="line">// DER format will be an array of raw bytes, and PEM format will be a string</div>
|
||||
<div class="line">// PEM format is shown below</div>
|
||||
<div class="line">const char my_cert[] = </div>
|
||||
<div class="line">"-----BEGIN CERTIFICATE-----\n"</div>
|
||||
<div class="line">"MIIDpDCCAowCCQC7mCk5Iu3YmDANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UEBhMC\n"</div>
|
||||
<div class="line">...</div>
|
||||
<div class="line">"-----END CERTIFICATE-----\n";</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">// The client private key, must be the same format as the client certificate</div>
|
||||
<div class="line">// Both RSA and ECC are supported, ECC is shown below</div>
|
||||
<div class="line">const char my_key[] = </div>
|
||||
<div class="line">"-----BEGIN EC PRIVATE KEY-----\n"</div>
|
||||
<div class="line">...</div>
|
||||
<div class="line">"-----END EC PRIVATE KEY-----\n";</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">// This line will parse and store the above information so SSLClient can use it later</div>
|
||||
<div class="line">// Replace `fromPEM` with `fromDER` if you are using DER formatted certificates.</div>
|
||||
<div class="line">SSLClientParameters mTLS = SSLClientParameters::fromPEM(my_cert, sizeof(cert), my_key, sizeof(key));</div>
|
||||
<div class="line">SSLClient my_client(...);</div>
|
||||
<div class="line">...</div>
|
||||
<div class="line">void setup() {</div>
|
||||
<div class="line"> ...</div>
|
||||
<div class="line"> /* Before SSLClient connects */</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"> my_client.setMutualAuthParams(mTLS);</div>
|
||||
<div class="line"> ...</div>
|
||||
<div class="line">}</div>
|
||||
<div class="line">...</div>
|
||||
</div><!-- fragment --><blockquote class="doxtable">
|
||||
<p>NOTE: Certificates are finicky, and it is easy to make mistakes when generating a certificate chain yourself. If <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> raises an error that says <code>Expected server name not found in chain</code>, double check that the common name, distinguished name, and issuer name are being set correctly (check out <a href="https://medium.com/@superseb/get-your-certificate-chain-right-4b117a9c0fce">this article</a> for how to do that). </p>
|
||||
</blockquote>
|
||||
<p>The client certificate must be formatted correctly (according to <a href="https://bearssl.org/apidoc/bearssl__pem_8h.html">BearSSL's specification</a>) in order for mTLS to work. If the certificate is improperly formatted, <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> will attempt to make a regular TLS connection instead of an mTLS one, and fail to connect as a result. Because of this, if you are seeing errors similar to <code>"peer did not send certificate chain"</code> on your server, check that your certificate and key are formatted correctly (see <a href="https://github.com/OPEnSLab-OSU/SSLClient/issues/7#issuecomment-593704969">https://github.com/OPEnSLab-OSU/SSLClient/issues/7#issuecomment-593704969</a>). For more information on <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a>'s mTLS functionality, please see the <a href="https://openslab-osu.github.io/SSLClient/class_s_s_l_client_parameters.html">SSLClientParameters documentation</a>.</p>
|
||||
<p>Note that both the above client certificate information <em>as well as</em> the correct trust anchors associated with the server are needed for the connection to succeed. Trust anchors will typically be generated from the CA used to generate the server certificate. More information on generating trust anchors can be found in <a class="el" href="md__trust_anchors.html">TrustAnchors.md</a>.</p>
|
||||
<h1>Implementation Gotchas</h1>
|
||||
<p>Some ideas that didn't quite fit in the API documentation.</p>
|
||||
<h2><a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> with Ethernet</h2>
|
||||
<p>If you are using the <a href="https://github.com/arduino-libraries/Ethernet">Arduino Ethernet library</a> you will need to modify the library to support the large buffer sizes required by SSL (detailed in <a href="#resources">resources</a>). You can either modify the library yourself, or use <a href="https://github.com/OPEnSLab-OSU/EthernetLarge">this fork of the Ethernet library with the modification</a>. To use the fork: download a zipped copy of the fork through GiThub, use the "add a .zip library" button in Arduino to install the library, and replace <code>#include "Ethernet.h"</code> with <code>#include "EthernetLarge.h"</code> in your sketch. Alternatively if for some reason this solution does not work, you can apply the modification manually using the instructions below.</p>
|
||||
<h3>Manual Modification</h3>
|
||||
<p>First find the location of the library in the directory where Arduino is installed (<code>C:\Program Files (x86)\Arduino</code> on Windows). Inside of this directory, navigate to <code>libraries\Ethernet\src</code> (<code>C:\Program Files (x86)\Arduino\libraries\Ethernet\src</code> on Windows). Modify <code>Ethernet.h</code> to replace these lines: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">...</div>
|
||||
<div class="line">// Configure the maximum number of sockets to support. W5100 chips can have</div>
|
||||
<div class="line">// up to 4 sockets. W5200 & W5500 can have up to 8 sockets. Several bytes</div>
|
||||
<div class="line">// of RAM are used for each socket. Reducing the maximum can save RAM, but</div>
|
||||
<div class="line">// you are limited to fewer simultaneous connections.</div>
|
||||
<div class="line">#if defined(RAMEND) && defined(RAMSTART) && ((RAMEND - RAMSTART) <= 2048)</div>
|
||||
<div class="line">#define MAX_SOCK_NUM 4</div>
|
||||
<div class="line">#else</div>
|
||||
<div class="line">#define MAX_SOCK_NUM 8</div>
|
||||
<div class="line">#endif</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">// By default, each socket uses 2K buffers inside the Wiznet chip. If</div>
|
||||
<div class="line">// MAX_SOCK_NUM is set to fewer than the chip's maximum, uncommenting</div>
|
||||
<div class="line">// this will use larger buffers within the Wiznet chip. Large buffers</div>
|
||||
<div class="line">// can really help with UDP protocols like Artnet. In theory larger</div>
|
||||
<div class="line">// buffers should allow faster TCP over high-latency links, but this</div>
|
||||
<div class="line">// does not always seem to work in practice (maybe Wiznet bugs?)</div>
|
||||
<div class="line">//#define ETHERNET_LARGE_BUFFERS</div>
|
||||
<div class="line">...</div>
|
||||
</div><!-- fragment --><p> With this: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">...</div>
|
||||
<div class="line">// Configure the maximum number of sockets to support. W5100 chips can have</div>
|
||||
<div class="line">// up to 4 sockets. W5200 & W5500 can have up to 8 sockets. Several bytes</div>
|
||||
<div class="line">// of RAM are used for each socket. Reducing the maximum can save RAM, but</div>
|
||||
<div class="line">// you are limited to fewer simultaneous connections.</div>
|
||||
<div class="line">#define MAX_SOCK_NUM 2</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">// By default, each socket uses 2K buffers inside the Wiznet chip. If</div>
|
||||
<div class="line">// MAX_SOCK_NUM is set to fewer than the chip's maximum, uncommenting</div>
|
||||
<div class="line">// this will use larger buffers within the Wiznet chip. Large buffers</div>
|
||||
<div class="line">// can really help with UDP protocols like Artnet. In theory larger</div>
|
||||
<div class="line">// buffers should allow faster TCP over high-latency links, but this</div>
|
||||
<div class="line">// does not always seem to work in practice (maybe Wiznet bugs?)</div>
|
||||
<div class="line">#define ETHERNET_LARGE_BUFFERS</div>
|
||||
<div class="line">...</div>
|
||||
</div><!-- fragment --><p> You may need to use <code>sudo</code> or administrator permissions to make this modification. We change <code>MAX_SOCK_NUM</code> and <code>ETHERNET_LARGE_BUFFERS</code> so the Ethernet hardware can allocate a larger space for <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a>, however a downside of this modification is we are now only able to have two sockets concurrently. As most microprocessors barely have enough memory for one SSL connection, this limitation will rarely be encountered in practice.</p>
|
||||
<h2>Seeding Random Data</h2>
|
||||
<p>The SSL protocol requires that <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> generate some random bits before connecting with a server. BearSSL provides a random number generator but requires a <a href="https://bearssl.org/apidoc/bearssl__ssl_8h.html#a7d8e8de2afd49d6794eae02f56f81152">some entropy for a seed</a>. Normally this seed is generated by taking the microsecond time using the internal clock, however since most microcontrollers are not build with this feature another source must be found. As a simple solution, <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> uses a floating analog pin as an external source of random data, passed through to the constructor in the <code>analog_pin</code> argument. Before every connection, <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> will take the bottom byte from 16 analog reads on <code>analog_pin</code>, and combine these bytes into a 16 byte random number, which is used as a seed for BearSSL. To ensure the most random data, it is recommended that this analog pin be either floating or connected to a location not modifiable by the microcontroller (i.e. a battery voltage readout).</p>
|
||||
<h2>Certificate Verification</h2>
|
||||
<p><a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> uses BearSSL's <a href="https://bearssl.org/x509.html#the-minimal-engine">minimal x509 verification engine</a> to verify the certificate of an SSL connection. This engine requires the developer create a trust anchor array using values stored in trusted root certificates. Check out <a class="el" href="md__trust_anchors.html">this document</a> for more details on this component of <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a>.</p>
|
||||
<p>BearSSL also features a <a href="https://bearssl.org/x509.html#the-known-key-engine">known certificate validation engine</a>, which only allows for a single domain in exchange for a significantly reduced resource usage (flash and CPU time). This functionality is planned to be implemented in the future.</p>
|
||||
<h3>Time</h3>
|
||||
<p>The minimal x509 verification engine requires an accurate source of time to properly verify the creation and expiration dates of a certificate. As most embedded devices do not have a reliable source of time, by default <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> opts to use the compilation timestamp (<a href="https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html"><code>__DATE__</code> and <code>__TIME__</code></a>) as the "current time" during the verification process. While this approach reduces the complexity of using <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a>, it is inherently insecure, and can cause errors if certificates are redeployed (see <a href="https://github.com/OPEnSLab-OSU/SSLClient/issues/27">#27</a>): to accommodate these edge cases, <a class="el" href="class_s_s_l_client.html#ab285c2f5a03124558ef7f74b9f3d12ad" title="Change the time used during x509 verification to a different value.">SSLClient::setVerificationTime</a> can be used to update the timestamp before connecting, resolving the above issues.</p>
|
||||
<h2>Resources</h2>
|
||||
<p>The SSL/TLS protocol recommends a device support many different encryption and handshake algorithms. The complexity of these components results in many medium-footprint algorithms forming an extremely large whole. Compilation size of the <a href="examples/EthernetHTTPS/EthernetHTTPS.ino">EthernetHTTPS</a> example in <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> <code>v1.6.11</code> for various boards is shown below:</p>
|
||||
<table class="markdownTable">
|
||||
<tr class="markdownTableHead">
|
||||
<th class="markdownTableHeadLeft">Board </th><th class="markdownTableHeadLeft">Size </th></tr>
|
||||
<tr class="markdownTableRowOdd">
|
||||
<td class="markdownTableBodyLeft">Arduino Zero </td><td class="markdownTableBodyLeft"><pre>`RAM: [=== ] 33.7% (used 11052 bytes from 32768 bytes)`<br />
|
||||
`Flash: [=== ] 34.7% (used 90988 bytes from 262144 bytes)`</pre> </td></tr>
|
||||
<tr class="markdownTableRowEven">
|
||||
<td class="markdownTableBodyLeft">Arduino Due </td><td class="markdownTableBodyLeft"><pre>`RAM: [= ] 11.7% (used 11548 bytes from 98304 bytes)`<br />
|
||||
`Flash: [== ] 16.7% (used 87572 bytes from 524288 bytes)`</pre> </td></tr>
|
||||
<tr class="markdownTableRowOdd">
|
||||
<td class="markdownTableBodyLeft">Adafruit Feather M0 </td><td class="markdownTableBodyLeft"><pre>`RAM: [==== ] 40.4% (used 13240 bytes from 32768 bytes)`<br />
|
||||
`Flash: [==== ] 40.0% (used 104800 bytes from 262144 bytes)`</pre> </td></tr>
|
||||
<tr class="markdownTableRowEven">
|
||||
<td class="markdownTableBodyLeft">ESP32 (Lolin32) </td><td class="markdownTableBodyLeft"><pre>`RAM: [= ] 6.9% (used 22476 bytes from 327680 bytes)`<br />
|
||||
`Flash: [== ] 24.0% (used 314956 bytes from 1310720 bytes)`</pre> </td></tr>
|
||||
<tr class="markdownTableRowOdd">
|
||||
<td class="markdownTableBodyLeft">Teensy 3.0 </td><td class="markdownTableBodyLeft"><pre>`RAM: [======== ] 78.2% (used 12812 bytes from 16384 bytes)`<br />
|
||||
`Flash: [======== ] 79.8% (used 104532 bytes from 131072 bytes)`</pre> </td></tr>
|
||||
<tr class="markdownTableRowEven">
|
||||
<td class="markdownTableBodyLeft">Teensy 3.1 </td><td class="markdownTableBodyLeft"><pre>`RAM: [== ] 19.9% (used 13020 bytes from 65536 bytes)`<br />
|
||||
`Flash: [==== ] 40.6% (used 106332 bytes from 262144 bytes)`</pre> </td></tr>
|
||||
<tr class="markdownTableRowOdd">
|
||||
<td class="markdownTableBodyLeft">Teensy 3.5 </td><td class="markdownTableBodyLeft"><pre>`RAM: [ ] 5.0% (used 12996 bytes from 262136 bytes)`<br />
|
||||
`Flash: [== ] 20.1% (used 105476 bytes from 524288 bytes)`</pre> </td></tr>
|
||||
<tr class="markdownTableRowEven">
|
||||
<td class="markdownTableBodyLeft">Teensy 3.6 </td><td class="markdownTableBodyLeft"><pre>`RAM: [ ] 5.0% (used 13060 bytes from 262144 bytes)`<br />
|
||||
`Flash: [= ] 10.2% (used 106828 bytes from 1048576 bytes)`</pre> </td></tr>
|
||||
<tr class="markdownTableRowOdd">
|
||||
<td class="markdownTableBodyLeft">Teensy 4.0 </td><td class="markdownTableBodyLeft"><pre>`RAM: [=== ] 25.9% (used 135860 bytes from 524288 bytes)`<br />
|
||||
`Flash: [= ] 5.7% (used 115344 bytes from 2031616 bytes)`</pre> </td></tr>
|
||||
</table>
|
||||
<p>In addition to the above, most embedded processors lack the sophisticated math hardware commonly found in a modern CPU, which results in slow and memory intensive execution of these algorithms. Because of this, it is recommended that <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> have 8kb of memory available on the stack during a connection, and 4-10 seconds should be allowed for the connection to complete. Note that this requirement is based on the SAMD21—more powerful processors (such as the ESP32) will see faster connection times.</p>
|
||||
<blockquote class="doxtable">
|
||||
<p>NOTE: If flash footprint is becoming a problem, there are numerous debugging strings (~3kB estimated) that can be removed from <code><a class="el" href="_s_s_l_client_8h.html">SSLClient.h</a></code>, <code>SSLClientImpl.h</code>, and <code>SSLClientImpl.cpp</code>. Unfortunately I have not figured out a way to configure compilation of these strings, so you will need to modify the library to remove them yourself. </p>
|
||||
</blockquote>
|
||||
<h2>Read Buffer Overflow</h2>
|
||||
<p>SSL is a buffered protocol, and since most microcontrollers have limited resources (see <a href="#resources">Resources</a>), <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> is limited in the size of its buffers. A common problem I encountered with SSL connections is buffer overflow caused by the server sending too much data at once. This problem is caused by the microcontroller being unable to copy and decrypt data faster than it is being received—forcing some data to be discarded. This usually puts BearSSL in an unrecoverable state, forcing <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> to close the connection with a write error. If you are experiencing frequent timeout problems this could be the reason why.</p>
|
||||
<p>In order to remedy this problem, the device must be able to read the data faster than it is being received or have a cache large enough to store the entire payload. Since the device is typically already reading as fast as it can, we must increase the cache size in order to resolve this issue. Depending on your platform there are a number of ways this can be done:</p><ul>
|
||||
<li>Sometimes your communication shield will have an internal buffer which can be expanded through the driver code: this is the case with the Arduino Ethernet library (in the form of the <code>MAX_SOCK_NUM</code> and <code>ETHERNET_LARGE_BUFFERS</code> macros show <a href="#manual-modification">here</a>), but mileage may vary with other drivers.</li>
|
||||
<li><a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> has an internal buffer SSLClient::m_iobuf which can be expanded. Unfortunately, BearSSL limits the amount of data that can be put into the buffer based on the stage in the SSL handshake, and so increasing the buffer will have limited usefulness.</li>
|
||||
<li>In some cases, a website will send so much data that even with the above solutions <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> will be unable to keep up. In these cases you will have to find another method of retrieving the data you need.</li>
|
||||
<li>If none of the above are viable, it is possible to implement your own Client class which has an internal buffer much larger than both the driver and BearSSL. This implementation would require in-depth knowledge of communication shield you are working with and a microcontroller with a significant amount of RAM, but would be the most robust solution available.</li>
|
||||
</ul>
|
||||
<h2>Cipher Support</h2>
|
||||
<p>By default, <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> supports only TLS1.2 and the ciphers listed in <a href="./src/TLS12_only_profile.c">this file</a> under <code>suites[]</code>, and the list is relatively small to keep the connection secure and the flash footprint down. These ciphers should work for most applications, however if for some reason you would like to use an older version of TLS or a different cipher you can change the BearSSL profile being used by <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> to an <a href="./src/bearssl/src/ssl/ssl_client_full.c">alternate one with support for older protocols</a>. To do this, edit <code>SSLClientImpl::SSLClientImpl</code> to change these lines: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">br_client_init_TLS12_only(&m_sslctx, &m_x509ctx, m_trust_anchors, m_trust_anchors_num);</div>
|
||||
<div class="line">// comment the above line and uncomment the line below if you're having trouble connecting over SSL</div>
|
||||
<div class="line">// br_ssl_client_init_full(&m_sslctx, &m_x509ctx, m_trust_anchors, m_trust_anchors_num);</div>
|
||||
</div><!-- fragment --><p> to this: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">// br_client_init_TLS12_only(&m_sslctx, &m_x509ctx, m_trust_anchors, m_trust_anchors_num);</div>
|
||||
<div class="line">// comment the above line and uncomment the line below if you're having trouble connecting over SSL</div>
|
||||
<div class="line">br_ssl_client_init_full(&m_sslctx, &m_x509ctx, m_trust_anchors, m_trust_anchors_num);</div>
|
||||
</div><!-- fragment --><p> If for some unfortunate reason you need SSL 3.0 or SSL 2.0, you will need to modify the BearSSL profile to enable support. Check out the <a href="https://bearssl.org/api1.html#profiles">BearSSL profiles documentation</a> and I wish you the best of luck.</p>
|
||||
<h2>Security</h2>
|
||||
<p>Unlike BearSSL, <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> is not rigorously vetted to be secure. If your project has security requirements I recommend you utilize BearSSL directly.</p>
|
||||
<h2>Known Issues</h2>
|
||||
<ul>
|
||||
<li>In some drivers (Ethernet), calls to <code>Client::flush</code> will hang if internet is available but there is no route to the destination. Unfortunately <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> cannot correct for this without modifying the driver itself, and as a result the recommended solution is ensuring you choose a driver with built-in timeouts to prevent freezing. <a href="https://github.com/OPEnSLab-OSU/SSLClient/issues/13#issuecomment-643855923">More information here</a>.</li>
|
||||
<li>Previous to <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> <code>v1.6.11</code>, <code><a class="el" href="class_s_s_l_client.html#a03c7926938acd57cfc3b982edf725a86" title="Write some bytes to the SSL connection.">SSLClient::write</a></code> would sometimes call <code>br_ssl_engine_sendapp_ack</code> with zero bytes, which resulted in a variety of issues including (but not limited to) and infinite recursion loop on the esp32 (<a href="https://github.com/OPEnSLab-OSU/SSLClient/issues/9">#9</a>, <a href="https://github.com/OPEnSLab-OSU/SSLClient/issues/30">#30</a>).</li>
|
||||
<li>Previous to <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> <code>v1.6.7</code>, calls to <code><a class="el" href="class_s_s_l_client.html#ad8ed697371748e31e01c3f697bc36cbe" title="Close the connection.">SSLClient::stop</a></code> would sometimes hang the device. More information in issue <a href="https://github.com/OPEnSLab-OSU/SSLClient/issues/13">https://github.com/OPEnSLab-OSU/SSLClient/issues/13</a>.</li>
|
||||
<li>Previous to <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> <code>v1.6.6</code>, calls to <code><a class="el" href="class_s_s_l_client.html#ab97c0745f65a6c6009ac938b3b9912c3" title="Connect over SSL to a host specified by an IP address.">SSLClient::connect</a></code> would fail if the driver indicated that a socket was already opened (<code>Client::connected</code> returned true). This behavior created unintentional permanent failures when <code>Client::stop</code> would fail to close the socket, and as a result was downgraded to a warning in v1.6.6.</li>
|
||||
<li>Previous to <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> <code>v1.6.3</code>, calling <code><a class="el" href="class_s_s_l_client.html#a03c7926938acd57cfc3b982edf725a86" title="Write some bytes to the SSL connection.">SSLClient::write</a></code> with more than 2kB of total data before flushing the write buffer would cause a buffer overflow. </li>
|
||||
</ul>
|
||||
</div></div><!-- PageDoc -->
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
35
jquery.js
vendored
Normal file
33
keywords.txt
|
@ -1,33 +0,0 @@
|
|||
# DataTypes
|
||||
SSLClient KEYWORD1
|
||||
|
||||
# Methods and Functions
|
||||
connect KEYWORD2
|
||||
write KEYWORD2
|
||||
available KEYWORD2
|
||||
read KEYWORD2
|
||||
peek KEYWORD2
|
||||
flush KEYWORD2
|
||||
stop KEYWORD2
|
||||
connected KEYWORD2
|
||||
remoteIP KEYWORD2
|
||||
remotePort KEYWORD2
|
||||
localPort KEYWORD2
|
||||
setTimeout KEYWORD2
|
||||
getClient KEYWORD2
|
||||
|
||||
# Constants and Literals
|
||||
SSL_OK LITERAL1
|
||||
SSL_CLIENT_CONNECT_FAIL LITERAL1
|
||||
SSL_BR_CONNECT_FAIL LITERAL1
|
||||
SSL_CLIENT_WRTIE_ERROR LITERAL1
|
||||
SSL_BR_WRITE_ERROR LITERAL1
|
||||
SSL_INTERNAL_ERROR LITERAL1
|
||||
SSL_OUT_OF_MEMORY LITERAL1
|
||||
|
||||
SSL_NONE LITERAL1
|
||||
SSL_ERROR LITERAL1
|
||||
SSL_WARN LITERAL1
|
||||
SSL_INFO LITERAL1
|
||||
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
name=SSLClient
|
||||
version=1.6.11
|
||||
author=Noah Koontz <koontzn@oregonstate.edu>
|
||||
maintainer=OPEnS Lab
|
||||
sentence=Arduino library to add TLS functionality to any Client class
|
||||
paragraph=including the Arduino EthernetClient and WiFiClient classes (though it is better to prefer WiFClient.connectSSL if implemented). In other words, SSLClient implements encrypted communication through SSL on devices that do not otherwise support it.
|
||||
category=Communication
|
||||
url=https://github.com/OPEnSLab-OSU/SSLClient
|
||||
architectures=samd,sam,tivac,stm32,esp32
|
||||
includes=SSLClient.h
|
129
md__c_o_d_e__o_f__c_o_n_d_u_c_t.html
Normal file
|
@ -0,0 +1,129 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Contributor Covenant Code of Conduct</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('md__c_o_d_e__o_f__c_o_n_d_u_c_t.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="PageDoc"><div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Contributor Covenant Code of Conduct </div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><h1>Our Pledge</h1>
|
||||
<p>In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.</p>
|
||||
<h1>Our Standards</h1>
|
||||
<p>Examples of behavior that contributes to creating a positive environment include:</p>
|
||||
<ul>
|
||||
<li>Using welcoming and inclusive language</li>
|
||||
<li>Being respectful of differing viewpoints and experiences</li>
|
||||
<li>Gracefully accepting constructive criticism</li>
|
||||
<li>Focusing on what is best for the community</li>
|
||||
<li>Showing empathy towards other community members</li>
|
||||
</ul>
|
||||
<p>Examples of unacceptable behavior by participants include:</p>
|
||||
<ul>
|
||||
<li>The use of sexualized language or imagery and unwelcome sexual attention or advances</li>
|
||||
<li>Trolling, insulting/derogatory comments, and personal or political attacks</li>
|
||||
<li>Public or private harassment</li>
|
||||
<li>Publishing others' private information, such as a physical or electronic address, without explicit permission</li>
|
||||
<li>Other conduct which could reasonably be considered inappropriate in a professional setting</li>
|
||||
</ul>
|
||||
<h1>Our Responsibilities</h1>
|
||||
<p>Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.</p>
|
||||
<p>Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.</p>
|
||||
<h1>Scope</h1>
|
||||
<p>This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.</p>
|
||||
<h1>Enforcement</h1>
|
||||
<p>Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at <a href="#" onclick="location.href='mai'+'lto:'+'ope'+'n.'+'sen'+'si'+'ng@'+'or'+'ego'+'ns'+'tat'+'e.'+'edu'; return false;">open.<span style="display: none;">.nosp@m.</span>sens<span style="display: none;">.nosp@m.</span>ing@o<span style="display: none;">.nosp@m.</span>rego<span style="display: none;">.nosp@m.</span>nstat<span style="display: none;">.nosp@m.</span>e.ed<span style="display: none;">.nosp@m.</span>u</a>. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.</p>
|
||||
<p>Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.</p>
|
||||
<h1>Attribution</h1>
|
||||
<p>This Code of Conduct is adapted from the <a href="https://www.contributor-covenant.org">Contributor Covenant</a>, version 1.4, available at <a href="https://www.contributor-covenant.org/version/1/4/code-of-conduct.html">https://www.contributor-covenant.org/version/1/4/code-of-conduct.html</a></p>
|
||||
<p>For answers to common questions about this code of conduct, see <a href="https://www.contributor-covenant.org/faq">https://www.contributor-covenant.org/faq</a> </p>
|
||||
</div></div><!-- contents -->
|
||||
</div><!-- PageDoc -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
122
md__c_o_n_t_r_i_b_u_t_i_n_g.html
Normal file
|
@ -0,0 +1,122 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Contributing</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('md__c_o_n_t_r_i_b_u_t_i_n_g.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="PageDoc"><div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Contributing </div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><p>Thank you for contributing to SSLClient! This library is a single-person effort, so help is always appreciated.</p>
|
||||
<p>There is no formal style guide, however this project does attempt to provide detailed documentation through the README and <a href="https://www.doxygen.nl/manual/docblocks.html">Doxygen block comments</a> which are highly encouraged. If you get stuck or have a question, please feel free to <a href="https://github.com/OPEnSLab-OSU/SSLClient/issues/new?assignees=&labels=question&template=question.md&title=">submit an issue</a>. Below are some resources to get you started:</p><ul>
|
||||
<li><b>TLS</b><ul>
|
||||
<li><a href="https://security.stackexchange.com/questions/20803/how-does-ssl-tls-work">How does SSL work? (StackOverflow)</a></li>
|
||||
<li><a href="https://www.cloudflare.com/learning/ssl/what-happens-in-a-tls-handshake/">What happens in a TLS handshake? (Cloudflare)</a></li>
|
||||
<li><a href="https://wott.io/blog/tutorials/2019/09/09/what-is-mtls">What is mTLS? (wott.io)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>BearSSL</b><ul>
|
||||
<li><a href="https://bearssl.org/">BearSSL Homepage</a></li>
|
||||
<li><a href="https://bearssl.org/api1.html">BearSSL TLS API Overview</a> (<a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> uses the Generic I/O version ot the API).</li>
|
||||
<li><a href="https://bearssl.org/x509.html">BearSSL Certificate API Overview</a> (<a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> uses the Minimal Engine)</li>
|
||||
<li><a href="https://bearssl.org/apidoc/index.html">BearSSL Doxygen</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b><a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a></b><ul>
|
||||
<li><a class="el" href="index.html#md_README">README</a></li>
|
||||
<li><a class="el" href="md__trust_anchors.html">Trust Anchors Overview</a></li>
|
||||
<li><a href="https://github.com/OPEnSLab-OSU/SSLClient/issues/9">Known ESP32 Issue with PubSubClient</a></li>
|
||||
<li><a href="https://github.com/OPEnSLab-OSU/SSLClient/issues/5">Known ESP8266 Issue with any TLS Connection</a> </li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div></div><!-- contents -->
|
||||
</div><!-- PageDoc -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
150
md__trust_anchors.html
Normal file
|
@ -0,0 +1,150 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Trust Anchors</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('md__trust_anchors.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="PageDoc"><div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Trust Anchors </div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock"><h1>Background</h1>
|
||||
<p><a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> uses BearSSL's <a href="https://bearssl.org/x509.html#the-minimal-engine">minimal x509 verification engine</a> to verify the certificate of an SSL connection. This engine requires the developer create a trust anchor array using values stored in trusted root certificates. In short, these trust anchor arrays allow BearSSL to verify that the server being connected to is who they say they are, and not someone malicious. You can read more about certificates and why they are important <a href="https://www.globalsign.com/en/ssl-information-center/what-is-an-ssl-certificate/">here</a>.</p>
|
||||
<p><a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> stores trust anchors in hardcoded constant variables, passed into <code><a class="el" href="class_s_s_l_client.html#a68f026a625ca1ccd1aba87bb6e670376" title="Initialize SSLClient with all of the prerequisites needed.">SSLClient::SSLClient</a></code> during setup. These constants are generally stored in their own header file as found in <a href="https://bearssl.org/api1.html#profiles">the BearSSL docs</a>. This header file will look something like: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">#define TAs_NUM 1</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">static const unsigned char TA_DN0[] = {</div>
|
||||
<div class="line"> // lots of raw bytes here</div>
|
||||
<div class="line"> // ...</div>
|
||||
<div class="line">};</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">static const unsigned char TA_RSA_N0[] = {</div>
|
||||
<div class="line"> // lots of raw bytes here</div>
|
||||
<div class="line"> //...</div>
|
||||
<div class="line">};</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">static const unsigned char TA_RSA_E0[] = {</div>
|
||||
<div class="line"> // 1-3 bytes here</div>
|
||||
<div class="line">};</div>
|
||||
<div class="line"> </div>
|
||||
<div class="line">static const br_x509_trust_anchor TAs[] = {</div>
|
||||
<div class="line"> {</div>
|
||||
<div class="line"> { (unsigned char *)TA_DN0, sizeof TA_DN0 },</div>
|
||||
<div class="line"> BR_X509_TA_CA,</div>
|
||||
<div class="line"> {</div>
|
||||
<div class="line"> BR_KEYTYPE_RSA,</div>
|
||||
<div class="line"> { .rsa = {</div>
|
||||
<div class="line"> (unsigned char *)TA_RSA_N0, sizeof TA_RSA_N0,</div>
|
||||
<div class="line"> (unsigned char *)TA_RSA_E0, sizeof TA_RSA_E0,</div>
|
||||
<div class="line"> } }</div>
|
||||
<div class="line"> }</div>
|
||||
<div class="line"> },</div>
|
||||
<div class="line">};</div>
|
||||
</div><!-- fragment --><p> A full example of a trust anchor header can be found in <a href="./readme/cert.h">this file</a>. Full documentation for the format of these variables can be found in the <a href="https://bearssl.org/apidoc/structbr__x509__trust__anchor.html">BearSSL documentation for br_x509_trust_anchor</a>.</p>
|
||||
<h1>Generating Trust Anchors</h1>
|
||||
<p>Typically a trust anchor header file is generated using <a href="https://bearssl.org/gitweb/?p=BearSSL;a=tree;f=tools;h=0fa053e41d6bf88a28472f3b22dde41b21f14292;hb=dda1f8a0c46e15b4a235163470ff700b2f13dcc5">brssl</a>, a command-line utility included in BearSSL. As it is a fairly involded process to get brssl working, <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> provides a number of alternative tools to make the generation process a bit easier.</p>
|
||||
<p><b>Note:</b> When working with certificates (particularly in complicated mTLS setups), it can easily become confusing which certificate does what. If you aren't sure what certificate to put into the Trust Anchor tool, remember that Trust Anchors <em>only care about the verifying the server</em>: in other words, the certificate that goes into a Trust Anchor generation tool should be the certificate used to generate the server's certificate (usually a CA). Trust Anchors will never contain any information about client certificates, which should be passed into <a href="https://github.com/OPEnSLab-OSU/SSLClient#mtls">SSLClientParams</a> instead.</p>
|
||||
<h2>HTTPS</h2>
|
||||
<p>For HTTPS, there a couple of tools you can use. Ordered from easiest to hardest:</p><ul>
|
||||
<li>This website, written to simplify the creation of trust anchor headers: <a href="https://openslab-osu.github.io/bearssl-certificate-utility/">https://openslab-osu.github.io/bearssl-certificate-utility/</a>. Simply plug and play.</li>
|
||||
<li><a href="./tools/pycert_bearssl/pycert_bearssl.py">pycert_bearssl</a>, a command line utility based on a <a href="https://learn.adafruit.com/introducing-the-adafruit-wiced-feather-wifi/pycert-dot-py">pycert</a>. You will need to install Python 3, and follow the instructions in the <a href="./tools/pycert_bearssl/pycert_bearssl.py">pycert_bearssl.py file</a>. You'll want to use the <code>pycert_bearssl.py download</code> command once the utility is set up.</li>
|
||||
<li>The <code>brssl</code> command line utility, included in the <a href="https://bearssl.org/gitweb/?p=BearSSL;a=blob_plain;f=tools/brssl.h;hb=HEAD">BearSSL source</a>. You will need to compile this file yourself.</li>
|
||||
</ul>
|
||||
<h2>Other Connections</h2>
|
||||
<p>For other kinds of SSL connections, you will need to find the root certificate being used by your host. You can check out <a href="https://superuser.com/questions/97201/how-to-save-a-remote-server-ssl-certificate-locally-as-a-file">this StackExchange post</a> for numerous methods of acquiring this certificate from a server. If these methods are not sufficient, you may need to request this certificate from your network administrator. Once you have the certificate, convert it to PEM format if needed (I use <a href="https://www.sslshopper.com/ssl-converter.html">this website</a>), and use the <code>pycert_bearssl.py convert --no-search</code> command to convert the certificate into a trust anchor header.</p>
|
||||
<h1>Using Trust Anchors</h1>
|
||||
<p>Once you've generated a trust anchor array, add it to your Arduino sketch using the <code>Sketch->Add File</code> button in the Arduino IDE, and link it to your <a class="el" href="class_s_s_l_client.html" title="The main SSLClient class. Check out README.md for more info.">SSLClient</a> like so: </p><div class="fragment"><div class="line"> {C++}</div>
|
||||
<div class="line">#include "yourtrustanchorfile.h"</div>
|
||||
<div class="line">// ...</div>
|
||||
<div class="line">SSLClient client(SomeClient, TAs, (size_t)TAs_NUM, SomePin);</div>
|
||||
<div class="line">// ...</div>
|
||||
</div><!-- fragment --><p> Where <code>yourtrustanchorfile.h</code> contains a generated trust anchor array names <code>TAs</code>, with length <code>TAs_NUM</code>. BearSSL will now automatically use these trust anchors when <code><a class="el" href="class_s_s_l_client.html#ab97c0745f65a6c6009ac938b3b9912c3" title="Connect over SSL to a host specified by an IP address.">SSLClient::connect</a></code> is called. </p>
|
||||
</div></div><!-- contents -->
|
||||
</div><!-- PageDoc -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
51
menu.js
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@licend The above is the entire license notice for the JavaScript code in this file
|
||||
*/
|
||||
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
|
||||
function makeTree(data,relPath) {
|
||||
var result='';
|
||||
if ('children' in data) {
|
||||
result+='<ul>';
|
||||
for (var i in data.children) {
|
||||
result+='<li><a href="'+relPath+data.children[i].url+'">'+
|
||||
data.children[i].text+'</a>'+
|
||||
makeTree(data.children[i],relPath)+'</li>';
|
||||
}
|
||||
result+='</ul>';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
$('#main-nav').append(makeTree(menudata,relPath));
|
||||
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
|
||||
if (searchEnabled) {
|
||||
if (serverSide) {
|
||||
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+relPath+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.svg" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
|
||||
} else {
|
||||
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.svg" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.svg" alt=""/></a></span></div></li>');
|
||||
}
|
||||
}
|
||||
$('#main-menu').smartmenus();
|
||||
}
|
||||
/* @license-end */
|
71
menudata.js
Normal file
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@licend The above is the entire license notice for the JavaScript code in this file
|
||||
*/
|
||||
var menudata={children:[
|
||||
{text:"Main Page",url:"index.html"},
|
||||
{text:"Related Pages",url:"pages.html"},
|
||||
{text:"Namespaces",url:"namespaces.html",children:[
|
||||
{text:"Namespace List",url:"namespaces.html"},
|
||||
{text:"Namespace Members",url:"namespacemembers.html",children:[
|
||||
{text:"All",url:"namespacemembers.html"},
|
||||
{text:"Functions",url:"namespacemembers_func.html"}]}]},
|
||||
{text:"Classes",url:"annotated.html",children:[
|
||||
{text:"Class List",url:"annotated.html"},
|
||||
{text:"Class Index",url:"classes.html"},
|
||||
{text:"Class Hierarchy",url:"hierarchy.html"},
|
||||
{text:"Class Members",url:"functions.html",children:[
|
||||
{text:"All",url:"functions.html",children:[
|
||||
{text:"a",url:"functions.html#index_a"},
|
||||
{text:"c",url:"functions.html#index_c"},
|
||||
{text:"d",url:"functions.html#index_d"},
|
||||
{text:"e",url:"functions.html#index_e"},
|
||||
{text:"f",url:"functions.html#index_f"},
|
||||
{text:"g",url:"functions.html#index_g"},
|
||||
{text:"i",url:"functions.html#index_i"},
|
||||
{text:"o",url:"functions.html#index_o"},
|
||||
{text:"p",url:"functions.html#index_p"},
|
||||
{text:"r",url:"functions.html#index_r"},
|
||||
{text:"s",url:"functions.html#index_s"},
|
||||
{text:"t",url:"functions.html#index_t"},
|
||||
{text:"v",url:"functions.html#index_v"},
|
||||
{text:"w",url:"functions.html#index_w"}]},
|
||||
{text:"Functions",url:"functions_func.html",children:[
|
||||
{text:"a",url:"functions_func.html#index_a"},
|
||||
{text:"c",url:"functions_func.html#index_c"},
|
||||
{text:"f",url:"functions_func.html#index_f"},
|
||||
{text:"g",url:"functions_func.html#index_g"},
|
||||
{text:"o",url:"functions_func.html#index_o"},
|
||||
{text:"p",url:"functions_func.html#index_p"},
|
||||
{text:"r",url:"functions_func.html#index_r"},
|
||||
{text:"s",url:"functions_func.html#index_s"},
|
||||
{text:"t",url:"functions_func.html#index_t"},
|
||||
{text:"w",url:"functions_func.html#index_w"}]},
|
||||
{text:"Variables",url:"functions_vars.html"},
|
||||
{text:"Enumerations",url:"functions_enum.html"},
|
||||
{text:"Enumerator",url:"functions_eval.html"}]}]},
|
||||
{text:"Files",url:"files.html",children:[
|
||||
{text:"File List",url:"files.html"},
|
||||
{text:"File Members",url:"globals.html",children:[
|
||||
{text:"All",url:"globals.html"},
|
||||
{text:"Macros",url:"globals_defs.html"}]}]}]}
|
99
namespacemembers.html
Normal file
|
@ -0,0 +1,99 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Namespace Members</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('namespacemembers.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all namespace members with links to the namespace documentation for each member:</div><ul>
|
||||
<li>__attribute__()
|
||||
: <a class="el" href="namespacestd.html#a39074ff6e8f24ae9df1cabe6767f8a4d">std</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
99
namespacemembers_func.html
Normal file
|
@ -0,0 +1,99 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Namespace Members</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('namespacemembers_func.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="contents">
|
||||
 <ul>
|
||||
<li>__attribute__()
|
||||
: <a class="el" href="namespacestd.html#a39074ff6e8f24ae9df1cabe6767f8a4d">std</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
103
namespaces.html
Normal file
|
@ -0,0 +1,103 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Namespace List</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('namespaces.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Namespace List</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all namespaces with brief descriptions:</div><div class="directory">
|
||||
<table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacestd.html" target="_self">std</a></td><td class="desc"></td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
6
namespaces_dup.js
Normal file
|
@ -0,0 +1,6 @@
|
|||
var namespaces_dup =
|
||||
[
|
||||
[ "std", "namespacestd.html", [
|
||||
[ "__attribute__", "namespacestd.html#a39074ff6e8f24ae9df1cabe6767f8a4d", null ]
|
||||
] ]
|
||||
];
|
126
namespacestd.html
Normal file
|
@ -0,0 +1,126 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: std Namespace Reference</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('namespacestd.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#func-members">Functions</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">std Namespace Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
||||
Functions</h2></td></tr>
|
||||
<tr class="memitem:a39074ff6e8f24ae9df1cabe6767f8a4d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacestd.html#a39074ff6e8f24ae9df1cabe6767f8a4d">__attribute__</a> ((weak)) __throw_length_error(char const *)</td></tr>
|
||||
<tr class="separator:a39074ff6e8f24ae9df1cabe6767f8a4d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
</table>
|
||||
<h2 class="groupheader">Function Documentation</h2>
|
||||
<a id="a39074ff6e8f24ae9df1cabe6767f8a4d"></a>
|
||||
<h2 class="memtitle"><span class="permalink"><a href="#a39074ff6e8f24ae9df1cabe6767f8a4d">◆ </a></span>__attribute__()</h2>
|
||||
|
||||
<div class="memitem">
|
||||
<div class="memproto">
|
||||
<table class="memname">
|
||||
<tr>
|
||||
<td class="memname">void std::__attribute__ </td>
|
||||
<td>(</td>
|
||||
<td class="paramtype">(weak) </td>
|
||||
<td class="paramname"></td><td>)</td>
|
||||
<td> const</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><div class="memdoc">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="namespacestd.html">std</a></li>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
BIN
nav_f.png
Normal file
After Width: | Height: | Size: 153 B |
BIN
nav_g.png
Normal file
After Width: | Height: | Size: 95 B |
BIN
nav_h.png
Normal file
After Width: | Height: | Size: 98 B |
146
navtree.css
Normal file
|
@ -0,0 +1,146 @@
|
|||
#nav-tree .children_ul {
|
||||
margin:0;
|
||||
padding:4px;
|
||||
}
|
||||
|
||||
#nav-tree ul {
|
||||
list-style:none outside none;
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
}
|
||||
|
||||
#nav-tree li {
|
||||
white-space:nowrap;
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
}
|
||||
|
||||
#nav-tree .plus {
|
||||
margin:0px;
|
||||
}
|
||||
|
||||
#nav-tree .selected {
|
||||
background-image: url('tab_a.png');
|
||||
background-repeat:repeat-x;
|
||||
color: #fff;
|
||||
text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
|
||||
}
|
||||
|
||||
#nav-tree img {
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
border:0px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#nav-tree a {
|
||||
text-decoration:none;
|
||||
padding:0px;
|
||||
margin:0px;
|
||||
outline:none;
|
||||
}
|
||||
|
||||
#nav-tree .label {
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
|
||||
}
|
||||
|
||||
#nav-tree .label a {
|
||||
padding:2px;
|
||||
}
|
||||
|
||||
#nav-tree .selected a {
|
||||
text-decoration:none;
|
||||
color:#fff;
|
||||
}
|
||||
|
||||
#nav-tree .children_ul {
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
}
|
||||
|
||||
#nav-tree .item {
|
||||
margin:0px;
|
||||
padding:0px;
|
||||
}
|
||||
|
||||
#nav-tree {
|
||||
padding: 0px 0px;
|
||||
background-color: #FAFAFF;
|
||||
font-size:14px;
|
||||
overflow:auto;
|
||||
}
|
||||
|
||||
#doc-content {
|
||||
overflow:auto;
|
||||
display:block;
|
||||
padding:0px;
|
||||
margin:0px;
|
||||
-webkit-overflow-scrolling : touch; /* iOS 5+ */
|
||||
}
|
||||
|
||||
#side-nav {
|
||||
padding:0 6px 0 0;
|
||||
margin: 0px;
|
||||
display:block;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
width: 250px;
|
||||
}
|
||||
|
||||
.ui-resizable .ui-resizable-handle {
|
||||
display:block;
|
||||
}
|
||||
|
||||
.ui-resizable-e {
|
||||
background-image:url("splitbar.png");
|
||||
background-size:100%;
|
||||
background-repeat:repeat-y;
|
||||
background-attachment: scroll;
|
||||
cursor:ew-resize;
|
||||
height:100%;
|
||||
right:0;
|
||||
top:0;
|
||||
width:6px;
|
||||
}
|
||||
|
||||
.ui-resizable-handle {
|
||||
display:none;
|
||||
font-size:0.1px;
|
||||
position:absolute;
|
||||
z-index:1;
|
||||
}
|
||||
|
||||
#nav-tree-contents {
|
||||
margin: 6px 0px 0px 0px;
|
||||
}
|
||||
|
||||
#nav-tree {
|
||||
background-image:url('nav_h.png');
|
||||
background-repeat:repeat-x;
|
||||
background-color: #F9FAFC;
|
||||
-webkit-overflow-scrolling : touch; /* iOS 5+ */
|
||||
}
|
||||
|
||||
#nav-sync {
|
||||
position:absolute;
|
||||
top:5px;
|
||||
right:24px;
|
||||
z-index:0;
|
||||
}
|
||||
|
||||
#nav-sync img {
|
||||
opacity:0.3;
|
||||
}
|
||||
|
||||
#nav-sync img:hover {
|
||||
opacity:0.9;
|
||||
}
|
||||
|
||||
@media print
|
||||
{
|
||||
#nav-tree { display: none; }
|
||||
div.ui-resizable-handle { display: none; position: relative; }
|
||||
}
|
||||
|
546
navtree.js
Normal file
|
@ -0,0 +1,546 @@
|
|||
/*
|
||||
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@licend The above is the entire license notice for the JavaScript code in this file
|
||||
*/
|
||||
var navTreeSubIndices = new Array();
|
||||
var arrowDown = '▼';
|
||||
var arrowRight = '►';
|
||||
|
||||
function getData(varName)
|
||||
{
|
||||
var i = varName.lastIndexOf('/');
|
||||
var n = i>=0 ? varName.substring(i+1) : varName;
|
||||
return eval(n.replace(/\-/g,'_'));
|
||||
}
|
||||
|
||||
function stripPath(uri)
|
||||
{
|
||||
return uri.substring(uri.lastIndexOf('/')+1);
|
||||
}
|
||||
|
||||
function stripPath2(uri)
|
||||
{
|
||||
var i = uri.lastIndexOf('/');
|
||||
var s = uri.substring(i+1);
|
||||
var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
|
||||
return m ? uri.substring(i-6) : s;
|
||||
}
|
||||
|
||||
function hashValue()
|
||||
{
|
||||
return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,'');
|
||||
}
|
||||
|
||||
function hashUrl()
|
||||
{
|
||||
return '#'+hashValue();
|
||||
}
|
||||
|
||||
function pathName()
|
||||
{
|
||||
return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, '');
|
||||
}
|
||||
|
||||
function localStorageSupported()
|
||||
{
|
||||
try {
|
||||
return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
|
||||
}
|
||||
catch(e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function storeLink(link)
|
||||
{
|
||||
if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
|
||||
window.localStorage.setItem('navpath',link);
|
||||
}
|
||||
}
|
||||
|
||||
function deleteLink()
|
||||
{
|
||||
if (localStorageSupported()) {
|
||||
window.localStorage.setItem('navpath','');
|
||||
}
|
||||
}
|
||||
|
||||
function cachedLink()
|
||||
{
|
||||
if (localStorageSupported()) {
|
||||
return window.localStorage.getItem('navpath');
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
function getScript(scriptName,func,show)
|
||||
{
|
||||
var head = document.getElementsByTagName("head")[0];
|
||||
var script = document.createElement('script');
|
||||
script.id = scriptName;
|
||||
script.type = 'text/javascript';
|
||||
script.onload = func;
|
||||
script.src = scriptName+'.js';
|
||||
head.appendChild(script);
|
||||
}
|
||||
|
||||
function createIndent(o,domNode,node,level)
|
||||
{
|
||||
var level=-1;
|
||||
var n = node;
|
||||
while (n.parentNode) { level++; n=n.parentNode; }
|
||||
if (node.childrenData) {
|
||||
var imgNode = document.createElement("span");
|
||||
imgNode.className = 'arrow';
|
||||
imgNode.style.paddingLeft=(16*level).toString()+'px';
|
||||
imgNode.innerHTML=arrowRight;
|
||||
node.plus_img = imgNode;
|
||||
node.expandToggle = document.createElement("a");
|
||||
node.expandToggle.href = "javascript:void(0)";
|
||||
node.expandToggle.onclick = function() {
|
||||
if (node.expanded) {
|
||||
$(node.getChildrenUL()).slideUp("fast");
|
||||
node.plus_img.innerHTML=arrowRight;
|
||||
node.expanded = false;
|
||||
} else {
|
||||
expandNode(o, node, false, false);
|
||||
}
|
||||
}
|
||||
node.expandToggle.appendChild(imgNode);
|
||||
domNode.appendChild(node.expandToggle);
|
||||
} else {
|
||||
var span = document.createElement("span");
|
||||
span.className = 'arrow';
|
||||
span.style.width = 16*(level+1)+'px';
|
||||
span.innerHTML = ' ';
|
||||
domNode.appendChild(span);
|
||||
}
|
||||
}
|
||||
|
||||
var animationInProgress = false;
|
||||
|
||||
function gotoAnchor(anchor,aname,updateLocation)
|
||||
{
|
||||
var pos, docContent = $('#doc-content');
|
||||
var ancParent = $(anchor.parent());
|
||||
if (ancParent.hasClass('memItemLeft') ||
|
||||
ancParent.hasClass('memtitle') ||
|
||||
ancParent.hasClass('fieldname') ||
|
||||
ancParent.hasClass('fieldtype') ||
|
||||
ancParent.is(':header'))
|
||||
{
|
||||
pos = ancParent.position().top;
|
||||
} else if (anchor.position()) {
|
||||
pos = anchor.position().top;
|
||||
}
|
||||
if (pos) {
|
||||
var dist = Math.abs(Math.min(
|
||||
pos-docContent.offset().top,
|
||||
docContent[0].scrollHeight-
|
||||
docContent.height()-docContent.scrollTop()));
|
||||
animationInProgress=true;
|
||||
docContent.animate({
|
||||
scrollTop: pos + docContent.scrollTop() - docContent.offset().top
|
||||
},Math.max(50,Math.min(500,dist)),function(){
|
||||
if (updateLocation) window.location.href=aname;
|
||||
animationInProgress=false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function newNode(o, po, text, link, childrenData, lastNode)
|
||||
{
|
||||
var node = new Object();
|
||||
node.children = Array();
|
||||
node.childrenData = childrenData;
|
||||
node.depth = po.depth + 1;
|
||||
node.relpath = po.relpath;
|
||||
node.isLast = lastNode;
|
||||
|
||||
node.li = document.createElement("li");
|
||||
po.getChildrenUL().appendChild(node.li);
|
||||
node.parentNode = po;
|
||||
|
||||
node.itemDiv = document.createElement("div");
|
||||
node.itemDiv.className = "item";
|
||||
|
||||
node.labelSpan = document.createElement("span");
|
||||
node.labelSpan.className = "label";
|
||||
|
||||
createIndent(o,node.itemDiv,node,0);
|
||||
node.itemDiv.appendChild(node.labelSpan);
|
||||
node.li.appendChild(node.itemDiv);
|
||||
|
||||
var a = document.createElement("a");
|
||||
node.labelSpan.appendChild(a);
|
||||
node.label = document.createTextNode(text);
|
||||
node.expanded = false;
|
||||
a.appendChild(node.label);
|
||||
if (link) {
|
||||
var url;
|
||||
if (link.substring(0,1)=='^') {
|
||||
url = link.substring(1);
|
||||
link = url;
|
||||
} else {
|
||||
url = node.relpath+link;
|
||||
}
|
||||
a.className = stripPath(link.replace('#',':'));
|
||||
if (link.indexOf('#')!=-1) {
|
||||
var aname = '#'+link.split('#')[1];
|
||||
var srcPage = stripPath(pathName());
|
||||
var targetPage = stripPath(link.split('#')[0]);
|
||||
a.href = srcPage!=targetPage ? url : "javascript:void(0)";
|
||||
a.onclick = function(){
|
||||
storeLink(link);
|
||||
if (!$(a).parent().parent().hasClass('selected'))
|
||||
{
|
||||
$('.item').removeClass('selected');
|
||||
$('.item').removeAttr('id');
|
||||
$(a).parent().parent().addClass('selected');
|
||||
$(a).parent().parent().attr('id','selected');
|
||||
}
|
||||
var anchor = $(aname);
|
||||
gotoAnchor(anchor,aname,true);
|
||||
};
|
||||
} else {
|
||||
a.href = url;
|
||||
a.onclick = function() { storeLink(link); }
|
||||
}
|
||||
} else {
|
||||
if (childrenData != null)
|
||||
{
|
||||
a.className = "nolink";
|
||||
a.href = "javascript:void(0)";
|
||||
a.onclick = node.expandToggle.onclick;
|
||||
}
|
||||
}
|
||||
|
||||
node.childrenUL = null;
|
||||
node.getChildrenUL = function() {
|
||||
if (!node.childrenUL) {
|
||||
node.childrenUL = document.createElement("ul");
|
||||
node.childrenUL.className = "children_ul";
|
||||
node.childrenUL.style.display = "none";
|
||||
node.li.appendChild(node.childrenUL);
|
||||
}
|
||||
return node.childrenUL;
|
||||
};
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
function showRoot()
|
||||
{
|
||||
var headerHeight = $("#top").height();
|
||||
var footerHeight = $("#nav-path").height();
|
||||
var windowHeight = $(window).height() - headerHeight - footerHeight;
|
||||
(function (){ // retry until we can scroll to the selected item
|
||||
try {
|
||||
var navtree=$('#nav-tree');
|
||||
navtree.scrollTo('#selected',100,{offset:-windowHeight/2});
|
||||
} catch (err) {
|
||||
setTimeout(arguments.callee, 0);
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
function expandNode(o, node, imm, showRoot)
|
||||
{
|
||||
if (node.childrenData && !node.expanded) {
|
||||
if (typeof(node.childrenData)==='string') {
|
||||
var varName = node.childrenData;
|
||||
getScript(node.relpath+varName,function(){
|
||||
node.childrenData = getData(varName);
|
||||
expandNode(o, node, imm, showRoot);
|
||||
}, showRoot);
|
||||
} else {
|
||||
if (!node.childrenVisited) {
|
||||
getNode(o, node);
|
||||
}
|
||||
$(node.getChildrenUL()).slideDown("fast");
|
||||
node.plus_img.innerHTML = arrowDown;
|
||||
node.expanded = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function glowEffect(n,duration)
|
||||
{
|
||||
n.addClass('glow').delay(duration).queue(function(next){
|
||||
$(this).removeClass('glow');next();
|
||||
});
|
||||
}
|
||||
|
||||
function highlightAnchor()
|
||||
{
|
||||
var aname = hashUrl();
|
||||
var anchor = $(aname);
|
||||
if (anchor.parent().attr('class')=='memItemLeft'){
|
||||
var rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
|
||||
glowEffect(rows.children(),300); // member without details
|
||||
} else if (anchor.parent().attr('class')=='fieldname'){
|
||||
glowEffect(anchor.parent().parent(),1000); // enum value
|
||||
} else if (anchor.parent().attr('class')=='fieldtype'){
|
||||
glowEffect(anchor.parent().parent(),1000); // struct field
|
||||
} else if (anchor.parent().is(":header")) {
|
||||
glowEffect(anchor.parent(),1000); // section header
|
||||
} else {
|
||||
glowEffect(anchor.next(),1000); // normal member
|
||||
}
|
||||
}
|
||||
|
||||
function selectAndHighlight(hash,n)
|
||||
{
|
||||
var a;
|
||||
if (hash) {
|
||||
var link=stripPath(pathName())+':'+hash.substring(1);
|
||||
a=$('.item a[class$="'+link+'"]');
|
||||
}
|
||||
if (a && a.length) {
|
||||
a.parent().parent().addClass('selected');
|
||||
a.parent().parent().attr('id','selected');
|
||||
highlightAnchor();
|
||||
} else if (n) {
|
||||
$(n.itemDiv).addClass('selected');
|
||||
$(n.itemDiv).attr('id','selected');
|
||||
}
|
||||
if ($('#nav-tree-contents .item:first').hasClass('selected')) {
|
||||
$('#nav-sync').css('top','30px');
|
||||
} else {
|
||||
$('#nav-sync').css('top','5px');
|
||||
}
|
||||
showRoot();
|
||||
}
|
||||
|
||||
function showNode(o, node, index, hash)
|
||||
{
|
||||
if (node && node.childrenData) {
|
||||
if (typeof(node.childrenData)==='string') {
|
||||
var varName = node.childrenData;
|
||||
getScript(node.relpath+varName,function(){
|
||||
node.childrenData = getData(varName);
|
||||
showNode(o,node,index,hash);
|
||||
},true);
|
||||
} else {
|
||||
if (!node.childrenVisited) {
|
||||
getNode(o, node);
|
||||
}
|
||||
$(node.getChildrenUL()).css({'display':'block'});
|
||||
node.plus_img.innerHTML = arrowDown;
|
||||
node.expanded = true;
|
||||
var n = node.children[o.breadcrumbs[index]];
|
||||
if (index+1<o.breadcrumbs.length) {
|
||||
showNode(o,n,index+1,hash);
|
||||
} else {
|
||||
if (typeof(n.childrenData)==='string') {
|
||||
var varName = n.childrenData;
|
||||
getScript(n.relpath+varName,function(){
|
||||
n.childrenData = getData(varName);
|
||||
node.expanded=false;
|
||||
showNode(o,node,index,hash); // retry with child node expanded
|
||||
},true);
|
||||
} else {
|
||||
var rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
|
||||
if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
|
||||
expandNode(o, n, true, true);
|
||||
}
|
||||
selectAndHighlight(hash,n);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
selectAndHighlight(hash);
|
||||
}
|
||||
}
|
||||
|
||||
function removeToInsertLater(element) {
|
||||
var parentNode = element.parentNode;
|
||||
var nextSibling = element.nextSibling;
|
||||
parentNode.removeChild(element);
|
||||
return function() {
|
||||
if (nextSibling) {
|
||||
parentNode.insertBefore(element, nextSibling);
|
||||
} else {
|
||||
parentNode.appendChild(element);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function getNode(o, po)
|
||||
{
|
||||
var insertFunction = removeToInsertLater(po.li);
|
||||
po.childrenVisited = true;
|
||||
var l = po.childrenData.length-1;
|
||||
for (var i in po.childrenData) {
|
||||
var nodeData = po.childrenData[i];
|
||||
po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
|
||||
i==l);
|
||||
}
|
||||
insertFunction();
|
||||
}
|
||||
|
||||
function gotoNode(o,subIndex,root,hash,relpath)
|
||||
{
|
||||
var nti = navTreeSubIndices[subIndex][root+hash];
|
||||
o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
|
||||
if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
|
||||
navTo(o,NAVTREE[0][1],"",relpath);
|
||||
$('.item').removeClass('selected');
|
||||
$('.item').removeAttr('id');
|
||||
}
|
||||
if (o.breadcrumbs) {
|
||||
o.breadcrumbs.unshift(0); // add 0 for root node
|
||||
showNode(o, o.node, 0, hash);
|
||||
}
|
||||
}
|
||||
|
||||
function navTo(o,root,hash,relpath)
|
||||
{
|
||||
var link = cachedLink();
|
||||
if (link) {
|
||||
var parts = link.split('#');
|
||||
root = parts[0];
|
||||
if (parts.length>1) hash = '#'+parts[1].replace(/[^\w\-]/g,'');
|
||||
else hash='';
|
||||
}
|
||||
if (hash.match(/^#l\d+$/)) {
|
||||
var anchor=$('a[name='+hash.substring(1)+']');
|
||||
glowEffect(anchor.parent(),1000); // line number
|
||||
hash=''; // strip line number anchors
|
||||
}
|
||||
var url=root+hash;
|
||||
var i=-1;
|
||||
while (NAVTREEINDEX[i+1]<=url) i++;
|
||||
if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
|
||||
if (navTreeSubIndices[i]) {
|
||||
gotoNode(o,i,root,hash,relpath)
|
||||
} else {
|
||||
getScript(relpath+'navtreeindex'+i,function(){
|
||||
navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
|
||||
if (navTreeSubIndices[i]) {
|
||||
gotoNode(o,i,root,hash,relpath);
|
||||
}
|
||||
},true);
|
||||
}
|
||||
}
|
||||
|
||||
function showSyncOff(n,relpath)
|
||||
{
|
||||
n.html('<img src="'+relpath+'sync_off.png" title="'+SYNCOFFMSG+'"/>');
|
||||
}
|
||||
|
||||
function showSyncOn(n,relpath)
|
||||
{
|
||||
n.html('<img src="'+relpath+'sync_on.png" title="'+SYNCONMSG+'"/>');
|
||||
}
|
||||
|
||||
function toggleSyncButton(relpath)
|
||||
{
|
||||
var navSync = $('#nav-sync');
|
||||
if (navSync.hasClass('sync')) {
|
||||
navSync.removeClass('sync');
|
||||
showSyncOff(navSync,relpath);
|
||||
storeLink(stripPath2(pathName())+hashUrl());
|
||||
} else {
|
||||
navSync.addClass('sync');
|
||||
showSyncOn(navSync,relpath);
|
||||
deleteLink();
|
||||
}
|
||||
}
|
||||
|
||||
var loadTriggered = false;
|
||||
var readyTriggered = false;
|
||||
var loadObject,loadToRoot,loadUrl,loadRelPath;
|
||||
|
||||
$(window).on('load',function(){
|
||||
if (readyTriggered) { // ready first
|
||||
navTo(loadObject,loadToRoot,loadUrl,loadRelPath);
|
||||
showRoot();
|
||||
}
|
||||
loadTriggered=true;
|
||||
});
|
||||
|
||||
function initNavTree(toroot,relpath)
|
||||
{
|
||||
var o = new Object();
|
||||
o.toroot = toroot;
|
||||
o.node = new Object();
|
||||
o.node.li = document.getElementById("nav-tree-contents");
|
||||
o.node.childrenData = NAVTREE;
|
||||
o.node.children = new Array();
|
||||
o.node.childrenUL = document.createElement("ul");
|
||||
o.node.getChildrenUL = function() { return o.node.childrenUL; };
|
||||
o.node.li.appendChild(o.node.childrenUL);
|
||||
o.node.depth = 0;
|
||||
o.node.relpath = relpath;
|
||||
o.node.expanded = false;
|
||||
o.node.isLast = true;
|
||||
o.node.plus_img = document.createElement("span");
|
||||
o.node.plus_img.className = 'arrow';
|
||||
o.node.plus_img.innerHTML = arrowRight;
|
||||
|
||||
if (localStorageSupported()) {
|
||||
var navSync = $('#nav-sync');
|
||||
if (cachedLink()) {
|
||||
showSyncOff(navSync,relpath);
|
||||
navSync.removeClass('sync');
|
||||
} else {
|
||||
showSyncOn(navSync,relpath);
|
||||
}
|
||||
navSync.click(function(){ toggleSyncButton(relpath); });
|
||||
}
|
||||
|
||||
if (loadTriggered) { // load before ready
|
||||
navTo(o,toroot,hashUrl(),relpath);
|
||||
showRoot();
|
||||
} else { // ready before load
|
||||
loadObject = o;
|
||||
loadToRoot = toroot;
|
||||
loadUrl = hashUrl();
|
||||
loadRelPath = relpath;
|
||||
readyTriggered=true;
|
||||
}
|
||||
|
||||
$(window).bind('hashchange', function(){
|
||||
if (window.location.hash && window.location.hash.length>1){
|
||||
var a;
|
||||
if ($(location).attr('hash')){
|
||||
var clslink=stripPath(pathName())+':'+hashValue();
|
||||
a=$('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
|
||||
}
|
||||
if (a==null || !$(a).parent().parent().hasClass('selected')){
|
||||
$('.item').removeClass('selected');
|
||||
$('.item').removeAttr('id');
|
||||
}
|
||||
var link=stripPath2(pathName());
|
||||
navTo(o,link,hashUrl(),relpath);
|
||||
} else if (!animationInProgress) {
|
||||
$('#doc-content').scrollTop(0);
|
||||
$('.item').removeClass('selected');
|
||||
$('.item').removeAttr('id');
|
||||
navTo(o,toroot,hashUrl(),relpath);
|
||||
}
|
||||
})
|
||||
}
|
||||
/* @license-end */
|
66
navtreedata.js
Normal file
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@licend The above is the entire license notice for the JavaScript code in this file
|
||||
*/
|
||||
var NAVTREE =
|
||||
[
|
||||
[ "SSLClient", "index.html", [
|
||||
[ "Contributor Covenant Code of Conduct", "md__c_o_d_e__o_f__c_o_n_d_u_c_t.html", null ],
|
||||
[ "Contributing", "md__c_o_n_t_r_i_b_u_t_i_n_g.html", null ],
|
||||
[ "Trust Anchors", "md__trust_anchors.html", null ],
|
||||
[ "Namespaces", "namespaces.html", [
|
||||
[ "Namespace List", "namespaces.html", "namespaces_dup" ],
|
||||
[ "Namespace Members", "namespacemembers.html", [
|
||||
[ "All", "namespacemembers.html", null ],
|
||||
[ "Functions", "namespacemembers_func.html", null ]
|
||||
] ]
|
||||
] ],
|
||||
[ "Classes", "annotated.html", [
|
||||
[ "Class List", "annotated.html", "annotated_dup" ],
|
||||
[ "Class Index", "classes.html", null ],
|
||||
[ "Class Hierarchy", "hierarchy.html", "hierarchy" ],
|
||||
[ "Class Members", "functions.html", [
|
||||
[ "All", "functions.html", null ],
|
||||
[ "Functions", "functions_func.html", null ],
|
||||
[ "Variables", "functions_vars.html", null ],
|
||||
[ "Enumerations", "functions_enum.html", null ],
|
||||
[ "Enumerator", "functions_eval.html", null ]
|
||||
] ]
|
||||
] ],
|
||||
[ "Files", "files.html", [
|
||||
[ "File List", "files.html", "files_dup" ],
|
||||
[ "File Members", "globals.html", [
|
||||
[ "All", "globals.html", null ],
|
||||
[ "Macros", "globals_defs.html", null ]
|
||||
] ]
|
||||
] ]
|
||||
] ]
|
||||
];
|
||||
|
||||
var NAVTREEINDEX =
|
||||
[
|
||||
"_s_s_l_client_8cpp.html"
|
||||
];
|
||||
|
||||
var SYNCONMSG = 'click to disable panel synchronisation';
|
||||
var SYNCOFFMSG = 'click to enable panel synchronisation';
|
106
navtreeindex0.js
Normal file
|
@ -0,0 +1,106 @@
|
|||
var NAVTREEINDEX0 =
|
||||
{
|
||||
"_s_s_l_client_8cpp.html":[5,0,0,0],
|
||||
"_s_s_l_client_8h.html":[5,0,0,1],
|
||||
"_s_s_l_client_8h_source.html":[5,0,0,1],
|
||||
"_s_s_l_client_parameters_8cpp.html":[5,0,0,2],
|
||||
"_s_s_l_client_parameters_8cpp.html#a39074ff6e8f24ae9df1cabe6767f8a4d":[5,0,0,2,1],
|
||||
"_s_s_l_client_parameters_8h.html":[5,0,0,3],
|
||||
"_s_s_l_client_parameters_8h_source.html":[5,0,0,3],
|
||||
"_s_s_l_session_8h.html":[5,0,0,4],
|
||||
"_s_s_l_session_8h_source.html":[5,0,0,4],
|
||||
"annotated.html":[4,0],
|
||||
"class_s_s_l_client.html":[4,0,1],
|
||||
"class_s_s_l_client.html#a03c7926938acd57cfc3b982edf725a86":[4,0,1,21],
|
||||
"class_s_s_l_client.html#a0c0b6f2ad25701d1e45adb613d072d86":[4,0,1,13],
|
||||
"class_s_s_l_client.html#a0e775669b4a040fbd3f281dcbcd2de78":[4,0,1,3],
|
||||
"class_s_s_l_client.html#a248a5152cc3c3e7666bf5443bfd57c90":[4,0,1,4],
|
||||
"class_s_s_l_client.html#a2a178251978e0622f7e241da702ae498":[4,0,1,11],
|
||||
"class_s_s_l_client.html#a2bd012ef6f01df9694ba9fd0a3c227c3":[4,0,1,9],
|
||||
"class_s_s_l_client.html#a4192ee3562c4806d4a6829356ca2636b":[4,0,1,12],
|
||||
"class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6cea":[4,0,1,1],
|
||||
"class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa0a4f8af0226cf29ede8f6fe4a9047b08":[4,0,1,1,6],
|
||||
"class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa18dbddc0a3d4a94ee0f298fe55a06a94":[4,0,1,1,0],
|
||||
"class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa37bef298be71b84a57e59fadbfbd9016":[4,0,1,1,4],
|
||||
"class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa6a9cc2412a53b5981e937a41523eece5":[4,0,1,1,2],
|
||||
"class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaa7510402478ffbecd6e1aa3811b175cfd":[4,0,1,1,1],
|
||||
"class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaab8581e1172fbf15067d435706d3a03a8":[4,0,1,1,3],
|
||||
"class_s_s_l_client.html#a48239f60f1b4318cc112706fc40c6ceaaf66f8d5f6601f9e7607b78bf7a07fc84":[4,0,1,1,5],
|
||||
"class_s_s_l_client.html#a4c5420541a06213133ae308a3bca1c95":[4,0,1,15],
|
||||
"class_s_s_l_client.html#a5488f01ccfddfd9e41f54dfbda48bcae":[4,0,1,6],
|
||||
"class_s_s_l_client.html#a68f026a625ca1ccd1aba87bb6e670376":[4,0,1,2],
|
||||
"class_s_s_l_client.html#a7343a58457b4659f83b61cac1f442c3d":[4,0,1,22],
|
||||
"class_s_s_l_client.html#a8da354f30537c1064d554921937a73ae":[4,0,1,18],
|
||||
"class_s_s_l_client.html#a9a4e9c9877ab73cf7e82d6942cc7db21":[4,0,1,8],
|
||||
"class_s_s_l_client.html#aaf2192a6621fdf2f89cc26a9a1584f8c":[4,0,1,7],
|
||||
"class_s_s_l_client.html#ab285c2f5a03124558ef7f74b9f3d12ad":[4,0,1,19],
|
||||
"class_s_s_l_client.html#ab97c0745f65a6c6009ac938b3b9912c3":[4,0,1,5],
|
||||
"class_s_s_l_client.html#ad5d9d8a4187a3f8918bf66af83e733c4":[4,0,1,16],
|
||||
"class_s_s_l_client.html#ad8ed697371748e31e01c3f697bc36cbe":[4,0,1,20],
|
||||
"class_s_s_l_client.html#ae3f9e6f8e8a50e520c936239abecfd22":[4,0,1,10],
|
||||
"class_s_s_l_client.html#aeee217b5558dfb0724f2319888a77256":[4,0,1,17],
|
||||
"class_s_s_l_client.html#aef1b52f4ad9633126cb68739175920eb":[4,0,1,14],
|
||||
"class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1":[4,0,1,0],
|
||||
"class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a199742ec5c99c72d9cede1fda0f125c5":[4,0,1,0,1],
|
||||
"class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a24122d1e1bb724237f305a0b4a21ff75":[4,0,1,0,0],
|
||||
"class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a26f3e5f1481f3ea22ea4ab5370b0fa97":[4,0,1,0,2],
|
||||
"class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1a8d5f7561f9cc0a2f3e5f362b02f4a5b2":[4,0,1,0,3],
|
||||
"class_s_s_l_client.html#af632625f8d247f3885c81e1f05043ad1ad1cf0d4d876daa655edb8331bfe2ce39":[4,0,1,0,4],
|
||||
"class_s_s_l_client_parameters.html":[4,0,2],
|
||||
"class_s_s_l_client_parameters.html#a82c21b0ae4690a6b7842a0d74b12f67f":[4,0,2,4],
|
||||
"class_s_s_l_client_parameters.html#a90d581703308881714d64d1ada785ad2":[4,0,2,2],
|
||||
"class_s_s_l_client_parameters.html#a97213b5554e90908fbf284669b5f22f3":[4,0,2,0],
|
||||
"class_s_s_l_client_parameters.html#ad9beb80ce98ed9aa34db28783f0264c5":[4,0,2,3],
|
||||
"class_s_s_l_client_parameters.html#af5686b2c601812f55477a7089b3b2c2d":[4,0,2,1],
|
||||
"class_s_s_l_session.html":[4,0,3],
|
||||
"class_s_s_l_session.html#a0c8e01b0944c1f4b0ec6d4c423c95b74":[4,0,3,0],
|
||||
"class_s_s_l_session.html#a825373c5ba1aa6c45e74dc8a72b21820":[4,0,3,1],
|
||||
"class_s_s_l_session.html#acbe6549b55d50541d09a16f770e65afc":[4,0,3,2],
|
||||
"classes.html":[4,1],
|
||||
"dir_68267d1309a1af8e8297ef4c3efbcdba.html":[5,0,0],
|
||||
"files.html":[5,0],
|
||||
"functions.html":[4,3,0],
|
||||
"functions_enum.html":[4,3,3],
|
||||
"functions_eval.html":[4,3,4],
|
||||
"functions_func.html":[4,3,1],
|
||||
"functions_vars.html":[4,3,2],
|
||||
"globals.html":[5,1,0],
|
||||
"globals_defs.html":[5,1,1],
|
||||
"hierarchy.html":[4,2],
|
||||
"index.html":[],
|
||||
"md__c_o_d_e__o_f__c_o_n_d_u_c_t.html":[0],
|
||||
"md__c_o_n_t_r_i_b_u_t_i_n_g.html":[1],
|
||||
"md__trust_anchors.html":[2],
|
||||
"namespacemembers.html":[3,1,0],
|
||||
"namespacemembers_func.html":[3,1,1],
|
||||
"namespaces.html":[3,0],
|
||||
"namespacestd.html":[3,0,0],
|
||||
"namespacestd.html#a39074ff6e8f24ae9df1cabe6767f8a4d":[3,0,0,0],
|
||||
"pages.html":[],
|
||||
"structssl__pem__decode__state.html":[4,0,0],
|
||||
"structssl__pem__decode__state.html#a8abbaad636bfcf50ef38f529e3cfd5f3":[4,0,0,0],
|
||||
"structssl__pem__decode__state.html#aa004af7ee6bfb65161dc47558e3a2ac2":[4,0,0,1],
|
||||
"time__macros_8h.html":[5,0,0,5],
|
||||
"time__macros_8h.html#a04e76e262f0920441e5f0c5552e83487":[5,0,0,5,19],
|
||||
"time__macros_8h.html#a243cf438274412bbecf4b8d5eeb02ccb":[5,0,0,5,14],
|
||||
"time__macros_8h.html#a2488d1ddab7e5fa119da3421462231c4":[5,0,0,5,1],
|
||||
"time__macros_8h.html#a2af3d1d741ae2b49627adf56bbc95dc3":[5,0,0,5,20],
|
||||
"time__macros_8h.html#a2d540510d5860d7f190d13124956bc57":[5,0,0,5,16],
|
||||
"time__macros_8h.html#a38ac93dd8bfe385ff915a82c92bbfc97":[5,0,0,5,4],
|
||||
"time__macros_8h.html#a3aaee30ddedb3f6675aac341a66e39e2":[5,0,0,5,15],
|
||||
"time__macros_8h.html#a4dbe4cf7c879a2cdac386ce72c5e5994":[5,0,0,5,13],
|
||||
"time__macros_8h.html#a56482fcc86a55713dee595c2092ed376":[5,0,0,5,5],
|
||||
"time__macros_8h.html#a5ab60a7e3e1b6e0a919b3a37bc0d4b97":[5,0,0,5,8],
|
||||
"time__macros_8h.html#a7f2cdee2eebbccd45c179a50a0bbabcf":[5,0,0,5,0],
|
||||
"time__macros_8h.html#a868143e0521daf07b25a2f3947cf54a3":[5,0,0,5,6],
|
||||
"time__macros_8h.html#a8cd8e04105fec7cd442d078c303e46b9":[5,0,0,5,18],
|
||||
"time__macros_8h.html#a9da779a8ca64782ea49babce14122d34":[5,0,0,5,12],
|
||||
"time__macros_8h.html#aad01b5fb233c0091aff2a837a8de32f4":[5,0,0,5,11],
|
||||
"time__macros_8h.html#ab3592442029a102b388fafeadc4a6ab8":[5,0,0,5,2],
|
||||
"time__macros_8h.html#ab6c76862964ff7e543fd9d5807b2fa79":[5,0,0,5,7],
|
||||
"time__macros_8h.html#ac47b302f1b8d2a7a9c035c417247be76":[5,0,0,5,17],
|
||||
"time__macros_8h.html#ac8f6b75d9e04634818984ba400d0dee1":[5,0,0,5,3],
|
||||
"time__macros_8h.html#ae0574ced3f997b97d357c1cb68000e3a":[5,0,0,5,9],
|
||||
"time__macros_8h.html#ae90924c33a05839b3eb1426472f40eb3":[5,0,0,5,10],
|
||||
"time__macros_8h_source.html":[5,0,0,5]
|
||||
};
|
BIN
open.png
Normal file
After Width: | Height: | Size: 123 B |
105
pages.html
Normal file
|
@ -0,0 +1,105 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>SSLClient: Related Pages</title>
|
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="jquery.js"></script>
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="resize.js"></script>
|
||||
<script type="text/javascript" src="navtreedata.js"></script>
|
||||
<script type="text/javascript" src="navtree.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">SSLClient
|
||||
 <span id="projectnumber">v1.6.11</span>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.9.1 -->
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
|
||||
/* @license-end */
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
/* @license-end */</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
||||
<div id="nav-tree">
|
||||
<div id="nav-tree-contents">
|
||||
<div id="nav-sync" class="sync"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="splitbar" style="-moz-user-select:none;"
|
||||
class="ui-resizable-handle">
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
$(document).ready(function(){initNavTree('pages.html',''); initResizable(); });
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div id="doc-content">
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Related Pages</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
|
||||
<table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="md__c_o_d_e__o_f__c_o_n_d_u_c_t.html" target="_self">Contributor Covenant Code of Conduct</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="md__c_o_n_t_r_i_b_u_t_i_n_g.html" target="_self">Contributing</a></td><td class="desc"></td></tr>
|
||||
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="md__trust_anchors.html" target="_self">Trust Anchors</a></td><td class="desc"></td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
</div><!-- doc-content -->
|
||||
<!-- start footer part -->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,88 +0,0 @@
|
|||
#ifndef _CERTIFICATES_H_
|
||||
#define _CERTIFICATES_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/* This file is auto-generated by the pycert_bearssl tool. Do not change it manually.
|
||||
* Certificates are BearSSL br_x509_trust_anchor format. Included certs:
|
||||
*
|
||||
* Index: 0
|
||||
* Label: VeriSign Class 3 Public Primary Certification Authority - G5
|
||||
* Subject: C=US,O=VeriSign\, Inc.,OU=VeriSign Trust Network,OU=(c) 2006 VeriSign\, Inc. - For authorized use only,CN=VeriSign Class 3 Public Primary Certification Authority - G5
|
||||
* Domain(s): www.amazon.com
|
||||
*/
|
||||
|
||||
#define TAs_NUM 1
|
||||
|
||||
static const unsigned char TA_DN0[] = {
|
||||
0x30, 0x81, 0xca, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06,
|
||||
0x13, 0x02, 0x55, 0x53, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04,
|
||||
0x0a, 0x13, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x53, 0x69, 0x67, 0x6e, 0x2c,
|
||||
0x20, 0x49, 0x6e, 0x63, 0x2e, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55,
|
||||
0x04, 0x0b, 0x13, 0x16, 0x56, 0x65, 0x72, 0x69, 0x53, 0x69, 0x67, 0x6e,
|
||||
0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f,
|
||||
0x72, 0x6b, 0x31, 0x3a, 0x30, 0x38, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13,
|
||||
0x31, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x30, 0x36, 0x20, 0x56, 0x65,
|
||||
0x72, 0x69, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e,
|
||||
0x20, 0x2d, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f,
|
||||
0x72, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x6e,
|
||||
0x6c, 0x79, 0x31, 0x45, 0x30, 0x43, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13,
|
||||
0x3c, 0x56, 0x65, 0x72, 0x69, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, 0x6c,
|
||||
0x61, 0x73, 0x73, 0x20, 0x33, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
|
||||
0x20, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x43, 0x65, 0x72,
|
||||
0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41,
|
||||
0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x47,
|
||||
0x35,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_N0[] = {
|
||||
0xaf, 0x24, 0x08, 0x08, 0x29, 0x7a, 0x35, 0x9e, 0x60, 0x0c, 0xaa, 0xe7,
|
||||
0x4b, 0x3b, 0x4e, 0xdc, 0x7c, 0xbc, 0x3c, 0x45, 0x1c, 0xbb, 0x2b, 0xe0,
|
||||
0xfe, 0x29, 0x02, 0xf9, 0x57, 0x08, 0xa3, 0x64, 0x85, 0x15, 0x27, 0xf5,
|
||||
0xf1, 0xad, 0xc8, 0x31, 0x89, 0x5d, 0x22, 0xe8, 0x2a, 0xaa, 0xa6, 0x42,
|
||||
0xb3, 0x8f, 0xf8, 0xb9, 0x55, 0xb7, 0xb1, 0xb7, 0x4b, 0xb3, 0xfe, 0x8f,
|
||||
0x7e, 0x07, 0x57, 0xec, 0xef, 0x43, 0xdb, 0x66, 0x62, 0x15, 0x61, 0xcf,
|
||||
0x60, 0x0d, 0xa4, 0xd8, 0xde, 0xf8, 0xe0, 0xc3, 0x62, 0x08, 0x3d, 0x54,
|
||||
0x13, 0xeb, 0x49, 0xca, 0x59, 0x54, 0x85, 0x26, 0xe5, 0x2b, 0x8f, 0x1b,
|
||||
0x9f, 0xeb, 0xf5, 0xa1, 0x91, 0xc2, 0x33, 0x49, 0xd8, 0x43, 0x63, 0x6a,
|
||||
0x52, 0x4b, 0xd2, 0x8f, 0xe8, 0x70, 0x51, 0x4d, 0xd1, 0x89, 0x69, 0x7b,
|
||||
0xc7, 0x70, 0xf6, 0xb3, 0xdc, 0x12, 0x74, 0xdb, 0x7b, 0x5d, 0x4b, 0x56,
|
||||
0xd3, 0x96, 0xbf, 0x15, 0x77, 0xa1, 0xb0, 0xf4, 0xa2, 0x25, 0xf2, 0xaf,
|
||||
0x1c, 0x92, 0x67, 0x18, 0xe5, 0xf4, 0x06, 0x04, 0xef, 0x90, 0xb9, 0xe4,
|
||||
0x00, 0xe4, 0xdd, 0x3a, 0xb5, 0x19, 0xff, 0x02, 0xba, 0xf4, 0x3c, 0xee,
|
||||
0xe0, 0x8b, 0xeb, 0x37, 0x8b, 0xec, 0xf4, 0xd7, 0xac, 0xf2, 0xf6, 0xf0,
|
||||
0x3d, 0xaf, 0xdd, 0x75, 0x91, 0x33, 0x19, 0x1d, 0x1c, 0x40, 0xcb, 0x74,
|
||||
0x24, 0x19, 0x21, 0x93, 0xd9, 0x14, 0xfe, 0xac, 0x2a, 0x52, 0xc7, 0x8f,
|
||||
0xd5, 0x04, 0x49, 0xe4, 0x8d, 0x63, 0x47, 0x88, 0x3c, 0x69, 0x83, 0xcb,
|
||||
0xfe, 0x47, 0xbd, 0x2b, 0x7e, 0x4f, 0xc5, 0x95, 0xae, 0x0e, 0x9d, 0xd4,
|
||||
0xd1, 0x43, 0xc0, 0x67, 0x73, 0xe3, 0x14, 0x08, 0x7e, 0xe5, 0x3f, 0x9f,
|
||||
0x73, 0xb8, 0x33, 0x0a, 0xcf, 0x5d, 0x3f, 0x34, 0x87, 0x96, 0x8a, 0xee,
|
||||
0x53, 0xe8, 0x25, 0x15,
|
||||
};
|
||||
|
||||
static const unsigned char TA_RSA_E0[] = {
|
||||
0x01, 0x00, 0x01,
|
||||
};
|
||||
|
||||
static const br_x509_trust_anchor TAs[] = {
|
||||
{
|
||||
{ (unsigned char *)TA_DN0, sizeof TA_DN0 },
|
||||
BR_X509_TA_CA,
|
||||
{
|
||||
BR_KEYTYPE_RSA,
|
||||
{ .rsa = {
|
||||
(unsigned char *)TA_RSA_N0, sizeof TA_RSA_N0,
|
||||
(unsigned char *)TA_RSA_E0, sizeof TA_RSA_E0,
|
||||
} }
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* ifndef _CERTIFICATES_H_ */
|
140
resize.js
Normal file
|
@ -0,0 +1,140 @@
|
|||
/*
|
||||
@licstart The following is the entire license notice for the JavaScript code in this file.
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (C) 1997-2020 by Dimitri van Heesch
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
||||
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
@licend The above is the entire license notice for the JavaScript code in this file
|
||||
*/
|
||||
function initResizable()
|
||||
{
|
||||
var cookie_namespace = 'doxygen';
|
||||
var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight;
|
||||
|
||||
function readCookie(cookie)
|
||||
{
|
||||
var myCookie = cookie_namespace+"_"+cookie+"=";
|
||||
if (document.cookie) {
|
||||
var index = document.cookie.indexOf(myCookie);
|
||||
if (index != -1) {
|
||||
var valStart = index + myCookie.length;
|
||||
var valEnd = document.cookie.indexOf(";", valStart);
|
||||
if (valEnd == -1) {
|
||||
valEnd = document.cookie.length;
|
||||
}
|
||||
var val = document.cookie.substring(valStart, valEnd);
|
||||
return val;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
function writeCookie(cookie, val, expiration)
|
||||
{
|
||||
if (val==undefined) return;
|
||||
if (expiration == null) {
|
||||
var date = new Date();
|
||||
date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
|
||||
expiration = date.toGMTString();
|
||||
}
|
||||
document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
|
||||
}
|
||||
|
||||
function resizeWidth()
|
||||
{
|
||||
var windowWidth = $(window).width() + "px";
|
||||
var sidenavWidth = $(sidenav).outerWidth();
|
||||
content.css({marginLeft:parseInt(sidenavWidth)+"px"});
|
||||
writeCookie('width',sidenavWidth-barWidth, null);
|
||||
}
|
||||
|
||||
function restoreWidth(navWidth)
|
||||
{
|
||||
var windowWidth = $(window).width() + "px";
|
||||
content.css({marginLeft:parseInt(navWidth)+barWidth+"px"});
|
||||
sidenav.css({width:navWidth + "px"});
|
||||
}
|
||||
|
||||
function resizeHeight()
|
||||
{
|
||||
var headerHeight = header.outerHeight();
|
||||
var footerHeight = footer.outerHeight();
|
||||
var windowHeight = $(window).height() - headerHeight - footerHeight;
|
||||
content.css({height:windowHeight + "px"});
|
||||
navtree.css({height:windowHeight + "px"});
|
||||
sidenav.css({height:windowHeight + "px"});
|
||||
var width=$(window).width();
|
||||
if (width!=collapsedWidth) {
|
||||
if (width<desktop_vp && collapsedWidth>=desktop_vp) {
|
||||
if (!collapsed) {
|
||||
collapseExpand();
|
||||
}
|
||||
} else if (width>desktop_vp && collapsedWidth<desktop_vp) {
|
||||
if (collapsed) {
|
||||
collapseExpand();
|
||||
}
|
||||
}
|
||||
collapsedWidth=width;
|
||||
}
|
||||
if (location.hash.slice(1)) {
|
||||
(document.getElementById(location.hash.slice(1))||document.body).scrollIntoView();
|
||||
}
|
||||
}
|
||||
|
||||
function collapseExpand()
|
||||
{
|
||||
if (sidenav.width()>0) {
|
||||
restoreWidth(0);
|
||||
collapsed=true;
|
||||
}
|
||||
else {
|
||||
var width = readCookie('width');
|
||||
if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); }
|
||||
collapsed=false;
|
||||
}
|
||||
}
|
||||
|
||||
header = $("#top");
|
||||
sidenav = $("#side-nav");
|
||||
content = $("#doc-content");
|
||||
navtree = $("#nav-tree");
|
||||
footer = $("#nav-path");
|
||||
$(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
|
||||
$(sidenav).resizable({ minWidth: 0 });
|
||||
$(window).resize(function() { resizeHeight(); });
|
||||
var device = navigator.userAgent.toLowerCase();
|
||||
var touch_device = device.match(/(iphone|ipod|ipad|android)/);
|
||||
if (touch_device) { /* wider split bar for touch only devices */
|
||||
$(sidenav).css({ paddingRight:'20px' });
|
||||
$('.ui-resizable-e').css({ width:'20px' });
|
||||
$('#nav-sync').css({ right:'34px' });
|
||||
barWidth=20;
|
||||
}
|
||||
var width = readCookie('width');
|
||||
if (width) { restoreWidth(width); } else { resizeWidth(); }
|
||||
resizeHeight();
|
||||
var url = location.href;
|
||||
var i=url.indexOf("#");
|
||||
if (i>=0) window.location.hash=url.substr(i);
|
||||
var _preventDefault = function(evt) { evt.preventDefault(); };
|
||||
$("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
|
||||
$(".ui-resizable-handle").dblclick(collapseExpand);
|
||||
$(window).on('load',resizeHeight);
|
||||
}
|
||||
/* @license-end */
|
37
search/all_0.html
Normal file
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.9.1"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_0.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
createResults();
|
||||
/* @license-end */
|
||||
</script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript">
|
||||
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
window.addEventListener("message", function(event) {
|
||||
if (event.data == "take_focus") {
|
||||
var elem = searchResults.NavNext(0);
|
||||
if (elem) elem.focus();
|
||||
}
|
||||
});
|
||||
/* @license-end */
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|