| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef NET_ANDROID_LEGACY_OPENSSL_H |
| #define NET_ANDROID_LEGACY_OPENSSL_H |
| |
| // This file contains a replica of the Android system OpenSSL ABI shipped in |
| // Android 4.1.x (API level 16). The ABI may not necessarily be compatible with |
| // the copy of OpenSSL shipped in Chromium. This is used to implement |
| // RSA_private_encrypt in one of the legacy client auth codepaths. |
| // |
| // See https://android.googlesource.com/platform/external/openssl/+/android-4.1.2_r2.1 |
| |
| namespace net { |
| namespace android { |
| |
| enum { |
| ANDROID_EVP_PKEY_RSA = 6, |
| }; |
| |
| enum { |
| ANDROID_RSA_PKCS1_PADDING = 1, |
| ANDROID_RSA_SSLV23_PADDING = 2, |
| ANDROID_RSA_NO_PADDING = 3, |
| ANDROID_RSA_PKCS1_OAEP_PADDING = 4, |
| ANDROID_X931_PADDING = 5, |
| ANDROID_PKCS1_PSS_PADDING = 6, |
| }; |
| |
| struct AndroidEVP_PKEY_ASN1_METHOD; |
| struct AndroidRSA_METHOD; |
| struct AndroidSTACK; |
| |
| struct AndroidCRYPTO_EX_DATA { |
| AndroidSTACK* sk; |
| int dummy; |
| }; |
| |
| struct AndroidENGINE { |
| const char* id; |
| // Remaining fields intentionally omitted. |
| }; |
| |
| struct AndroidRSA { |
| int pad; |
| long version; |
| const AndroidRSA_METHOD* meth; |
| AndroidENGINE* engine; |
| // Remaining fields intentionally omitted. |
| }; |
| |
| struct AndroidRSA_METHOD { |
| const char* name; |
| int (*rsa_pub_enc)(int flen, |
| const unsigned char* from, |
| unsigned char* to, |
| AndroidRSA* rsa, |
| int padding); |
| int (*rsa_pub_dec)(int flen, |
| const unsigned char* from, |
| unsigned char* to, |
| AndroidRSA* rsa, |
| int padding); |
| int (*rsa_priv_enc)(int flen, |
| const unsigned char* from, |
| unsigned char* to, |
| AndroidRSA* rsa, |
| int padding); |
| int (*rsa_priv_dec)(int flen, |
| const unsigned char* from, |
| unsigned char* to, |
| AndroidRSA* rsa, |
| int padding); |
| // Remaining fields intentionally omitted. |
| }; |
| |
| struct AndroidEVP_PKEY { |
| int type; |
| int save_type; |
| // Note: this value must NOT be modified using Chromium's CRYPTO_add |
| // function. That may not necessarily use the same locking implementation as |
| // system OpenSSL. |
| int references; |
| const AndroidEVP_PKEY_ASN1_METHOD* ameth; |
| AndroidENGINE* engine; |
| union { |
| char* ptr; |
| AndroidRSA* rsa; |
| } pkey; |
| int save_parameters; |
| AndroidSTACK* attributes; |
| }; |
| |
| } // namespace android |
| } // namespace net |
| |
| #endif // NET_ANDROID_LEGACY_OPENSSL_H |