From e5e22ee376bddc731a81ff877d1ec4f07996818d Mon Sep 17 00:00:00 2001 From: Elichai Turkel Date: Thu, 24 Oct 2019 21:05:04 +0300 Subject: [PATCH] Test serde support in no-std crate --- no_std_test/Cargo.toml | 3 ++- no_std_test/src/main.rs | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/no_std_test/Cargo.toml b/no_std_test/Cargo.toml index 77fb218..f68a47c 100644 --- a/no_std_test/Cargo.toml +++ b/no_std_test/Cargo.toml @@ -4,8 +4,9 @@ version = "0.1.0" authors = ["Elichai Turkel "] [dependencies] -secp256k1 = { path = "../", default-features = false, features = ["rand"] } +secp256k1 = { path = "../", default-features = false, features = ["serde", "rand"] } libc = { version = "0.2", default-features = false } +serde_cbor = { version = "0.10", default-features = false } # A random serializer that supports no-std. [profile.release] diff --git a/no_std_test/src/main.rs b/no_std_test/src/main.rs index 4ccbeb0..dfb63e2 100644 --- a/no_std_test/src/main.rs +++ b/no_std_test/src/main.rs @@ -5,6 +5,7 @@ #![no_std] extern crate libc; extern crate secp256k1; +extern crate serde_cbor; use core::fmt::{self, write, Write}; use core::intrinsics; @@ -14,6 +15,10 @@ use secp256k1::rand::{self, RngCore}; use secp256k1::serde::Serialize; use secp256k1::*; +use serde_cbor::de; +use serde_cbor::ser::SliceWrite; +use serde_cbor::Serializer; + struct FakeRng; impl RngCore for FakeRng { fn next_u32(&mut self) -> u32 { @@ -48,6 +53,14 @@ fn start(_argc: isize, _argv: *const *const u8) -> isize { let sig = secp.sign(&message, &secret_key); assert!(secp.verify(&message, &sig, &public_key).is_ok()); + let mut cbor_ser = [0u8; 100]; + let writer = SliceWrite::new(&mut cbor_ser[..]); + let mut ser = Serializer::new(writer); + sig.serialize(&mut ser).unwrap(); + let size = ser.into_inner().bytes_written(); + let new_sig: Signature = de::from_mut_slice(&mut cbor_ser[..size]).unwrap(); + assert_eq!(sig, new_sig); + unsafe { libc::printf("Verified Successfully!\n\0".as_ptr() as _) }; 0 }