
|
**free
ctl-opt nomain BNDDIR('QC2LE');
dcl-ds AlgoDS qualified;
cipher INT(10) inz(50) ; //RSA
PKA CHAR(1) inz('1'); //PKCS bloc 0 ou 1, 3=ISO 9796-1
filler CHAR(3) inz(x'000000');
// le token doit indiquer RS256(RSA) et non HS256 (HMAC = symétrique)
hash int(10) inz(3); // 3=SHA256 5=SHA512
End-Ds;
dcl-ds pemDS qualified;
keylen INT(10);
filler char(4) INZ(x'00000000');
key char(4096) CCSID(65535);
End-Ds;
dcl-s signatureLen int(10); // normalement 512
dcl-s DataLen int(10);
dcl-pr QDCXLATE EXTPGM;
datalen packed(5:0) CONST;
data char(4096);
table char(10) CONST;
End-Pr;
dcl-s dataChar char(4096);
dcl-pr verifyHASH ExtProc('Qc3VerifySignature');
signature CHAR(4096) const; // empreinte
signatureLen INT(10) const;
Data CHAR(5121) const; // data d'origine
Datalen INT(10) const;
Dataformat CHAR(8) const; //DATA0100 = données directement
Algo likeds(algoDS); // algo de cryptage -> RSA
AlgoFormat CHAR(8) const; //ALGD0400 = paramètres de clé
Key likeds(pemDS); // contenu du certificat PEM
KeyFormat CHAR(8) const; //KEYD0600 = utiliser la clé du certificat PEM
CSP CHAr(1) const; // 1=Soft,2=hard(renseigner DEVICE),0=Any
CSPDEVICE CHAr(10) const; // blanc si pas de co-processeur
ErrorCode CHar(16) ;
end-pr;
|
|
dcl-proc verifySignature export; dcl-pi *n ind; DatatoCheck varchar(5121) CONST; // data d'origine Key varchar(4096) CONST; // contenu certificat au format DER (PEM) signature char(4096) CONST; // empreinte à vérifier End-Pi; dcl-ds ErrorCode qualified; bytesProv INt(10) inz(0); // ou 64 pour voir MSGID |