|
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