标签: cbor

我如何反序列化为特征,而不是具体类型?

我正在尝试进行结构序列化,其中字节最终将被发送到管道,重建并在它们上调用方法.

我创建了一个特征,这些结构将适当地实现,我使用serde和serde-cbor进行序列化:

extern crate serde_cbor;
#[macro_use]
extern crate serde_derive;
extern crate serde;

use serde_cbor::ser::*;
use serde_cbor::de::*;

trait Contract {
    fn do_something(&self);
}

#[derive(Debug, Serialize, Deserialize)]
struct Foo {
    x: u32,
    y: u32,
}

#[derive(Debug, Serialize, Deserialize)]
struct Bar {
    data: Vec<Foo>,
}

#[derive(Debug, Serialize, Deserialize)]
struct Baz {
    data: Vec<Foo>,
    tag: String,
}

impl Contract for Bar {
    fn do_something(&self) {
        println!("I'm a Bar and this is my data {:?}", self.data);
    }
}

impl Contract for Baz {
    fn do_something(&self) …
Run Code Online (Sandbox Code Playgroud)

serialization rust cbor serde

10
推荐指数
2
解决办法
780
查看次数

Flatbuffers与CBOR

请帮助建议FlatbuffersCBOR协议的优缺点。这两种二进制格式都声称在它们的网站上是不错的,但是我无法在两者之间做出一些很好的区别。

平面缓冲区:

优点:

  1. 严格输入FlatBuffer,Cap'n proto和其他类似解决方案被视为提高性能的关键点,因为不需要额外的编码/解码。
  2. 数据模型允许使用紧凑的数据结构和快速访问轻松地对类型化的对象进行偏移
  3. FlatBuffers不需要解析/拆包步骤即可生成辅助表示形式,然后您才能访问经常与按对象存储分配相关的数据。

坏处:

  1. 像CBOR一样新的和不标准化的

CBOR

优点:

  1. 可以完全在流中创建和处理而无需额外的内存
  2. 不必预先定义任何模式,因为我们的数据是动态的且可变的
  3. 这是IETF的一项开放国际标准,因此比专有标准更好。
  4. 它设计用于低内存,非转换,基于流的处理,同时还提供其他数据类型的扩展

坏处:

  1. CBOR表示它遵循JSON模型(因此不是严格类型的对象)
  2. 它以相同类型的对象(字符串,整数,映射等)开头。

PS:
与平缓缓冲区相比,感觉CBOR中的类型管理将在性能上付出高昂的代价,但是由于CBOR是标准化协议,因此如果这种差异不大,我倾向于使用它。请让我知道你们都推荐两个,为什么。

json protocol-buffers cbor flatbuffers capnproto

8
推荐指数
3
解决办法
2242
查看次数

Webpack 5+Process未定义由stream-browserify触发

我必须CBOR使用cbor节点模块解码编码数组。

当我启动命令时:

const decodedData = base45.decode(greenpassBody);
const output = pako.inflate(decodedData);
const results = cbor.decodeAllSync(output); // this line
Run Code Online (Sandbox Code Playgroud)

正在触发此错误:

_stream_readable.js:529 Uncaught ReferenceError: process is not defined
    at emitReadable (_stream_readable.js:529)
    at addChunk (_stream_readable.js:303)
    at readableAddChunk (_stream_readable.js:280)
    at NoFilter.Readable.push (_stream_readable.js:241)
    at NoFilter.Transform.push (_stream_transform.js:139)
    at NoFilter._transform (index.js:220)
    at NoFilter.Transform._read (_stream_transform.js:177)
    at NoFilter.Transform._write (_stream_transform.js:164)
    at doWrite (_stream_writable.js:409)
    at writeOrBuffer (_stream_writable.js:398)
Run Code Online (Sandbox Code Playgroud)

stram-browserifypolyfill 触发,需要在我的网络应用程序中使用所有这些包。

当我在网上阅读时,我尝试process在我的 中安装该模块package.json,然后在我的webpack配置文件中我尝试了几种方法:

fallback: {
  stream: require.resolve('stream-browserify'),
  util: require.resolve('util/'),
  zlib: require.resolve('browserify-zlib'),
  assert: …
Run Code Online (Sandbox Code Playgroud)

node.js polyfills cbor webpack-5

6
推荐指数
1
解决办法
9150
查看次数

将固定大小的 Map 序列化为 CBOR

我有以下 JSON:

[
  {
    2: {
      "c": true
    }
  },
  {
    3: {
      "p": 10
    }
  }
]
Run Code Online (Sandbox Code Playgroud)

我想转换为 CBOR 格式。根据 cbor.me 我有以下输出:

82A102A16163F5A103A161700A

但是,当使用 Jackson Binary CBOR Serializer 时,我有以下输出:

82BF02BF6163F5FFFFBF03BF61700AFFFF

这并没有错,但没有优化......我有额外的 4 个不必要的字节添加到它真正可能的位置。

然后我尝试手动序列化 JSON 但结果相同:

@Override
public void serialize(Request value, JsonGenerator jgen, SerializerProvider provider)
        throws IOException, JsonProcessingException {
    jgen.writeStartArray(value.getDataList().size());
    for (Data data : value.getDataList()) {
        jgen.writeStartObject(new Map[1]);
        jgen.writeFieldId(data.getItem());
        jgen.writeStartObject();
        if (data.getObject().getC() != null) {
            jgen.writeBooleanField("c", data.getObject().getC());
        }
        if (data.getObject().getP() != null) {
            jgen.writeNumberField("p", data.getObject().getP());
        }
        jgen.writeEndObject();
        jgen.writeEndObject();
    } …
Run Code Online (Sandbox Code Playgroud)

java serialization json jackson cbor

5
推荐指数
1
解决办法
1083
查看次数

如何以清晰的方式显示 CBOR Web Token 编码的令牌?

我正在努力使新冠疫苗接种二维码的内容清晰可见。找到了如下页面。我只是不太明白如何读取扫描的字符串。

链接/认证API

细绳:HC1:6BFOXN*TS0BI$ZD4N9:9S6RCVN5+O30K3/XIV0W23NTDEPWK G2EP4J0B3KLASMUG8GJL8LLG.3SA3/-2E%5VR5VVBJZILDBZ8D%JTQOL2009UVD0HX2JN*4CY009TX/9F/GZ%5U1MC82*%95HC2FCG2K80H-1GW$5IKKQJO0OPN484SI4UUIMI.J9WVHWVH+ZE/T9MX1HRIWQHCR2HL9EIAESHOP6OH6MN9*QHAO96Y2/*13A5-8E6V59I9BZK6:IR/S09T./0LWTHC0/P6HRTO$9KZ56DE/.QC$QUC0:GOODPUHLO$GAHLW 70SO:GOV636*2. KOKGKZGJMI:TU+MMPZ5OV1 V125VE-4RZ4E%5MK9BM57KPGX7K:7D-M1MO0Q2AQE:CA7ED6LF90I3DA+:E3OGJMSGX8+KL1FD*Y49+574MYKOE1MJ-69KKRB4AC8.C8HKK9NTYV4E1MZ3K1:HF.5E1MRB4WKP/HLIJL8JF8JF172M*8OEB2%7OREF:FO:7-WF11SKCU1MH8FWPVH%L635OBXTY*LPM6B9OBYSH:4Q1BQ:A5+I6:DQR9VKR8 BLHCFQMZA5:PHR14%GV4ZOP50$ A 3

显然这个字符串是由 CBOR Web Token 编码的。有谁知道我如何使用 Java 或 PHP 等对其进行解码?

qr-code cbor

5
推荐指数
1
解决办法
3133
查看次数

从 DER 格式的 Base64 编码公钥到 Python 中的 COSE 密钥

我有一个 DER 格式的 base64 编码的公钥。在Python中,如何将其转换为COSE密钥?

这是我失败的尝试:

from base64 import b64decode
from cose.keys import CoseKey

pubkeyder = "...=="
decCborData.key = CoseKey.decode(b64decode(pubkeyder))
Run Code Online (Sandbox Code Playgroud)

python cryptography asn.1 der cbor

5
推荐指数
1
解决办法
1072
查看次数

无法从 JavaScript 理解 WebAuthn API 错误

我目前正在为 Django 构建一个 AJAX 注册端点,以允许 FIDO2 身份验证(物理硬件密钥登录)。这是来自Yubico 官方 fido2 python 库的示例/文档。

唯一的依赖项是cbor.jsjs-cookie。服务器端的一切现在都在工作,但是,我在调用该navigator.credentials.create方法时不断收到此 JavaScript 错误

TypeError: Failed to execute 'create' on 
'CredentialsContainer': The provided value is not of 
type '(ArrayBuffer or ArrayBufferView)'
Run Code Online (Sandbox Code Playgroud)

编码:

var csrftoken = Cookies.get('csrftoken');
fetch('/register/begin', {
    method: 'POST',
    headers: {
        'X-CSRFToken': csrftoken
    }
}).then(function(response) {
    if(response.ok) {
        return response.arrayBuffer();
    }
    throw new Error('Error getting registration data!');

}).then(CBOR.decode).then(function(options) {
    console.log(options)
    //This line is not working
    return navigator.credentials.create(options);
//More code... complete registration... …
Run Code Online (Sandbox Code Playgroud)

javascript django cbor yubico webauthn

3
推荐指数
1
解决办法
2532
查看次数

长期归档数据格式的二进制序列化(Protobuf、CBOR、MessagePack 等)的注意事项

在对下一代科学数据格式的讨论中,已经确定需要某种类似 JSON 的数据结构(字段的逻辑分组)。此外,最好利用现有的编码而不是使用自定义的二进制结构。对于序列化格式有很多选择。对于那些具有此类编码经验的人的任何指导或见解表示赞赏。

要求:在我们的格式中,数据需要打包在记录中,通常不大于 4096 字节。每条记录必须可独立使用。数据必须在未来几十年内可读。数据归档和交换是通过存储和传输一系列记录来完成的。数据损坏必须只影响损坏的记录,使文件/流/对象中的所有其他记录都可读。

优先级(大致按顺序)是:

  • 稳定性,长期存档使用
  • 性能,主要是阅读
  • 存储不透明斑点的能力
  • 尺寸
  • 简单
  • 广泛的软件(又名库)支持
  • 流能力,在生成记录时传输和可读(如果可能)

我们已经开始研究 Protobuf ( Protocol Buffers RFC )、CBOR ( RFC ) 和一些MessagePack

那些有经验的人提供的任何可以帮助我们确定最合适的信息,或者更重要的是,避免陷阱和死胡同的信息,我们将不胜感激。

提前致谢!

format json protocol-buffers msgpack cbor

3
推荐指数
1
解决办法
8632
查看次数

解码 base45 字符串,生成 cbor 压缩文件

你好,我正在尝试读取我的绿通证书,我知道当你扫描二维码时,它会出现类似 HC1:NHFDFGDF...... 的内容,我也知道这是编码为 base45 的,所以我做了一个小小的 javascript 解码器,这是我的代码:

\n
const base45 = require(\'base45\');\n\n//of course my personal HC1: isnt here\nconst encodedData = \'C0C9BQF2LVU.TMBX4KDL*XD/GPWBILC9GGBYPLR-SAG1CSQ6U7SSQY%SJWLK34JWLG56H0API0TUL:12>\'\n\nconst decodedData = base45.decode(encodedData).toString(\'utf-8\');\n\nconsole.log(decodedData);\n
Run Code Online (Sandbox Code Playgroud)\n

这是回应:

\n
x\xda\xbb\xef\xbf\xbd\xe2\xbb\x88Q\xef\xbf\xbd\xef\xbf\xbdC#?\xef\xbf\xbd\xef\xbf\xbd-E\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdK\xef\xbf\xbdBX\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xd6\xb3I%|\xef\xbf\xbdzl\xef\xbf\xbd\xc8\xbc\xef\xbf\xbdqIbY\xe3\xaa\xa4\xef\xbf\xbd\xef\xbf\xbd\n\xef\xbf\xbd\xd2\xa2<\xef\xbf\xbd\xd2\xb2\xef\xbf\xbdL\xef\xbf\xbd\xef\xbf\xbd ?\xef\xbf\xbd\xef\xbf\xbd0gO+C\xef\xbf\xbd\xef\xbf\xbd+\xef\xbf\xbd`\xef\xbf\xbd\xef\xbf\xbd`\xd7\x800\xef\xbf\xbdH\'W\xef\xbf\xbdP\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdWwe\xcf\xa4\xef\xbf\xbd|\xef\xbf\xbd\xef\xbf\xbdI)yLI)%YFF\xef\xbf\xbd\xef\xbf\xbdf\xef\xbf\xbdFfI\xef\xbf\xbd\xc5\xa5\xef\xbf\xbd\xef\xbf\xbdy\xef\xbf\xbd\xef\xbf\xbd%\xef\xbf\xbdWe\xef\xbf\xbd+\xef\xbf\xbd$*\'\xde\x95\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdkh\xef\xbf\xbdf\xef\xbf\xbd\xef\xbf\xbdI\xef\xbf\xbd9\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdF\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdF\xef\xbf\xbdI\xef\xbf\xbd)LI%\xef\xbf\xbd&\xef\xbf\xbd\xc6\x96fIeY\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd)\xef\xbf\xbdIY\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdF {\n                                                                                                                                            \xef\xbf\xbdsVp\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd*8\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdz\xef\xbf\xbd8*\xef\xbf\xbd\xef\xbf\xbd:;\'\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\n     pMN\xef\xbf\xbd+*\xef\xbf\xbd\xef\xbf\xbd*\xef\xbf\xbd+JN\xef\xbf\xbd+\xef\xbf\xbd\xef\xbf\xbd  \xef\xbf\xbd\n                         \xef\xbf\xbd\xef\xbf\xbd**K-J5\xef\xbf\xbd3\xef\xbf\xbd3\xef\xbf\xbdp8\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdyM]\xef\xbf\xbdo\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdE\xef\xbf\xbd_\xef\xbf\xbd\xef\xbf\xbdO.\xef\xbf\xbd\xcf\xa9\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\n\xef\xbf\xbdg\xef\xbf\xbd\xcb\xbd\xef\xbf\xbd\xef\xbf\xbd\\\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd="\xef\xbf\xbd\xef\xbf\xbd]\xdb\xb7\n\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd{\xef\xbf\xbd\xef\xbf\xbdKq \xef\xbf\xbd\xef\xbf\xbd\n
Run Code Online (Sandbox Code Playgroud)\n

我读到的是,它的 base45 解码将导致 zlib 压缩文件,其中解压将导致 CBOR Web 令牌,但我卡住了,你能帮助我吗?这个结果正常吗?我还在学习

\n

javascript qr-code zlib certificate cbor

3
推荐指数
1
解决办法
1万
查看次数