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 011public class AuthTokenSigner { 012 public static final String SIGNATURE_ALGORITHM = "SHA256withRSA"; 013 private PrivateKey privateKey; 014 015 public AuthTokenSigner(byte[] privateKeyData) { 016 assertNotNull("privateKeyData", privateKeyData); 017 BouncyCastleRegistrationUtil.registerBouncyCastleIfNeeded(); 018 try { 019 KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 020 EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyData); 021 this.privateKey = keyFactory.generatePrivate(privateKeySpec); 022 } catch (RuntimeException e) { 023 throw e; 024 } catch (Exception e) { 025 throw new RuntimeException(e); 026 } 027 } 028 029 public SignedAuthToken sign(byte[] authTokenData) { 030 assertNotNull("authTokenData", authTokenData); 031 Signature signingEngine; 032 try { 033 signingEngine = Signature.getInstance(SIGNATURE_ALGORITHM); 034 signingEngine.initSign(privateKey); 035 signingEngine.update(authTokenData); 036 byte[] signature = signingEngine.sign(); 037 038// SignedObject signedObject = new SignedObject(authTokenData, privateKey, signingEngine); 039 040 SignedAuthToken signedAuthToken = new SignedAuthToken(); 041 signedAuthToken.setAuthTokenData(authTokenData); 042 signedAuthToken.setSignature(signature); 043 return signedAuthToken; 044 } catch (Exception e) { 045 throw new RuntimeException(e); 046 } 047 } 048}