anchor.diff:      canon.write(CryptoUtils.bytesToHex(payloadHash));
       
       return canon.toString();
  +  }
  +  
  +  String toSign(DateTime time, String scope, List<int> canonicalHash){
  +    var canon = new StringBuffer();
  +    
  +    // 1. Algorithm
  +    canon.writeln('AWS4-HMAC-SHA256');
  +    
  +    // 2. RequestDate
  +    canon.writeln(long4.format(time));
  +    
  +    // 3. CredentialScope
  +    canon.writeln(scope);
  +    
  +    // 4. HashedCanonicalRequest
  +    canon.write(CryptoUtils.bytesToHex(canonicalHash));
  +    
  +    return canon.toString();
  +  }
  +  
  +  String credentialScope(DateTime time, String region, String service){
  +    return [short4.format(time), region, service, 'aws4_request'].join('/');
     }
     
     String calculateSignature2(String canonical, String secretKey){
  
positive.code: 
  class Sign{
    var iso = new DateFormat('yyyy-MM-ddTHH:mm:ss');
    
    Request sign2(Request req, String accessKey,
                 String secretKey, [DateTime time]){
  
negative.code:     
      //Add the query string components as UTF-8 characters which are URL encoded
      //and sorted using lexicographic byte ordering.
      canon.write(canonicalQueryString(uri.queryParameters));
      
      return canon.toString();
    }
  