001package co.codewizards.cloudstore.core.auth; 002 003import static co.codewizards.cloudstore.core.util.Util.*; 004 005import java.security.KeyFactory; 006import java.security.PrivateKey; 007import java.security.Signature; 008import java.security.spec.EncodedKeySpec; 009import java.security.spec.PKCS8EncodedKeySpec; 010 011import co.codewizards.cloudstore.core.util.AssertUtil; 012 013public class AuthTokenSigner { 014 public static final String SIGNATURE_ALGORITHM = "SHA256withRSA"; 015 private PrivateKey privateKey; 016 017 public AuthTokenSigner(byte[] privateKeyData) { 018 AssertUtil.assertNotNull(privateKeyData, "privateKeyData"); 019 BouncyCastleRegistrationUtil.registerBouncyCastleIfNeeded(); 020 try { 021 KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 022 EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyData); 023 this.privateKey = keyFactory.generatePrivate(privateKeySpec); 024 } catch (RuntimeException e) { 025 throw e; 026 } catch (Exception e) { 027 throw new RuntimeException(e); 028 } 029 } 030 031 public SignedAuthToken sign(byte[] authTokenData) { 032 AssertUtil.assertNotNull(authTokenData, "authTokenData"); 033 Signature signingEngine; 034 try { 035 signingEngine = Signature.getInstance(SIGNATURE_ALGORITHM); 036 signingEngine.initSign(privateKey); 037 signingEngine.update(authTokenData); 038 byte[] signature = signingEngine.sign(); 039 040// SignedObject signedObject = new SignedObject(authTokenData, privateKey, signingEngine); 041 042 SignedAuthToken signedAuthToken = new SignedAuthToken(); 043 signedAuthToken.setAuthTokenData(authTokenData); 044 signedAuthToken.setSignature(signature); 045 return signedAuthToken; 046 } catch (Exception e) { 047 throw new RuntimeException(e); 048 } 049 } 050}