Blame doc/mainpage.dox

Packit 6c0a39
/**
Packit 6c0a39
Packit 6c0a39
@mainpage
Packit 6c0a39
Packit 6c0a39
This is the online reference for developing with the libssh library. It
Packit 6c0a39
documents the libssh C API and the C++ wrapper.
Packit 6c0a39
Packit 6c0a39
@section main-linking Linking
Packit 6c0a39
Packit 6c0a39
We created a small howto how to link libssh against your application, read
Packit 6c0a39
@subpage libssh_linking.
Packit 6c0a39
Packit 6c0a39
@section main-tutorial Tutorial
Packit 6c0a39
Packit 6c0a39
You should start by reading @subpage libssh_tutorial, then reading the documentation of
Packit 6c0a39
the interesting functions as you go.
Packit 6c0a39
Packit 6c0a39
@section main-features Features
Packit 6c0a39
Packit 6c0a39
The libssh library provides:
Packit 6c0a39
Packit 6c0a39
 - Key Exchange Methods: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1
Packit 6c0a39
 - Public Key Algorithms: ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, ssh-rsa, rsa-sha2-512, rsa-sha2-256,ssh-dss
Packit 6c0a39
 - Ciphers: aes256-ctr, aes192-ctr, aes128-ctr, aes256-cbc (rijndael-cbc@lysator.liu.se), aes192-cbc, aes128-cbc, 3des-cbc, blowfish-cbc, none
Packit 6c0a39
 - Compression Schemes: zlib, zlib@openssh.com, none
Packit 6c0a39
 - MAC hashes: hmac-sha1, hmac-sha2-256, hmac-sha2-512, hmac-md5, none
Packit 6c0a39
 - Authentication: none, password, public-key, keyboard-interactive, gssapi-with-mic
Packit 6c0a39
 - Channels: shell, exec (incl. SCP wrapper), direct-tcpip, subsystem, auth-agent-req@openssh.com
Packit 6c0a39
 - Global Requests: tcpip-forward, forwarded-tcpip
Packit 6c0a39
 - Channel Requests: x11, pty, exit-status, signal, exit-signal, keepalive@openssh.com, auth-agent-req@openssh.com
Packit 6c0a39
 - Subsystems: sftp(version 3), OpenSSH Extensions
Packit 6c0a39
 - SFTP: statvfs@openssh.com, fstatvfs@openssh.com
Packit 6c0a39
 - Thread-safe: Just don't share sessions
Packit 6c0a39
 - Non-blocking: it can be used both blocking and non-blocking
Packit 6c0a39
 - Your sockets: the app hands over the socket, or uses libssh sockets
Packit 6c0a39
 - OpenSSL or gcrypt: builds with either
Packit 6c0a39
Packit 6c0a39
@section main-additional-features Additional Features
Packit 6c0a39
Packit 6c0a39
 - Client and server support
Packit 6c0a39
 - SSHv2 and SSHv1 protocol support
Packit Service fcc0d2
 - Supports Linux, UNIX, BSD, Solaris, OS/2 and Windows
Packit Service fcc0d2
 - Automated test cases with nightly tests
Packit 6c0a39
 - Event model based on poll(2), or a poll(2)-emulation.
Packit 6c0a39
Packit 6c0a39
@section main-copyright Copyright Policy
Packit 6c0a39
Packit 6c0a39
libssh is a project with distributed copyright ownership, which means we prefer
Packit 6c0a39
the copyright on parts of libssh to be held by individuals rather than
Packit 6c0a39
corporations if possible. There are historical legal reasons for this, but one
Packit 6c0a39
of the best ways to explain it is that it’s much easier to work with
Packit 6c0a39
individuals who have ownership than corporate legal departments if we ever need
Packit 6c0a39
to make reasonable compromises with people using and working with libssh.
Packit 6c0a39
Packit 6c0a39
We track the ownership of every part of libssh via git, our source code control
Packit 6c0a39
system, so we know the provenance of every piece of code that is committed to
Packit 6c0a39
libssh.
Packit 6c0a39
Packit 6c0a39
So if possible, if you’re doing libssh changes on behalf of a company who
Packit 6c0a39
normally owns all the work you do please get them to assign personal copyright
Packit 6c0a39
ownership of your changes to you as an individual, that makes things very easy
Packit 6c0a39
for us to work with and avoids bringing corporate legal departments into the
Packit 6c0a39
picture.
Packit 6c0a39
Packit 6c0a39
If you can’t do this we can still accept patches from you owned by your
Packit 6c0a39
employer under a standard employment contract with corporate copyright
Packit 6c0a39
ownership. It just requires a simple set-up process first.
Packit 6c0a39
Packit 6c0a39
We use a process very similar to the way things are done in the Linux Kernel
Packit 6c0a39
community, so it should be very easy to get a sign off from your corporate
Packit 6c0a39
legal department. The only changes we’ve made are to accommodate the license we
Packit 6c0a39
use, which is LGPLv2 (or later) whereas the Linux kernel uses GPLv2.
Packit 6c0a39
Packit 6c0a39
The process is called signing.
Packit 6c0a39
Packit 6c0a39
How to sign your work
Packit 6c0a39
----------------------
Packit 6c0a39
Packit 6c0a39
Once you have permission to contribute to libssh from your employer, simply
Packit 6c0a39
email a copy of the following text from your corporate email address to:
Packit 6c0a39
Packit 6c0a39
contributing@libssh.org
Packit 6c0a39
Packit 6c0a39
@verbatim
Packit 6c0a39
libssh Developer's Certificate of Origin. Version 1.0
Packit 6c0a39
Packit 6c0a39
By making a contribution to this project, I certify that:
Packit 6c0a39
Packit 6c0a39
(a) The contribution was created in whole or in part by me and I
Packit 6c0a39
    have the right to submit it under the appropriate
Packit 6c0a39
    version of the GNU General Public License; or
Packit 6c0a39
Packit 6c0a39
(b) The contribution is based upon previous work that, to the best of
Packit 6c0a39
    my knowledge, is covered under an appropriate open source license
Packit 6c0a39
    and I have the right under that license to submit that work with
Packit 6c0a39
    modifications, whether created in whole or in part by me, under
Packit 6c0a39
    the GNU General Public License, in the appropriate version; or
Packit 6c0a39
Packit 6c0a39
(c) The contribution was provided directly to me by some other
Packit 6c0a39
    person who certified (a) or (b) and I have not modified it.
Packit 6c0a39
Packit 6c0a39
(d) I understand and agree that this project and the contribution are
Packit 6c0a39
    public and that a record of the contribution (including all
Packit 6c0a39
    metadata and personal information I submit with it, including my
Packit 6c0a39
    sign-off) is maintained indefinitely and may be redistributed
Packit 6c0a39
    consistent with the libssh Team's policies and the requirements of
Packit 6c0a39
    the GNU GPL where they are relevant.
Packit 6c0a39
Packit 6c0a39
(e) I am granting this work to this project under the terms of the
Packit 6c0a39
    GNU Lesser General Public License as published by the
Packit 6c0a39
    Free Software Foundation; either version 2.1 of
Packit 6c0a39
    the License, or (at the option of the project) any later version.
Packit 6c0a39
Packit Service fcc0d2
https://www.gnu.org/licenses/lgpl-2.1.html
Packit 6c0a39
@endverbatim
Packit 6c0a39
Packit 6c0a39
We will maintain a copy of that email as a record that you have the rights to
Packit 6c0a39
contribute code to libssh under the required licenses whilst working for the
Packit 6c0a39
company where the email came from.
Packit 6c0a39
Packit 6c0a39
Then when sending in a patch via the normal mechanisms described above, add a
Packit 6c0a39
line that states:
Packit 6c0a39
Packit 6c0a39
@verbatim
Packit 6c0a39
   Signed-off-by: Random J Developer <random@developer.example.org>
Packit 6c0a39
@endverbatim
Packit 6c0a39
Packit 6c0a39
using your real name and the email address you sent the original email you used
Packit 6c0a39
to send the libssh Developer’s Certificate of Origin to us (sorry, no
Packit 6c0a39
pseudonyms or anonymous contributions.)
Packit 6c0a39
Packit 6c0a39
That’s it! Such code can then quite happily contain changes that have copyright
Packit 6c0a39
messages such as:
Packit 6c0a39
Packit 6c0a39
@verbatim
Packit 6c0a39
   (c) Example Corporation.
Packit 6c0a39
@endverbatim
Packit 6c0a39
Packit 6c0a39
and can be merged into the libssh codebase in the same way as patches from any
Packit 6c0a39
other individual. You don’t need to send in a copy of the libssh Developer’s
Packit 6c0a39
Certificate of Origin for each patch, or inside each patch. Just the sign-off
Packit 6c0a39
message is all that is required once we’ve received the initial email.
Packit 6c0a39
Packit 6c0a39
Have fun and happy libssh hacking!
Packit 6c0a39
Packit 6c0a39
The libssh Team
Packit 6c0a39
Packit 6c0a39
@section main-rfc Internet standard
Packit 6c0a39
Packit 6c0a39
@subsection main-rfc-secsh Secure Shell (SSH)
Packit 6c0a39
Packit 6c0a39
The following RFC documents described SSH-2 protcol as an Internet standard.
Packit 6c0a39
Packit Service fcc0d2
 - RFC 4250,
Packit 6c0a39
    The Secure Shell (SSH) Protocol Assigned Numbers
Packit Service fcc0d2
 - RFC 4251,
Packit 6c0a39
    The Secure Shell (SSH) Protocol Architecture
Packit Service fcc0d2
 - RFC 4252,
Packit 6c0a39
    The Secure Shell (SSH) Authentication Protocol
Packit Service fcc0d2
 - RFC 4253,
Packit 6c0a39
    The Secure Shell (SSH) Transport Layer Protocol
Packit Service fcc0d2
 - RFC 4254,
Packit 6c0a39
    The Secure Shell (SSH) Connection Protocol
Packit Service fcc0d2
 - RFC 4255,
Packit 6c0a39
    Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints
Packit Service fcc0d2
    (not implemented in libssh)
Packit Service fcc0d2
 - RFC 4256,
Packit 6c0a39
    Generic Message Exchange Authentication for the Secure Shell Protocol (SSH)
Packit Service fcc0d2
 - RFC 4335,
Packit 6c0a39
    The Secure Shell (SSH) Session Channel Break Extension
Packit Service fcc0d2
 - RFC 4344,
Packit 6c0a39
    The Secure Shell (SSH) Transport Layer Encryption Modes
Packit Service fcc0d2
 - RFC 4345,
Packit 6c0a39
    Improved Arcfour Modes for the Secure Shell (SSH) Transport Layer Protocol
Packit 6c0a39
Packit 6c0a39
It was later modified and expanded by the following RFCs.
Packit 6c0a39
Packit Service fcc0d2
 - RFC 4419,
Packit 6c0a39
    Diffie-Hellman Group Exchange for the Secure Shell (SSH) Transport Layer
Packit 6c0a39
    Protocol
Packit Service fcc0d2
 - RFC 4432,
Packit 6c0a39
    RSA Key Exchange for the Secure Shell (SSH) Transport Layer Protocol
Packit Service fcc0d2
    (not implemented in libssh)
Packit Service fcc0d2
 - RFC 4462,
Packit 6c0a39
    Generic Security Service Application Program Interface (GSS-API)
Packit 6c0a39
    Authentication and Key Exchange for the Secure Shell (SSH) Protocol
Packit Service fcc0d2
    (only the authentication implemented in libssh)
Packit Service fcc0d2
 - RFC 4716,
Packit 6c0a39
    The Secure Shell (SSH) Public Key File Format
Packit Service fcc0d2
    (not implemented in libssh)
Packit Service fcc0d2
 - RFC 5647,
Packit 6c0a39
    AES Galois Counter Mode for the Secure Shell Transport Layer Protocol
Packit Service fcc0d2
    (the algorithm negotiation implemented according to openssh.com)
Packit Service fcc0d2
 - RFC 5656,
Packit 6c0a39
    Elliptic Curve Algorithm Integration in the Secure Shell Transport Layer
Packit Service fcc0d2
 - RFC 6594,
Packit Service fcc0d2
    Use of the SHA-256 Algorithm with RSA, DSA, and ECDSA in SSHFP Resource Records
Packit Service fcc0d2
    (not implemented in libssh)
Packit Service fcc0d2
 - RFC 6668,
Packit Service fcc0d2
    SHA-2 Data Integrity Verification for the Secure Shell (SSH) Transport Layer Protocol
Packit Service fcc0d2
 - RFC 7479,
Packit Service fcc0d2
    Using Ed25519 in SSHFP Resource Records
Packit Service fcc0d2
    (not implemented in libssh)
Packit Service fcc0d2
 - RFC 8160,
Packit Service fcc0d2
    IUTF8 Terminal Mode in Secure Shell (SSH)
Packit Service fcc0d2
    (not handled in libssh)
Packit Service fcc0d2
 - RFC 8270,
Packit Service fcc0d2
    Increase the Secure Shell Minimum Recommended Diffie-Hellman Modulus Size to 2048 Bits
Packit Service fcc0d2
 - RFC 8308,
Packit Service fcc0d2
    Extension Negotiation in the Secure Shell (SSH) Protocol
Packit Service fcc0d2
    (only the "server-sig-algs" extension implemented)
Packit Service fcc0d2
 - RFC 8332,
Packit Service fcc0d2
    Use of RSA Keys with SHA-256 and SHA-512 in the Secure Shell (SSH) Protocol
Packit Service fcc0d2
Packit Service fcc0d2
There are also drafts that are being currently developed and followed.
Packit Service fcc0d2
Packit Service fcc0d2
 - draft-ietf-curdle-ssh-kex-sha2-10
Packit Service fcc0d2
    Key Exchange (KEX) Method Updates and Recommendations for Secure Shell (SSH)
Packit Service fcc0d2
 - draft-miller-ssh-agent-03
Packit Service fcc0d2
    SSH Agent Protocol
Packit Service fcc0d2
 - draft-ietf-curdle-ssh-curves-12
Packit Service fcc0d2
    Secure Shell (SSH) Key Exchange Method using Curve25519 and Curve448
Packit 6c0a39
Packit 6c0a39
Interesting cryptography documents:
Packit 6c0a39
Packit Service fcc0d2
 - PKCS #11, PKCS #11 reference documents, describing interface with smartcards.
Packit 6c0a39
Packit 6c0a39
@subsection main-rfc-sftp Secure Shell File Transfer Protocol (SFTP)
Packit 6c0a39
Packit 6c0a39
The protocol is not an Internet standard but it is still widely implemented.
Packit 6c0a39
OpenSSH and most other implementation implement Version 3 of the protocol. We
Packit 6c0a39
do the same in libssh.
Packit 6c0a39
Packit Service fcc0d2
 - 
Packit 6c0a39
   draft-ietf-secsh-filexfer-02.txt,
Packit 6c0a39
   SSH File Transfer Protocol
Packit 6c0a39
Packit 6c0a39
@subsection main-rfc-extensions Secure Shell Extensions
Packit 6c0a39
Packit 6c0a39
The OpenSSH project has defined some extensions to the protocol. We support some of
Packit 6c0a39
them like the statvfs calls in SFTP or the ssh-agent.
Packit 6c0a39
Packit Service fcc0d2
 - 
Packit 6c0a39
    OpenSSH's deviations and extensions
Packit Service fcc0d2
 - 
Packit 6c0a39
    OpenSSH's pubkey certificate authentication
Packit Service fcc0d2
 - 
Packit Service fcc0d2
    chacha20-poly1305@openssh.com authenticated encryption mode
Packit Service fcc0d2
 - 
Packit Service fcc0d2
    OpenSSH private key format (openssh-key-v1)
Packit 6c0a39
Packit 6c0a39
*/