hiera-eyaml icon indicating copy to clipboard operation
hiera-eyaml copied to clipboard

Binary encrypt on Windows provides malformed binary when decrypted.

Open thatrevguy opened this issue 9 years ago • 4 comments

When encrypting a binary on Windows the resulting decrypted content does not provide a working binary.

Non-working example on Windows with Ruby 1.8.7 using Powershell:

$String = eyaml encrypt -f certificate.pfx -o example
eyaml decrypt -s $String > certificate_copy.pfx

Working example on CentOS 6.6 with Ruby 1.8.7 using Bash:

String=$(eyaml encrypt -f certificate.pfx -o example)
eyaml decrypt -s $String > certificate_copy.pfx

thatrevguy avatar Jun 29 '15 20:06 thatrevguy

Does eyaml work properly with strings on your system? I'm guessing that it might be something to do with the way powershell (or maybe ruby) streams/encodes binaries when it reads or writes, but I'm not that familiar with powershell so I'd have to spend some time playing around, unless someone else has any great ideas!?

TomPoulton avatar Sep 15 '15 16:09 TomPoulton

Most likely this is a result of newline issues. This would probably be fixed by replacing line 60 of encrypt.rb with the following:

File.open(options[:file], 'rb') do |file|
  file.read
end

@hathoward: Would you be able to test this out? I can, but it will have to wait until at least tonight if not longer.

elyscape avatar Nov 04 '15 21:11 elyscape

Actually, hm, there might be other places where we'd need to set things as binary. I'll need to do some digging.

elyscape avatar Nov 04 '15 21:11 elyscape

I stumbled upon this while trying to encrypt Kerberos keytab files under Windows : the file gets corrupted when read from disk, because the (implicit) "mode" when reading data with File.read() is "text" and not "binary".

If I modify line 61 of encrypt.rb similar to what @elyscape suggested, the encrypted data suddenly doubles in size, because it is no longer truncated randomly in the middle :-)

File.read options[:file], mode: 'rb'

This fix does change the way line endings are handled by Ruby, so it could cause regressions for some usage. Maybe add some heuristics to handle binary and text files differently?

jeremie-pierson avatar Mar 15 '21 14:03 jeremie-pierson