[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Deflate compression again
Hi all,
The thread at
http://www.oasis-open.org/archives/saml-dev/200604/threads.html#00005
already discussed how to use the Java java.util.zip.Deflater in order to
compress
a SAML protocol message for use with the HTTP Redirect Binding.
It was pointed to the need to set the "nowrap" argument of the the
Deflater constructor
to "true" in order to produce the correct output (RFC1951, without zlib
headers).
We succeed in encoding and decoding data without the headers using the
Deflater and
Inflater classes.
What doesn't work however is decoding in this way the SAMLRequest
parameter that is presented
as an example of the Redirect Binding in the SAML2 Bindings document.
Are we missing something or is this example not encoded correctly? If
the latter is the case, could someone
supply a correctly encoded SAMLRequest for testing purposes?
We try to decompress the parameter with the following code, it fails with
"Exception in thread "main" java.util.zip.DataFormatException: invalid
bit length repeat
at java.util.zip.Inflater.inflateBytes(Native Method)..."
// Example of an HTTP-Redirect encoded LogoutRequest message
from SAML2 Bindings Spec (p.21)
String
samlRequestUrlEncoded="fVFdS8MwFH0f7D%2BUvGdNsq62oSsIQyhMESc%2B%2BJYlmRbWpObeyvz3puv2IMjyFM7HPedyK1DdsZdb%2F%2BEHfLFfgwVMTt3RgTwzazIEJ72CFqRTnQWJWu7uH7dSLJjsg0ev%2FZFMlttiBWADtt6R%2BSyJr9msiRH7O70sCm31Mj%2Bo%2BC%2B1KA5GlEWeZaogSQMw2MYBKodrIhjLKONU8FdeSsZkVr6T5M0GiHMjvWCknqZXZ2OoPxF7kGnaGOuwxZ%2Fn4L9bY8NC%2By4du1XpRXnxPcXizSZ58KFTeHujEWkNPZylsh9bAMYYUjO2Uiy3jCpTCMo5M1StVjmN9SO150sl9lU6RV2Dp0vsLIy7NM7YU82r9B90PrvCf85W%2FwL8zSVQzAEAAA%3D%3D";
System.out.println("Url Encoded SAMLRequest: " +
samlRequestUrlEncoded + "\n");
String urlDecoded = URLDecoder.decode(samlRequestUrlEncoded,
"UTF-8");
System.out.println("URL-decoded: " + urlDecoded + "\n");
byte compressedBytes[] = new
sun.misc.BASE64Decoder().decodeBuffer(samlRequestUrlEncoded);
// nowrap=true
Inflater decompresser = new Inflater(true);
decompresser.setInput(compressedBytes);
byte[] result = new byte[2000];
int resultLength = decompresser.inflate(result);
decompresser.end();
// Decode the bytes into a String
String outputString = new String(result, 0, resultLength, "UTF-8");
System.out.println("inflater output: " + outputString);
Thanks for your help,
Andreas
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]