microsoft-azure-storage/src/com/microsoft/azure/storage/core/SharedAccessSignatureHelper.java
private static String generateSharedAccessSignatureStringToSign(
            final SharedAccessPolicy policy, final String resource, final IPRange ipRange,
            final SharedAccessProtocols protocols, final String accessPolicyIdentifier)
            throws InvalidKeyException, StorageException {
        
        Utility.assertNotNullOrEmpty("resource", resource);

        String permissions = null;
        Date startTime = null;
        Date expiryTime = null;
        
        if (policy != null) {
            permissions = policy.permissionsToString();
            startTime = policy.getSharedAccessStartTime();
            expiryTime = policy.getSharedAccessExpiryTime();
        }
        
        String stringToSign = String.format("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",
                permissions == null ? Constants.EMPTY_STRING : permissions,
                Utility.getUTCTimeOrEmpty(startTime), Utility.getUTCTimeOrEmpty(expiryTime), resource,
                accessPolicyIdentifier == null ? Constants.EMPTY_STRING : accessPolicyIdentifier,
                ipRange == null ? Constants.EMPTY_STRING : ipRange.toString(),
                protocols == null ? Constants.EMPTY_STRING : protocols.toString(),
                Constants.HeaderConstants.TARGET_STORAGE_VERSION);

        return stringToSign;
    }
private static String generateSharedAccessSignatureStringToSign(
            final SharedAccessPolicy policy, final String resource, final IPRange ipRange,
            final SharedAccessProtocols protocols, final String accessPolicyIdentifier)
            throws InvalidKeyException, StorageException {
        
        Utility.assertNotNullOrEmpty("resource", resource);

        String permissions = null;
        Date startTime = null;
        Date expiryTime = null;
        
        if (policy != null) {
            permissions = policy.permissionsToString();
            startTime = policy.getSharedAccessStartTime();
            expiryTime = policy.getSharedAccessExpiryTime();
        }
        
        String stringToSign = String.format("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",
                permissions == null ? Constants.EMPTY_STRING : permissions,
                Utility.getUTCTimeOrEmpty(startTime), Utility.getUTCTimeOrEmpty(expiryTime), resource,
                accessPolicyIdentifier == null ? Constants.EMPTY_STRING : accessPolicyIdentifier,
                ipRange == null ? Constants.EMPTY_STRING : ipRange.toString(),
                protocols == null ? Constants.EMPTY_STRING : protocols.toString(),
                Constants.HeaderConstants.TARGET_STORAGE_VERSION);

        return stringToSign;
    }
private static String generateSharedAccessSignatureStringToSign ( final SharedAccessPolicy policy , final String resource , final IPRange ipRange , final SharedAccessProtocols protocols , final String accessPolicyIdentifier ) throws InvalidKeyException , StorageException { Utility . assertNotNullOrEmpty ( "resource" , resource ) ; String permissions = null ; Date startTime = null ; Date expiryTime = null ; if ( policy != null ) { permissions = policy . permissionsToString ( ) ; startTime = policy . getSharedAccessStartTime ( ) ; expiryTime = policy . getSharedAccessExpiryTime ( ) ; } String stringToSign = String . format ( "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s" , permissions == null ? Constants . EMPTY_STRING : permissions , Utility . getUTCTimeOrEmpty ( startTime ) , Utility . getUTCTimeOrEmpty ( expiryTime ) , resource , accessPolicyIdentifier == null ? Constants . EMPTY_STRING : accessPolicyIdentifier , ipRange == null ? Constants . EMPTY_STRING : ipRange . toString ( ) , protocols == null ? Constants . EMPTY_STRING : protocols . toString ( ) , Constants . HeaderConstants . TARGET_STORAGE_VERSION ) ; return stringToSign ; }
Get the signature hash embedded inside the Shared Access Signature.

@param policy
A {@link SharedAccessPolicy} containing the permissions for the SAS.
@param resource
The canonical resource (or resource type) string, unescaped.
@param ipRange
The range of IP addresses to hash.
@param protocols
The Internet protocols to hash.
@param headers
The optional header values to set for a blob or file accessed with this shared access signature.
@param accessPolicyIdentifier
An optional identifier for the policy.

@return The signature hash embedded inside the Shared Access Signature.

@throws InvalidKeyException
@throws StorageException
Get the signature hash embedded inside the Shared Access Signature .