Você está na página 1de 29

! " # $ " %
! %
! &
! ' ( # #)* # *' ) +
%! # , **# ' $ " #)* # *' ) -
& $
& #'
& & ( )$
& "
& *+ ,
& - $ .
& %
& . / 0 %
&! ' '"
&! .
&!
&!% #
+! )/ / #" #)* # *' ) &
+! . &
* 1 2 34 51 26 *
* 2 3 52 6 *
* & 3 5 26 -
* -
* *2 3# -
* -( 7 -
* ( -
+! -
* ! 1 5!1 6
* 8 !1 5&!1 6
* & " 1 51 6
* /
+!% # 0
1! )/ / #" #)* # *' ) 2
1! . 2
- ( 19
- 0 :
1!
1!% !
1!& *" /
1!+ 3 . &
1!1 # &
-! 4$" 5 $" 1
0! 6"6," # *' ) 0

! " # $%
! " # $ "
!
$ $ "
; $ 3

4 $ $ " $ 018 " $


$" ' " $ '
9 $
, $ ; $' " " " "' $
< ' 4 $ "
" 8 $ " +
" ; $
" $
= ;
8 " > 2 018; 018 $ ' 3
"
? "' @ $ " 8
; ' " 1 = * ;
$ $ $
' " 018 $ ' 3
A 3 $ ! " 3 $ B
@ ' $ " C/ D

! " # & $%
!
*5" # ( ?$ 8 $
; $ ?

B $ "
' $
$

(
$ $ 8 3 $
<
$ 5 6
7 , E $ 9
3
7 8 $ 3 9$ $
9 $ 3
* 8 $ $ ; $
8 8 " $ $ $
$ ;
$ $
$ 3 5 " 6 8
$ $ $

: ! " # $%
! ' ( # #)* # *' )
! " 5 6
$ " 8 $ ; C D; 3
' $ $
♦ 4 E
♦ ,
♦ , $
♦ ?
$ $ ; "

♦ #"
♦ ?
8 $? " = '" ;
" "
8 " " $ '

, ! , !
0 8
8
#"

4 E ?
"
?

4 $ ?

: ! " # * $%
$ " $
9 $ E $ $ ;
' 3 " " 5 - 6
?$ ' 3 $$ ' 3; '
9 $ 8
' 3 5 * 6
; ; 8
' 9 $ $ $
; ' $ 5
6

: ! " # - $%
%! # , **# ' $ " #)* # *' )
8 ' $ ' " $
) ' $
$= ;
&
! " ' ? 3
" ' $ " $ $
$ " 4 $ ;
$ " $ '
& *.
? "' E $E ;
' $
" 3 "
3 ' ;$ ' $ '
$$ " ' $ $ " 1
5 * &6 8 F $' ;
$ 1
& & 5 ,
! 3 $ ( " ; 3
"
8 $$ $$ ' $ 3
♦ 8 $ $
♦ 8 $ 3 5 7 $ 3 6
♦ 8 " $
2 3 $ 3 $ $ ;
' ' " ' 3
&
B$ $
; ? $ ; $ 9
E 3
' 5 GHG ' 3
0 ' 3 ' + ' 8 " ;$ $ 6
; $ $ 3 9
& * 3 $ (
8 $ ' + ' $
9
♦ 0 $ )' " $ 8 " $
$? ?$ " 5?? 6 ? ' 3 " ' '
08 $
♦ 1 3 ' ( ' 3 "
( ! $ 3 " $
♦ : 3 $ 8 " / /
5// 6

: ! " # $%
♦ 0 $ " ?#
' " <
♦ 8 1 51 6 ' " I
/ "
♦ ) 0 ) $ A) " '
"
♦ , $ <4?41 ' 8 " 278 3
? '+ ' $ 3 2 + '
$
?$ + ' ; 3 $
$ ; <4?41 5 $ 6
$ / 4 3 &!1 $
3 9 $ $$ + ' " ;
?# ' " : : $ < 5 ' 6: ' " :
:
9 $ : : # #; 1 3
"; "
4 $ $" $ $ B
$ ' 3 $ $
8 ' " " $ " $ ;
' ?$ $ $ + ' $ " "
; " $ " 5
9 6' 9 $ $
$ ' 3 3 B " 9 "
' 3 $ $ $ 3 $

9 $' 9 + ' $ $
$J* % $ ' 3 5 - $
6 " ' $ "
$ + ' 8 ' "
8 $$ ; $" 9 " : $
3
& - 9
? 3 $ $;
$
8 $ " ' $
" $ 19 ' $ '
4 3 $ $ B $ 3
' E 3 $ .
8 $ $
= $ ' $ $ '

K $ L
KM:: I $ ::L
K L
K L

: ! " # . $%
K 0 4 L
K L
K 4 = = NO4 = = ;4
NP P
;# ( 83 N* * * ;
N O<L
K< L
K 1 NO = O NO4 = = O<L
K 1 NO = O
NO4 = = O<L
K 1 NO = O
NO4 = = O<L
K< 0 4 L
K< L
K< L
K< $ L

&
$ 3 $ 5 $
6; $ " 3 (
9 " " 3 $
; ' 3 " 5
C2 #018 D6 = ' " ; " "
$
?$ ; $'
♦ , + ' !# #?
♦ $ ; $
♦ ( 1 '
= '" ; ' "
♦ ! 3 : ' 3' $ 5$
; $ 6
♦ ! 3 $ $
8 C D; " ' ?8
/ " $ ' " ' $
C D
I $ $? # / 3 "
! 3 3 $ 3 ' " $

! $ 8 ;
3 ' "
& . # 9
$ ; " 3
" 3 /0 " # " 018 8
' + ' #? 8 $
/ 0 $ " $ 5 & -6 8
$ /0 " # " $ ;
; ; $ $
3

: ! " # % $%
private byte[] GetRandomNumber(int keyLength)
{

//create an instance of the default random number generator


RandomNumberGenerator rng = RandomNumberGenerator.Create();

//obtain the required length of the byte array - 128 bits


//divided by 8 is 16
int btLength = keyLength / 8;

//create a byte array for the random number


byte[] bt = new byte[btLength];

//fill the byte array with the random number


rng.GetBytes(bt);

return bt;

: ! " # $%
&! ' '"
&! .
?$ " ; '
' Q " " ' Q
8 $ B ' ' " $ ' Q?
' " : " 3" $ $ $ "

= " $ $ ;' $
' B' ; " $

= E ' 5 $ 6
C$ D $9
?$ ; $ ' $$
= ; ; 9 '
B $ ' ;
$ $ $9 7 ;' ' $ $ ;
$ $ 9 $ $ ;$ "
$ 9' " 8 3 ' = '" ; E
$ ' $ 9 " 8
;" ;
= $E $ :' ; $ $ $
' 8 ; $ $
9 $ ' 8 $ ' 9
'
C D $ $' ;
C D $ 3 I 9 $'
+ = 3# 5 = #6;
" 8 " $$ C D"
; $$ 8 $

&!
8 $ $ 5= : 4!*6 $$ ; $ '

♦ 8 3 $9 7 3
♦ 8 $ 3
♦ 8 $ ' 9 3
8 ' C $$ D 7 $ ;
" $$ $ $ 2 $ ;
$ $ 018
$- ;' $$ $ @ ?$
$ $ ; " 8

8 4!* = :
" $ 8 $' B
" ' ; 9

: ! " # $%
" ; ; " 3 ;
$' $ 9
' $ " ' 9 " =4 ;'
018
8 ' 3 ' 018
♦ 4 8 !1
♦ =4 =
+ " $ ( =
8 =4 =
( ' " $ B $ " 3 ;
; $
8 0 , = 5 = 6 %%&;
0 ? $ 8 50? 86 ?$ #
5 ?# 6 . ; " @ 8 0 ' '
$ ; ' = : ;' ' ' 3
$ = 8 ' 3 ' "
4!* $ " 018 ? ' / /" %% 8
" $ 3 5 . ;
- $ = : 6;' 3 $
2 ; 3 '
0? 8 ?# . : 8 $ = : *-; = :&. = :* 8 "
: 7 $ ; $$ $
' E / ; '" ;
' 018 '" $
3 " " 5' $ 9
6 ?$ $ ;
$ ' $ 9 ; $ 9
" 8 3 ' 38 $ $ 3
$
&!% #
= : 4!* 8 ' " $ ' 018
? " ; '
= : 4!*; 3 &
= ' " ;4!* $ $ 018 ;
= : $ $ = ' " ;$ $ ; 4!*
* R$ $ 3
=4 = 3
4 3 $ 5 & -6 2 ; '
$ $ = : ' = ' "

= 9 $ $ 4!* ;' = :
$ "
//alg would actually be configurable in practice
string alg = "MD5";

: ! " # $%
//use System.Text.Encoding to convert to a byte array
byte[] inputText = System.Text.Encoding.Default.GetBytes(plainText);

//instantiate a base class, this allows either an SHA1Managed or


//MD5CryptoServiceProvider to be configured
HashAlgorithm ha = HashAlgorithm.Create(alg);

byte[] hashInput = null;

//create the hash


using (ha)
{
hashInput = ha.ComputeHash(inputText);
}
8 9 ' ' 3 ? ;
( =
string plainText = "Here is the message";
string hashKey = "Here is the key";

//alg would be configurable in practice


string alg = "HMACSHA1";

//create the base class, so that different a different


//algorithm class can be configured
KeyedHashAlgorithm kha = KeyedHashAlgorithm.Create(alg);

//convert the key and plaintext to byte arrays


byte[] hashKeyBytes = System.Text.Encoding.Default.GetBytes(hashKey);
byte[] plainTextBytes = System.Text.Encoding.Default.GetBytes(plainText);

//set the key


kha.Key = hashKeyBytes;

byte[] hashResultBytes = null;

//compute the hash


using(kha)
{
hashResultBytes = kha.ComputeHash(plainTextBytes);
}

: ! " # & $%
+! )/ / #" #)* # *' )
+! .
= " $ ; ' $ " Q '
" ;9 $ ;
$ " '
$ ; , ;
" " 3 '
5' 3 $ 6 $
$$ ' ? 3 '
: 5 -$ $ ' 3 $ $
' 6
3 3 $ 9 3

Secret key

Message Cipher Ciphertext


data block function block

8 9 " $ ; 3

Secret key

Ciphertext Cipher Message


block function data block

8 $ 3 " ' 018 $ ' 3


♦ 1 34 51 26
♦ 2 3 52 6
♦ 3 5 26
8 $ ;$ ' 018 ' 3
) "

: ! " # $%
* 6 7/ : 6;

Message Cipher Ciphertext


data block 1 function block 1

Message Cipher Ciphertext


data block 2 function block 2

Message Cipher Ciphertext


data block 3 function block 3

8 9 3 3
1 3
8 9 3
8 ' 3 $ 3 $ 9 ' "
9; 3 " E
8 " $1 2 3 $ 9 <
* 6 7 :6 ;
Initialisation
vector

Message Cipher Ciphertext


XOR
data block 1 function block 1

Message Cipher Ciphertext


XOR
data block 2 function block 2

Message Cipher Ciphertext


XOR
data block 3 function block 3

4 3 $ ; $ JI/
' 9 3

: ! " # * $%
8 ' ? 5? 6 ? 3 $
7 $ 38 ? E $ ;
3 5 3 6
* & ( 9 7 : (6;
# 9 3 3 $ @ 3
' $ 3 $ 9 $
9 ;$ ; 2 1 2' E
3 $ $ 2 E $ 3
$ 9 $ $ 3 7 8 '
"
9 ; - ? . 3 8 - ? E
$. 9 " ; E JI/ ' 9 8 .
9 E ; E C $ D; $

8 $ 9.
8 9 3
I 3 ; " 2;' $$ $
E
*
9 8 9 $
' 3 ; $
$ 018 $ ' 3
* * 6 7*
3 ' $ 3 7 E $ ;
#( > $
* - 5 <
8 7 $ 3 ; $ ; 3
8 7 B .
3 7 $ . 8 $ 3 7
* 5
? " 3 ' ( $
$ " # ' $ 5$
F ;$" $ 6 $' $
3 3 ' 3 ' ?$
3 ' ; 5 $' 6
; ; 3 $ 3
' $$ " ' $ + 19
8 $ $ $ '
♦ $ 9 3
♦ 8 3 $ $ '
? ; $ 3 $ ?
" 3 $ $
# ' $ ; 3 I
; " 3 E 8
" !# #?5 2 #018 6 $ 3

: ! " # - $%
' $
; $ '
! : 3 ;?# $ ' 3
$ 9 " $ 8 " $
' $ 3
+!
8 " " 018
♦ ! 1 5!1 6
♦ 8 !1 5&!1 6
♦ /" 5/ 6
♦ " 1 51 6
* : ;
8 $ ; ' , " $ % - 8
0 2 $ 502 6 , $ !1 ' $ " $"
? %.&; 0 $ $ %. = ' " ; '
"$ ; 0 02 ' $ $
!1 3 ; 3 $- ? 3 7 $*-
* :% ;
&!1 ; '
$$ 3 &!1 $$ " ;' ' 3 ; '
3 ; ' 3
? ; $ 3 ; ' $

8 018 ' ' *- 3 ;9 -


$ $$ " 3 7 -. 5 & 9*- 6
? $ 3 ; ' !1 ;
&!1
&!1 ' $ 1
* & : ;
1 $ ' !1 " " 8 0 ? $
8 50? 86 , $ "' %%
$ ' ' ; 9 $ 3 "
8 /@ ' " ' I $
$ ' $' E
0 $ /@ $ 1
4 " ' 1 ' $ &!1
? " .; % *- 3
1 ' $' "
" $ 1
" ' 3 = '" ;
1 $ !1 ; $
$ $ 3 1 " 5 " $6

: ! " # $%
? 018 ' /@ 4
$ $ $
* #
8 ' / /" / ;/ ;/ * / - ' 3 ;
/
/ $ !1
8 018 ' ; .;*-;- ; ;. ;..;%-; ; ; . 3

' " 3 7 ?$ 3 ;
' ' " 9
+!% #
&!1 $ $
1 3 $' ' " $ ;
" '
' 8 , " " $ !1
" " 4 ;" 0
; " ' $3 B 3
*- 3
$ " !1
8 $$ 3 $ ;
#( > $
8 $$ 3 E B
* 8 " 1 2 351 26;

$ 3 " 3
/ 0 5 & .6
, @ $
8 " 3 ' 5 * 6
4 $ " " 4 !0 $ $
; $$ 3 7 " $ $$
8 E ; 3 8
# $ ! ' # ! '
= 9 $ ' ' $ $ $ $

private byte[] EncryptSymmetric(


byte[] key,
string plainText,
byte[] IV,
int blockSize,
string alg,
CipherMode mode)
{

//calculate keysize based on length of array


int keySize = key.Length * 8;

: ! " # . $%
//convert the text to a byte array
byte[] btPlainText =
System.Text.Encoding.Default.GetBytes(plainText);

//use a base class so that the algorithm used is configurable


SymmetricAlgorithm sa = SymmetricAlgorithm.Create(alg);

MemoryStream ms = null;

using(sa)
{

//set the blocksize and keysize for the symmetric


//algorithm class
sa.BlockSize = blockSize;
sa.KeySize = keySize;

//set the initialisation vector


sa.IV = IV;

//set the padding to PKCS#7


sa.Padding = PaddingMode.PKCS7;

//no parallel computation, no requirement to encrypt


//as data is assembled, so use CBC mode
//It may be good practice to configure this
sa.Mode = mode;

//set the secret key for the encryption


sa.Key = key;

//the ICryptoTransform interface exposes details to the


//algorithm for handling data in blocks
ICryptoTransform ict = sa.CreateEncryptor();

//the encrypted data is written to a memory stream


ms = new MemoryStream();

//CryptoStream transforms blocks of data


//using the ICryptoTransform object
CryptoStream cs = new CryptoStream(
ms,
ict,
CryptoStreamMode.Write);

//perform the encryption


using (cs)
{
cs.Write(btPlainText, 0, btPlainText.Length);
}

return ms.GetBuffer();

? $ $ $
$ C D 3' $
@

: ! " # % $%
/ $ $ ; 3 ; ;
'
$ $ 1 56
! 56; $ '

: ! " # $%
1! )/ / #" #)* # *' )
1! .
= ' 3 9 ' $ Q8
$ $
$ ' $$ 3 $
8 " " $ B $ $ 3 $
; 3 $ " ; 3 $
; $ 3 ' 9
;$ $ ; 3 5 3 6
3 3 ' $ 3 5 " 3 6
8 $ 3 9 : $ '
; 3 " 3

$ 3 $ 9< 9 $
3 B 3 $
- 5 8
?3 9 5 / $ 6; 3 " ' '
8 " 3 3
38 3 < " 3 8 3
$ $
-
" " : 5 $
" 6 2 ' " 3 ; $ '
3 " " ' ' $
" 3 8

: ! " # $%
Party A sends a message
Party B has verified the digital
signature

Message text Do the two


hashes match?
If yes, then the
Hash created signature has
from message been verified
text

Ajsadvdvcl Ajsadvdvcl
Ajsadvdvcl
Encrypted hash
Hash created decrypted
Asymmetric from message using public
encryption of text key from
text using party certificate
A’s private key

Message text Bbjbdc&&$


Bbjbdc&&$ Public Key Cert
Encrypted hash
Message, encrypted Message text extracted
hash and Party A’s extracted
public key are
enveloped together
Public key
certificate
Message text Message text extracted and
VERIFIED -
Bbjbdc&&$ Bbjbdc&&$ this is VERY
IMPORTANT
Message sent
Public Key Cert to Party B Public Key Cert

= '" ; ' $$ ; #
( ?$ ; ' " $ ' $ " 3 8
" $ $ #(?
1!
8 $ $$ $ ;'
♦ / ; $ /" ; 8 ' $ %
♦ ! 5! 6B ?# %% 8 ;
" $ 3
8 018 $ / !
1!% !
8 018 " $ '
$ $ 5$ ;J* %6
?$ 018 3 9 ' "
$ C4 4 D 3 9
8 ' ' 3 9
♦ , 3 , 2
♦ , 2 3 F 3
♦ , 2 3 3 ,
♦ I , 3 ' " 3

: ! " # $%
= '" ; ' $ 3
♦ , 3 , 2
♦ , 3
♦ , 3 , 2
♦ , 2 3 , F 3 5, 2 3 ,
F 3 6
♦ , 2 3 3
♦ , ; " 3 5' $
, 2;' , F 3 6
♦ , $ , F 3
♦ , 3 3 ,
♦ , 3 " 3
8 , 3 , , 2 3 3

"/ * # = ! >
7 !
' $ " ( = '" ; '
3 ' $ 8 ; ' ' :
' $ ; 3
$ $
8 ' ' $
' ;( ' ' 3' "
;
" ; $ ' #? I4 5 - 6 ' '
#? 3 $ $ ; E $
' 5 $ !)) #? I4 ' 6
/ I 1#( 19 ;
$ 3 3 9 $ 3
I 1# $ C 3 D ' C 3
D 8 $$ 3 3/ $ 9 8
/ ' " $ 9
4 $ 018 ; 9
" $ ' 3 3 " $$ , '
+ " 1 3 ; J* % $ @
" ; J* % $ " 4 $+ "

8 " $ $ ; 8 " 3 $
J* % $ 9 $ $ ; : $
$ 3
8 '" $ 5+ 6' '$ $
$ $ $ ;018 9 #? $+ ' "
$ "
♦ J4) ! ' 3
' " $

: ! " # & $%
♦ $ $ 3 9
$' ; " $+
= '" ; ;
9 $ " ;

1!& *" /
#? I4 I4 ' + ' #?$
? ' ' $ ;' "
E $ 3 9
= 9 $ 4 !0

!
"
"

"

"

# $ #
%

8 #? I4 $
<<''' $ < ' < 9Q ?!N.- & : . &: - $: *:
$$.. *.%-$-H! ) N
8 2$ 9 $ #? I4; "
$ 018
= 9 ' #? I4 ; 2 F
$ $
//name of certificate to use for signature
string certName = "fred bloggs";
//create an instance of the store class
Store certStore = new StoreClass();
//open the current user store
certStore.Open(CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE,
"MY",
CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_ONLY);
//certificate object to hold fred bloggs's certificate
Certificate x509cert = null;
//iterate through certs to find certificate

: ! " # $%
foreach (Certificate cert in certStore.Certificates)
{
//obtain the name of the certificate
string name =
cert.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_SUBJECT_SIMPL
E_NAME);
//is this the certificate we wish to use?
if (name == certName)
{
x509cert = cert;
}
}
//create a signer
Signer messageSigner = new SignerClass();
//set the certificate to use
messageSigner.Certificate = x509cert;
//create a signed data class
SignedData sd = new SignedDataClass();
//text to sign
sd.Content = "This is the piece of text that requires signing";
//sign the message
string signedMessage = sd.Sign(messageSigner,
false,
CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);

8 ' 9; 9 $ 8
#( >
#( > $ ;' ' ' $
= ' ' " $ " $ -

//create the signeddata class


SignedDataClass sd = new SignedDataClass();
//call the verify method - signedText is the string that has to be
verified
sd.Verify(signedText,
false,
CAPICOM_SIGNED_DATA_VERIFY_FLAG.CAPICOM_VERIFY_SIGNATURE_AND_CERTIF
ICATE);

//to check the signatures, we have to iterate through all of the


signatures.
//Messages can be cosigned
foreach (Signer sr in sd.Signers)
{

Signer s = sr;

//call the IsValid.Result property to see if the signature is valid


MessageBox.Show(
s.Certificate.GetInfo(
CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME)
+ ":" + s.Certificate.IsValid().Result);

//this is useful - CAPICOM will also check CRL status


//If you set the CheckFlag parameter
//it will also obtain CRL from the certificate's CRL
//Distribution Point
s.Certificate.IsValid().CheckFlag =

: ! " # * $%
CAPICOM_CHECK_FLAG.CAPICOM_CHECK_TRUSTED_ROOT |
CAPICOM_CHECK_FLAG.CAPICOM_CHECK_TIME_VALIDITY |
CAPICOM_CHECK_FLAG.CAPICOM_CHECK_SIGNATURE_VALIDITY |
CAPICOM_CHECK_FLAG.CAPICOM_CHECK_ONLINE_REVOCATION_STATUS ;

//call the IsValid.Result property again


MessageBox.Show(s.Certificate.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICO
M_CERT_INFO_SUBJECT_SIMPLE_NAME) + ":" +
s.Certificate.IsValid().Result.ToString());

1!+ 3 .
" " $ ' E $ $ ?
' 3
$ 8 $ B
3 $ E ' $ 8
/) $
?$ 3 " $ 5 I $
# 6; '
9 ' + ' $ 5$ $ #? 6
♦ 8 E $ ' $
♦ 8 ) 3 # $ ' ' " 3
♦ $ ' E
8 $ $ " ;
" 3 '
= '" ; ' 3 $ $
? $'
$' 3 ! $ $ $
# $S
1!1 #
! $ $ I $ 3
9
+ $ 3 9 ; 3

"/ * # =" . 7 >


. ?3
7 @!
? 3 $
?$ ' #(?; ' $
J* % $ ?$ 018 ; $
' $ <
2 " ; 018 " $ $
$ 3 9 B $ ' ; ' " '
I ' ' ( = '" ; '
' : $

: ! " # - $%
4 3 / I 1#( 19 $ 3 9 $ 018

8 ; ;' $ ' ' #? I4 '


$ = '" ; ' ' $ #( > " $
$ ?$ $ E 5 J4)! ? 6;
$ #?$ 9 $ $ $ ;
018 $ $
8 9" $ 018 $ ' 3' 9 $
' $ 8 ' $
"
I $ ' " ; " '
' 3 3 ' ? ' $
$ ' ; $ 3 "
$ $ $ 8 3
' $ $ ; ' $
$ $ "

: ! " # $%
-! 4$" 5 $"
8 " $ 3 ' '
" A !! #
1 # $ $ "
4 $ 3 $ $
5 & *6
?$ ;

0 " ' '


$ 9 5 9 6
"
# $
+ ' 4 $
4 3 $ $ E $
3 5 & *6
4 3 $
$
3 " 5 & &6
$
1 3 $+ ' '
' ?# 5 & *
19 3 '
5 -6
, $ $ 3 9 5
- &;- 6
3 5 *6
1 $ , 3 $ 5 6

, = : $ " ;4!* $ 5 &6

, : , #? I4 5 - 6
4 3 " $ ' $
" 3 B $ " #(?5 -6
1 &!1 ;' 3 5 *6
$
' $ ; ;
5 * &6
4 3 3 7; ;? $ 5 & -;
* &6
, #? I4 5 - 6
0 "
# $ #(? $ ;

?$ #(? $ $ ; '
$ B ' $ $ 5 - -6
4 3 / $

: ! " # . $%
0! 6"6," # *' )
♦ 0 ' 3 ' + ' 8 " G G ;#
:+
♦ # 018 ; G ;# IF
/
♦ # G G ;) ;4 ! ;/ / ;G$$ # ;
#
♦ H $ 19 # I #
♦ 4 = ' ;! " ) 2 ;# 4 $#
♦ ! 4 $+ ' 0 ' 3 # 4 $#
♦ 4 !0 # $ ! # ! '
♦ 4 !0 ? #? I4 G )
♦ 0 ? $ 8 50? 86 '
<< "< 8 3< < @ <
♦ 0 ' 3 1 <<''' 3 < <
♦ ? " $/ @ 0 ;G ( ; $ ) 3 ;2 ;
43 ;! " + ;! +
♦ 2 #018 :4 $# # G! 4 ; 9
4 3 ; ;4 !
♦ / ' : <<''' <

: ! " # % $%

Você também pode gostar