GPG расшифровывает фрагмент из потока

Я пытаюсь передать несколько больших симметрично зашифрованных файлов .csv.gpg (40 ГБ + каждый) из S3 в gnupg в выходной поток.

Я хотел бы обрабатывать файлы по частям, используя потоки, чтобы нам никогда не приходилось загружать весь зашифрованный/расшифрованный файл на диск или в память.

Вот пример использования AWS Ruby S3 SDK для загрузки фрагментов объекта и передачи их в gnupg для расшифровки, используя Ruby 2.5.0 с жемчуг ruby-gpgme.

crypto = GPGME::Crypto.new

s3_client.get_object(bucket: BUCKET, key: KEY) do |chunk|
  crypto.decrypt(chunk, password: PASSWORD, output: $stdout)
end

При выполнении этого я вижу действительные расшифрованные данные CSV в STDOUT (хорошо!) До тех пор, пока они не завершатся сбоем в конце первого фрагмента:

~/.rvm/gems/ruby-2.5.0/gems/gpgme-2.0.14/lib/gpgme/ctx.rb:435:in `decrypt_verify': Расшифровка не удалась (GPGME::Error::DecryptFailed)

Вот где я застрял.

  • Может ли gnupg расшифровывать куски за раз или он должен читать весь файл перед записью вывода?
  • Должны ли куски иметь определенный размер и/или каким-либо образом ограничиваться?

Любая обратная связь будет принята с благодарностью.


person doremi    schedule 14.02.2018    source источник
comment
Я предполагаю, что для расшифровки то же самое, что и для шифрования; не могли бы вы указать, так ли это?   -  person Maarten Bodewes    schedule 18.02.2018
comment
Если весь файл зашифрован как одно целое, вам понадобится весь зашифрованный текст, но если каждый фрагмент зашифрован отдельно, это должно быть возможно. Нам действительно нужно больше подробностей о структуре данных (хотя нам не нужно знать, что представляет собой расшифрованное содержимое).   -  person Ben    schedule 31.03.2018