Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(170)

Side by Side Diff: openssl/doc/apps/smime.pod

Issue 9254031: Upgrade chrome's OpenSSL to same version Android ships with. (Closed) Base URL: http://src.chromium.org/svn/trunk/deps/third_party/openssl/
Patch Set: '' Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « openssl/doc/apps/s_server.pod ('k') | openssl/doc/apps/speed.pod » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 =pod 1 =pod
2 2
3 =head1 NAME 3 =head1 NAME
4 4
5 smime - S/MIME utility 5 smime - S/MIME utility
6 6
7 =head1 SYNOPSIS 7 =head1 SYNOPSIS
8 8
9 B<openssl> B<smime> 9 B<openssl> B<smime>
10 [B<-encrypt>] 10 [B<-encrypt>]
11 [B<-decrypt>] 11 [B<-decrypt>]
12 [B<-sign>] 12 [B<-sign>]
13 [B<-resign>]
13 [B<-verify>] 14 [B<-verify>]
14 [B<-pk7out>] 15 [B<-pk7out>]
15 [B<-des>] 16 [B<-[cipher]>]
16 [B<-des3>]
17 [B<-rc2-40>]
18 [B<-rc2-64>]
19 [B<-rc2-128>]
20 [B<-aes128>]
21 [B<-aes192>]
22 [B<-aes256>]
23 [B<-camellia128>]
24 [B<-camellia192>]
25 [B<-camellia256>]
26 [B<-in file>] 17 [B<-in file>]
27 [B<-certfile file>] 18 [B<-certfile file>]
28 [B<-signer file>] 19 [B<-signer file>]
29 [B<-recip file>] 20 [B<-recip file>]
30 [B<-inform SMIME|PEM|DER>] 21 [B<-inform SMIME|PEM|DER>]
31 [B<-passin arg>] 22 [B<-passin arg>]
32 [B<-inkey file>] 23 [B<-inkey file>]
33 [B<-out file>] 24 [B<-out file>]
34 [B<-outform SMIME|PEM|DER>] 25 [B<-outform SMIME|PEM|DER>]
35 [B<-content file>] 26 [B<-content file>]
36 [B<-to addr>] 27 [B<-to addr>]
37 [B<-from ad>] 28 [B<-from ad>]
38 [B<-subject s>] 29 [B<-subject s>]
39 [B<-text>] 30 [B<-text>]
31 [B<-indef>]
32 [B<-noindef>]
33 [B<-stream>]
40 [B<-rand file(s)>] 34 [B<-rand file(s)>]
35 [B<-md digest>]
41 [cert.pem]... 36 [cert.pem]...
42 37
43 =head1 DESCRIPTION 38 =head1 DESCRIPTION
44 39
45 The B<smime> command handles S/MIME mail. It can encrypt, decrypt, sign and 40 The B<smime> command handles S/MIME mail. It can encrypt, decrypt, sign and
46 verify S/MIME messages. 41 verify S/MIME messages.
47 42
48 =head1 COMMAND OPTIONS 43 =head1 COMMAND OPTIONS
49 44
50 There are five operation options that set the type of operation to be performed. 45 There are six operation options that set the type of operation to be performed.
51 The meaning of the other options varies according to the operation type. 46 The meaning of the other options varies according to the operation type.
52 47
53 =over 4 48 =over 4
54 49
55 =item B<-encrypt> 50 =item B<-encrypt>
56 51
57 encrypt mail for the given recipient certificates. Input file is the message 52 encrypt mail for the given recipient certificates. Input file is the message
58 to be encrypted. The output file is the encrypted mail in MIME format. 53 to be encrypted. The output file is the encrypted mail in MIME format.
59 54
60 =item B<-decrypt> 55 =item B<-decrypt>
(...skipping 10 matching lines...) Expand all
71 66
72 =item B<-verify> 67 =item B<-verify>
73 68
74 verify signed mail. Expects a signed mail message on input and outputs 69 verify signed mail. Expects a signed mail message on input and outputs
75 the signed data. Both clear text and opaque signing is supported. 70 the signed data. Both clear text and opaque signing is supported.
76 71
77 =item B<-pk7out> 72 =item B<-pk7out>
78 73
79 takes an input message and writes out a PEM encoded PKCS#7 structure. 74 takes an input message and writes out a PEM encoded PKCS#7 structure.
80 75
76 =item B<-resign>
77
78 resign a message: take an existing message and one or more new signers.
79
81 =item B<-in filename> 80 =item B<-in filename>
82 81
83 the input message to be encrypted or signed or the MIME message to 82 the input message to be encrypted or signed or the MIME message to
84 be decrypted or verified. 83 be decrypted or verified.
85 84
86 =item B<-inform SMIME|PEM|DER> 85 =item B<-inform SMIME|PEM|DER>
87 86
88 this specifies the input format for the PKCS#7 structure. The default 87 this specifies the input format for the PKCS#7 structure. The default
89 is B<SMIME> which reads an S/MIME format message. B<PEM> and B<DER> 88 is B<SMIME> which reads an S/MIME format message. B<PEM> and B<DER>
90 format change this to expect PEM and DER format PKCS#7 structures 89 format change this to expect PEM and DER format PKCS#7 structures
91 instead. This currently only affects the input format of the PKCS#7 90 instead. This currently only affects the input format of the PKCS#7
92 structure, if no PKCS#7 structure is being input (for example with 91 structure, if no PKCS#7 structure is being input (for example with
93 B<-encrypt> or B<-sign>) this option has no effect. 92 B<-encrypt> or B<-sign>) this option has no effect.
94 93
95 =item B<-out filename> 94 =item B<-out filename>
96 95
97 the message text that has been decrypted or verified or the output MIME 96 the message text that has been decrypted or verified or the output MIME
98 format message that has been signed or verified. 97 format message that has been signed or verified.
99 98
100 =item B<-outform SMIME|PEM|DER> 99 =item B<-outform SMIME|PEM|DER>
101 100
102 this specifies the output format for the PKCS#7 structure. The default 101 this specifies the output format for the PKCS#7 structure. The default
103 is B<SMIME> which write an S/MIME format message. B<PEM> and B<DER> 102 is B<SMIME> which write an S/MIME format message. B<PEM> and B<DER>
104 format change this to write PEM and DER format PKCS#7 structures 103 format change this to write PEM and DER format PKCS#7 structures
105 instead. This currently only affects the output format of the PKCS#7 104 instead. This currently only affects the output format of the PKCS#7
106 structure, if no PKCS#7 structure is being output (for example with 105 structure, if no PKCS#7 structure is being output (for example with
107 B<-verify> or B<-decrypt>) this option has no effect. 106 B<-verify> or B<-decrypt>) this option has no effect.
108 107
108 =item B<-stream -indef -noindef>
109
110 the B<-stream> and B<-indef> options are equivalent and enable streaming I/O
111 for encoding operations. This permits single pass processing of data without
112 the need to hold the entire contents in memory, potentially supporting very
113 large files. Streaming is automatically set for S/MIME signing with detached
114 data if the output format is B<SMIME> it is currently off by default for all
115 other operations.
116
117 =item B<-noindef>
118
119 disable streaming I/O where it would produce and indefinite length constructed
120 encoding. This option currently has no effect. In future streaming will be
121 enabled by default on all relevant operations and this option will disable it.
122
109 =item B<-content filename> 123 =item B<-content filename>
110 124
111 This specifies a file containing the detached content, this is only 125 This specifies a file containing the detached content, this is only
112 useful with the B<-verify> command. This is only usable if the PKCS#7 126 useful with the B<-verify> command. This is only usable if the PKCS#7
113 structure is using the detached signature form where the content is 127 structure is using the detached signature form where the content is
114 not included. This option will override any content if the input format 128 not included. This option will override any content if the input format
115 is S/MIME and it uses the multipart/signed MIME content type. 129 is S/MIME and it uses the multipart/signed MIME content type.
116 130
117 =item B<-text> 131 =item B<-text>
118 132
119 this option adds plain text (text/plain) MIME headers to the supplied 133 this option adds plain text (text/plain) MIME headers to the supplied
120 message if encrypting or signing. If decrypting or verifying it strips 134 message if encrypting or signing. If decrypting or verifying it strips
121 off text headers: if the decrypted or verified message is not of MIME 135 off text headers: if the decrypted or verified message is not of MIME
122 type text/plain then an error occurs. 136 type text/plain then an error occurs.
123 137
124 =item B<-CAfile file> 138 =item B<-CAfile file>
125 139
126 a file containing trusted CA certificates, only used with B<-verify>. 140 a file containing trusted CA certificates, only used with B<-verify>.
127 141
128 =item B<-CApath dir> 142 =item B<-CApath dir>
129 143
130 a directory containing trusted CA certificates, only used with 144 a directory containing trusted CA certificates, only used with
131 B<-verify>. This directory must be a standard certificate directory: that 145 B<-verify>. This directory must be a standard certificate directory: that
132 is a hash of each subject name (using B<x509 -hash>) should be linked 146 is a hash of each subject name (using B<x509 -hash>) should be linked
133 to each certificate. 147 to each certificate.
134 148
135 =item B<-des -des3 -rc2-40 -rc2-64 -rc2-128 -aes128 -aes192 -aes256 -camellia128 -camellia192 -camellia256> 149 =item B<-md digest>
136 150
137 the encryption algorithm to use. DES (56 bits), triple DES (168 bits), 151 digest algorithm to use when signing or resigning. If not present then the
138 40, 64 or 128 bit RC2, 128, 192 or 256 bit AES, or 128, 192 or 256 bit Camellia respectively. If not 152 default digest algorithm for the signing key will be used (usually SHA1).
139 specified 40 bit RC2 is used. Only used with B<-encrypt>. 153
154 =item B<-[cipher]>
155
156 the encryption algorithm to use. For example DES (56 bits) - B<-des>,
157 triple DES (168 bits) - B<-des3>,
158 EVP_get_cipherbyname() function) can also be used preceded by a dash, for
159 example B<-aes_128_cbc>. See L<B<enc>|enc(1)> for list of ciphers
160 supported by your version of OpenSSL.
161
162 If not specified 40 bit RC2 is used. Only used with B<-encrypt>.
140 163
141 =item B<-nointern> 164 =item B<-nointern>
142 165
143 when verifying a message normally certificates (if any) included in 166 when verifying a message normally certificates (if any) included in
144 the message are searched for the signing certificate. With this option 167 the message are searched for the signing certificate. With this option
145 only the certificates specified in the B<-certfile> option are used. 168 only the certificates specified in the B<-certfile> option are used.
146 The supplied certificates can still be used as untrusted CAs however. 169 The supplied certificates can still be used as untrusted CAs however.
147 170
148 =item B<-noverify> 171 =item B<-noverify>
149 172
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 the MIME type multipart/signed is used. 209 the MIME type multipart/signed is used.
187 210
188 =item B<-certfile file> 211 =item B<-certfile file>
189 212
190 allows additional certificates to be specified. When signing these will 213 allows additional certificates to be specified. When signing these will
191 be included with the message. When verifying these will be searched for 214 be included with the message. When verifying these will be searched for
192 the signers certificates. The certificates should be in PEM format. 215 the signers certificates. The certificates should be in PEM format.
193 216
194 =item B<-signer file> 217 =item B<-signer file>
195 218
196 the signers certificate when signing a message. If a message is 219 a signing certificate when signing or resigning a message, this option can be
197 being verified then the signers certificates will be written to this 220 used multiple times if more than one signer is required. If a message is being
198 file if the verification was successful. 221 verified then the signers certificates will be written to this file if the
222 verification was successful.
199 223
200 =item B<-recip file> 224 =item B<-recip file>
201 225
202 the recipients certificate when decrypting a message. This certificate 226 the recipients certificate when decrypting a message. This certificate
203 must match one of the recipients of the message or an error occurs. 227 must match one of the recipients of the message or an error occurs.
204 228
205 =item B<-inkey file> 229 =item B<-inkey file>
206 230
207 the private key to use when signing or decrypting. This must match the 231 the private key to use when signing or decrypting. This must match the
208 corresponding certificate. If this option is not specified then the 232 corresponding certificate. If this option is not specified then the
209 private key must be included in the certificate file specified with 233 private key must be included in the certificate file specified with
210 the B<-recip> or B<-signer> file. 234 the B<-recip> or B<-signer> file. When signing this option can be used
235 multiple times to specify successive keys.
211 236
212 =item B<-passin arg> 237 =item B<-passin arg>
213 238
214 the private key password source. For more information about the format of B<arg> 239 the private key password source. For more information about the format of B<arg>
215 see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>. 240 see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>.
216 241
217 =item B<-rand file(s)> 242 =item B<-rand file(s)>
218 243
219 a file or files containing random data used to seed the random number 244 a file or files containing random data used to seed the random number
220 generator, or an EGD socket (see L<RAND_egd(3)|RAND_egd(3)>). 245 generator, or an EGD socket (see L<RAND_egd(3)|RAND_egd(3)>).
221 Multiple files can be specified separated by a OS-dependent character. 246 Multiple files can be specified separated by a OS-dependent character.
222 The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for 247 The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for
223 all others. 248 all others.
224 249
225 =item B<cert.pem...> 250 =item B<cert.pem...>
226 251
227 one or more certificates of message recipients: used when encrypting 252 one or more certificates of message recipients: used when encrypting
228 a message. 253 a message.
229 254
230 =item B<-to, -from, -subject> 255 =item B<-to, -from, -subject>
231 256
232 the relevant mail headers. These are included outside the signed 257 the relevant mail headers. These are included outside the signed
233 portion of a message so they may be included manually. If signing 258 portion of a message so they may be included manually. If signing
234 then many S/MIME mail clients check the signers certificate's email 259 then many S/MIME mail clients check the signers certificate's email
235 address matches that specified in the From: address. 260 address matches that specified in the From: address.
236 261
262 =item B<-purpose, -ignore_critical, -issuer_checks, -crl_check, -crl_check_all, -policy_check, -extended_crl, -x509_strict, -policy -check_ss_sig>
263
264 Set various options of certificate chain verification. See
265 L<B<verify>|verify(1)> manual page for details.
266
237 =back 267 =back
238 268
239 =head1 NOTES 269 =head1 NOTES
240 270
241 The MIME message must be sent without any blank lines between the 271 The MIME message must be sent without any blank lines between the
242 headers and the output. Some mail programs will automatically add 272 headers and the output. Some mail programs will automatically add
243 a blank line. Piping the mail directly to sendmail is one way to 273 a blank line. Piping the mail directly to sendmail is one way to
244 achieve the correct format. 274 achieve the correct format.
245 275
246 The supplied message to be signed or encrypted must include the 276 The supplied message to be signed or encrypted must include the
247 necessary MIME headers or many S/MIME clients wont display it 277 necessary MIME headers or many S/MIME clients wont display it
248 properly (if at all). You can use the B<-text> option to automatically 278 properly (if at all). You can use the B<-text> option to automatically
249 add plain text headers. 279 add plain text headers.
250 280
251 A "signed and encrypted" message is one where a signed message is 281 A "signed and encrypted" message is one where a signed message is
252 then encrypted. This can be produced by encrypting an already signed 282 then encrypted. This can be produced by encrypting an already signed
253 message: see the examples section. 283 message: see the examples section.
254 284
255 This version of the program only allows one signer per message but it 285 This version of the program only allows one signer per message but it
256 will verify multiple signers on received messages. Some S/MIME clients 286 will verify multiple signers on received messages. Some S/MIME clients
257 choke if a message contains multiple signers. It is possible to sign 287 choke if a message contains multiple signers. It is possible to sign
258 messages "in parallel" by signing an already signed message. 288 messages "in parallel" by signing an already signed message.
259 289
260 The options B<-encrypt> and B<-decrypt> reflect common usage in S/MIME 290 The options B<-encrypt> and B<-decrypt> reflect common usage in S/MIME
261 clients. Strictly speaking these process PKCS#7 enveloped data: PKCS#7 291 clients. Strictly speaking these process PKCS#7 enveloped data: PKCS#7
262 encrypted data is used for other purposes. 292 encrypted data is used for other purposes.
263 293
294 The B<-resign> option uses an existing message digest when adding a new
295 signer. This means that attributes must be present in at least one existing
296 signer using the same message digest or this operation will fail.
297
298 The B<-stream> and B<-indef> options enable experimental streaming I/O support.
299 As a result the encoding is BER using indefinite length constructed encoding
300 and no longer DER. Streaming is supported for the B<-encrypt> operation and the
301 B<-sign> operation if the content is not detached.
302
303 Streaming is always used for the B<-sign> operation with detached data but
304 since the content is no longer part of the PKCS#7 structure the encoding
305 remains DER.
306
264 =head1 EXIT CODES 307 =head1 EXIT CODES
265 308
266 =over 4 309 =over 4
267 310
268 =item 0 311 =item 0
269 312
270 the operation was completely successfully. 313 the operation was completely successfully.
271 314
272 =item 1 315 =item 1
273 316
(...skipping 19 matching lines...) Expand all
293 336
294 =back 337 =back
295 338
296 =head1 EXAMPLES 339 =head1 EXAMPLES
297 340
298 Create a cleartext signed message: 341 Create a cleartext signed message:
299 342
300 openssl smime -sign -in message.txt -text -out mail.msg \ 343 openssl smime -sign -in message.txt -text -out mail.msg \
301 -signer mycert.pem 344 -signer mycert.pem
302 345
303 Create and opaque signed message 346 Create an opaque signed message:
304 347
305 openssl smime -sign -in message.txt -text -out mail.msg -nodetach \ 348 openssl smime -sign -in message.txt -text -out mail.msg -nodetach \
306 -signer mycert.pem 349 -signer mycert.pem
307 350
308 Create a signed message, include some additional certificates and 351 Create a signed message, include some additional certificates and
309 read the private key from another file: 352 read the private key from another file:
310 353
311 openssl smime -sign -in in.txt -text -out mail.msg \ 354 openssl smime -sign -in in.txt -text -out mail.msg \
312 -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem 355 -signer mycert.pem -inkey mykey.pem -certfile mycerts.pem
313 356
357 Create a signed message with two signers:
358
359 openssl smime -sign -in message.txt -text -out mail.msg \
360 -signer mycert.pem -signer othercert.pem
361
314 Send a signed message under Unix directly to sendmail, including headers: 362 Send a signed message under Unix directly to sendmail, including headers:
315 363
316 openssl smime -sign -in in.txt -text -signer mycert.pem \ 364 openssl smime -sign -in in.txt -text -signer mycert.pem \
317 -from steve@openssl.org -to someone@somewhere \ 365 -from steve@openssl.org -to someone@somewhere \
318 -subject "Signed message" | sendmail someone@somewhere 366 -subject "Signed message" | sendmail someone@somewhere
319 367
320 Verify a message and extract the signer's certificate if successful: 368 Verify a message and extract the signer's certificate if successful:
321 369
322 openssl smime -verify -in mail.msg -signer user.pem -out signedtext.txt 370 openssl smime -verify -in mail.msg -signer user.pem -out signedtext.txt
323 371
324 Send encrypted mail using triple DES: 372 Send encrypted mail using triple DES:
325 373
326 openssl smime -encrypt -in in.txt -from steve@openssl.org \ 374 openssl smime -encrypt -in in.txt -from steve@openssl.org \
327 -to someone@somewhere -subject "Encrypted message" \ 375 -to someone@somewhere -subject "Encrypted message" \
328 -des3 user.pem -out mail.msg 376 -des3 user.pem -out mail.msg
329 377
330 Sign and encrypt mail: 378 Sign and encrypt mail:
331 379
332 openssl smime -sign -in ml.txt -signer my.pem -text \ 380 openssl smime -sign -in ml.txt -signer my.pem -text \
333 | openssl smime -encrypt -out mail.msg \ 381 | openssl smime -encrypt -out mail.msg \
334 -from steve@openssl.org -to someone@somewhere \ 382 -from steve@openssl.org -to someone@somewhere \
335 -subject "Signed and Encrypted message" -des3 user.pem 383 -subject "Signed and Encrypted message" -des3 user.pem
336 384
337 Note: the encryption command does not include the B<-text> option because the me ssage 385 Note: the encryption command does not include the B<-text> option because the
338 being encrypted already has MIME headers. 386 message being encrypted already has MIME headers.
339 387
340 Decrypt mail: 388 Decrypt mail:
341 389
342 openssl smime -decrypt -in mail.msg -recip mycert.pem -inkey key.pem 390 openssl smime -decrypt -in mail.msg -recip mycert.pem -inkey key.pem
343 391
344 The output from Netscape form signing is a PKCS#7 structure with the 392 The output from Netscape form signing is a PKCS#7 structure with the
345 detached signature format. You can use this program to verify the 393 detached signature format. You can use this program to verify the
346 signature by line wrapping the base64 encoded structure and surrounding 394 signature by line wrapping the base64 encoded structure and surrounding
347 it with: 395 it with:
348 396
349 -----BEGIN PKCS7----- 397 -----BEGIN PKCS7-----
350 -----END PKCS7----- 398 -----END PKCS7-----
351 399
352 and using the command, 400 and using the command:
353 401
354 openssl smime -verify -inform PEM -in signature.pem -content content.txt 402 openssl smime -verify -inform PEM -in signature.pem -content content.txt
355 403
356 alternatively you can base64 decode the signature and use 404 Alternatively you can base64 decode the signature and use:
357 405
358 openssl smime -verify -inform DER -in signature.der -content content.txt 406 openssl smime -verify -inform DER -in signature.der -content content.txt
359 407
360 Create an encrypted message using 128 bit Camellia: 408 Create an encrypted message using 128 bit Camellia:
361 409
362 openssl smime -encrypt -in plain.txt -camellia128 -out mail.msg cert.pem 410 openssl smime -encrypt -in plain.txt -camellia128 -out mail.msg cert.pem
363 411
412 Add a signer to an existing message:
413
414 openssl smime -resign -in mail.msg -signer newsign.pem -out mail2.msg
415
364 =head1 BUGS 416 =head1 BUGS
365 417
366 The MIME parser isn't very clever: it seems to handle most messages that I've th rown 418 The MIME parser isn't very clever: it seems to handle most messages that I've
367 at it but it may choke on others. 419 thrown at it but it may choke on others.
368 420
369 The code currently will only write out the signer's certificate to a file: if th e 421 The code currently will only write out the signer's certificate to a file: if
370 signer has a separate encryption certificate this must be manually extracted. Th ere 422 the signer has a separate encryption certificate this must be manually
371 should be some heuristic that determines the correct encryption certificate. 423 extracted. There should be some heuristic that determines the correct
424 encryption certificate.
372 425
373 Ideally a database should be maintained of a certificates for each email address . 426 Ideally a database should be maintained of a certificates for each email
427 address.
374 428
375 The code doesn't currently take note of the permitted symmetric encryption 429 The code doesn't currently take note of the permitted symmetric encryption
376 algorithms as supplied in the SMIMECapabilities signed attribute. this means the 430 algorithms as supplied in the SMIMECapabilities signed attribute. This means the
377 user has to manually include the correct encryption algorithm. It should store 431 user has to manually include the correct encryption algorithm. It should store
378 the list of permitted ciphers in a database and only use those. 432 the list of permitted ciphers in a database and only use those.
379 433
380 No revocation checking is done on the signer's certificate. 434 No revocation checking is done on the signer's certificate.
381 435
382 The current code can only handle S/MIME v2 messages, the more complex S/MIME v3 436 The current code can only handle S/MIME v2 messages, the more complex S/MIME v3
383 structures may cause parsing errors. 437 structures may cause parsing errors.
384 438
439 =head1 HISTORY
440
441 The use of multiple B<-signer> options and the B<-resign> command were first
442 added in OpenSSL 1.0.0
443
444
385 =cut 445 =cut
OLDNEW
« no previous file with comments | « openssl/doc/apps/s_server.pod ('k') | openssl/doc/apps/speed.pod » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698