pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/devel



Module Name:    pkgsrc
Committed By:   nikita
Date:           Tue May  9 21:58:30 UTC 2023

Modified Files:
        pkgsrc/devel: Makefile
Added Files:
        pkgsrc/devel/flip-link: DESCR Makefile PLIST cargo-depends.mk distinfo

Log Message:
flip-link: import as devel/flip-link version 0.1.5

flip-link adds zero-cost stack overflow protection to your embedded programs.

The problem

Bare metal Rust programs may not be memory safe in presence of stack overflows.
For example, this is the case for Rust programs based on v0.6.x of the
cortex-m-rt crate.

The following program, which contains no unsafe code block, can run into
undefined behavior if it reaches a stack overflow condition.

// static variables placed in the .bss / .data sections
static FLAG1: AtomicBool = AtomicU32::new(false); // .bss
static FLAG2: AtomicBool = AtomicU32::new(true);  // .data

fn main() {
    let _x = fib(100);
}

#[inline(never)]
fn fib(n: u32) -> u32 {
    // allocate and initialize 4 kilobytes of stack memory
    let _use_stack = [0xAA; 1024];

    if n < 2 {
        1
    } else {
        fib(n - 1) + fib(n - 2) // recursion
    }
}

#[interrupt]
fn interrupt_handler() {
    // does some operation with `FLAG1` and `FLAG2`
}

The function call stack, also known as the "stack", grows downwards on function
calls and when local variables (e.g. let x) are created (these variables are
also placed on the stack).

If the stack grows too large it collides with the .bss + .data region, which
contains all the program's static variables. The collision results in the
static variables being overwritten with unrelated data. This can result in
the program observing the static variables in an invalid state: for example
an AtomicBool may hold the value 3 -- this is undefined behavior because the
Rust ABI expects this single-byte variable to be either 0 or 1.

The solution

One potential solution is to change the memory layout of the program and place
the stack below the .bss+.data region.

With this flipped memory layout the stack cannot collide with the static
variables. Instead it will collide with the boundary of the physical RAM
memory region. In the ARM Cortex-M architecture, trying to read or write past
the boundaries of the RAM region produces a "hardware exception".
The cortex-m-rt crate provides an API to handle this condition: a HardFault
exception handler can be defined; this "handler" (function) will be executed
when the invalid memory operation is attempted.

flip-link implements this stack overflow solution. Linking your program with
flip-link produces the flipped memory layout, which is memory safe in presence
of stack overflows.

Architecture support

flip-link is known to work with ARM Cortex-M programs that link to version
0.6.x of the cortex-m-rt crate and are linked using the linker shipped with the
Rust toolchain (LLD). At this time, it hasn't been tested with other
architectures or runtime crates.


To generate a diff of this commit:
cvs rdiff -u -r1.3989 -r1.3990 pkgsrc/devel/Makefile
cvs rdiff -u -r0 -r1.1 pkgsrc/devel/flip-link/DESCR \
    pkgsrc/devel/flip-link/Makefile pkgsrc/devel/flip-link/PLIST \
    pkgsrc/devel/flip-link/cargo-depends.mk pkgsrc/devel/flip-link/distinfo

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/devel/Makefile
diff -u pkgsrc/devel/Makefile:1.3989 pkgsrc/devel/Makefile:1.3990
--- pkgsrc/devel/Makefile:1.3989        Tue May  9 21:28:05 2023
+++ pkgsrc/devel/Makefile       Tue May  9 21:58:30 2023
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.3989 2023/05/09 21:28:05 nikita Exp $
+# $NetBSD: Makefile,v 1.3990 2023/05/09 21:58:30 nikita Exp $
 #
 
 COMMENT=       Development utilities
@@ -368,6 +368,7 @@ SUBDIR+=    flatzebra
 SUBDIR+=       flex
 SUBDIR+=       flexdock
 SUBDIR+=       flim
+SUBDIR+=       flip-link
 SUBDIR+=       floskell
 SUBDIR+=       fortran-utils
 SUBDIR+=       fossil

Added files:

Index: pkgsrc/devel/flip-link/DESCR
diff -u /dev/null pkgsrc/devel/flip-link/DESCR:1.1
--- /dev/null   Tue May  9 21:58:30 2023
+++ pkgsrc/devel/flip-link/DESCR        Tue May  9 21:58:30 2023
@@ -0,0 +1,70 @@
+flip-link adds zero-cost stack overflow protection to your embedded programs.
+
+The problem
+
+Bare metal Rust programs may not be memory safe in presence of stack overflows.
+For example, this is the case for Rust programs based on v0.6.x of the
+cortex-m-rt crate.
+
+The following program, which contains no unsafe code block, can run into
+undefined behavior if it reaches a stack overflow condition.
+
+// static variables placed in the .bss / .data sections
+static FLAG1: AtomicBool = AtomicU32::new(false); // .bss
+static FLAG2: AtomicBool = AtomicU32::new(true);  // .data
+
+fn main() {
+    let _x = fib(100);
+}
+
+#[inline(never)]
+fn fib(n: u32) -> u32 {
+    // allocate and initialize 4 kilobytes of stack memory
+    let _use_stack = [0xAA; 1024];
+
+    if n < 2 {
+        1
+    } else {
+        fib(n - 1) + fib(n - 2) // recursion
+    }
+}
+
+#[interrupt]
+fn interrupt_handler() {
+    // does some operation with `FLAG1` and `FLAG2`
+}
+
+The function call stack, also known as the "stack", grows downwards on function
+calls and when local variables (e.g. let x) are created (these variables are
+also placed on the stack).
+
+If the stack grows too large it collides with the .bss + .data region, which
+contains all the program's static variables. The collision results in the
+static variables being overwritten with unrelated data. This can result in
+the program observing the static variables in an invalid state: for example
+an AtomicBool may hold the value 3 -- this is undefined behavior because the
+Rust ABI expects this single-byte variable to be either 0 or 1.
+
+The solution
+
+One potential solution is to change the memory layout of the program and place
+the stack below the .bss+.data region.
+
+With this flipped memory layout the stack cannot collide with the static
+variables. Instead it will collide with the boundary of the physical RAM
+memory region. In the ARM Cortex-M architecture, trying to read or write past
+the boundaries of the RAM region produces a "hardware exception".
+The cortex-m-rt crate provides an API to handle this condition: a HardFault
+exception handler can be defined; this "handler" (function) will be executed
+when the invalid memory operation is attempted.
+
+flip-link implements this stack overflow solution. Linking your program with
+flip-link produces the flipped memory layout, which is memory safe in presence
+of stack overflows.
+
+Architecture support
+
+flip-link is known to work with ARM Cortex-M programs that link to version
+0.6.x of the cortex-m-rt crate and are linked using the linker shipped with the
+Rust toolchain (LLD). At this time, it hasn't been tested with other
+architectures or runtime crates.
Index: pkgsrc/devel/flip-link/Makefile
diff -u /dev/null pkgsrc/devel/flip-link/Makefile:1.1
--- /dev/null   Tue May  9 21:58:30 2023
+++ pkgsrc/devel/flip-link/Makefile     Tue May  9 21:58:30 2023
@@ -0,0 +1,22 @@
+# $NetBSD: Makefile,v 1.1 2023/05/09 21:58:30 nikita Exp $
+
+DISTNAME=      flip-link-0.1.5
+CATEGORIES=    devel
+MAINTAINER=    nikita%NetBSD.org@localhost
+MASTER_SITES=  ${MASTER_SITE_GITHUB:=knurling-rs/}
+GITHUB_PROJECT=        flip-link
+GITHUB_TAG=    v${PKGVERSION_NOREV}
+
+HOMEPAGE=      https://github.com/knurling-rs/flip-link/
+COMMENT=       Zero-cost stack overflow protection for embedded programs
+LICENSE=       apache-2.0 OR mit
+
+.include "cargo-depends.mk"
+
+INSTALLATION_DIRS=     bin
+
+do-install:
+       ${INSTALL_PROGRAM} ${WRKSRC}/target/release/flip-link ${DESTDIR}${PREFIX}/bin
+
+.include "../../lang/rust/cargo.mk"
+.include "../../mk/bsd.pkg.mk"
Index: pkgsrc/devel/flip-link/PLIST
diff -u /dev/null pkgsrc/devel/flip-link/PLIST:1.1
--- /dev/null   Tue May  9 21:58:30 2023
+++ pkgsrc/devel/flip-link/PLIST        Tue May  9 21:58:30 2023
@@ -0,0 +1,2 @@
+@comment $NetBSD: PLIST,v 1.1 2023/05/09 21:58:30 nikita Exp $
+bin/flip-link
Index: pkgsrc/devel/flip-link/cargo-depends.mk
diff -u /dev/null pkgsrc/devel/flip-link/cargo-depends.mk:1.1
--- /dev/null   Tue May  9 21:58:30 2023
+++ pkgsrc/devel/flip-link/cargo-depends.mk     Tue May  9 21:58:30 2023
@@ -0,0 +1,30 @@
+# $NetBSD: cargo-depends.mk,v 1.1 2023/05/09 21:58:30 nikita Exp $
+
+CARGO_CRATE_DEPENDS+=  assert_cmd-2.0.0
+CARGO_CRATE_DEPENDS+=  bstr-0.2.16
+CARGO_CRATE_DEPENDS+=  cfg-if-1.0.0
+CARGO_CRATE_DEPENDS+=  difflib-0.4.0
+CARGO_CRATE_DEPENDS+=  doc-comment-0.3.3
+CARGO_CRATE_DEPENDS+=  either-1.6.1
+CARGO_CRATE_DEPENDS+=  env_logger-0.9.0
+CARGO_CRATE_DEPENDS+=  getrandom-0.2.3
+CARGO_CRATE_DEPENDS+=  itertools-0.10.1
+CARGO_CRATE_DEPENDS+=  lazy_static-1.4.0
+CARGO_CRATE_DEPENDS+=  libc-0.2.99
+CARGO_CRATE_DEPENDS+=  log-0.4.14
+CARGO_CRATE_DEPENDS+=  memchr-2.4.1
+CARGO_CRATE_DEPENDS+=  object-0.26.1
+CARGO_CRATE_DEPENDS+=  predicates-2.0.2
+CARGO_CRATE_DEPENDS+=  predicates-core-1.0.2
+CARGO_CRATE_DEPENDS+=  predicates-tree-1.0.3
+CARGO_CRATE_DEPENDS+=  proc-macro2-1.0.28
+CARGO_CRATE_DEPENDS+=  quote-1.0.9
+CARGO_CRATE_DEPENDS+=  regex-automata-0.1.10
+CARGO_CRATE_DEPENDS+=  rstest-0.11.0
+CARGO_CRATE_DEPENDS+=  rustc_version-0.4.0
+CARGO_CRATE_DEPENDS+=  semver-1.0.4
+CARGO_CRATE_DEPENDS+=  syn-1.0.74
+CARGO_CRATE_DEPENDS+=  treeline-0.1.0
+CARGO_CRATE_DEPENDS+=  unicode-xid-0.2.2
+CARGO_CRATE_DEPENDS+=  wait-timeout-0.2.0
+CARGO_CRATE_DEPENDS+=  wasi-0.10.2+wasi-snapshot-preview1
Index: pkgsrc/devel/flip-link/distinfo
diff -u /dev/null pkgsrc/devel/flip-link/distinfo:1.1
--- /dev/null   Tue May  9 21:58:30 2023
+++ pkgsrc/devel/flip-link/distinfo     Tue May  9 21:58:30 2023
@@ -0,0 +1,89 @@
+$NetBSD: distinfo,v 1.1 2023/05/09 21:58:30 nikita Exp $
+
+BLAKE2s (assert_cmd-2.0.0.crate) = f8c69237e4797ff0ade4a5c4387b9dce0a976323754e476f1c9c38340811fffa
+SHA512 (assert_cmd-2.0.0.crate) = 0dbe82fb9165520b04ef0bde20ff33f3d709ae7ca4b02339ce79d751dbea07b730b8dc00f2d232cc1bd17ee5f04d4d8aed903c4e7d8d827b51fd538958fdade7
+Size (assert_cmd-2.0.0.crate) = 27912 bytes
+BLAKE2s (bstr-0.2.16.crate) = 541d36618e387c3fcd3e8d3c8b8c0067e86611974d2a5921c1c121dd30c43adf
+SHA512 (bstr-0.2.16.crate) = 33e82e5637efdc2f404ab9405331ae135df12586785491c3e61e70ea8406c67e2109e550cc70a4ab8e95d054e8519c48257fd3b55ef0b67b2530914a9a0b0fac
+Size (bstr-0.2.16.crate) = 330346 bytes
+BLAKE2s (cfg-if-1.0.0.crate) = fbb02f63b24cc224b045ff2aac3aefd0a77cf7b578df4d5f9da9517a59aaf9bb
+SHA512 (cfg-if-1.0.0.crate) = 0fb16a8882fd30e86b62c5143b1cb18ab564e84e75bd1f28fd12f24ffdc4a42e0d2e012a99abb606c12efe3c11061ff5bf8e24ab053e550ae083f7d90f6576ff
+Size (cfg-if-1.0.0.crate) = 7934 bytes
+BLAKE2s (difflib-0.4.0.crate) = 9dedf118200e28f553a5eac255f0d880196f1e55fb258011866d9f8421cb0122
+SHA512 (difflib-0.4.0.crate) = fcb57859424fea6958a4407061c421599fbca111357b1fe72faa65d8fb0b74425c993a24484e8414f475fa146cd8368c4f82e1ceb4e8dd9f95741149345b37a9
+Size (difflib-0.4.0.crate) = 7638 bytes
+BLAKE2s (doc-comment-0.3.3.crate) = 3c6c0c2b176af73b7f930c90bde1054195adccd234d74431050b27bcfefff615
+SHA512 (doc-comment-0.3.3.crate) = e98ff9646a3612bd41bb6f278e7b6e9a0c58747f8b82524da814cf51b7f06c76ad4d65b502ac5740e818744abb295f78f15f8262d0b50ced1523f6d1a26939ba
+Size (doc-comment-0.3.3.crate) = 4123 bytes
+BLAKE2s (either-1.6.1.crate) = 6bb7f6e21460b5351a6f5a377c2cf08d5e444c0fef34823941742c346e201965
+SHA512 (either-1.6.1.crate) = 4bfe56920e30cbc8eb4f90162db618f7dca653b42db35ab6a7045d3fd9a24ceb1778b1f79613850bdb1a87ad3794fa0d73015e46c48d513f368d8c3776fc9ddf
+Size (either-1.6.1.crate) = 13641 bytes
+BLAKE2s (env_logger-0.9.0.crate) = dc9832f568b18f635942b1a247b81c3e57a4ce6a63b36309e7f57c5f7e3b98c0
+SHA512 (env_logger-0.9.0.crate) = d7db85d2f7d16f7f97b6714e01e342ab6b784c799ef26ee322ec85fcee28a549b6e49a49200ff78eceacd0c682e941f8538a497e2a2a196040769c2365feb566
+Size (env_logger-0.9.0.crate) = 33573 bytes
+BLAKE2s (flip-link-0.1.5.tar.gz) = 29948c7e569c35e2c14e5bc3903ed4d278ac4bcd93b84208b7b2b8e7d8df2d56
+SHA512 (flip-link-0.1.5.tar.gz) = 60b9b5e385c32bf9581682f69b819b9ae1669b332115be8c23b44276725880495418c785cb8f7b153ca97006aebf95534e03bd9ffdf1f97c41b907b0e770f591
+Size (flip-link-0.1.5.tar.gz) = 22849 bytes
+BLAKE2s (getrandom-0.2.3.crate) = c451e4c9701d09c79572625708c12711e2a0a14a925b614b8be72f231a601f18
+SHA512 (getrandom-0.2.3.crate) = e6da64ed529cb0fc000b613f75187ed6b20f716e721d8a02ac2ae39c507fb9f6189ebb66b522d28584eff1e7e9efc274cad6bfe43f464f58053701e1d51c603d
+Size (getrandom-0.2.3.crate) = 26261 bytes
+BLAKE2s (itertools-0.10.1.crate) = 9ee207584062e4ee47a73b83e9cf6547704e90ddc71dc92d4565ddb146f0fee1
+SHA512 (itertools-0.10.1.crate) = 8626eee66aa598e16f5322a6fc55b17c622656f58635c990f5cbd8faeb4739690b0abb3efac4a9a3073752e9f2a51a0ba29401edb12e0f6bf9bddd8d1b394dbc
+Size (itertools-0.10.1.crate) = 116219 bytes
+BLAKE2s (lazy_static-1.4.0.crate) = 0d5f7c2bcfe70610bc27bd6b339ea3e4ca3b7014149714db3a0c199ac6f07cd1
+SHA512 (lazy_static-1.4.0.crate) = e124c0521ec7c950f3c4a066821918da7a9c6e711115d98009ae7c351928fdddead852e7596fea5937a9c30e4e4ce8eee7099b20248b5d6e3b2494b6a6d88cb8
+Size (lazy_static-1.4.0.crate) = 10443 bytes
+BLAKE2s (libc-0.2.99.crate) = 675ac29f2949099c220306814dd887d4bffb80be8d29141f75eaea8e011bb8a4
+SHA512 (libc-0.2.99.crate) = 91a4ae007c897e0b5fa91ecd742c45271c5d0d63819806dedb65bbab81bb1e3faf4f7332899c694df9135222de23ec12ef463f9a2508b6adcd2c0ac5cc113c9c
+Size (libc-0.2.99.crate) = 524997 bytes
+BLAKE2s (log-0.4.14.crate) = 6a53d58f64a8f33394bab4d3ebee1ef02f08138aecee9b8ab336e1834f7d06fd
+SHA512 (log-0.4.14.crate) = 796100167663d85a7bc4244cd305e9b3f0a1b1520764b63464698eb136318d0928c40c16f5d19d9f602a5bf769851275bbd48d66b088b0c37be7a6fb62def7cc
+Size (log-0.4.14.crate) = 34582 bytes
+BLAKE2s (memchr-2.4.1.crate) = ba88561df42c7b9212f8ffd8a3267f5d5dffdc0636703bfb27765c7f57a351e6
+SHA512 (memchr-2.4.1.crate) = d8912e3902a2126f86159bdc998532a2890b882cbb7d59b5a470fffcad4c32281e045f2fff48a235aa4189f1928866bf3d33b699d50866ad6b6c272bba7adb11
+Size (memchr-2.4.1.crate) = 64977 bytes
+BLAKE2s (object-0.26.1.crate) = f9a86caab9281538971ce8b0572db2f01e533bd9cdbd580fa3cc29938ccbba64
+SHA512 (object-0.26.1.crate) = d880a154a51cf80182f1e6a860c789bfafbb410c237c706ddef91d6bdd05375bce20f8ae3f2bac0ecf55b2e5c76591d50bac6a260579b8139e28bba39eef6e3d
+Size (object-0.26.1.crate) = 237789 bytes
+BLAKE2s (predicates-2.0.2.crate) = e014b432767b97b264f540e118e644f44e92f6c0ea5d57559831daca57fafd62
+SHA512 (predicates-2.0.2.crate) = de7f8ecb28bba065eef3db7f22527384a2b209675c9d6c01cab34e864a136602688a90a3b280310dc584e6c3fb67146e0e77c4c8cb24f6241a056ea8c91750f0
+Size (predicates-2.0.2.crate) = 27280 bytes
+BLAKE2s (predicates-core-1.0.2.crate) = 009875baf8ddbcd2235dc986b012c88d345977afe7d87cce086e77aa099c3487
+SHA512 (predicates-core-1.0.2.crate) = bfeee297e7bb81c1cc63908ab47f10e21e53b9f690d9aaf08855bc1824e0c87cf05c92e5a8dbc57eace7490c0ce58bbe2e178ac33ad0553ad2772593d89f8aab
+Size (predicates-core-1.0.2.crate) = 8185 bytes
+BLAKE2s (predicates-tree-1.0.3.crate) = 168235e29fd87948498a291311a7469e0e4a05f4a622a7a5d253c21278ed8b4b
+SHA512 (predicates-tree-1.0.3.crate) = bcf05c9770d26c8c6407b8103f670cd6bbfa48683c19f37caeb03c11d16a56e5011b329d9af6eb59c930db376b7be2f436e1650b7c15e70817316f6af1163ad9
+Size (predicates-tree-1.0.3.crate) = 6370 bytes
+BLAKE2s (proc-macro2-1.0.28.crate) = 7c782c272b6367c9c339d8627ffda0f51d7a7cc3001a61719768ec7a5ff4fc7e
+SHA512 (proc-macro2-1.0.28.crate) = 2a4e34ab2bb692c3661db40ebc6d22f3dbcbc30c2f4d88e1a7f022f8522e943ffe2a1c9b92411c7e04941dc0156cb365e0de953fa45d8710e39b660ee9028741
+Size (proc-macro2-1.0.28.crate) = 38732 bytes
+BLAKE2s (quote-1.0.9.crate) = da1409c5fab9fc40b5a0ce824d063088c949e2c35dea81f683b558455a1807fb
+SHA512 (quote-1.0.9.crate) = dd6cdaea183b85400531ef01e56657edbec0d8f7c27898c1e591b72dff755fa5875b33ca320bd65be0e9aecfc6a61ec119a4bd1291e9f2057fca642ab5b198c8
+Size (quote-1.0.9.crate) = 25042 bytes
+BLAKE2s (regex-automata-0.1.10.crate) = 283615bf1114bdcf5a2ebd639ba1889a8a9a0195b566f41226f7e0961f3d5d81
+SHA512 (regex-automata-0.1.10.crate) = 56d64da361afce82c6cb49e70b99ce1fca3e1969c54bba5f9971db135f8544c65f49feb8827789947b3d1dcefc9c49a7a434a7ffe0d09c5900345a1733723c5f
+Size (regex-automata-0.1.10.crate) = 114533 bytes
+BLAKE2s (rstest-0.11.0.crate) = ccdd51729b13b4056b93dc1926489fef9c9d6d9577da0ad62439ea270e087d7f
+SHA512 (rstest-0.11.0.crate) = 877a8cbe39a4d33a5cc0ac6ae8aaf202f7c38739b0e960b2730fbda2ffe46fedda856c35f51d0463e8c38a6dffd2cbd2d604f3a199fcf4342ac5ddf64496e7ac
+Size (rstest-0.11.0.crate) = 917046 bytes
+BLAKE2s (rustc_version-0.4.0.crate) = 8244e9157b6b8811ae926fc0ed00edeb2b0a0f0f34d6e7b93ad236cbb6ffffba
+SHA512 (rustc_version-0.4.0.crate) = f66da7c6efe431db06cd01180d84ba67fcd38f8cd6ef693762957c00ccc2211f23c08079d7f184776e08f28d2d6ca3bdb5f5016f7de245c6193d4722891ba1db
+Size (rustc_version-0.4.0.crate) = 12175 bytes
+BLAKE2s (semver-1.0.4.crate) = f6cefa21c17314902c9c8678856c9de2115878bba334313ecdf5460023d32087
+SHA512 (semver-1.0.4.crate) = 82ef2b4a3533360de1c645dba02b57a2670fdc51709a07be4a63b94055335225764d42d70f9617ed3aeb4c4de121da24e73b0e2c5c781501e9ee32dff756ebd9
+Size (semver-1.0.4.crate) = 29375 bytes
+BLAKE2s (syn-1.0.74.crate) = 44443d09b37f2bf5ffccbd5a54011b56cd9e7be8c3de0d0c1e80dcd75f0062ef
+SHA512 (syn-1.0.74.crate) = 5aae03a68a4a8c1234d4e9a69cd37b9f6c698e2b635f10a030c0fac22cf00414c2a5e7523e0efe43181bc29c17abe6abc0eab103391259c97ce566713e3349f6
+Size (syn-1.0.74.crate) = 232974 bytes
+BLAKE2s (treeline-0.1.0.crate) = 81ccdbd03361021dd31e9d28ba05b16020601481bf2ec9754869ab687eddc0bc
+SHA512 (treeline-0.1.0.crate) = 37a7c7e95855fdf0fafe5b529eed6c6cfc641da799bc6738a5649a9a0c3db2ef3e63d692862a987bc19263f33b6df2e8ae71b49fe30160d6d470cbb804511824
+Size (treeline-0.1.0.crate) = 3855 bytes
+BLAKE2s (unicode-xid-0.2.2.crate) = f490e112605a2f8c1245fe3eac08a20787a04af701715892031431425bba0ae3
+SHA512 (unicode-xid-0.2.2.crate) = 92ffd0dd34e3ca235ecf110b38c447d3ec1faa23d76c112457f28d432f92fa6b5f428bc5e1bfd278f361f55426dd96e19ecb0d3eff6cf250892f069c52bd89a8
+Size (unicode-xid-0.2.2.crate) = 14955 bytes
+BLAKE2s (wait-timeout-0.2.0.crate) = 74292341b8dbc71125610cb6f528f9a1b05b234d35fc98899901971af99da233
+SHA512 (wait-timeout-0.2.0.crate) = db3b7aa2acfd44e64451042b8ba98eecab77a82aa5c58ed08dadb119ab36dee4e26d62baad7978ed56d5ad03019c96be5021455362290f56043981137bac8066
+Size (wait-timeout-0.2.0.crate) = 12441 bytes
+BLAKE2s (wasi-0.10.2+wasi-snapshot-preview1.crate) = a99255257c1a9724a1e5a6c5bde6fd95cc850c6bcd881d2030755acc62bb8c23
+SHA512 (wasi-0.10.2+wasi-snapshot-preview1.crate) = 06977a294d76369a3867c45abdd8a87ea5c84e5a3681075ba0d14af1aee3114ff24495c7e7f7fe1e6e42230e65fba0e062898e69bc89e0209af62c2d14094ec7
+Size (wasi-0.10.2+wasi-snapshot-preview1.crate) = 27505 bytes



Home | Main Index | Thread Index | Old Index