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.