Home | History | Annotate | Download | only in android
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef NET_ANDROID_LEGACY_OPENSSL_H
      6 #define NET_ANDROID_LEGACY_OPENSSL_H
      7 
      8 // This file contains a replica of the Android system OpenSSL ABI shipped in
      9 // Android 4.1.x (API level 16). The ABI may not necessarily be compatible with
     10 // the copy of OpenSSL shipped in Chromium. This is used to implement
     11 // RSA_private_encrypt in one of the legacy client auth codepaths.
     12 //
     13 // See https://android.googlesource.com/platform/external/openssl/+/android-4.1.2_r2.1
     14 
     15 namespace net {
     16 namespace android {
     17 
     18 enum {
     19   ANDROID_EVP_PKEY_RSA = 6,
     20 };
     21 
     22 enum {
     23   ANDROID_RSA_PKCS1_PADDING = 1,
     24   ANDROID_RSA_SSLV23_PADDING = 2,
     25   ANDROID_RSA_NO_PADDING = 3,
     26   ANDROID_RSA_PKCS1_OAEP_PADDING = 4,
     27   ANDROID_X931_PADDING = 5,
     28   ANDROID_PKCS1_PSS_PADDING = 6,
     29 };
     30 
     31 struct AndroidEVP_PKEY_ASN1_METHOD;
     32 struct AndroidRSA_METHOD;
     33 struct AndroidSTACK;
     34 
     35 struct AndroidCRYPTO_EX_DATA {
     36   AndroidSTACK* sk;
     37   int dummy;
     38 };
     39 
     40 struct AndroidENGINE {
     41   const char* id;
     42   // Remaining fields intentionally omitted.
     43 };
     44 
     45 struct AndroidRSA {
     46   int pad;
     47   long version;
     48   const AndroidRSA_METHOD* meth;
     49   AndroidENGINE* engine;
     50   // Remaining fields intentionally omitted.
     51 };
     52 
     53 struct AndroidRSA_METHOD {
     54   const char* name;
     55   int (*rsa_pub_enc)(int flen,
     56                      const unsigned char* from,
     57                      unsigned char* to,
     58                      AndroidRSA* rsa,
     59                      int padding);
     60   int (*rsa_pub_dec)(int flen,
     61                      const unsigned char* from,
     62                      unsigned char* to,
     63                      AndroidRSA* rsa,
     64                      int padding);
     65   int (*rsa_priv_enc)(int flen,
     66                       const unsigned char* from,
     67                       unsigned char* to,
     68                       AndroidRSA* rsa,
     69                       int padding);
     70   int (*rsa_priv_dec)(int flen,
     71                       const unsigned char* from,
     72                       unsigned char* to,
     73                       AndroidRSA* rsa,
     74                       int padding);
     75   // Remaining fields intentionally omitted.
     76 };
     77 
     78 struct AndroidEVP_PKEY {
     79   int type;
     80   int save_type;
     81   // Note: this value must NOT be modified using Chromium's CRYPTO_add
     82   // function. That may not necessarily use the same locking implementation as
     83   // system OpenSSL.
     84   int references;
     85   const AndroidEVP_PKEY_ASN1_METHOD* ameth;
     86   AndroidENGINE* engine;
     87   union {
     88     char* ptr;
     89     AndroidRSA* rsa;
     90   } pkey;
     91   int save_parameters;
     92   AndroidSTACK* attributes;
     93 };
     94 
     95 }  // namespace android
     96 }  // namespace net
     97 
     98 #endif  // NET_ANDROID_LEGACY_OPENSSL_H
     99