@@ -3104,6 +3104,93 @@ void phongo_clientencryption_create_datakey(php_phongo_clientencryption_t* clien
3104
3104
mongoc_client_encryption_datakey_opts_destroy (opts );
3105
3105
}
3106
3106
} /* }}} */
3107
+
3108
+ static mongoc_client_encryption_encrypt_opts_t * phongo_clientencryption_encrypt_opts_from_zval (zval * options TSRMLS_DC ) /* {{{ */
3109
+ {
3110
+ mongoc_client_encryption_encrypt_opts_t * opts ;
3111
+
3112
+ opts = mongoc_client_encryption_encrypt_opts_new ();
3113
+
3114
+ if (!options || Z_TYPE_P (options ) != IS_ARRAY ) {
3115
+ return opts ;
3116
+ }
3117
+
3118
+ if (php_array_existsc (options , "keyId" )) {
3119
+ bson_value_t keyid ;
3120
+
3121
+ php_phongo_zval_to_bson_value (php_array_fetchc (options , "keyId" ), PHONGO_BSON_NONE , & keyid TSRMLS_CC );
3122
+ if (EG (exception )) {
3123
+ goto cleanup ;
3124
+ }
3125
+
3126
+ mongoc_client_encryption_encrypt_opts_set_keyid (opts , & keyid );
3127
+ }
3128
+
3129
+ if (php_array_existsc (options , "keyAltName" )) {
3130
+ char * keyaltname ;
3131
+ int plen ;
3132
+ zend_bool pfree ;
3133
+
3134
+ keyaltname = php_array_fetch_string (options , "keyAltName" , & plen , & pfree );
3135
+ mongoc_client_encryption_encrypt_opts_set_keyaltname (opts , keyaltname );
3136
+
3137
+ if (pfree ) {
3138
+ str_efree (keyaltname );
3139
+ }
3140
+ }
3141
+
3142
+ if (php_array_existsc (options , "algorithm" )) {
3143
+ char * algorithm ;
3144
+ int plen ;
3145
+ zend_bool pfree ;
3146
+
3147
+ algorithm = php_array_fetch_string (options , "algorithm" , & plen , & pfree );
3148
+ mongoc_client_encryption_encrypt_opts_set_algorithm (opts , algorithm );
3149
+
3150
+ if (pfree ) {
3151
+ str_efree (algorithm );
3152
+ }
3153
+ }
3154
+
3155
+ return opts ;
3156
+
3157
+ cleanup :
3158
+ if (opts ) {
3159
+ mongoc_client_encryption_encrypt_opts_destroy (opts );
3160
+ }
3161
+
3162
+ return NULL ;
3163
+ } /* }}} */
3164
+
3165
+ void phongo_clientencryption_encrypt (php_phongo_clientencryption_t * clientencryption , zval * zvalue , zval * zciphertext , zval * options TSRMLS_DC ) /* {{{ */
3166
+ {
3167
+ mongoc_client_encryption_encrypt_opts_t * opts ;
3168
+ bson_value_t ciphertext , value ;
3169
+ bson_error_t error = { 0 };
3170
+
3171
+ php_phongo_zval_to_bson_value (zvalue , PHONGO_BSON_NONE , & value TSRMLS_CC );
3172
+
3173
+ opts = phongo_clientencryption_encrypt_opts_from_zval (options TSRMLS_CC );
3174
+ if (!opts ) {
3175
+ /* Exception already thrown */
3176
+ goto cleanup ;
3177
+ }
3178
+
3179
+ if (!mongoc_client_encryption_encrypt (clientencryption -> client_encryption , & value , opts , & ciphertext , & error )) {
3180
+ phongo_throw_exception_from_bson_error_t (& error TSRMLS_CC );
3181
+ goto cleanup ;
3182
+ }
3183
+
3184
+ if (!php_phongo_bson_value_to_zval (& ciphertext , zciphertext )) {
3185
+ /* Exception already thrown */
3186
+ goto cleanup ;
3187
+ }
3188
+
3189
+ cleanup :
3190
+ if (opts ) {
3191
+ mongoc_client_encryption_encrypt_opts_destroy (opts );
3192
+ }
3193
+ } /* }}} */
3107
3194
#else /* MONGOC_ENABLE_CLIENT_SIDE_ENCRYPTION */
3108
3195
static void phongo_throw_exception_no_cse (php_phongo_error_domain_t domain , const char * message TSRMLS_DC ) /* {{{ */
3109
3196
{
@@ -3134,6 +3221,12 @@ void phongo_clientencryption_create_datakey(php_phongo_clientencryption_t* clien
3134
3221
phongo_throw_exception_no_cse (PHONGO_ERROR_RUNTIME , "Cannot create encryption key." TSRMLS_CC );
3135
3222
}
3136
3223
/* }}} */
3224
+
3225
+ void phongo_clientencryption_encrypt (php_phongo_clientencryption_t * clientencryption , zval * zvalue , zval * zciphertext , zval * options TSRMLS_DC ) /* {{{ */
3226
+ {
3227
+ phongo_throw_exception_no_cse (PHONGO_ERROR_RUNTIME , "Cannot encrypt value." TSRMLS_CC );
3228
+ }
3229
+ /* }}} */
3137
3230
#endif
3138
3231
3139
3232
void phongo_manager_init (php_phongo_manager_t * manager , const char * uri_string , zval * options , zval * driverOptions TSRMLS_DC ) /* {{{ */
0 commit comments