Can I use openssl asynchronously?

Hi there.

I’m working on a feature, which needs to receive a bunch of parts of a
file (from resumableJS), and then encrypt them, upload them to S3, and
stich them together.

Firstly: The files are extremely large - thus the need for resumableJS
on the front-end - so the application cannot keep them in memory. This
means that I need to encrypt each part when I receive it, and them push
it to S3 directly using a multipart upload.

I’m using this implementation of the AES-256-CBC algorithm:

ruby

data = aes.update(part)
data << aes.final if final_part?
s3_object.write(data)

Because of the asynchronous nature of the code, I can’t be certain to
receive the parts in order. This means, that I might receive the last
part in the middle, which means I will be calling final before the
actual final part of the encryption.

So my question is: Does final actually finalize the encryption in the
sense that you cannot use the algorithm instance after it has been
called? or?

Best regards, and thanks in advance

Emil