**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 |