/** * Test {@link RSAOAEPPublicKey#updateFromHash} on success scenarios, * using RSA spec vectors. */ @Test public void updateFromHashGoodRSASpec() throws Exception { Map mapRSA = new HashMap<String, Object>() {{ put("n", oaepSpec.n); put("e", oaepSpec.e); put("hash", "SHA-1"); put("mgf1Hash", "SHA-1"); }}; AbstractPublicKey rsaPublicKey = new RSAOAEPPublicKey(); rsaPublicKey.updateFromHash(mapRSA); // We've read the public key from hash; // but, to test it over the RSA spec vectors, // we need to hack into the state.rng (and substitute it with our custom one), // even though it is declared as final. RSAOAEPPublicKey.State state = ((RSAOAEPPublicKey) rsaPublicKey).state; Field rngField = RSAOAEPPublicKey.State.class.getDeclaredField("rng"); rngField.setAccessible(true); rngField.set(state, oaepSpec.getRandSeed()); // Now we can even test the encryption on the RSA spec vectors. assertTrue(rsaPublicKey.isInitialized()); assertEquals(rsaPublicKey.getBitStrength(), 1024); ((RSAOAEPPublicKey) rsaPublicKey).resetEncryptor(); assertArrayEquals(rsaPublicKey.encrypt(oaepSpec.M), oaepSpec.C); }
AbstractPublicKey publicKeyNoData = new RSAOAEPPublicKey(); try { publicKeyNoData.updateFromHash(badMapNoData); } catch (Exception e) { assertTrue(e instanceof Hashable.Error); AbstractPublicKey publicKeyPartialData = new RSAOAEPPublicKey(); try { publicKeyNoData.updateFromHash(badMapPartialData); } catch (Exception e) { assertTrue(e instanceof Hashable.Error); AbstractPublicKey publicKeyBadString = new RSAOAEPPublicKey(); try { publicKeyNoData.updateFromHash(badMapBadString); } catch (Exception e) { assertTrue(e instanceof Hashable.Error);
/** * Test {@link RSAOAEPPublicKey#updateFromHash} on success scenarios, * on some sample vector where some data is default. */ @Test public void updateFromHashGoodSampleWithDefaultData() throws Exception { Map map = new HashMap<String, byte[]>() {{ put("n", Hex.decode("ad9a9c60d98ee0463f7629675703b23ed4b330ae851c278233a105d120713a6286945f71e6d46f8d9ad0d30e4551a5de8bb9d9a74750645c579c3902266aefecdc111e032048a84ea76220bc570c5cade835909546029a65baff6d29c4207c4b918ff524d80812ecfda388c8cd4ac1878699193040a075bcd4b3987fcbe749bbdfc44665616ff6789f7363b765eb72530e17698d9bd778fd476b3aefc6bce6cec5d44c52e4acb8981390af5174bcb84e3a17e719ba58b93d13bc929d48dbb78d8f5d85002b281159f10e4b801627d3f8acfab100bd2c6380d04ca08bcb9227d84fe282150d71f0660fbbff744800dc6466d47cf5c22d03bac3c0d73dac9bc2a020cb51ca229448c317e73e8f97125a5ff8568b6af0b493b822096021ee1c7eed6d0ad6164e0798055b3b24404983728c2923e9d959c655b2e138650de0ffb5a74b7e612e764fb0e3104ceb5b8df3aaae80a57dbb8f7c305503a51253fc0f1f7a82057c6af262a484f7243f69046c946fd8fc93d71ad90315bfb42467c826dad0253ec83e0ed9b3fa3dca8162f5c691a9e91f69b890b04138de12e0657d8b044f77b455d3ff4257c52e1a33e6792c7a64d9bd8009d79a5fe73dadcd9a80a2f5f51b1c80e6ee41928f0b08a1e9f5d552ec2e5380de554dac97d76aeac2000c4f992eb582532448641d89bbee2334e51d76a3952119093eb5baa545bf1beabd49f5")); put("e", Hex.decode("010001")); // Not putting any of the optional fields. }}; AbstractPublicKey publicKey = new RSAOAEPPublicKey(); publicKey.updateFromHash(map); assertTrue(publicKey.isInitialized()); assertEquals(publicKey.getBitStrength(), 4096); RSAOAEPPublicKey.State publicKeyState = ((RSAOAEPPublicKey) publicKey).state; assertEquals(publicKeyState.oaepHashType, HashType.SHA1); assertEquals(publicKeyState.mgf1HashType, HashType.SHA1); }
/** * Test {@link RSAOAEPPublicKey#updateFromHash} on success scenarios, * on some sample vector. */ @Test public void updateFromHashGoodSample() throws Exception { Map map = new HashMap<String, Object>() {{ put("n", Hex.decode("ad9a9c60d98ee0463f7629675703b23ed4b330ae851c278233a105d120713a6286945f71e6d46f8d9ad0d30e4551a5de8bb9d9a74750645c579c3902266aefecdc111e032048a84ea76220bc570c5cade835909546029a65baff6d29c4207c4b918ff524d80812ecfda388c8cd4ac1878699193040a075bcd4b3987fcbe749bbdfc44665616ff6789f7363b765eb72530e17698d9bd778fd476b3aefc6bce6cec5d44c52e4acb8981390af5174bcb84e3a17e719ba58b93d13bc929d48dbb78d8f5d85002b281159f10e4b801627d3f8acfab100bd2c6380d04ca08bcb9227d84fe282150d71f0660fbbff744800dc6466d47cf5c22d03bac3c0d73dac9bc2a020cb51ca229448c317e73e8f97125a5ff8568b6af0b493b822096021ee1c7eed6d0ad6164e0798055b3b24404983728c2923e9d959c655b2e138650de0ffb5a74b7e612e764fb0e3104ceb5b8df3aaae80a57dbb8f7c305503a51253fc0f1f7a82057c6af262a484f7243f69046c946fd8fc93d71ad90315bfb42467c826dad0253ec83e0ed9b3fa3dca8162f5c691a9e91f69b890b04138de12e0657d8b044f77b455d3ff4257c52e1a33e6792c7a64d9bd8009d79a5fe73dadcd9a80a2f5f51b1c80e6ee41928f0b08a1e9f5d552ec2e5380de554dac97d76aeac2000c4f992eb582532448641d89bbee2334e51d76a3952119093eb5baa545bf1beabd49f5")); put("e", Hex.decode("010001")); put("mgf1Hash", "SHA-512"); }}; AbstractPublicKey publicKey = new RSAOAEPPublicKey(); publicKey.updateFromHash(map); assertTrue(publicKey.isInitialized()); assertEquals(publicKey.getBitStrength(), 4096); RSAOAEPPublicKey.State publicKeyState = ((RSAOAEPPublicKey) publicKey).state; assertEquals(publicKeyState.oaepHashType, HashType.SHA1); /* Default for now */ assertEquals(publicKeyState.mgf1HashType, HashType.SHA512); }