<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#ffffff">
    <div class="moz-text-plain" wrap="true" style="font-family:
      -moz-fixed; font-size: 14px;" lang="x-western">
      <pre wrap="">The problem in this example is the use of Data.Binary. When using
Data.ByteString.Lazy.Char8 instead, the problem does not exist.

import qualified Codec.Crypto.RSA as Crypto
import System.Random (mkStdGen)
import Data.ByteString.Lazy.UTF8 (toString)
import qualified Data.ByteString.Lazy.Char8 as C8
import qualified Data.ByteString.Lazy

n = 1024
(pubKey,privKey,_) = Crypto.generateKeyPair (mkStdGen n) n

encrypt :: String -&gt; Data.ByteString.Lazy.ByteString
encrypt str = fst $ Crypto.encrypt (mkStdGen n) pubKey (C8.pack str)

decrypt :: Data.ByteString.Lazy.ByteString -&gt; String
decrypt = toString . Crypto.decrypt privKey

decrypt $ encrypt "haskell" = "haskell"



Regards,
Mathias

Am 20.11.2010 13:15, schrieb Charles-Pierre Astolfi:
</pre>
      <blockquote type="cite" style="color: rgb(0, 0, 0);">
        <pre wrap=""><span class="moz-txt-citetags">&gt; </span>Here's a working example:
<span class="moz-txt-citetags">&gt;</span>
<span class="moz-txt-citetags">&gt; </span>import qualified Codec.Crypto.RSA as Crypto
<span class="moz-txt-citetags">&gt; </span>import System.Random (mkStdGen)
<span class="moz-txt-citetags">&gt; </span>import Data.Binary (encode)
<span class="moz-txt-citetags">&gt; </span>import Data.ByteString.Lazy.UTF8 (toString)
<span class="moz-txt-citetags">&gt;</span>
<span class="moz-txt-citetags">&gt; </span>n = 1024
<span class="moz-txt-citetags">&gt; </span>(pubKey,privKey,_) = Crypto.generateKeyPair (mkStdGen n) n
<span class="moz-txt-citetags">&gt;</span>
<span class="moz-txt-citetags">&gt; </span>encrypt :: (Data.Binary.Binary a) =&gt; a -&gt;
<span class="moz-txt-citetags">&gt; </span>Data.ByteString.Lazy.Internal.ByteString
<span class="moz-txt-citetags">&gt; </span>encrypt str = fst $ Crypto.encrypt (mkStdGen n) pubKey (encode str)
<span class="moz-txt-citetags">&gt;</span>
<span class="moz-txt-citetags">&gt; </span>decrypt :: Data.ByteString.Lazy.Internal.ByteString -&gt; String
<span class="moz-txt-citetags">&gt; </span>decrypt = toString . Crypto.decrypt privKey
<span class="moz-txt-citetags">&gt;</span>
<span class="moz-txt-citetags">&gt; </span>Thus,
<span class="moz-txt-citetags">&gt; </span>decrypt $ encrypt "haskell" = "\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ahaskell"
<span class="moz-txt-citetags">&gt;</span>
<span class="moz-txt-citetags">&gt;</span>
<span class="moz-txt-citetags">&gt; </span>I'm using Codec.Crypto.RSA and you're quoting Codec.Encryption.RSA,
<span class="moz-txt-citetags">&gt; </span>which is not the same thing; unfortunately I need to use RSAES-OAEP
<span class="moz-txt-citetags">&gt; </span>(SHA1) so I guess I have to stick with Codec.Crypto.RSA.
<span class="moz-txt-citetags">&gt; </span>Any ideas?
<span class="moz-txt-citetags">&gt; </span>--
<span class="moz-txt-citetags">&gt; </span>Cp
<span class="moz-txt-citetags">&gt;</span>
<span class="moz-txt-citetags">&gt;</span>
<span class="moz-txt-citetags">&gt;</span>
<span class="moz-txt-citetags">&gt; </span>On Sat, Nov 20, 2010 at 12:50, Dominic Steinitz <a class="moz-txt-link-rfc2396E" href="mailto:dominic@steinitz.org">&lt;dominic@steinitz.org&gt;</a> wrote:
</pre>
        <blockquote type="cite" style="color: rgb(0, 0, 0);">
          <pre wrap=""><span class="moz-txt-citetags">&gt;&gt; </span>Charles-Pierre Astolfi &lt;cpa &lt;at&gt; crans.org&gt; writes:
<span class="moz-txt-citetags">&gt;&gt;</span>
</pre>
          <blockquote type="cite" style="color: rgb(0, 0, 0);">
            <pre wrap=""><span class="moz-txt-citetags">&gt;&gt;&gt; </span>Hi -cafe,
<span class="moz-txt-citetags">&gt;&gt;&gt;</span>
<span class="moz-txt-citetags">&gt;&gt;&gt; </span>I have a question about Codec.Crypto.RSA: how to enforce that
<span class="moz-txt-citetags">&gt;&gt;&gt; </span>(informally) decrypt . encrypt = id
<span class="moz-txt-citetags">&gt;&gt;&gt; </span>Consider this code:
<span class="moz-txt-citetags">&gt;&gt;&gt;</span>
</pre>
          </blockquote>
          <pre wrap=""><span class="moz-txt-citetags">&gt;&gt; </span>That's certainly what I would expect and one of the unit tests  that comes with
<span class="moz-txt-citetags">&gt;&gt; </span><a class="moz-txt-link-freetext" href="http://hackage.haskell.org/packages/archive/Crypto/4.2.2/doc/html/Codec-Encryption-RSA.html">http://hackage.haskell.org/packages/archive/Crypto/4.2.2/doc/html/Codec-Encryption-RSA.html</a>
<span class="moz-txt-citetags">&gt;&gt; </span>checks for this. I wasn't able to get you code to compile so I couldn't
<span class="moz-txt-citetags">&gt;&gt; </span>investigate further. Maybe you could post a fully compiling example?
<span class="moz-txt-citetags">&gt;&gt;</span>
<span class="moz-txt-citetags">&gt;&gt; </span>_______________________________________________
<span class="moz-txt-citetags">&gt;&gt; </span>Haskell-Cafe mailing list
<span class="moz-txt-citetags">&gt;&gt; </span><a class="moz-txt-link-abbreviated" href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a>
<span class="moz-txt-citetags">&gt;&gt; </span><a class="moz-txt-link-freetext" href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a>
<span class="moz-txt-citetags">&gt;&gt;</span>
</pre>
        </blockquote>
        <pre wrap=""><span class="moz-txt-citetags">&gt; </span>_______________________________________________
<span class="moz-txt-citetags">&gt; </span>Haskell-Cafe mailing list
<span class="moz-txt-citetags">&gt; </span><a class="moz-txt-link-abbreviated" href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a>
<span class="moz-txt-citetags">&gt; </span><a class="moz-txt-link-freetext" href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a>
</pre>
      </blockquote>
    </div>
  </body>
</html>