> From: owner-openssl-us...@openssl.org On Behalf Of brajan > Sent: Friday, 16 September, 2011 08:07
> I sign the Message using Java IBMFIPS compliant [provider] > the code to sign the message is <wrapping mostly fixed> > GetPrivateKey privkey = new GetPrivateKey(); > Signature genSign = Signature.getInstance("SHA1withRSA","IBMJCEFIPS"); > genSign.initSign(privkey.get()); > genSign.update(data.getBytes()); > byte[] byteSignedData = genSign.sign(); > > Get Private Key function code > > File privateKeyFile = new File("Certificates" + File.separator+"mykey.der"); > byte[] encodedKey = new byte[(int)privateKeyFile.length()]; > new FileInputStream(privateKeyFile).read(encodedKey); This can leak the file open (descriptor). No problem for a run-and-done utility, but may be for a long-running server depending on when and how this gets garbage-collected. Also, using FIPS crypto but having privatekey in a clear file doesn't really make security sense, but that's your concern. Perhaps this is only a test environment. > PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(encodedKey); > KeyFactory kf = KeyFactory.getInstance("RSA","IBMJCEFIPS"); > RSAPrivateCrtKey privatekey = (RSAPrivateCrtKey) > .generatePrivate(privateKeySpec); Obviously that should be kf.generatePrivate > return privatekey; > > I am verifying this signature using openssl 0.9.8g, > RSA_Verify() function. 0.9.8g is four years old. I don't recall (and won't search through to see) if any of the things fixed since then would affect this basic lowlevel usage; it's less likely than other areas but not impossible. I don't have that IBM provider, but using the Sun provider it works for me; you are verifying as NID_sha1 right? Maybe the IBM provider is encoding the algid wrong or oddly. To check, get that (raw) signature in a file and the key (at least the publickey) in a format OpenSSL likes, then rsautl -verify (which does only the RSA_public_decrypt step) and asn1parse the result. Since you apparently don't mind having the privatekey clear, 'traditional' PEM is easy: openssl pkcs8 <pkcs8derfile -inform der -nocrypt >rsapemfile openssl rsautl -verify -in sigfile -inkey rsapemfile >temp openssl asn1parse <temp -inform der See if the "OBJECT" (algorithm OID) is ":sha1". If not, but it is an OID known to openssl, just use its NID (assuming it is at least consistent across all signatures). If it's not known (e.g. nonstandard), it appears to me adding it dynamically with OBJ_create should work, but that's a little more complicated (and I haven't tested). ______________________________________________________________________ OpenSSL Project http://www.openssl.org User Support Mailing List openssl-users@openssl.org Automated List Manager majord...@openssl.org