2017-02-03 7 views
0

Ich habe einen sehr einfachen Test geschrieben, um das Arbeiten mit Elliptic Curve Cryptography in einer Enklave zu lernen. Aber die Schlüsselerstellungsmethode schlägt mit SGX_ERROR_UNEXPECTED fehl.sgx_ecc256_create_key_pair fail

Hier ist meine Enklave:

#include "Enc_t.h" 

#include "sgx_trts.h" 
#include "sgx_tcrypto.h" 

int Test(sgx_status_t *error) 
{ 
    sgx_ecc_state_handle_t handle; 
    sgx_ec256_private_t sk; 
    sgx_ec256_public_t pk; 
    sgx_status_t status; 

    status = sgx_ecc256_open_context(&handle); 
    if (status) 
    { 
     *error = status; 
     return 1; 
    } 

    status = sgx_ecc256_create_key_pair(&sk, &pk, &handle); 
    if (status) 
    { 
     *error = status; 
     return 2; 
    } 

    *error = SGX_SUCCESS; 
    return 0; 
} 

und dies ist mein Gastgeber App:

#include "Enc_u.h" 
#include "sgx_urts.h" 
#include <cstdio> 
#include <tchar.h> 

#define ENC _T("../Debug/Enc.signed.dll") 

int main() 
{ 
    sgx_status_t error; 
    sgx_enclave_id_t eid; 
    sgx_launch_token_t token; 
    int updated = 0; 
    int step; 
    error = sgx_create_enclave(ENC, SGX_DEBUG_FLAG, &token, &updated, &eid, nullptr); 

    if (error) 
     printf("Failed to create enclave\n"); 

    Test(eid, &step, &error); 

    if (error) 
     printf("Failed on step %d\n", step); 

    return 0; 
} 

Das Ergebnis ist Fehler = 1 auf Schritt = 2.

Irgendwelche Ideen, was ich m falsch oder was habe ich falsch konfiguriert? Ich benutze Visual Studio Community 2015 und Intel C++ Compiler 17.0.

S.: Dies ist eine Replik von my post on an Intel forum. Wenn es auf jeder dieser Plattformen richtig beantwortet wird, werde ich die Antwort auf die andere posten, auch unter Berufung auf den Autor.

+0

Können Sie die edl Aussagen teilen –

+0

Die EDL keine Rolle spielt. Das Problem lag daran, dass ein Zeiger auf die EC-Kontextvariable statt auf sich selbst übergeben wurde. Wenn Sie es aus einem anderen Grund brauchen, lassen Sie es mich wissen. –

+0

Ich brauche es als Tutorial verwenden. Es wäre wirklich nützlich. [email protected] –

Antwort

2

Verwenden Sie die Anweisung unten statt status = sgx_ecc256_create_key_pair(&sk, &pk, &handle);

  • status = sgx_ecc256_create_key_pair(&sk, &pk, handle);