[Mono-list] How to set parameters for RSACryptoServiceProvider

Sebastien Pouliot spouliot@videotron.ca
Tue, 04 Nov 2003 20:18:01 -0500


This is a multi-part message in MIME format.

--Boundary_(ID_LzvAhUKPp3QMqpeVM/Qxsw)
Content-type: text/plain; charset=us-ascii
Content-transfer-encoding: 7BIT

MessageGoran,

Are you having this problem with Mono or the MS framework ?

I ask because right now my mono setup doesn't work :-( but I'm able to
duplicate the bug on the MS framework (anyway your VB code can only work
under Windows and IIRC the exception message "Bad Key" is only shown in
Windows).

Anyway at first look it seems that MS requires the full parameters for
importing a private key - with no (known) good reason. This isn't (supposed
to be) the case for Mono - you can have a look at
/mcs/class/corlib/Mono.Security/RSAManaged.cs. Please fill a bug into
bugzilla if this doesn't work on Mono
(http://bugzilla.ximian.com/enter_bug.cgi?product=Mono%2FClass%20Libraries).

As for solution for the MS framework:

a.    Report the bug to Microsoft (this is a long term solution but if you
don't complain it won't get fixed);
b.    Keep all exported parameters for the private key (easy solution,
faster decryption but requires extra space);
c.    Recalculate the other parameters (time consuming);
d.    Use Mono's RSAManaged implementation (on both Windows and Mono's)

Sebastien Pouliot
Security Architect, Motus Technologies, http://www.motus.com
work: spouliot@motus.com
home: spouliot@videotron.ca
blog: http://pages.infinit.net/ctech/poupou.html


  -----Original Message-----
  From: mono-list-admin@lists.ximian.com
[mailto:mono-list-admin@lists.ximian.com]On Behalf Of Goran Milenkovic
  Sent: 3 novembre 2003 08:56
  To: 'Mono-list@lists.ximian.com'
  Subject: [Mono-list] How to set parameters for RSACryptoServiceProvider


  The following VB.NET example should generate the new key pair, store
generated values localy, then encrypt the test string using public key and
decrypt it using private key. However, it works only if all parameters
(P,Q,DP,DQ,InverseQ & D) are given for the decryption, but not if only D is
given. That means that for simple decryption private key is not enough, but
also all of the other parameters ??

  If you change boolean value OnlyD to True, assuming that only D should be
enough for decryption, then it works. Otherwise, an exception occurs ("Bad
Key"). Is there any solution for this ?



  '-----------------------------

  Dim OnlyD As Boolean = False

  Dim TestResult1() As Byte

  Dim TestResult2() As Byte

  '---Generate the key pair and export all of it's parameters into the
RSAParams1

  Dim RSAParams1 As RSAParameters = New RSAParameters

  Dim RSAObj1 As RSACryptoServiceProvider = New RSACryptoServiceProvider

  RSAParams1 = RSAObj1.ExportParameters(True)

  '---Get all parameters into local variables

  Dim myModulus As Byte() = RSAParams1.Modulus

  Dim myExponent As Byte() = RSAParams1.Exponent

  Dim myPrivateKey As Byte() = RSAParams1.D

  Dim myP As Byte() = RSAParams1.P

  Dim myQ As Byte() = RSAParams1.Q

  Dim myDP As Byte() = RSAParams1.DP

  Dim myDQ As Byte() = RSAParams1.DQ

  Dim myIQ As Byte() = RSAParams1.InverseQ

  '---Create new RSACryproProvider

  Dim RSAParams2 As RSAParameters = New RSAParameters

  Dim RSAObj2 As RSACryptoServiceProvider = New RSACryptoServiceProvider

  '---Set the public key

  RSAParams2.Modulus = myModulus

  RSAParams2.Exponent = myExponent

  RSAObj2.ImportParameters(RSAParams2)

  '---Encrypt with public key

  TestResult1 = RSAObj2.Encrypt(Encoding.ASCII.GetBytes("TEST"), False)

  MsgBox("Encrypted")

  '---Now set the private key

  RSAParams2.D = myPrivateKey

  If (Not OnlyD) Then

      RSAParams2.P = myP

      RSAParams2.Q = myQ

      RSAParams2.DP = myDP

      RSAParams2.DQ = myDQ

      RSAParams2.InverseQ = myIQ

  End If

  RSAObj2.ImportParameters(RSAParams2)


  '---Decrypt with private key

  TestResult2 = RSAObj2.Decrypt(TestResult1, False)

  MsgBox("Decrypted. Original string is: " &
Encoding.ASCII.GetString(TestResult2))

  '-----------------------------



  Many Thanks,

  Goran

  gmilenkovic@irdetoaccess.com


  This e-mail and any attachments are CONFIDENTIAL and intended solely for
the use of the individual(s) to whom it is addressed. It can contain
proprietary confidential information and/or be subject to legal privilege
and/or subject to a non-disclosure Agreement. Unauthorized use, disclosure
or copying is strictly prohibited. If you are not the/an addressee and are
in possession of this e-mail, please notify us immediately.




--Boundary_(ID_LzvAhUKPp3QMqpeVM/Qxsw)
Content-type: text/html; charset=us-ascii
Content-transfer-encoding: 7BIT

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML xmlns:o = 
"urn:schemas-microsoft-com:office:office"><HEAD><TITLE>Message</TITLE>
<META http-equiv=Content-Type content="text/html; charset=US-ASCII">
<META content="MSHTML 6.00.2800.1264" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Arial color=#0000ff size=2><SPAN 
class=609205300-05112003>Goran,</SPAN></FONT></DIV>
<DIV><FONT face=Arial color=#0000ff size=2><SPAN 
class=609205300-05112003></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial color=#0000ff size=2><SPAN class=609205300-05112003>Are 
you having this problem with Mono or the MS framework ?</SPAN></FONT></DIV>
<DIV><FONT face=Arial color=#0000ff size=2><SPAN 
class=609205300-05112003></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial color=#0000ff size=2><SPAN class=609205300-05112003>I ask 
because r</SPAN></FONT><FONT face=Arial color=#0000ff size=2><SPAN 
class=609205300-05112003>ight now my mono setup doesn't work :-( but I'm able to 
duplicate the bug on the MS framework (anyway your VB code can only work under 
Windows and IIRC the exception message "Bad Key" is only shown in 
Windows).</SPAN></FONT></DIV>
<DIV><FONT face=Arial color=#0000ff size=2><SPAN 
class=609205300-05112003></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial><FONT color=#0000ff><FONT size=2><FONT><SPAN 
class=609205300-05112003>Anyway at first look it seems that MS requires the full 
parameters for importing a private key - with no (known) good reason. 
</SPAN></FONT></FONT></FONT></FONT><FONT face=Arial><FONT color=#0000ff><FONT 
size=2><FONT><SPAN class=609205300-05112003>This isn't (supposed to be) the case 
for Mono - you can have a look at 
/mcs/class/corlib/Mono.Security/RSAManaged.cs</SPAN></FONT>.<SPAN 
class=609205300-05112003> Please fill a bug into bugzilla if this doesn't work 
on Mono (<A 
href="http://bugzilla.ximian.com/enter_bug.cgi?product=Mono%2FClass%20Libraries">http://bugzilla.ximian.com/enter_bug.cgi?product=Mono%2FClass%20Libraries</A>).</SPAN></FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial><FONT color=#0000ff><FONT size=2><SPAN 
class=609205300-05112003></SPAN></FONT></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial><FONT color=#0000ff><FONT size=2><SPAN 
class=609205300-05112003>As for solution for the MS 
framework:</SPAN></FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial><FONT color=#0000ff><FONT size=2><SPAN 
class=609205300-05112003></SPAN></FONT></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial><FONT color=#0000ff><FONT size=2><SPAN 
class=609205300-05112003>a.&nbsp;&nbsp;&nbsp; Report the bug to Microsoft (this 
is a long term solution but if you don't complain it won't get 
fixed);</SPAN></FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial><FONT color=#0000ff><FONT size=2><SPAN 
class=609205300-05112003>b.&nbsp;&nbsp;&nbsp; Keep all exported parameters for 
the private key (easy solution, faster decryption but requires extra 
space);</SPAN></FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial><FONT color=#0000ff><FONT size=2><SPAN 
class=609205300-05112003>c.&nbsp;&nbsp;&nbsp; Recalculate the other parameters 
(time consuming);</SPAN></FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial><FONT color=#0000ff><FONT size=2><SPAN 
class=609205300-05112003>d.&nbsp;&nbsp;&nbsp; Use Mono's RSAManaged 
implementation (on both Windows and Mono's)</SPAN></FONT></FONT></FONT></DIV>
<DIV><FONT face=Arial color=#0000ff size=2><SPAN 
class=609205300-05112003></SPAN></FONT><FONT face=Arial color=#0000ff 
size=2><SPAN class=609205300-05112003></SPAN></FONT><FONT face=Arial 
color=#0000ff size=2><SPAN class=609205300-05112003></SPAN></FONT><FONT 
face=Arial color=#0000ff size=2><SPAN 
class=609205300-05112003></SPAN></FONT>&nbsp;</DIV>
<P><FONT size=2>Sebastien Pouliot<BR>Security Architect, Motus Technologies, <A 
href="http://www.motus.com/" target=_blank>http://www.motus.com</A><BR>work: 
spouliot@motus.com<BR>home: spouliot@videotron.ca<BR>blog: <A 
href="http://pages.infinit.net/ctech/poupou.html" 
target=_blank>http://pages.infinit.net/ctech/poupou.html</A><BR>&nbsp;</FONT> 
</P>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
  <DIV class=OutlookMessageHeader dir=ltr align=left><FONT face=Tahoma 
  size=2>-----Original Message-----<BR><B>From:</B> 
  mono-list-admin@lists.ximian.com 
  [mailto:mono-list-admin@lists.ximian.com]<B>On Behalf Of </B>Goran 
  Milenkovic<BR><B>Sent:</B> 3 novembre 2003 08:56<BR><B>To:</B> 
  'Mono-list@lists.ximian.com'<BR><B>Subject:</B> [Mono-list] How to set 
  parameters for RSACryptoServiceProvider<BR><BR></FONT></DIV>
  <DIV><FONT face=Arial>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
  style="mso-spacerun: yes"><SPAN class=910164013-03112003>The following 
  VB.NET&nbsp;example should generate the new key pair, store generated values 
  localy, then encrypt the test string using public&nbsp;key and decrypt it 
  using private key. However, it works only if all parameters 
  (P,Q,DP,DQ,InverseQ &amp; D) are given for the decryption, but not if only D 
  is given. That means that for simple decryption private key is not enough, but 
  also all of the other parameters ?? </SPAN></SPAN></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
  style="mso-spacerun: yes"><SPAN class=910164013-03112003>If you change boolean 
  value OnlyD to True, assuming that only D should be enough for decryption, 
  then it works. Otherwise, an exception occurs ("Bad Key"). Is there any 
  solution for this ?</SPAN></SPAN></SPAN><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
  style="mso-spacerun: yes"><SPAN 
  class=910164013-03112003></SPAN></SPAN></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
  style="mso-spacerun: yes"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"></SPAN></SPAN></SPAN>&nbsp;</P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
  style="mso-spacerun: yes"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
  class=910164013-03112003>---</SPAN><SPAN 
  class=910164013-03112003>--------------------------</SPAN></SPAN></P></SPAN></SPAN>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim OnlyD As Boolean = 
  False<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim TestResult1() As 
  Byte<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim TestResult2() As 
  Byte<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
  class=910164013-03112003>---</SPAN>Generate the key pair and export all of 
  it's parameters into the RSAParams1<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim RSAParams1 As 
  RSAParameters = New RSAParameters<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim RSAObj1 As 
  RSACryptoServiceProvider = New RSACryptoServiceProvider<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">RSAParams1 = 
  RSAObj1.ExportParameters(True)<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
  class=910164013-03112003>---</SPAN>Get all parameters into local 
  variables<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myModulus As Byte() = 
  RSAParams1.Modulus<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myExponent As Byte() = 
  RSAParams1.Exponent<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myPrivateKey As Byte() 
  = RSAParams1.D<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myP As Byte() = 
  RSAParams1.P<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myQ As Byte() = 
  RSAParams1.Q<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myDP As Byte() = 
  RSAParams1.DP<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myDQ As Byte() = 
  RSAParams1.DQ<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myIQ As Byte() = 
  RSAParams1.InverseQ<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
  class=910164013-03112003>---</SPAN>Create new 
  RSACryproProvider<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim RSAParams2 As 
  RSAParameters = New RSAParameters<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim RSAObj2 As 
  RSACryptoServiceProvider = New RSACryptoServiceProvider<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
  class=910164013-03112003>---</SPAN>Set the public key<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">RSAParams2.Modulus = 
  myModulus<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">RSAParams2.Exponent = 
  myExponent<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">RSAObj2.ImportParameters(RSAParams2)<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
  class=910164013-03112003>---</SPAN>Encrypt with public 
  key<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">TestResult1 = 
  RSAObj2.Encrypt(Encoding.ASCII.GetBytes("TEST"), False)<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">MsgBox("Encrypted")<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
  class=910164013-03112003>---</SPAN>Now set the private 
  key<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">RSAParams2.D = 
  myPrivateKey<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">If (Not OnlyD) 
  Then<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
  class=910164013-03112003>&nbsp;&nbsp;&nbsp; </SPAN>RSAParams2.P = 
  myP<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
  class=910164013-03112003>&nbsp;&nbsp;&nbsp; </SPAN>RSAParams2.Q = 
  myQ<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
  class=910164013-03112003>&nbsp;&nbsp;&nbsp; </SPAN>RSAParams2.DP = 
  myDP<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
  class=910164013-03112003>&nbsp;&nbsp;&nbsp; </SPAN>RSAParams2.DQ = 
  myDQ<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
  class=910164013-03112003>&nbsp;&nbsp;&nbsp; </SPAN>RSAParams2.InverseQ = 
  myIQ<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">End 
  If<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">RSAObj2.ImportParameters(RSAParams2)<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
  class=910164013-03112003>---</SPAN>Decrypt with private 
  key<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">TestResult2 = 
  RSAObj2.Decrypt(TestResult1, False)<o:p></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">MsgBox("Decrypted. 
  Original string is: " &amp; 
  Encoding.ASCII.GetString(TestResult2))</SPAN></P><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
  class=910164013-03112003>---</SPAN><SPAN 
  class=910164013-03112003>--------------------------</SPAN></SPAN></P></SPAN>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
  class=910164013-03112003><FONT face=Arial></FONT></SPAN></SPAN><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"></SPAN>&nbsp;</P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p><SPAN 
  class=910164013-03112003>Many Thanks,</SPAN></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p><SPAN 
  class=910164013-03112003>Goran</SPAN></o:p></SPAN></P>
  <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p><SPAN 
  class=910164013-03112003><A 
  href="mailto:gmilenkovic@irdetoaccess.com">gmilenkovic@irdetoaccess.com</A></SPAN></o:p></SPAN></P></FONT></DIV>
  <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
  <DIV align=left><SPAN 
  style="FONT-SIZE: 7pt; COLOR: blue; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana">
  <P class=MsoNormal 
  style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none; tab-stops: 62.35pt 85.05pt 153.1pt 175.75pt 243.8pt 266.5pt 334.55pt 357.2pt 425.25pt"><SPAN 
  style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana">This 
  e-mail and any attachments are CONFIDENTIAL and intended solely for the use of 
  the individual(s) to whom it</SPAN><SPAN 
  style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"> i</SPAN><SPAN 
  style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana">s 
  addressed. It can contain proprietary confidential information and/or be 
  subject to legal privilege and/or subject to a non-disclosure Agreement. 
  Unauthorized use, disclosure or copying is strictly prohibited. If you are not 
  the/an addressee and are in possession of this e-mail, please notify us 
  immediately.<o:p></o:p></SPAN></P>
  <P class=MsoNormal 
  style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none; mso-pagination: none"><FONT 
  face=Arial color=#000000 size=2></FONT></SPAN><SPAN 
  style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"><FONT 
  face=Verdana color=#ff0000 size=1><FONT face=Arial color=#000000 
  size=2></FONT>&nbsp;</P></FONT></SPAN></DIV>
  <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV></BLOCKQUOTE></BODY></HTML>

--Boundary_(ID_LzvAhUKPp3QMqpeVM/Qxsw)--