SigningKey#sign(message) is using String#[] to truncate the output from sign_attached(message) which yields unpredictable results according to the message encoding.
[43] pry(main)> data.encoding
=> #<Encoding:UTF-8>
[44] pry(main)> signing_key.sign(data).length
=> 64
[45] pry(main)> signing_key.sign(data).bytesize
=> 77
[53] pry(main)> signing_key.sign(data.force_encoding('ASCII-8BIT')).bytesize
=> 64