package co.codewizards.cloudstore.core.auth; import static co.codewizards.cloudstore.core.util.Util.*; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.Signature; import java.security.spec.EncodedKeySpec; import java.security.spec.PKCS8EncodedKeySpec; import co.codewizards.cloudstore.core.util.AssertUtil; public class AuthTokenSigner { public static final String SIGNATURE_ALGORITHM = "SHA256withRSA"; private PrivateKey privateKey; public AuthTokenSigner(byte[] privateKeyData) { AssertUtil.assertNotNull(privateKeyData, "privateKeyData"); BouncyCastleRegistrationUtil.registerBouncyCastleIfNeeded(); try { KeyFactory keyFactory = KeyFactory.getInstance("RSA"); EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyData); this.privateKey = keyFactory.generatePrivate(privateKeySpec); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException(e); } } public SignedAuthToken sign(byte[] authTokenData) { AssertUtil.assertNotNull(authTokenData, "authTokenData"); Signature signingEngine; try { signingEngine = Signature.getInstance(SIGNATURE_ALGORITHM); signingEngine.initSign(privateKey); signingEngine.update(authTokenData); byte[] signature = signingEngine.sign(); // SignedObject signedObject = new SignedObject(authTokenData, privateKey, signingEngine); SignedAuthToken signedAuthToken = new SignedAuthToken(); signedAuthToken.setAuthTokenData(authTokenData); signedAuthToken.setSignature(signature); return signedAuthToken; } catch (Exception e) { throw new RuntimeException(e); } } }