package com.eucalyptus.auth.crypto; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.Signature; import java.security.SignatureException; import org.apache.log4j.Logger; public enum Signatures { SHA256withRSA; private static Logger LOG = Logger.getLogger( Signatures.class ); /** * Identical to Signatures#sign() except in that it throws no checked exceptions and instead returns null in the case of a failure. */ public String trySign( PrivateKey pk, byte[] data ) { try { return this.sign( pk, data ); } catch ( Exception e ) { return null; } } static final String HEXES = "0123456789ABCDEF"; public String sign( PrivateKey pk, byte[] data ) throws InvalidKeyException, SignatureException { Signature signer = this.getInstance( ); signer.initSign( pk ); try { signer.update( data ); byte[] sig = signer.sign( ); final StringBuilder hex = new StringBuilder( 2 * sig.length ); for ( final byte b : sig ) { hex.append(HEXES.charAt((b & 0xF0) >> 4)) .append(HEXES.charAt((b & 0x0F))); } return hex.toString().toLowerCase( ); } catch ( SignatureException e ) { LOG.debug( e, e ); throw e; } } public Signature getInstance( ) { try { return Signature.getInstance( this.toString( ) ); } catch ( NoSuchAlgorithmException e ) { LOG.fatal( e, e ); System.exit( 1 ); throw new RuntimeException( e ); } } }