Test serde support in no-std crate
This commit is contained in:
parent
d0afb874a3
commit
e5e22ee376
|
@ -4,8 +4,9 @@ version = "0.1.0"
|
||||||
authors = ["Elichai Turkel <elichai.turkel@gmail.com>"]
|
authors = ["Elichai Turkel <elichai.turkel@gmail.com>"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
secp256k1 = { path = "../", default-features = false, features = ["rand"] }
|
secp256k1 = { path = "../", default-features = false, features = ["serde", "rand"] }
|
||||||
libc = { version = "0.2", default-features = false }
|
libc = { version = "0.2", default-features = false }
|
||||||
|
serde_cbor = { version = "0.10", default-features = false } # A random serializer that supports no-std.
|
||||||
|
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#![no_std]
|
#![no_std]
|
||||||
extern crate libc;
|
extern crate libc;
|
||||||
extern crate secp256k1;
|
extern crate secp256k1;
|
||||||
|
extern crate serde_cbor;
|
||||||
|
|
||||||
use core::fmt::{self, write, Write};
|
use core::fmt::{self, write, Write};
|
||||||
use core::intrinsics;
|
use core::intrinsics;
|
||||||
|
@ -14,6 +15,10 @@ use secp256k1::rand::{self, RngCore};
|
||||||
use secp256k1::serde::Serialize;
|
use secp256k1::serde::Serialize;
|
||||||
use secp256k1::*;
|
use secp256k1::*;
|
||||||
|
|
||||||
|
use serde_cbor::de;
|
||||||
|
use serde_cbor::ser::SliceWrite;
|
||||||
|
use serde_cbor::Serializer;
|
||||||
|
|
||||||
struct FakeRng;
|
struct FakeRng;
|
||||||
impl RngCore for FakeRng {
|
impl RngCore for FakeRng {
|
||||||
fn next_u32(&mut self) -> u32 {
|
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);
|
let sig = secp.sign(&message, &secret_key);
|
||||||
assert!(secp.verify(&message, &sig, &public_key).is_ok());
|
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 _) };
|
unsafe { libc::printf("Verified Successfully!\n\0".as_ptr() as _) };
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue