cbor-ruby
cbor-ruby copied to clipboard
Decode does not work for CBOR produced by Kotlin serializer
I used Kotlin's KotlinxSerializationCbor
to generate following CBOR, encoding it in base64 urlsafe format:
v2dzdWNjZXNz9G5taXNzaW5nRmFjdG9yc5-fn2h3ZWJhdXRobr____-fn2d5dWJpb3Rwv_______
I can decode it using cbor2pretty.rb
tool with the following command:
echo v2dzdWNjZXNz9G5taXNzaW5nRmFjdG9yc5-fn2h3ZWJhdXRobr____-fn2d5dWJpb3Rwv_______ \
| basenc -d --base64url | cbor2pretty.rb
Here is the result:
bf # map(*)
67 # text(7)
73756363657373 # "success"
f4 # primitive(20)
6e # text(14)
6d697373696e67466163746f7273 # "missingFactors"
9f # array(*)
9f # array(*)
9f # array(*)
68 # text(8)
776562617574686e # "webauthn"
bf # map(*)
ff # primitive(*)
ff # primitive(*)
ff # primitive(*)
9f # array(*)
9f # array(*)
67 # text(7)
797562696f7470 # "yubiotp"
bf # map(*)
ff # primitive(*)
ff # primitive(*)
ff # primitive(*)
ff # primitive(*)
ff # primitive(*)
This indicates to me that this is a valid CBOR and that probably Kotlin serializer is not at fault.
When I try to decode this CBOR using this library using code snippet:
require 'cbor'
require 'base64'
CBOR.decode(Base64.urlsafe_decode64('v2dzdWNjZXNz9G5taXNzaW5nRmFjdG9yc5-fn2h3ZWJhdXRobr____-fn2d5dWJpb3Rwv_______'))
I get error:
in `decode': invalid byte (CBOR::MalformedFormatError)
Is this library not supporting map(*)
and/or array(*)
elements? If this is the case, is it possible to add support for such elements?
On 2023-11-09, at 03:58, denisenkom @.***> wrote:
require 'cbor' require 'base64' CBOR.decode(Base64.urlsafe_decode64('v2dzdWNjZXNz9G5taXNzaW5nRmFjdG9yc5-fn2h3ZWJhdXRobr____-fn2d5dWJpb3Rwv_______'))
require 'cbor-pure' require 'base64' CBOR.decode(Base64.urlsafe_decode64('v2dzdWNjZXNz9G5taXNzaW5nRmFjdG9yc5-fn2h3ZWJhdXRobr____-fn2d5dWJpb3Rwv_______'))
=> {"success"=>false, "missingFactors"=>[[["webauthn", {}]], [["yubiotp", {}]]]}
Clearly, we have a bug here. Thank you for reporting.
Grüße, Carsten