[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> </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> </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> </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> </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> </DIV>
<DIV><FONT face=Arial><FONT color=#0000ff><FONT size=2><SPAN
class=609205300-05112003>a. 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. 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. 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. 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> </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> </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 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 ?? </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> </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> </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> </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> </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> </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> </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: " &
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> </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> </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> </P></FONT></SPAN></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV></BLOCKQUOTE></BODY></HTML>
--Boundary_(ID_LzvAhUKPp3QMqpeVM/Qxsw)--