1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| // créer un seed = salt
byte[] salt = Hex.decode("01 02 03 04 05 06 AB BC CD DE");
byte[] msg = Hex.decode("42");
// initialise un blindFactorGenerator pour générer un blindFactor
blindFactorGen.init(pub);
// créer un blindfactor
BigInteger blindFactor = blindFactorGen.generateBlindingFactor();
RSABlindingParameters params = new RSABlindingParameters(pub, blindFactor);
// creer le blindingE
RSABlindingEngine rsaBlindingEngine = new RSABlindingEngine();
//creer le blindingSigner
PSSSigner blindingSigner = new PSSSigner(rsaBlindingEngine, new SHA1Digest(), 10);
// creer le rsaSigner
PSSSigner rsaSigner = new PSSSigner(new RSAEngine(), new SHA1Digest(), 10);
// initialiser blindingSigner
blindingSigner.init(true, new ParametersWithRandom(params,new FixRandom(salt)));
blindingSigner.update(msg, 0, msg.length);
// blinding Signature
byte[] blindingSignature = blindingSigner.generateSignature();
System.out.println("Signature masquée: " + emsa.arrayToString(blindingSignature));
// creer le rsaEngine
RSAEngine rsaEngine = new RSAEngine();
// initialiser le rsaEngine
rsaEngine.init(true, prv);
byte[] blindedData = rsaEngine.processBlock(blindingSignature, 0, blindingSignature.length);
//initialiser le rsaBlindingE pour demasquer la signature
rsaBlindingEngine.init(false, params);
byte[] signature = rsaBlindingEngine.processBlock(blindedData, 0, blindedData.length);
System.out.println("Signature demasquée: " + emsa.arrayToString(signature));
RSABlindedEngine rsaBlindedEngine = new RSABlindedEngine();
rsaBlindedEngine.init(true, pub);
byte[] EM = rsaBlindedEngine.processBlock(signature, 0, signature.length);
System.out.println("Le EM : " + emsa.arrayToString(EM));
rsaSigner.init(false, pub);
rsaSigner.update(msg, 0, msg.length);
boolean verif = rsaSigner.verifySignature(signature);
Assert.assertTrue(verif);
digest.update(msg, 0, msg.length);
byte[] mhash = new byte[digest.getDigestSize()];
digest.doFinal(mhash,0);
// le premier padding
String padding1 = emsa.arrayToString(Hex.decode("00 00 00 00 00 00 00 00"));
String nouveauM = padding1.concat(emsa.arrayToString(mhash)).concat(emsa.arrayToString(salt));
byte[] Message = Hex.decode(nouveauM);
digest.update(Message, 0, Message.length);
byte[] H = new byte[digest.getDigestSize()];
digest.doFinal(H, 0);
System.out.println("Le H: " + emsa.arrayToString(H));
System.out.println("Le nouveau M: " + nouveauM); |
Partager