EVP AES Wrap

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

EVP AES Wrap

Luís Martins
Hi,

    I'm trying to use the EVP AES wrap implementations from openssl (e.g. EVP_aes_128/192/256_wrap()) but I'm getting the following error in EVP_EncryptInit_ex() f:
    error:0607B0AA:digital envelope routines:EVP_CipherInit_ex:wrap mode not allowed
    I've search the documentation for examples or guidance but I couldn't find anything related to this.
    Any experienced the same issue ?

    My pseudo code is:

        EVP_CIPHER_CTX ctx;
        EVP_CIPHER_CTX_init(&ctx);
        if (EVP_EncryptInit_ex(&ctx, EVP_aes_128_wrap(), 0, keyEncriptionKey, iv) != 1)
             // process error
        if ( EVP_EncryptUpdate(&ctx, bufferOut, &processedSize, plaintext, plaintextSize) != 1)
             // process error
        if (EVP_EncryptFinal_ex(&ctx, bufferOut + processedSize, &tmpSize) != 1)
             // process error
        EVP_CIPHER_CTX_cleanup(&ctx);

Regards,
Luís

--
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users
Reply | Threaded
Open this post in threaded view
|

Re: EVP AES Wrap

Matt Caswell-2


On 16/05/18 18:55, Luís Martins wrote:

> Hi,
>
>     I'm trying to use the EVP AES wrap implementations from openssl
> (e.g. EVP_aes_128/192/256_wrap()) but I'm getting the following error in
> EVP_EncryptInit_ex() f:
>     error:0607B0AA:digital envelope routines:EVP_CipherInit_ex:wrap mode
> not allowed
>     I've search the documentation for examples or guidance but I
> couldn't find anything related to this.
>     Any experienced the same issue ?

You need to enable wrap mode:

EVP_CIPHER_CTX_set_flags(&ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);

The EVP encrypt routines set an expectation about how long the output
might be for a given input:

"EVP_EncryptUpdate() encrypts B<inl> bytes from the buffer B<in> and
writes the encrypted version to B<out>. This function can be called
multiple times to encrypt successive blocks of data. The amount
of data written depends on the block alignment of the encrypted data:
as a result the amount of data written may be anything from zero bytes
to (inl + cipher_block_size - 1) so B<out> should contain sufficient
room."

The wrap modes do not obey this rule and may return more data, so you
have to explicitly enable the mode to say that you are prepared for the
output.

Matt


>
>     My pseudo code is:
>
>         EVP_CIPHER_CTX ctx;
>         EVP_CIPHER_CTX_init(&ctx);
>         if (EVP_EncryptInit_ex(&ctx, EVP_aes_128_wrap(), 0,
> keyEncriptionKey, iv) != 1)
>              // process error
>         if ( EVP_EncryptUpdate(&ctx, bufferOut, &processedSize,
> plaintext, plaintextSize) != 1)
>              // process error
>         if (EVP_EncryptFinal_ex(&ctx, bufferOut + processedSize,
> &tmpSize) != 1)
>              // process error
>         EVP_CIPHER_CTX_cleanup(&ctx);
>
> Regards,
> Luís
>
>
--
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users
Reply | Threaded
Open this post in threaded view
|

Re: EVP AES Wrap

Luís Martins
Thanks Matt, it works fine now.

Regards,
Luís


On Thu, May 17, 2018 at 10:09 AM Matt Caswell <[hidden email]> wrote:


On 16/05/18 18:55, Luís Martins wrote:
> Hi,
>
>     I'm trying to use the EVP AES wrap implementations from openssl
> (e.g. EVP_aes_128/192/256_wrap()) but I'm getting the following error in
> EVP_EncryptInit_ex() f:
>     error:0607B0AA:digital envelope routines:EVP_CipherInit_ex:wrap mode
> not allowed
>     I've search the documentation for examples or guidance but I
> couldn't find anything related to this.
>     Any experienced the same issue ?

You need to enable wrap mode:

EVP_CIPHER_CTX_set_flags(&ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);

The EVP encrypt routines set an expectation about how long the output
might be for a given input:

"EVP_EncryptUpdate() encrypts B<inl> bytes from the buffer B<in> and
writes the encrypted version to B<out>. This function can be called
multiple times to encrypt successive blocks of data. The amount
of data written depends on the block alignment of the encrypted data:
as a result the amount of data written may be anything from zero bytes
to (inl + cipher_block_size - 1) so B<out> should contain sufficient
room."

The wrap modes do not obey this rule and may return more data, so you
have to explicitly enable the mode to say that you are prepared for the
output.

Matt


>
>     My pseudo code is:
>
>         EVP_CIPHER_CTX ctx;
>         EVP_CIPHER_CTX_init(&ctx);
>         if (EVP_EncryptInit_ex(&ctx, EVP_aes_128_wrap(), 0,
> keyEncriptionKey, iv) != 1)
>              // process error
>         if ( EVP_EncryptUpdate(&ctx, bufferOut, &processedSize,
> plaintext, plaintextSize) != 1)
>              // process error
>         if (EVP_EncryptFinal_ex(&ctx, bufferOut + processedSize,
> &tmpSize) != 1)
>              // process error
>         EVP_CIPHER_CTX_cleanup(&ctx);
>
> Regards,
> Luís
>
>
--
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users

--
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users