<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7036.0">
<TITLE>RE: [Cryptography Team] Re: isProperlyPadded</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">Chris,</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">I guess that makes sense if</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">block</FONT></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">s were always padded.</FONT></SPAN><SPAN LANG="en-us">&nbsp;<FONT SIZE=2 FACE="Courier New"> Here is the code that I'm trying to run.&nbsp; </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">Rijndael new key: (ByteArray new: 16); decrypt: (ByteArray new: 16)</FONT></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">.</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">This is an official test of AES CBC called the monteCarlo test.</FONT></SPAN><SPAN LANG="en-us">&nbsp;<FONT SIZE=2 FACE="Courier New"> I'm trying to add the official tests to AES to see if it's working properly.&nbsp; (It doesn't appear to be correct on first glance but I'm still investigating it).</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">The problem here is that the decrypted value is not padded but is hitting the code:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">BlockCipher &gt;&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">decrypt: aByteArray</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Courier New">&quot;Answer a copy of aByteArray which is decrypted with my key.&quot;</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Courier New">| decryptedBlock |</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Courier New">decryptedBlock _ </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Courier New">self </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Courier New">decrypt: aByteArray copy</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Courier New">from: 1</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Courier New">to: aByteArray size.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Courier New">^ self isStreamCipher </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Courier New">ifTrue: [ decryptedBlock ]</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Courier New">ifFalse: </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Courier New">[ decryptedBlock</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Courier New">copyFrom: 1 </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2 FACE="Courier New">to:</FONT></SPAN><SPAN LANG="en-us"><B> <FONT SIZE=2 FACE="Courier New">decryptedBlock unpaddedSize</FONT></B></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New"> ]</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">Are AES blocks supposed to be padded and this one is not?</FONT></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&nbsp; Maybe it's missing your new padding code, I'll look into that.</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">Thanks,</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">Ron Teitelbaum</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">From: Chris Muller</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">Sent: Friday, July 07, 2006 11:16 AM</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt; </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">&gt; Since isProperlyPadded assumes that that was some padding the error</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">&gt; seems</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">&gt; unnecessary.</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">&gt; ...</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">&gt; To make it more clear if a byte array is not padded then the</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">&gt; unpaddedSize is</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">&gt; self size.</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt; </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">Hi Ron, I believe the check in #unpaddedSize is proper, let me explain.</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt; </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">Any application must know if it is dealing with a block or stream</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">cipher, therefore it knows if padding is necessary.&nbsp; I think you agree</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">with this because you said:</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt; </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">&nbsp; &gt; Since isProperlyPadded assumes that that was some padding..</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt; </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">In other words, isProperlyPadded knows nothing about whether a</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">ByteArray *is* padded, you only call it if you KNOW it's supposed to be</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">padded and then it will tell you if it is padded properly.</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt; </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">If padding is not necessary (stream cipher), the program should not be</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">asking for the #unpaddedSize at all.</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt; </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">If padding is necessary then Nils and Bruce say any improper padding</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">should be treated as an authentication error.&nbsp; If the program asks for</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">the #unpaddedSize for a message that was not properly padded, simply</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">returning &quot;self size&quot; would be erroneous and the program would then be</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">making improper assumptions about the message.</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt; </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">Regards,</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">&nbsp; Chris</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt; </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">_______________________________________________</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">Cryptography mailing list</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New">Cryptography@lists.squeakfoundation.org</FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">&gt;</FONT></SPAN><SPAN LANG="en-us"> <FONT SIZE=2 FACE="Courier New"><A HREF="http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/cryptography">http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/cryptography</A></FONT></SPAN><SPAN LANG="en-us"></SPAN></P>

</BODY>
</HTML>