|
43 | 43 | #![feature(start)] |
44 | 44 | #![feature(core_intrinsics)] |
45 | 45 | #![feature(panic_info_message)] |
| 46 | +#![feature(alloc_error_handler)] |
46 | 47 | #![no_std] |
47 | 48 | extern crate libc; |
48 | 49 | extern crate secp256k1; |
49 | 50 | extern crate serde_cbor; |
50 | 51 |
|
| 52 | +#[cfg(feature = "alloc")] |
| 53 | +extern crate alloc; |
| 54 | + |
| 55 | +use core::alloc::Layout; |
| 56 | + |
| 57 | +#[cfg(feature = "alloc")] |
| 58 | +extern crate wee_alloc; |
| 59 | + |
| 60 | +#[cfg(feature = "alloc")] |
| 61 | +#[global_allocator] |
| 62 | +static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; |
| 63 | + |
51 | 64 | use core::fmt::{self, write, Write}; |
52 | 65 | use core::intrinsics; |
53 | 66 | use core::panic::PanicInfo; |
@@ -120,6 +133,17 @@ fn start(_argc: isize, _argv: *const *const u8) -> isize { |
120 | 133 | assert_ne!(x_arr, [0u8; 32]); |
121 | 134 | assert_ne!(&y_arr[..], &[0u8; 32][..]); |
122 | 135 |
|
| 136 | + #[cfg(feature = "alloc")] |
| 137 | + { |
| 138 | + let secp_alloc = Secp256k1::new(); |
| 139 | + let public_key = PublicKey::from_secret_key(&secp_alloc, &secret_key); |
| 140 | + let message = Message::from_slice(&[0xab; 32]).expect("32 bytes"); |
| 141 | + |
| 142 | + let sig = secp_alloc.sign(&message, &secret_key); |
| 143 | + assert!(secp_alloc.verify(&message, &sig, &public_key).is_ok()); |
| 144 | + unsafe { libc::printf("Verified alloc Successfully!\n\0".as_ptr() as _) }; |
| 145 | + } |
| 146 | + |
123 | 147 | unsafe { libc::printf("Verified Successfully!\n\0".as_ptr() as _) }; |
124 | 148 | 0 |
125 | 149 | } |
@@ -171,3 +195,9 @@ fn panic(info: &PanicInfo) -> ! { |
171 | 195 | buf.print(); |
172 | 196 | intrinsics::abort() |
173 | 197 | } |
| 198 | + |
| 199 | +#[alloc_error_handler] |
| 200 | +fn alloc_error(_layout: Layout) -> ! { |
| 201 | + unsafe { libc::printf("alloc shi1\n\0".as_ptr() as _) }; |
| 202 | + intrinsics::abort() |
| 203 | +} |
0 commit comments