1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef CF_MOCK_H 17 #define CF_MOCK_H 18 #include <gmock/gmock.h> 19 #include <openssl/asn1.h> 20 #include <openssl/bn.h> 21 #include <openssl/ocsp.h> 22 #include <openssl/x509v3.h> 23 #include <openssl/pkcs12.h> 24 25 #include "certificate_openssl_common.h" 26 #include "x509_certificate.h" 27 #include "x509_certificate_openssl.h" 28 29 using ::testing::NiceMock; 30 31 namespace CFMock { 32 class X509OpensslMock { 33 public: 34 MOCK_METHOD(int, i2d_X509_EXTENSIONS, (X509_EXTENSIONS * a, unsigned char **out)); 35 MOCK_METHOD(int, OPENSSL_sk_num, (const OPENSSL_STACK *st)); 36 MOCK_METHOD(ASN1_TIME *, X509_getm_notBefore, (const X509 *x)); 37 MOCK_METHOD(ASN1_TIME *, X509_getm_notAfter, (const X509 *x)); 38 MOCK_METHOD(char *, X509_NAME_oneline, (const X509_NAME *a, char *buf, int size)); 39 MOCK_METHOD(int, i2d_X509, (X509 * a, unsigned char **out)); 40 MOCK_METHOD(BIO *, BIO_new_mem_buf, (const void *buf, int len)); 41 MOCK_METHOD(void *, OPENSSL_sk_value, (const OPENSSL_STACK *st, int i)); 42 MOCK_METHOD(CfResult, HcfX509CertificateCreate, (const CfEncodingBlob *inStream, HcfX509Certificate **returnObj)); 43 MOCK_METHOD(OPENSSL_STACK *, OPENSSL_sk_new_null, ()); 44 MOCK_METHOD(int, X509_STORE_add_cert, (X509_STORE * ctx, X509 *x)); 45 MOCK_METHOD(X509_STORE_CTX *, X509_STORE_CTX_new, ()); 46 MOCK_METHOD(X509_STORE *, X509_STORE_new, ()); 47 MOCK_METHOD( 48 int, X509_STORE_CTX_init, (X509_STORE_CTX * ctx, X509_STORE *store, X509 *x509, STACK_OF(X509) * chain)); 49 MOCK_METHOD(int, X509_verify_cert, (X509_STORE_CTX * ctx)); 50 MOCK_METHOD(int, i2d_PUBKEY, (EVP_PKEY * a, unsigned char **pp)); 51 MOCK_METHOD(void *, X509_get_ext_d2i, (const X509 *x, int nid, int *crit, int *idx)); 52 MOCK_METHOD(int, i2d_ASN1_OCTET_STRING, (ASN1_OCTET_STRING * a, unsigned char **out)); 53 MOCK_METHOD(int, i2d_AUTHORITY_KEYID, (AUTHORITY_KEYID * a, unsigned char **out)); 54 MOCK_METHOD(CfResult, DeepCopyDataToBlob, (const unsigned char *data, uint32_t len, CfBlob *outBlob)); 55 MOCK_METHOD(ASN1_TIME *, ASN1_TIME_new, ()); 56 MOCK_METHOD(const ASN1_INTEGER *, X509_get0_serialNumber, (const X509 *x)); 57 MOCK_METHOD(int, i2d_ASN1_INTEGER, (ASN1_INTEGER * a, unsigned char **out)); 58 MOCK_METHOD(EVP_PKEY *, X509_get_pubkey, (X509 * x)); 59 MOCK_METHOD(ASN1_OBJECT *, OBJ_nid2obj, (int n)); 60 MOCK_METHOD(int, OBJ_obj2txt, (char *buf, int buf_len, const ASN1_OBJECT *a, int no_name)); 61 MOCK_METHOD(BIGNUM *, BN_bin2bn, (const unsigned char *s, int len, BIGNUM *ret)); 62 MOCK_METHOD(int, ASN1_TIME_normalize, (ASN1_TIME * s)); 63 MOCK_METHOD( 64 void, X509_ALGOR_get0, (const ASN1_OBJECT **paobj, int *pptype, const void **ppval, const X509_ALGOR *algor)); 65 MOCK_METHOD(ASN1_TYPE *, ASN1_TYPE_new, ()); 66 MOCK_METHOD(int, ASN1_TYPE_set1, (ASN1_TYPE * a, int type, const void *value)); 67 MOCK_METHOD(int, i2d_ASN1_TYPE, (ASN1_TYPE * a, unsigned char **out)); 68 MOCK_METHOD(long, ASN1_INTEGER_get, (const ASN1_INTEGER *a)); 69 MOCK_METHOD(const unsigned char *, ASN1_STRING_get0_data, (const ASN1_STRING *x)); 70 MOCK_METHOD(int, i2d_GENERAL_NAME, (GENERAL_NAME * a, unsigned char **out)); 71 MOCK_METHOD(X509_EXTENSION *, X509_get_ext, (const X509 *x, X509_EXTENSION *loc)); 72 MOCK_METHOD(void *, X509V3_EXT_d2i, (X509_EXTENSION * ext)); 73 MOCK_METHOD(void *, GENERAL_NAME_get0_value, (const GENERAL_NAME *a, int *ptype)); 74 MOCK_METHOD(int, X509_verify, (X509 * a, EVP_PKEY *r)); 75 MOCK_METHOD(CfResult, DeepCopyBlobToBlob, (const CfBlob *inBlob, CfBlob **outBlob)); 76 MOCK_METHOD(int, OPENSSL_sk_push, (OPENSSL_STACK * st, const int data)); 77 MOCK_METHOD(int, i2d_X509_REVOKED, (X509_REVOKED * a, unsigned char **out)); 78 MOCK_METHOD(int, i2d_X509_CRL, (X509_CRL * a, unsigned char **out)); 79 MOCK_METHOD( 80 OPENSSL_STACK *, OPENSSL_sk_deep_copy, (const OPENSSL_STACK *, OPENSSL_sk_copyfunc c, OPENSSL_sk_freefunc f)); 81 MOCK_METHOD(int, OBJ_obj2nid, (const ASN1_OBJECT *o)); 82 MOCK_METHOD(X509 *, X509_dup, (X509 * x509)); 83 MOCK_METHOD(int, X509_check_host, (X509 * x, const char *chk, size_t chklen, unsigned int flags, char **peername)); 84 MOCK_METHOD(OCSP_REQUEST *, OCSP_REQUEST_new, ()); 85 MOCK_METHOD(X509_CRL *, X509_CRL_load_http, (const char *url, BIO *bio, BIO *rbio, int timeout)); 86 MOCK_METHOD(struct stack_st_OPENSSL_STRING *, X509_get1_ocsp, (X509 * x)); 87 MOCK_METHOD(int, OSSL_HTTP_parse_url, 88 (const char *url, int *pssl, char **puser, char **phost, char **pport, int *pport_num, char **ppath, 89 char **pquery, char **pfrag)); 90 91 MOCK_METHOD(int, X509_NAME_get0_der, (X509_NAME * nm, const unsigned char **pder, size_t *pderlen)); 92 MOCK_METHOD(const char *, OBJ_nid2sn, (int n)); 93 MOCK_METHOD(int, ASN1_STRING_length, (const ASN1_STRING *x)); 94 MOCK_METHOD(CfResult, DeepCopyDataToOut, (const char *data, uint32_t len, CfBlob *out)); 95 MOCK_METHOD(char *, CRYPTO_strdup, (const char *str, const char *file, int line)); 96 MOCK_METHOD(X509_NAME *, X509_NAME_new, ()); 97 MOCK_METHOD(int, OBJ_txt2nid, (const char *s)); 98 MOCK_METHOD(int, X509_NAME_add_entry_by_NID, 99 (X509_NAME * name, int nid, int type, const unsigned char *bytes, int len, int loc, int set)); 100 MOCK_METHOD(BIO *, BIO_new, (const BIO_METHOD *type)); 101 MOCK_METHOD(int, X509_print, (BIO * bp, X509 *x)); 102 MOCK_METHOD(int, BIO_ctrl, (BIO * bp, int cmd, long larg, void *parg)); 103 MOCK_METHOD(int, i2d_X509_bio, (BIO * bp, X509 *x509)); 104 MOCK_METHOD(int, PKCS12_parse, (PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, STACK_OF(X509) **ca)); 105 MOCK_METHOD(bool, CheckIsSelfSigned, (const X509 *cert)); 106 107 static NiceMock<X509OpensslMock> &GetInstance(void); 108 static void SetMockFlag(bool flag); 109 static void SetHcfMockFlag(bool flag); 110 static bool GetMockFlag(void); 111 112 X509OpensslMock(); 113 ~X509OpensslMock(); 114 115 private: 116 void SetMockFunDefaultBehaviorPartOne(void); 117 void SetMockFunDefaultBehaviorPartTwo(void); 118 void SetMockFunDefaultBehaviorPartThree(void); 119 void SetMockFunDefaultBehaviorPartFour(void); 120 }; 121 } // namespace CFMock 122 #endif /* CF_MOCK_H */ 123