wupi_execute_moved_code-Function

Die CodeMoving Funktionalität wird auch für .DotNet-Anwendungen angeboten. Dies bezieht sich auf die Ausführung von dediziertem Code in einer sicheren Ausführungsumgebung (CmDongle und CodeMeter Cloud).

Der Code ist derzeit in C geschrieben und besteht aus einem Einstiegspunkt, der eine Struktur von Ein- und Ausgangsdaten entgegennimmt.

In der protect.yaml-Schutzdefinition werden in der gleichnamigen Sektion CodeMoving-Einträge hinzugefügt

CodeMoving:

 - Id: 10

   File: secureCode.c

   LicenseListId: 1

Die Lizenzliste 1 muss eine CodeMeter-Lizenz enthalten, in der das AccessPassword gesetzt ist. Zum Beispiel LicenseCodeMove:

Licenses:

 - Name: LicenseCodeMove

   Type: CodeMeter

   FirmCode: 6000010

   ProductCode: 1000

   AccessPassword: MyPassword

Zum Beispiel kann secureCode.c folgenden Inhalt haben:

struct In {

int a;

int b;

};

 

struct Out {

int result;

};

 

void entry(const struct In *in, struct Out *out)

{

 out->result = in->a * in->b;

}

Dies ist eine einfache Multiplikation von zwei Eingangsparametern, wobei das Ergebnis in der Variablen result gespeichert wird.

Das Passwort kann mit CmBoxPgm programmiert werden:

CmBoxPgm -f6000010 -cau -p1000 -papwd:"MyPassword" -cau

In dem Programm wird die CodeMoving-Funktion dann mit dem folgenden WUPI Befehl verwendet:

WupiExecuteMovedCode(functionId, stateChainId, input, output) -> ReturnCode

Parameter

Beschreibung

functionId

Referenzierung der CodeMoving Id aus der protect.yaml Schutzdefinition.

stateChainId

Deklaration, in welcher Zustandskette die Funktion ausgeführt werden soll.

input

Struktur, welche die Eingabeparameter enthält.

output -> input

Struktur, welche die Ausgabeparameter enthält.

ReturnCode

0 steht für Erfolg, ansonsten Fehlercode.

In DotNet kann diese Funktion wie folgt aufgerufen werden:

struct Input

{

  public int a;

  public int b;

}

 

struct Output

{

  public int res;

}

 

public int DoOperation(int num1, int num2)

{

  var i = new Input

  {

       a = num1,

       b = num2,

  };

 

  var o = new Output

  {

       res = 0

  };

 

  if (Wupi.ExecuteMovedCode(10, 0, ref i, ref o) == 0) {

      throw new Exception("ExecuteMovedCode failure");

  }

 

  return o.res;

}

AxProtector kompiliert secureCode.c, verschlüsselt die Kompilierung und bettet sie in die Schutzdaten ein. Beim Aufruf von AxProtector wird der verschlüsselte Code inklusive der Parameter an den CmContainer / die CodeMeter Cloud übergeben und ausgeführt.