Example #1
0
  public boolean sign(Principal.Authentic keys, HttpRequest request) {
    if (null != keys) {
      RSA rsa = new RSA(keys);
      request.maySetDate();
      request.maySetHost();
      request.setContentMD5();
      this.setSAuthVersion(request);
      this.setSAuthUID(request, keys.getUID());
      this.setSAuthNonce(request);

      java.lang.String requestline =
          request.validateMethod() + ' ' + request.validatePathComplete();
      java.lang.String headerHost = request.validateHostHeaderString();
      java.lang.String headerDate = request.validateDateHeaderString();
      java.lang.String headerSAuthVersion = this.validateSAuthVersionHeaderString(request);
      java.lang.String headerSAuthUID = this.validateSAuthUIDHeaderString(request);
      java.lang.String headerSAuthNonce = this.validateSAuthNonceHeaderString(request);

      java.lang.String headerContentType = null;
      java.lang.String headerContentLength = null;
      java.lang.String headerContentEncoding = null;
      java.lang.String headerContentRange = null;
      java.lang.String headerContentLocation = null;
      java.lang.String headerETag = null;
      java.lang.String headerLastModified = null;
      java.lang.String headerExpires = null;
      java.lang.String headerContentMD5 = null;

      SHA1 sha = new SHA1();
      sha.update(requestline);
      sha.update(headerHost);
      sha.update(headerDate);
      if (request.isContentLengthPositive()) {

        headerContentType = request.getContentTypeHeaderString();
        sha.update(headerContentType);

        headerContentLength = request.validateContentLengthHeaderString();
        sha.update(headerContentLength);

        headerContentEncoding = request.getContentEncodingHeaderString();
        sha.update(headerContentEncoding);

        headerContentRange = request.getContentRangeHeaderString();
        sha.update(headerContentRange);

        headerContentLocation = request.getContentLocationHeaderString();
        sha.update(headerContentLocation);

        headerETag = request.getETagHeaderString();
        sha.update(headerETag);

        headerLastModified = request.getLastModifiedHeaderString();
        sha.update(headerLastModified);

        headerExpires = request.getExpiresHeaderString();
        sha.update(headerExpires);

        headerContentMD5 = request.validateContentMD5HeaderString(); // (verifyContentMD5)
        sha.update(headerContentMD5);
      }
      sha.update(headerSAuthVersion);
      sha.update(headerSAuthUID);
      sha.update(headerSAuthNonce);

      long signature = Function.Xor.Hash64(rsa.sign(sha));

      this.setSAuthSignature(request, signature);
      return true;
    } else throw new alto.sys.Error.Argument();
  }