Home | History | Annotate | only in /external/chromium_org/third_party/openssl
Up to higher level directory
NameDateSize
buildinf.h01-Nov-2013278
config/01-Nov-2013
import_from_android.sh01-Nov-201312.4K
openssl/01-Nov-2013
openssl-chromium.config01-Nov-2013821
openssl.gyp01-Nov-20133.2K
openssl.gypi01-Nov-201324.4K
openssl.target.darwin-arm.mk01-Nov-201334.8K
openssl.target.darwin-mips.mk01-Nov-201334.4K
openssl.target.darwin-x86.mk01-Nov-201335.2K
openssl.target.linux-arm.mk01-Nov-201334.8K
openssl.target.linux-mips.mk01-Nov-201334.4K
openssl.target.linux-x86.mk01-Nov-201335.2K
patches.chromium/01-Nov-2013
README.chromium01-Nov-20138.2K

README.chromium

      1 Name: openssl
      2 URL: http://openssl.org/source/
      3 Version: 1.0.1e
      4 License: BSDish
      5 License File: openssl/NOTICE
      6 License Android Compatible: yes
      7 Security Critical: yes
      8 
      9 Description:
     10 This is OpenSSL, the standard SSL/TLS library, which is used *only* in
     11 the following cases:
     12 
     13  - For Chrome/Chromium, only on Android to implement SSL/TLS support
     14    (while certificate validation is performed through the platform APIs),
     15    instead of using NSS as on other Linux-based operating systems.
     16 
     17    Note that there is no plans to support OpenSSL in Chromium on other
     18    platforms. For more context, please read:
     19 
     20      https://groups.google.com/a/chromium.org/d/msg/chromium-dev/gmO3U9HLY3Y/RPGNiQ-NL-YJ
     21 
     22  - To implement net/tools/flip_server, a host-side tool. Read more about
     23    it at the following page:
     24 
     25      http://dev.chromium.org/spdy/running_flipinmemserver   
     26 
     27 This means that the library must be built for these systems:
     28 
     29   Android/ARM
     30   Android/x86
     31   Linux/x86
     32   Linux/x86_64
     33   Darwin/x86
     34   Darwin/x86_64
     35 
     36 Whenever you change it, try to rebuild Chromium for all these systems.
     37 
     38 **************************************************************************
     39 Automatic generation of source tree.
     40 
     41 Most of the sources in this directory are auto-generated and come from
     42 the Android version of the OpenSSL sources, with a few Chromium-specific
     43 patches applied.
     44 
     45 Said Android sources are themselves a patched subset of the official
     46 OpenSSL release sources, generated by a special import script.
     47 
     48 To update the sources for Chromium, one has to modify
     49 openssl-chromium.config or the content of patches.chromium/ then run:
     50 
     51   ./import_from_android.sh
     52 
     53 Before doing that, you should understand how everything works:
     54 
     55   1) Android-specific files are taken from a given commit from the
     56      AOSP git servers. See how 'openssl-chromium.config' defines the
     57      following variables:
     58 
     59        ANDROID_OPENSSL_GIT_SOURCE  -> point to source git server.
     60        ANDROID_OPENSSL_GIT_COMMIT  -> point to git commit
     61 
     62   2) All downloaded Android-specific files are placed under the openssl/
     63      sub-directory. The most important files are the following:
     64 
     65       openssl/openssl.version
     66           Configuration file telling which upstream version of
     67           OpenSSL sources to use.
     68 
     69       openssl/patches/
     70           Directory containing several Android-specific patches to
     71           apply to the official OpenSSL sources to create the
     72           Android ones. See openssl/patches/README for a description
     73           of what each of these patches do.
     74 
     75       openssl/openssl.config
     76           Configuration file describing which build-time options
     77           to enable, what patches to apply, which source files to compile
     78           (including CPU architecture-specific variants), and which
     79           sources to keep in the final source directory.
     80 
     81       openssl/import_openssl.sh
     82           Import script used to regenerate all other Android-specific
     83           source files, based on the configuration files above
     84           and a tarball of the official OpenSSL source release.
     85 
     86      For example, to rebuild the full Android source tree (without any
     87      Chromium patches), one would do something like:
     88 
     89         cd openssl/
     90         ./import_openssl.sh import /path/to/openssl-<version>.tar.gz
     91 
     92      where <version> matches the definition found in 'openssl.version'.
     93 
     94   3) Chromium adds a few of its own files:
     95 
     96     openssl-chromium.config
     97         Configuration file which indicates:
     98           - The reference Android OpenSSL git repository and commit.
     99           - The download location of official OpenSSL source tarballs.
    100           - The corresponding SHA-1 sum, for sanity checking.
    101 
    102     patches.chromium/
    103         A set of additional patches to apply to the openssl/ tree
    104         after it has been downloaded from the Android git repository.
    105 
    106         These patches are applied _before_ import_openssl.sh is run to
    107         re-generate the final set of sources. This allows modifying the
    108         content of any Android configuration file easily.
    109 
    110     openssl.gyp
    111         A gyp build file for the library. Manually maintained, this file
    112         includes openssl.gypi below.
    113 
    114     openssl.gypi
    115         An *auto-generated* gyp include file that contains the required
    116         definitions used to describe the library's sources to the
    117         Chromium build system. Its content mirrors openssl/openssl.config
    118         in a gyp-compatible way.
    119 
    120     config/x64/openssl/opensslconf.h
    121         Another *auto-generated* file used for 64-bit builds of the library
    122         only. This is required for correctness because the Android sources
    123         only come with a single generic header which is tailored for
    124         32-bit builds. Using the latter results either in a broken build,
    125         or even worse, in a library that doesn't work correctly.
    126 
    127         The content of this file is a simple copy of
    128         openssl/include/openssl/opensslconf.h, with a few lines
    129         altered to reflect that the target has 64-bit types.
    130 
    131     import_from_android.sh
    132         The top-level script that will automatically perform the full
    133         Chromium download + patching + import + auto-generation process.
    134 
    135 
    136 More specifically, calling 'import_from_android.sh' will do the following:
    137 
    138   1) Download a specific Android commit from AOSP git servers to openssl/
    139   2) Download the corresponding official OpenSSL release tarball.
    140   3) Sainty check its SHA-1 against a hard-coded value.
    141   4) Apply chromium-specific patches.
    142   5) Re-run the Android 'import_openssl.sh' script.
    143   6) Auto-generate config/x64/openssl/opensslconf.h
    144   7) Auto-generate openssl.gypi
    145 
    146 Once the script is done, all you need to do is launch gyp again, rebuild
    147 and run unit tests. Use the --verbose option to see what the script does,
    148 or --help to see a detailed scription and a list of valid options.
    149 
    150 **************************************************************************
    151 Chromium-specific patches:
    152 
    153 The list of Chromium-specific patches to apply to the Android tree is
    154 located in patches.chromium/. Currently this consists of:
    155 
    156   x509_hash_name_algorithm_change.patch
    157     Ensure the library can find the right files under /etc/ssl/certs when
    158     running on older systems.
    159 
    160     There are many symbolic links under /etc/ssl/certs created by using
    161     hash of the PEM certificates in order for OpenSSL to find those
    162     certificates. Openssl has a tool to help you create hash symbolic
    163     links (tools/c_rehash).  However newer versions of the library changed
    164     the hash algorithm, which makes it unable to run properly on systems
    165     that use the old /etc/ssl/certs layout (e.g. Ubuntu Lucid).
    166 
    167     This patch gives a way to find a certificate according to its hash by
    168     using both the old and new algorithms. http://crbug.com/111045 is used
    169     to track this issue.
    170 
    171   enable-dtls1.patch:
    172     Enable DTLSv1, which is disabled by default in the Android platform
    173     configuration.
    174 
    175   x86_64_source_excludes.patch
    176     Exclude the source files bn_asm.c and rc4_skey.c for x86_64 because
    177     they are replaced by x86_64-gcc.c and rc4-x86_64.S.
    178 
    179   z_reduce_client_hello_size.patch
    180     Advertise support of only the NIST curves P-521, P-384, and P-256,
    181     as well as only uncompressed points, to keep ClientHello small.
    182 
    183 **************************************************************************
    184 Adding new Chromium patches:
    185 
    186 In the event you need to add a new Chromium-specific patch, follow this
    187 procedure:
    188 
    189   1) Use the --temp-dir option to download everything to a known directory
    190      (by default, import_from_android.sh downloads everything into a
    191      temporary directory that is erased when the script exits, even in
    192      case of error).
    193 
    194        ./import_from_android.sh --temp-dir=/tmp/aaa
    195 
    196   2) Save the "original" Android sources:
    197 
    198        cp -rp /tmp/aaa/build/android-openssl /tmp/aaa/build/android-openssl.orig
    199 
    200   3) Modify the content of /tmp/aaa/build/android-openssl appropriately.
    201      You do *not* have to run 'import_openssl.sh'
    202 
    203   4) Create new patch:
    204 
    205      (cd /tmp/aaa/build && diff -burN android-openssl.orig android-openssl) > patches.chromium/my-new-change.patch
    206 
    207   5) Re-run the script:
    208 
    209       ./import_from_android.sh
    210 
    211 Generally speaking, consider sending your patch directly to the Android
    212 open-source review servers too. Once submitted there, you can update
    213 the git commit in openssl-chromium.org and remove your local patch in
    214 one new CL.
    215