MemSign
obj -> MemSign(int1, alpha2, var alpha3[, int4[, int5]]) : int
Signatur erstellen
Details
- obj: Nachricht ( Memory -Objekt)
- int1:
- alpha2: Schlüssel
- var alpha3: Signatur
- int4: Nachrichtenposition (optional)
- int5: Nachrichtenlänge (optional)
- Resultat:
intFehlerwert_ErrOkErfolg_ErrMemKeyInvalidSchlüssel ungültig_ErrMemKeyLengthSchlüssel zu kurz für Nachricht - Siehe: Verwandte Befehle ,
MemVerify (), Blog
Dieser Befehl signiert eine Nachricht nach dem in (int1) angegebenen Verfahren. Die Signatur wird aus dem Inhalt des übergebenen Memory -Objektes (obj), dem Verfahren (int1) und dem privaten Schlüssel (alpha2) gebildet. Im Parameter (int1) wird ebenfalls der zu verwendete Hash-Algorithmus, die Codierung des privaten Schlüssels und die Codierung der Signatur angegeben.
Folgende Optionen (int1) sind möglich:
-
Typ der Signatur
-
_MemSignRSA: RSA-Signatur erstellen -
_MemSignDSA: DSA-Signatur erstellen -
Hash-Verfahren
-
_MemHashMD5: MD5-Hash verwenden -
_MemHashRMD160: RIPEMD-160-Hash verwenden -
_MemHashSHA1: SHA-1-Hash verwenden -
_MemHashSHA256: SHA-256-Hash verwenden -
_MemHashSHA384: SHA-384-Hash verwenden -
_MemHashSHA512: SHA-512-Hash verwenden -
Kodierung des Schlüssels
-
_MemKeyHex: Schlüssel liegt als hexadezimal kodierte Zeichenkette vor -
_MemKeyBase64: Schlüssel liegt Base64-kodierte Zeichenkette vor -
Kodierung des Ergebnisses
-
_MemResultHex: Signatur soll Hex-Codiert sein -
_MemResultBase64: Signatur soll Base64-Codiert sein
Der Paramter (int1) setzt sich aus der Kombination je einer Konstanten der Bereiche zusammen.
Die ermittelte Signatur wird in (alpha3) zurückgegeben.
Der private Schlüssel (alpha2) muss im PKCS #1- (RSA oder DSA) oder im PKCS #8-Format (RSA oder DSA) vorliegen. Die Begin- und Endmarkierung dürfen nicht enthalten sein.
Ein RSA-Schlüsselpaar mit 2048 Bit Länge kann beispielsweise wie folgt angelegt werden:
tMemPrivate->MemGenKeyPair(tMemPublic, 2048);
Alternativ ist dies mit OpenSSL wie folgt möglich:
openssl genrsa -out rsa_priv_key.pem 2048
openssl rsa -in rsa_priv_key.pem -pubout -out rsa_pub_key.pem
Mit der folgenden Funktion kann der Schlüssel eingelesen werden:
sub ReadKey
(
aKeyFile : alpha(250);
var aKey : alpha;
opt aPublic : logic;
)
: int;
local
{
tFsi : handle;
tResult : int;
tLine : alpha(4096);
tBeginOfKey : logic;
tEndOfKey : logic;
tSigBegKey : alpha;
tSigEndKey : alpha;
}
{
aKey # '';
if (aPublic)
{
tSigBegKey # '-----BEGIN PUBLIC KEY-----';
tSigEndKey # '-----END PUBLIC KEY-----';
}
else
{
tSigBegKey # '-----BEGIN RSA PRIVATE KEY-----';
tSigEndKey # '-----END RSA PRIVATE KEY-----';
}
tFsi # FsiOpen(aKeyFile, _FsiStdRead);
if (tFsi > 0)
{
tFsi->FsiMark(0x0a);
tResult # tFsi->FsiRead(tLine);
tBeginOfKey # false;
tEndOfKey # false;
while (tResult > 0 and !tEndOfKey)
{
if (!tBeginOfKey)
{
if (tLine = tSigBegKey)
tBeginOfKey # true;
}
else
{
if (tLine = tSigEndKey)
tEndOfKey # true;
else
aKey # aKey + tLine;
}
tResult # tFsi->FsiRead(tLine);
}
if (tBeginOfKey and tEndOfKey)
tResult # _ErrOk;
else
tResult # _ErrData;
tFsi->FsiClose();
}
else
tResult # tFsi;
return(tResult);
}
Optional kann mit den Argumenten (int4) die Position und (int5) die Länge der zu verwendenden Nachricht angegeben werden.
Mögliche Laufzeitfehler:
_ErrHdlInvalid: Der übergeben Deskriptor (obj) ist ungültig._ErrMemExhausted: Nicht genug Speicher für kodierte Signatur (vor der Rückgabe) vorhanden._ErrStringOverflow: Der Schlüssel (alpha2) ist länger als8192Zeichen oder die in (alpha3) übergebene Variable ist nicht lang genug zum Speichern der Signatur._ErrValueInvalid: In den Optionen (int1) wurde eine ungültige oder unvollständige Kombination angegeben._ErrValueRange: Die angegeben Startposition (int4) oder die Länge des Bereiches (int5) ist zu groß.