Skip to content

Mono and C# Support

SCONE supports the mono platform, i.e., the cross platform, open source .NET framework. Hence, SCONE now also supports C#.

Image

Ensure that you have the newest mono image and determine you SGX device:

docker pull registry.scontain.com/sconecuratedimages/mono
determine_sgx_device
docker run $MOUNT_SGXDEVICE -it registry.scontain.com/sconecuratedimages/mono

In case you do not have an SGX driver installed, no device will be mounted and applications will run in SIM mode.

Example

Let's try to compile a simple program:

cat > hello.cs <<EOF
using System;

public class HelloWorld
{
    public static void Main(string[] args)
    {
        Console.WriteLine ("Hello Mono World");
    }
}
EOF

We compile the program with csc inside the container:

csc hello.cs

Note that his compilation already happens inside of SGX enclaves.

Let's execute the binary and switch on debug outputs:

mono hello.exe

The output will look like:

Hello Mono World

Debug Output

You can show the configuration of SCONE by setting SCONE_VERSION=1, i.e., if you execute

SCONE_VERSION=1 mono hello.exe

the output will look like this:

export SCONE_QUEUES=4
export SCONE_SLOTS=256
export SCONE_SIGPIPE=0
export SCONE_MMAP32BIT=0
export SCONE_SSPINS=100
export SCONE_SSLEEP=4000
export SCONE_LOG=3
export SCONE_HEAP=1073741824
export SCONE_STACK=2097152
export SCONE_CONFIG=/etc/sgx-musl.conf
export SCONE_ESPINS=10000
export SCONE_MODE=sim
export SCONE_ALLOW_DLOPEN=yes (unprotected)
export SCONE_MPROTECT=no
musl version: 1.1.24
Revision: 6da648645ce29121d24c40c9c18404cc43194f80 (Fri May 29 20:56:17 2020 +0000)
Branch: master

Enclave hash: fa29f3914117757bbd4e091f90c357ae92b4c4b6b9bfa80b21c32e66fe60ee26
Hello Mono World