~ubuntu-branches/ubuntu/maverick/gnutls26/maverick-updates

« back to all changes in this revision

Viewing changes to doc/gnutls.texi

  • Committer: Bazaar Package Importer
  • Author(s): Andreas Metzler
  • Date: 2009-04-14 14:23:19 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20090414142319-ok7xejzbqkofno1q
Tags: 2.6.5-1
* Sync sections in debian/control with override file. libgnutls26-dbg is
  section debug, guile-gnutls is section lisp.
* New upstream version. (Needed for Libtasn1-3 2.0)
* New patch 15_tasn1inpc.diff. Make sure libtasn1 is listed in Libs.private.
* Standards-Version: 3.8.1, no changes required.

Show diffs side-by-side

added added

removed removed

Lines of Context:
199
199
release since 6 is even, and GnuTLS 1.7.11 denote a development
200
200
release since 7 is odd.
201
201
 
202
 
GnuTLS depends on Libgcrypt, and you will need to install Libgcrypt
 
202
GnuTLS depends on Libgcrypt,
 
203
and you will need to install Libgcrypt
203
204
before installing GnuTLS.  Libgcrypt is available from
204
205
@url{ftp://ftp.gnupg.org/gcrypt/libgcrypt}.  Libgcrypt needs another
205
206
library, libgpg-error, and you need to install libgpg-error before
361
362
implements the TLS 1.1 and SSL 3.0 protocols (@xref{Introduction to
362
363
TLS}, for a more detailed description of the protocols), accompanied
363
364
with the required framework for authentication and public key
364
 
infrastructure.  The library is available under the GNU Lesser GPL
365
 
license@footnote{A copy of the license is included in the
366
 
distribution}.  Important features of the @acronym{GnuTLS} library
 
365
infrastructure.  Important features of the @acronym{GnuTLS} library
367
366
include:
368
367
 
369
368
@itemize
389
388
to ease integration with existing applications.
390
389
 
391
390
@acronym{GnuTLS} consists of three independent parts, namely the ``TLS
392
 
protocol part'', the ``Certificate part'', and the ``Crypto backend''
 
391
protocol part'', the ``Certificate part'', and the ``Cryptographic backend''
393
392
part.  The `TLS protocol part' is the actual protocol implementation,
394
393
and is entirely implemented within the @acronym{GnuTLS} library.  The
395
394
`Certificate part' consists of the certificate parsing, and
401
400
version of
402
401
@acronym{OpenCDK}@footnote{@url{ftp://ftp.gnupg.org/gcrypt/alpha/gnutls/opencdk/}}
403
402
is used for the @acronym{OpenPGP} key support in @acronym{GnuTLS}.
404
 
The ``Crypto backend'' is provided by the
 
403
The ``Cryptographic backend'' is provided by the
405
404
@acronym{Libgcrypt}@footnote{@url{ftp://ftp.gnupg.org/gcrypt/alpha/libgcrypt/}}
406
 
library.
 
405
library@footnote{On current versions of GnuTLS it is possible
 
406
to override the default crypto backend. Check @pxref{Cryptographic Backend} for details}.
407
407
 
408
408
In order to ease integration in embedded systems, parts of the
409
409
@acronym{GnuTLS} library can be disabled at compile time. That way a
1069
1069
guess that is valid today. There are no guarrantees that an algorithm will remain unbreakable or that these values will remain constant in time. There could be scientific breakthroughs that cannot be predicted or total failure of the current public key systems by quantum computers. On the other hand though the cryptosystems
1070
1070
used in TLS are selected in a conservative way and such catastrophic breakthroughs or failures are believed to be unlikely.
1071
1071
 
 
1072
NIST publication SP 800-57 @xcite{NISTSP80057} contains a similar
 
1073
table that extends beyond the key sizes given above.
 
1074
 
 
1075
@multitable @columnfractions .15 .20 .20 .20
 
1076
 
 
1077
@item Bits of security
 
1078
@tab Symmetric key algorithms
 
1079
@tab RSA key size, DSA, DH and SRP prime size
 
1080
@tab ECC key size
 
1081
 
 
1082
@item 80
 
1083
@tab 2TDEA
 
1084
@tab 1024
 
1085
@tab 160-223
 
1086
 
 
1087
@item 112
 
1088
@tab 3DES
 
1089
@tab 2048
 
1090
@tab 224-255
 
1091
 
 
1092
@item 128
 
1093
@tab AES-128
 
1094
@tab 3072
 
1095
@tab 256-383
 
1096
 
 
1097
@item 192
 
1098
@tab AES-192
 
1099
@tab 7680
 
1100
@tab 384-511
 
1101
 
 
1102
@item 256
 
1103
@tab AES-256
 
1104
@tab 15360
 
1105
@tab 512+
 
1106
 
 
1107
@end multitable
 
1108
 
 
1109
The recommendations are fairly consistent.
 
1110
 
1072
1111
@node On SSL 2 and older protocols
1073
1112
@section On SSL 2 and Older Protocols
1074
1113
@cindex SSL 2
1939
1978
@node Digital signatures
1940
1979
@section Digital Signatures
1941
1980
@cindex Digital signatures
1942
 
@include signatures.texi
 
1981
 
 
1982
In this section we will provide some information about digital
 
1983
signatures, how they work, and give the rationale for disabling some
 
1984
of the algorithms used.
 
1985
 
 
1986
Digital signatures work by using somebody's secret key to sign some
 
1987
arbitrary data.  Then anybody else could use the public key of that
 
1988
person to verify the signature.  Since the data may be arbitrary it is
 
1989
not suitable input to a cryptographic digital signature algorithm. For
 
1990
this reason and also for performance cryptographic hash algorithms are
 
1991
used to preprocess the input to the signature algorithm. This works as
 
1992
long as it is difficult enough to generate two different messages with
 
1993
the same hash algorithm output. In that case the same signature could
 
1994
be used as a proof for both messages. Nobody wants to sign an innocent
 
1995
message of donating 1 @euro{} to Greenpeace and find out that he
 
1996
donated 1.000.000 @euro{} to Bad Inc.
 
1997
 
 
1998
For a hash algorithm to be called cryptographic the following three
 
1999
requirements must hold:
 
2000
 
 
2001
@enumerate
 
2002
@item Preimage resistance.
 
2003
That means the algorithm must be one way and given the output of the
 
2004
hash function @math{H(x)}, it is impossible to calculate @math{x}.
 
2005
 
 
2006
@item 2nd preimage resistance.
 
2007
That means that given a pair @math{x,y} with @math{y=H(x)} it is
 
2008
impossible to calculate an @math{x'} such that @math{y=H(x')}.
 
2009
 
 
2010
@item Collision resistance.
 
2011
That means that it is impossible to calculate random @math{x} and
 
2012
@math{x'} such @math{H(x')=H(x)}.
 
2013
@end enumerate
 
2014
 
 
2015
The last two requirements in the list are the most important in
 
2016
digital signatures. These protect against somebody who would like to
 
2017
generate two messages with the same hash output. When an algorithm is
 
2018
considered broken usually it means that the Collision resistance of
 
2019
the algorithm is less than brute force. Using the birthday paradox the
 
2020
brute force attack takes
 
2021
@iftex
 
2022
@math{2^{(\rm{hash\ size}) / 2}}
 
2023
@end iftex
 
2024
@ifnottex
 
2025
@math{2^{((hash size) / 2)}}
 
2026
@end ifnottex
 
2027
operations. Today colliding certificates using the MD5 hash algorithm
 
2028
have been generated as shown in @xcite{WEGER}.
 
2029
 
 
2030
There has been cryptographic results for the SHA-1 hash algorithms as
 
2031
well, although they are not yet critical.  Before 2004, MD5 had a
 
2032
presumed collision strength of @math{2^{64}}, but it has been showed
 
2033
to have a collision strength well under @math{2^{50}}.  As of November
 
2034
2005, it is believed that SHA-1's collision strength is around
 
2035
@math{2^{63}}.  We consider this sufficiently hard so that we still
 
2036
support SHA-1.  We anticipate that SHA-256/386/512 will be used in
 
2037
publicly-distributed certificates in the future.  When @math{2^{63}}
 
2038
can be considered too weak compared to the computer power available
 
2039
sometime in the future, SHA-1 will be disabled as well.  The collision
 
2040
attacks on SHA-1 may also get better, given the new interest in tools
 
2041
for creating them.
 
2042
 
 
2043
@subsection Trading Security for Interoperability
 
2044
 
 
2045
If you connect to a server and use GnuTLS' functions to verify the
 
2046
certificate chain, and get a @ref{GNUTLS_CERT_INSECURE_ALGORITHM}
 
2047
validation error (@pxref{Verifying X.509 certificate paths}), it means
 
2048
that somewhere in the certificate chain there is a certificate signed
 
2049
using @code{RSA-MD2} or @code{RSA-MD5}.  These two digital signature
 
2050
algorithms are considered broken, so GnuTLS fail when attempting to
 
2051
verify the certificate.  In some situations, it may be useful to be
 
2052
able to verify the certificate chain anyway, assuming an attacker did
 
2053
not utilize the fact that these signatures algorithms are broken.
 
2054
This section will give help on how to achieve that.
 
2055
 
 
2056
First, it is important to know that you do not have to enable any of
 
2057
the flags discussed here to be able to use trusted root CA
 
2058
certificates signed using @code{RSA-MD2} or @code{RSA-MD5}.  The only
 
2059
attack today is that it is possible to generate certificates with
 
2060
colliding signatures (collision resistance); you cannot generate a
 
2061
certificate that has the same signature as an already existing
 
2062
signature (2nd preimage resistance).
 
2063
 
 
2064
If you are using @ref{gnutls_certificate_verify_peers2} to verify the
 
2065
certificate chain, you can call
 
2066
@ref{gnutls_certificate_set_verify_flags} with the
 
2067
@code{GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD2} or
 
2068
@code{GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD5} flag, as in:
 
2069
 
 
2070
@example
 
2071
  gnutls_certificate_set_verify_flags (x509cred,
 
2072
                                       GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD5);
 
2073
@end example
 
2074
 
 
2075
This will tell the verifier algorithm to enable @code{RSA-MD5} when
 
2076
verifying the certificates.
 
2077
 
 
2078
If you are using @ref{gnutls_x509_crt_verify} or
 
2079
@ref{gnutls_x509_crt_list_verify}, you can pass the
 
2080
@code{GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD5} parameter directly in the
 
2081
@code{flags} parameter.
 
2082
 
 
2083
If you are using these flags, it may also be a good idea to warn the
 
2084
user when verification failure occur for this reason.  The simplest is
 
2085
to not use the flags by default, and only fall back to using them
 
2086
after warning the user.  If you wish to inspect the certificate chain
 
2087
yourself, you can use @ref{gnutls_certificate_get_peers} to extract
 
2088
the raw server's certificate chain, then use
 
2089
@ref{gnutls_x509_crt_import} to parse each of the certificates, and
 
2090
then use @ref{gnutls_x509_crt_get_signature_algorithm} to find out the
 
2091
signing algorithm used for each certificate.  If any of the
 
2092
intermediary certificates are using @code{GNUTLS_SIGN_RSA_MD2} or
 
2093
@code{GNUTLS_SIGN_RSA_MD5}, you could present a warning.
 
2094
 
1943
2095
 
1944
2096
 
1945
2097
@node How to use TLS in application protocols
2097
2249
 
2098
2250
@menu
2099
2251
* Headers::
 
2252
* Initialization::
2100
2253
* Version check::
2101
2254
* Debugging::
2102
2255
* Building the source::
2114
2267
available by including the header file @file{gnutls/extra.h} in your
2115
2268
programs.
2116
2269
 
 
2270
@node Initialization
 
2271
@subsection Initialization
 
2272
 
 
2273
GnuTLS must be initialized before it can be used.  The library is
 
2274
initialized by calling @ref{gnutls_global_init}.  The resources
 
2275
allocated by the initialization process can be released if the
 
2276
application no longer has a need to call GnuTLS functions, this is
 
2277
done by calling @ref{gnutls_global_deinit}.
 
2278
 
 
2279
The extra functionality of the @acronym{GnuTLS-extra} library is
 
2280
available after calling @ref{gnutls_global_init_extra}.
 
2281
 
 
2282
In order to take advantage of the internationalisation features in
 
2283
GnuTLS, such as translated error messages, the application must set
 
2284
the current locale using @code{setlocale} before initializing GnuTLS.
 
2285
 
2117
2286
@node Version check
2118
2287
@subsection Version Check
2119
2288
 
2183
2352
@section Multi-Threaded Applications
2184
2353
 
2185
2354
Although the @acronym{GnuTLS} library is thread safe by design, some
2186
 
parts of the crypto backend, such as the random generator, are
2187
 
not. Since @emph{libgcrypt 1.1.92} there was an automatic detection of
2188
 
the thread library used by the application, so most applications
2189
 
wouldn't need to do any changes to ensure thread-safety. Due to the
2190
 
unportability of the automatic thread detection, this was removed from
2191
 
later releases of @emph{libgcrypt}, so applications have now to
2192
 
register callback functions to ensure proper locking in sensitive
2193
 
parts of @emph{libgcrypt}.
 
2355
parts of Libgcrypt, such as the random generator, are not.
 
2356
Applications have to register callback functions to ensure proper
 
2357
locking in the sensitive parts of @emph{libgcrypt}.
2194
2358
 
2195
2359
There are helper macros to help you properly initialize the libraries.
2196
2360
Examples are shown below.
2600
2764
     -d, --debug LEVEL        specify the debug level. Default is 1.
2601
2765
     -h, --help               shows this help text
2602
2766
     -v, --version            shows the program's version
2603
 
     --copyright              shows the program's license
2604
2767
@end verbatim
2605
2768
 
2606
2769
The program can be used interactively or non interactively by
2790
2953
 
2791
2954
# A dnsname in case of a WWW server.
2792
2955
#dns_name = "www.none.org"
 
2956
#dns_name = "www.morethanone.org"
2793
2957
 
2794
2958
# An IP address in case of a server.
2795
2959
#ip_address = "192.168.1.1"
2889
3053
                              algorithms  and modes.
2890
3054
     -h, --help               prints this help
2891
3055
     -v, --version            prints the program's version number
2892
 
     --copyright              prints the program's license
2893
3056
@end verbatim
2894
3057
 
2895
3058
To connect to a server using PSK authentication, you may use something
3050
3213
                              algorithms  and modes.
3051
3214
     -h, --help               prints this help
3052
3215
     -v, --version            prints the program's version number
3053
 
     --copyright              prints the program's license
3054
3216
@end verbatim
3055
3217
 
3056
3218
@subsection Setting Up a Test HTTPS Server
3371
3533
@section @acronym{GnuTLS-extra} Functions
3372
3534
@cindex @acronym{GnuTLS-extra} functions
3373
3535
 
3374
 
These functions are only available in the GPL version of the library
3375
 
called @code{gnutls-extra}. The prototypes for this library lie in
3376
 
@file{gnutls/extra.h}.
 
3536
These functions are only available in the GPLv3+ version of the
 
3537
library called @code{gnutls-extra}. The prototypes for this library
 
3538
lie in @file{gnutls/extra.h}.
3377
3539
 
3378
3540
@include gnutls-extra-api.texi
3379
3541
 
3384
3546
 
3385
3547
The following functions are to be used for @acronym{OpenPGP}
3386
3548
certificate handling.  Their prototypes lie in
3387
 
@file{gnutls/openpgp.h}.  You need to link with @file{libgnutls-extra}
3388
 
to be able to use these functions (@pxref{GnuTLS-extra functions}).
 
3549
@file{gnutls/openpgp.h}.
3389
3550
 
3390
3551
@include pgp-api.texi
3391
3552
 
3463
3624
@anchor{ciphersuites}
3464
3625
@cindex Ciphersuites
3465
3626
 
3466
 
@multitable @columnfractions .45 .20 .35
3467
 
 
3468
 
@item @code{TLS_RSA_NULL_MD5} 
3469
 
@tab 0x00 0x01
3470
 
@tab RFC 2246
3471
 
 
3472
 
@item @code{TLS_ANON_DH_3DES_EDE_CBC_SHA} 
3473
 
@tab 0x00 0x1B
3474
 
@tab RFC 2246
3475
 
 
3476
 
@item @code{TLS_ANON_DH_ARCFOUR_MD5}
3477
 
@tab 0x00 0x18
3478
 
@tab RFC 2246
3479
 
 
3480
 
@item @code{TLS_ANON_DH_AES_128_CBC_SHA}
3481
 
@tab 0x00 0x34
3482
 
@tab RFC 2246
3483
 
 
3484
 
@item @code{TLS_ANON_DH_AES_256_CBC_SHA}
3485
 
@tab 0x00 0x3A
3486
 
@tab RFC 2246
3487
 
 
3488
 
@item @code{TLS_RSA_ARCFOUR_SHA}
3489
 
@tab 0x00 0x05
3490
 
@tab  RFC 2246
3491
 
 
3492
 
@item @code{TLS_RSA_ARCFOUR_MD5}
3493
 
@tab 0x00 0x04
3494
 
@tab RFC 2246
3495
 
 
3496
 
@item @code{TLS_RSA_3DES_EDE_CBC_SHA}
3497
 
@tab 0x00 0x0A
3498
 
@tab RFC 2246
3499
 
 
3500
 
@item @code{TLS_RSA_EXPORT_ARCFOUR_40_MD5}
3501
 
@tab 0x00 0x03
3502
 
@tab RFC 2246
3503
 
 
3504
 
@item @code{TLS_DHE_DSS_3DES_EDE_CBC_SHA}
3505
 
@tab 0x00 0x13
3506
 
@tab RFC 2246
3507
 
 
3508
 
@item @code{TLS_DHE_RSA_3DES_EDE_CBC_SHA}
3509
 
@tab 0x00 0x16
3510
 
@tab RFC 2246
3511
 
 
3512
 
@item @code{TLS_RSA_AES_128_CBC_SHA}
3513
 
@tab 0x00 0x2F
3514
 
@tab RFC 3268
3515
 
 
3516
 
@item @code{TLS_RSA_AES_256_CBC_SHA}
3517
 
@tab 0x00 0x35
3518
 
@tab RFC 3268
3519
 
 
3520
 
@item @code{TLS_DHE_DSS_AES_256_CBC_SHA}
3521
 
@tab 0x00 0x38
3522
 
@tab RFC 3268
3523
 
 
3524
 
@item @code{TLS_DHE_DSS_AES_128_CBC_SHA}
3525
 
@tab 0x00 0x32
3526
 
@tab RFC 3268
3527
 
 
3528
 
@item @code{TLS_DHE_RSA_AES_256_CBC_SHA}
3529
 
@tab 0x00 0x39
3530
 
@tab RFC 3268
3531
 
 
3532
 
@item @code{TLS_DHE_RSA_AES_128_CBC_SHA}
3533
 
@tab 0x00 0x33
3534
 
@tab RFC 3268
3535
 
 
3536
 
@item @code{TLS_SRP_SHA_3DES_EDE_CBC_SHA}
3537
 
@tab 0x00 0x50
3538
 
@tab RFC 5054
3539
 
 
3540
 
@item @code{TLS_SRP_SHA_AES_128_CBC_SHA}
3541
 
@tab 0x00 0x53
3542
 
@tab RFC 5054
3543
 
 
3544
 
@item @code{TLS_SRP_SHA_AES_256_CBC_SHA}
3545
 
@tab 0x00 0x56
3546
 
@tab RFC 5054
3547
 
 
3548
 
@item @code{TLS_SRP_SHA_RSA_3DES_EDE_CBC_SHA}
3549
 
@tab 0x00 0x51
3550
 
@tab RFC 5054
3551
 
 
3552
 
@item @code{TLS_SRP_SHA_DSS_3DES_EDE_CBC_SHA}
3553
 
@tab 0x00 0x52
3554
 
@tab RFC 5054
3555
 
 
3556
 
@item @code{TLS_SRP_SHA_RSA_AES_128_CBC_SHA}
3557
 
@tab 0x00 0x54
3558
 
@tab RFC 5054
3559
 
 
3560
 
@item @code{TLS_SRP_SHA_DSS_AES_128_CBC_SHA}
3561
 
@tab 0x00 0x55
3562
 
@tab RFC 5054
3563
 
 
3564
 
@item @code{TLS_SRP_SHA_RSA_AES_256_CBC_SHA}
3565
 
@tab 0x00 0x57
3566
 
@tab RFC 5054
3567
 
 
3568
 
@item @code{TLS_SRP_SHA_DSS_AES_256_CBC_SHA}
3569
 
@tab 0x00 0x58
3570
 
@tab RFC 5054
3571
 
 
3572
 
@item @code{TLS_DHE_DSS_ARCFOUR_SHA}
3573
 
@tab 0x00 0x66
3574
 
@tab draft-ietf-tls-56-bit-ciphersuites
3575
 
 
3576
 
@item @code{TLS_PSK_ARCFOUR_SHA}
3577
 
@tab 0x00 0x8A
3578
 
@tab draft-ietf-tls-psk
3579
 
 
3580
 
@item @code{TLS_PSK_3DES_EDE_CBC_SHA}
3581
 
@tab 0x00 0x8B
3582
 
@tab draft-ietf-tls-psk
3583
 
 
3584
 
@item @code{TLS_PSK_AES_128_CBC_SHA}
3585
 
@tab 0x00 0x8C
3586
 
@tab draft-ietf-tls-psk
3587
 
 
3588
 
@item @code{TLS_PSK_AES_256_CBC_SHA}
3589
 
@tab 0x00 0x8D
3590
 
@tab draft-ietf-tls-psk
3591
 
 
3592
 
@end multitable
 
3627
@include algorithms.texi
 
3628
 
 
3629
Some additional information regarding some of the algorithms:
 
3630
 
 
3631
@table @code
 
3632
@item RSA
 
3633
RSA is public key cryptosystem designed by Ronald Rivest, Adi Shamir
 
3634
and Leonard Adleman.  It can be used with any hash functions.
 
3635
 
 
3636
@item DSA
 
3637
DSA is the USA's Digital Signature Standard.  It uses only the SHA-1
 
3638
hash algorithm.
 
3639
 
 
3640
@item MD2
 
3641
MD2 is a cryptographic hash algorithm designed by Ron Rivest.  It is
 
3642
optimized for 8-bit processors. Outputs 128 bits of data.  There are
 
3643
no known weaknesses of this algorithm but since this algorithm is
 
3644
rarely used and not really studied it should not be used today.
 
3645
 
 
3646
@item MD5
 
3647
MD5 is a cryptographic hash algorithm designed by Ron Rivest. Outputs
 
3648
128 bits of data.  It is considered to be broken.
 
3649
 
 
3650
@item SHA-1
 
3651
SHA is a cryptographic hash algorithm designed by NSA. Outputs 160
 
3652
bits of data.  It is also considered to be broken, though no practical
 
3653
attacks have been found.
 
3654
 
 
3655
@item RMD160
 
3656
RIPEMD is a cryptographic hash algorithm developed in the framework of
 
3657
the EU project RIPE.  Outputs 160 bits of data.
 
3658
 
 
3659
@end table
3593
3660
 
3594
3661
@c
3595
3662
@c Guile Bindings
3597
3664
 
3598
3665
@include guile.texi
3599
3666
 
 
3667
 
3600
3668
@node Internal architecture of GnuTLS
3601
3669
@chapter Internal Architecture of GnuTLS
3602
3670
@cindex Internal architecture
3606
3674
to potential developers and those who want to know what
3607
3675
happens inside the black box.
3608
3676
 
 
3677
@menu
 
3678
* The TLS Protocol::
 
3679
* TLS Handshake Protocol::
 
3680
* TLS Authentication Methods::
 
3681
* TLS Extension Handling::
 
3682
* Cryptographic Backend::
 
3683
@end menu
 
3684
 
 
3685
@node The TLS Protocol
3609
3686
@section The TLS Protocol
3610
3687
The main needs for the TLS protocol to be used are
3611
3688
shown in the image below.
3618
3695
are functions that require the first parameter to be that object.
3619
3696
@image{gnutls-objects,15cm}
3620
3697
 
 
3698
@node TLS Handshake Protocol
3621
3699
@section TLS Handshake Protocol
3622
3700
The @acronym{GnuTLS} handshake protocol is implemented as a state
3623
3701
machine that waits for input or returns immediately when the non-blocking
3635
3713
 
3636
3714
@image{gnutls-handshake-sequence,12cm}
3637
3715
 
 
3716
@node TLS Authentication Methods
3638
3717
@section TLS Authentication Methods
3639
3718
In @acronym{GnuTLS} authentication methods can be implemented quite easily.
3640
3719
Since the required changes to add a new authentication method affect only the
3652
3731
the structure holding its pointers has to be registered in @code{gnutls_algorithms.c}
3653
3732
in the @code{_gnutls_kx_algorithms} structure.
3654
3733
 
 
3734
@node TLS Extension Handling
3655
3735
@section TLS Extension Handling
3656
3736
As with authentication methods, the TLS extensions handlers can be implemented
3657
3737
using the following interface.
3818
3898
 
3819
3899
The APIs need to be added to @code{includes/gnutls/gnutls.h} or
3820
3900
@code{includes/gnutls/extra.h} as appropriate.  It is recommended that
3821
 
if you don't have a requirement to use the LGPL license for your
3822
 
extension, that you place your work under the GPL license and thus in
3823
 
the libgnutls-extra library.
 
3901
if you don't have a requirement to use the LGPLv2.1+ license for your
 
3902
extension, that you place your work under the GPLv3+ license and thus
 
3903
in the libgnutls-extra library.
3824
3904
 
3825
3905
You can implement the API function in the @code{ext_foobar.c} file, or
3826
3906
if that file ends up becoming rather larger, add a
3834
3914
 
3835
3915
@image{gnutls-certificate-user-use-case,12cm}
3836
3916
 
 
3917
@node Cryptographic Backend
 
3918
@section Cryptographic Backend
 
3919
Several new systems provide hardware assisted cryptographic algorithm implementations
 
3920
that offer implementations some orders of magnitude faster than the software. For this
 
3921
reason in current releases of GnuTLS it is possible to override parts of the crypto
 
3922
backend or the whole. It is possible to override them both at runtime and compile time, however
 
3923
here we will discuss the runtime possibility. The API available for this functionality
 
3924
is in @code{gnutls/crypto.h} header file.
 
3925
 
 
3926
@subsection Override specific algorithms
 
3927
When an optimized implementation of a single algorithm is available, say a
 
3928
hardware assisted version of @acronym{AES-CBC} then the following functions
 
3929
can be used to register those algorithms.
 
3930
 
 
3931
@itemize
 
3932
 
 
3933
@item @ref{gnutls_crypto_single_cipher_register2}
 
3934
To register a cipher algorithm.
 
3935
 
 
3936
@item @ref{gnutls_crypto_single_mac_register2}
 
3937
To register a MAC algorithm.
 
3938
 
 
3939
@ref{gnutls_crypto_single_digest_register2}
 
3940
To register a digest (hash) algorithm.
 
3941
 
 
3942
@end itemize
 
3943
 
 
3944
Those registration functions will only replace the specified algorithm and leave the
 
3945
rest of subsystem intact.
 
3946
 
 
3947
@subsection Override parts of the backend
 
3948
In some systems, such as embedded ones, it might be desirable to override big parts
 
3949
of the cryptographic backend, or even all of them. For this reason the following
 
3950
functions are provided.
 
3951
 
 
3952
@itemize
 
3953
 
 
3954
@item @ref{gnutls_crypto_cipher_register2}
 
3955
To override the cryptographic algorithms backend.
 
3956
 
 
3957
@item @ref{gnutls_crypto_mac_register2}
 
3958
To override the MAC algorithms backend.
 
3959
 
 
3960
@item @ref{gnutls_crypto_digest_register2}
 
3961
To override the digest algorithms backend.
 
3962
 
 
3963
@item @ref{gnutls_crypto_rnd_register2}
 
3964
To override the random number generator backend.
 
3965
 
 
3966
@item @ref{gnutls_crypto_bigint_register2}
 
3967
To override the big number number operations backend.
 
3968
 
 
3969
@item @ref{gnutls_crypto_pk_register2}
 
3970
To override the public key encryption backend. This is tight to the big number
 
3971
operations so either both of them should be updated or care must be taken to
 
3972
use the same format.
 
3973
 
 
3974
@end itemize
 
3975
 
 
3976
If all of them are used then GnuTLS will no longer use libgcrypt.
3837
3977
 
3838
3978
@node Copying Information
3839
3979
@appendix Copying Information
3884
4024
forced to find out", Available from
3885
4025
@url{http://www.cs.auckland.ac.nz/~pgut001/}.
3886
4026
 
 
4027
@item @anchor{NISTSP80057}[NISTSP80057]
 
4028
NIST Special Publication 800-57, "Recommendation for Key Management -
 
4029
Part 1: General (Revised)", March 2007, available from
 
4030
@url{http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57-Part1-revised2_Mar08-2007.pdf}.
 
4031
 
3887
4032
@item @anchor{RFC2246}[RFC2246]
3888
4033
Tim Dierks and Christopher Allen, "The TLS Protocol Version 1.0",
3889
4034
January 1999, Available from