diff options
-rw-r--r-- | ossl_cipher.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/ossl_cipher.c b/ossl_cipher.c index 43a8a00..2054c1c 100644 --- a/ossl_cipher.c +++ b/ossl_cipher.c @@ -369,6 +369,19 @@ CIPHER_0ARG_INT(key_length) CIPHER_0ARG_INT(iv_length) CIPHER_0ARG_INT(block_size) +static VALUE +ossl_cipher_set_key_length(VALUE self, VALUE key_length) +{ + EVP_CIPHER_CTX *ctx; + + GetCipher(self, ctx); + + if (EVP_CIPHER_CTX_set_key_length(ctx, NUM2INT(key_length)) != 1) + ossl_raise(eCipherError, NULL); + + return key_length; +} + /* * INIT */ @@ -399,10 +412,7 @@ Init_ossl_cipher(void) rb_define_method(cCipher, "key=", ossl_cipher_set_key, 1); rb_define_method(cCipher, "key_len", ossl_cipher_key_length, 0); -/* - * TODO - * int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); - */ + rb_define_method(cCipher, "key_len=", ossl_cipher_set_key_length, 1); rb_define_method(cCipher, "iv=", ossl_cipher_set_iv, 1); rb_define_method(cCipher, "iv_len", ossl_cipher_iv_length, 0); |