Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

schnorrkel (with no_std support) doesn't work with sgx #93

Closed
brenzi opened this issue Apr 29, 2019 · 4 comments
Closed

schnorrkel (with no_std support) doesn't work with sgx #93

brenzi opened this issue Apr 29, 2019 · 4 comments

Comments

@brenzi
Copy link

brenzi commented Apr 29, 2019

I'm currently trying to use

https://github.com/w3f/schnorrkel

within an sgx enclave here:

https://github.com/scs/substraTEE-worker/blob/37c76121c4bbf4e3eee210b29e7c4f2d5de1ada9/enclave/src/lib.rs#L35

The library supports #[no_std]. As @dingelish wrote here, this crate should be automatically supported, right?

However, if I add

extern crate schnorrkel;
use schnorrkel::keys::MiniSecretKey;

I get the usual std collision:

error: duplicate lang item in crate `std`: `f32_runtime`.
  |
  = note: first defined in crate `sgx_tstd`.

error: duplicate lang item in crate `std`: `f64_runtime`.
  |
  = note: first defined in crate `sgx_tstd`.

error: duplicate lang item in crate `std`: `panic_impl`.
  |
  = note: first defined in crate `sgx_tstd`.

error: duplicate lang item in crate `std`: `oom`.
  |
  = note: first defined in crate `sgx_trts`.

error: aborting due to 4 previous errors

error: Could not compile `SealedKeyEnclave`.

To learn more, run the command again with --verbose.

Any help is appreciated

@elichai
Copy link
Contributor

elichai commented Apr 29, 2019

By default this library uses std
Try importing it with default-features=false
And features=["alloc"] or alloc and nightly together

@brenzi
Copy link
Author

brenzi commented Apr 29, 2019

ok, I see.

But now I get:

   Compiling schnorrkel v0.1.1
error[E0433]: failed to resolve: maybe a missing `extern crate std;`?
  --> /home/abrenzikofer/.cargo/registry/src/github.com-1ecc6299db9ec823/schnorrkel-0.1.1/src/context.rs:13:5
   |
13 | use std::cell::RefCell;
   |     ^^^ maybe a missing `extern crate std;`?

error[E0433]: failed to resolve: unresolved import
   --> /home/abrenzikofer/.cargo/registry/src/github.com-1ecc6299db9ec823/schnorrkel-0.1.1/src/sign.rs:245:9
    |
245 |     use alloc::vec::Vec;
    |         ^^^^^
    |         |
    |         unresolved import
    |         help: a similar path exists: `core::alloc`

It seems I'll have to fork schnorrkel and put

#[macro_use]
extern crate sgx_tstd as std;
use std::prelude::v1::*;

Or do you have other ideas?

@elichai
Copy link
Contributor

elichai commented Apr 29, 2019

it looks like they messed up the no-std feature, they don't import alloc if you use the alloc feature, and they still use std sometimes even when they could use core.
open an issue there telling them that it's broken.
but in general be really cautious about using random cryptography libraries.

@brenzi
Copy link
Author

brenzi commented Apr 30, 2019

problem needs to be solved upstream

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants