android13/external/rust/crates/coset
liiir1985 7f62dcda9f initial 2024-06-22 20:45:49 +08:00
..
.github initial 2024-06-22 20:45:49 +08:00
examples initial 2024-06-22 20:45:49 +08:00
patches initial 2024-06-22 20:45:49 +08:00
scripts initial 2024-06-22 20:45:49 +08:00
src initial 2024-06-22 20:45:49 +08:00
.cargo_vcs_info.json initial 2024-06-22 20:45:49 +08:00
.codecov.yml initial 2024-06-22 20:45:49 +08:00
.mdl-style.rb initial 2024-06-22 20:45:49 +08:00
.mdlrc initial 2024-06-22 20:45:49 +08:00
.rustfmt.toml initial 2024-06-22 20:45:49 +08:00
AUTHORS initial 2024-06-22 20:45:49 +08:00
Android.bp initial 2024-06-22 20:45:49 +08:00
CHANGELOG.md initial 2024-06-22 20:45:49 +08:00
CONTRIBUTING.md initial 2024-06-22 20:45:49 +08:00
Cargo.lock initial 2024-06-22 20:45:49 +08:00
Cargo.toml initial 2024-06-22 20:45:49 +08:00
Cargo.toml.orig initial 2024-06-22 20:45:49 +08:00
LICENSE initial 2024-06-22 20:45:49 +08:00
METADATA initial 2024-06-22 20:45:49 +08:00
MODULE_LICENSE_APACHE2 initial 2024-06-22 20:45:49 +08:00
OWNERS initial 2024-06-22 20:45:49 +08:00
README.md initial 2024-06-22 20:45:49 +08:00
TEST_MAPPING initial 2024-06-22 20:45:49 +08:00
deny.toml initial 2024-06-22 20:45:49 +08:00
dependabot.yml initial 2024-06-22 20:45:49 +08:00

README.md

COSET

Docs CI Status codecov

This crate holds a set of Rust types for working with CBOR Object Signing and Encryption (COSE) objects, as defined in RFC 8152. It builds on the core CBOR parsing functionality from the ciborium crate.

See crate docs, or the signature example for documentation on how to use the code.

This repo is under construction and so details of the API and the code may change without warning.

no_std Support

This crate supports no_std, but uses the alloc crate.

Minimum Supported Rust Version

MSRV is 1.56 (the main ciborium dependency is edition="2021")

Integer Ranges

CBOR supports integers in the range:

[-18_446_744_073_709_551_616, -1]  [0, 18_446_744_073_709_551_615]

which is [-264, -1] [0, 264 - 1].

This does not map onto a single Rust integer type, so different CBOR crates take different approaches.

  • The serde_cbor crate uses a single i128 integer type for all integer values, which means that all CBOR integer values can be expressed, but there are also i128 values that cannot be encoded in CBOR. This also means that data size is larger.
  • The ciborium also uses a single i128 integer type internally, but wraps it in its own Integer type and only implements TryFrom (not From) for i128 / u128 conversions so that unrepresentable numbers can be rejected.
  • The sk-cbor crate uses distinct types:
    • positive numbers as u64, covering [0, 264 - 1]
    • negative numbers as i64, covering [-263, -1] (which means that some theoretically-valid large negative values are not represented).

This crate uses a single type to encompass both positive and negative values, but uses i64 for that type to keep data sizes smaller. This means that:

  • positive numbers in i64 cover [0, 263 - 1]
  • negative numbers in i64 cover [-263, -1]

and so there are large values both positive and negative which are not supported by this crate.

Working on the Code

Local coding conventions are enforced by the continuous integration jobs and include:

  • Build cleanly and pass all tests.
  • Free of Clippy warnings.
  • Formatted with rustfmt using the local rustfmt.toml settings.
  • Compliance with local conventions:
    • All TODO markers should be of form TODO(#99) and refer to an open GitHub issue.
    • Calls to functions that can panic (panic!, unwrap, expect) should have a comment on the same line in the form // safe: reason (or /* safe: reason */) to document the reason why panicking is acceptable.

Disclaimer

This is not an officially supported Google product.