@@ -3104,6 +3104,93 @@ void phongo_clientencryption_create_datakey(php_phongo_clientencryption_t* clien
31043104 mongoc_client_encryption_datakey_opts_destroy (opts );
31053105 }
31063106} /* }}} */
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+ } /* }}} */
31073194#else /* MONGOC_ENABLE_CLIENT_SIDE_ENCRYPTION */
31083195static void phongo_throw_exception_no_cse (php_phongo_error_domain_t domain , const char * message TSRMLS_DC ) /* {{{ */
31093196{
@@ -3134,6 +3221,12 @@ void phongo_clientencryption_create_datakey(php_phongo_clientencryption_t* clien
31343221 phongo_throw_exception_no_cse (PHONGO_ERROR_RUNTIME , "Cannot create encryption key." TSRMLS_CC );
31353222}
31363223/* }}} */
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+ /* }}} */
31373230#endif
31383231
31393232void phongo_manager_init (php_phongo_manager_t * manager , const char * uri_string , zval * options , zval * driverOptions TSRMLS_DC ) /* {{{ */
0 commit comments