VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Release/Setup Files/License.txt
blob: c174ef1bda9bff2e56612f5e5fb685709dc9f25f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
VeraCrypt License
Software distributed under this license is distributed on an "AS
IS" BASIS WITHOUT WARRANTIES OF ANY KIND. THE AUTHORS AND
DISTRIBUTORS OF THE SOFTWARE DISCLAIM ANY LIABILITY. ANYONE WHO
USES, COPIES, MODIFIES, OR (RE)DISTRIBUTES ANY PART OF THE
SOFTWARE IS, BY SUCH ACTION(S), ACCEPTING AND AGREEING TO BE
BOUND BY ALL TERMS AND CONDITIONS OF THIS LICENSE. IF YOU DO NOT
ACCEPT THEM, DO NOT USE, COPY, MODIFY, NOR (RE)DISTRIBUTE THE
SOFTWARE, NOR ANY PART(S) THEREOF.

VeraCrypt is multi-licensed under Apache License 2.0 and 
the TrueCrypt License version 3.0, a verbatim copy of both 
licenses can be found below.

This license does not grant you rights to use any 
contributors' name, logo, or trademarks, including IDRIX, 
VeraCrypt and all derivative names.
For example, the following names are not allowed: VeraCrypt, 
VeraCrypt+, VeraCrypt Professional, iVeraCrypt, etc. Nor any 
other names confusingly similar to the name VeraCrypt (e.g., 
Vera-Crypt, Vera Crypt, VerKrypt, etc.)
____________________________________________________________

							Apache License
					   Version 2.0, January 2004
					https://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

  "License" shall mean the terms and conditions for use, reproduction,
  and distribution as defined by Sections 1 through 9 of this document.

  "Licensor" shall mean the copyright owner or entity authorized by
  the copyright owner that is granting the License.

  "Legal Entity" shall mean the union of the acting entity and all
  other entities that control, are controlled by, or are under common
  control with that entity. For the purposes of this definition,
  "control" means (i) the power, direct or indirect, to cause the
  direction or management of such entity, whether by contract or
  otherwise, or (ii) ownership of fifty percent (50%) or more of the
  outstanding shares, or (iii) beneficial ownership of such entity.

  "You" (or "Your") shall mean an individual or Legal Entity
  exercising permissions granted by this License.

  "Source" form shall mean the preferred form for making modifications,
  including but not limited to software source code, documentation
  source, and configuration files.

  "Object" form shall mean any form resulting from mechanical
  transformation or translation of a Source form, including but
  not limited to compiled object code, generated documentation,
  and conversions to other media types.

  "Work" shall mean the work of authorship, whether in Source or
  Object form, made available under the License, as indicated by a
  copyright notice that is included in or attached to the work
  (an example is provided in the Appendix below).

  "Derivative Works" shall mean any work, whether in Source or Object
  form, that is based on (or derived from) the Work and for which the
  editorial revisions, annotations, elaborations, or other modifications
  represent, as a whole, an original work of authorship. For the purposes
  of this License, Derivative Works shall not include works that remain
  separable from, or merely link (or bind by name) to the interfaces of,
  the Work and Derivative Works thereof.

  "Contribution" shall mean any work of authorship, including
  the original version of the Work and any modifications or additions
  to that Work or Derivative Works thereof, that is intentionally
  submitted to Licensor for inclusion in the Work by the copyright owner
  or by an individual or Legal Entity authorized to submit on behalf of
  the copyright owner. For the purposes of this definition, "submitted"
  means any form of electronic, verbal, or written communication sent
  to the Licensor or its representatives, including but not limited to
  communication on electronic mailing lists, source code control systems,
  and issue tracking systems that are managed by, or on behalf of, the
  Licensor for the purpose of discussing and improving the Work, but
  excluding communication that is conspicuously marked or otherwise
  designated in writing by the copyright owner as "Not a Contribution."

  "Contributor" shall mean Licensor and any individual or Legal Entity
  on behalf of whom a Contribution has been received by Licensor and
  subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
  this License, each Contributor hereby grants to You a perpetual,
  worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  copyright license to reproduce, prepare Derivative Works of,
  publicly display, publicly perform, sublicense, and distribute the
  Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
  this License, each Contributor hereby grants to You a perpetual,
  worldwide, non-exclusive, no-charge, royalty-free, irrevocable
  (except as stated in this section) patent license to make, have made,
  use, offer to sell, sell, import, and otherwise transfer the Work,
  where such license applies only to those patent claims licensable
  by such Contributor that are necessarily infringed by their
  Contribution(s) alone or by combination of their Contribution(s)
  with the Work to which such Contribution(s) was submitted. If You
  institute patent litigation against any entity (including a
  cross-claim or counterclaim in a lawsuit) alleging that the Work
  or a Contribution incorporated within the Work constitutes direct
  or contributory patent infringement, then any patent licenses
  granted to You under this License for that Work shall terminate
  as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
  Work or Derivative Works thereof in any medium, with or without
  modifications, and in Source or Object form, provided that You
  meet the following conditions:

  (a) You must give any other recipients of the Work or
	  Derivative Works a copy of this License; and

  (b) You must cause any modified files to carry prominent notices
	  stating that You changed the files; and

  (c) You must retain, in the Source form of any Derivative Works
	  that You distribute, all copyright, patent, trademark, and
	  attribution notices from the Source form of the Work,
	  excluding those notices that do not pertain to any part of
	  the Derivative Works; and

  (d) If the Work includes a "NOTICE" text file as part of its
	  distribution, then any Derivative Works that You distribute must
	  include a readable copy of the attribution notices contained
	  within such NOTICE file, excluding those notices that do not
	  pertain to any part of the Derivative Works, in at least one
	  of the following places: within a NOTICE text file distributed
	  as part of the Derivative Works; within the Source form or
	  documentation, if provided along with the Derivative Works; or,
	  within a display generated by the Derivative Works, if and
	  wherever such third-party notices normally appear. The contents
	  of the NOTICE file are for informational purposes only and
	  do not modify the License. You may add Your own attribution
	  notices within Derivative Works that You distribute, alongside
	  or as an addendum to the NOTICE text from the Work, provided
	  that such additional attribution notices cannot be construed
	  as modifying the License.

  You may add Your own copyright statement to Your modifications and
  may provide additional or different license terms and conditions
  for use, reproduction, or distribution of Your modifications, or
  for any such Derivative Works as a whole, provided Your use,
  reproduction, and distribution of the Work otherwise complies with
  the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
  any Contribution intentionally submitted for inclusion in the Work
  by You to the Licensor shall be under the terms and conditions of
  this License, without any additional terms or conditions.
  Notwithstanding the above, nothing herein shall supersede or modify
  the terms of any separate license agreement you may have executed
  with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
  names, trademarks, service marks, or product names of the Licensor,
  except as required for reasonable and customary use in describing the
  origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
  agreed to in writing, Licensor provides the Work (and each
  Contributor provides its Contributions) on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  implied, including, without limitation, any warranties or conditions
  of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
  PARTICULAR PURPOSE. You are solely responsible for determining the
  appropriateness of using or redistributing the Work and assume any
  risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
  whether in tort (including negligence), contract, or otherwise,
  unless required by applicable law (such as deliberate and grossly
  negligent acts) or agreed to in writing, shall any Contributor be
  liable to You for damages, including any direct, indirect, special,
  incidental, or consequential damages of any character arising as a
  result of this License or out of the use or inability to use the
  Work (including but not limited to damages for loss of goodwill,
  work stoppage, computer failure or malfunction, or any and all
  other commercial damages or losses), even if such Contributor
  has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
  the Work or Derivative Works thereof, You may choose to offer,
  and charge a fee for, acceptance of support, warranty, indemnity,
  or other liability obligations and/or rights consistent with this
  License. However, in accepting such obligations, You may act only
  on Your own behalf and on Your sole responsibility, not on behalf
  of any other Contributor, and only if You agree to indemnify,
  defend, and hold each Contributor harmless for any liability
  incurred by, or claims asserted against, such Contributor by reason
  of your accepting any such warranty or additional liability.
____________________________________________________________

TrueCrypt License Version 3.0

Software distributed under this license is distributed on an "AS
IS" BASIS WITHOUT WARRANTIES OF ANY KIND. THE AUTHORS AND
DISTRIBUTORS OF THE SOFTWARE DISCLAIM ANY LIABILITY. ANYONE WHO
USES, COPIES, MODIFIES, OR (RE)DISTRIBUTES ANY PART OF THE
SOFTWARE IS, BY SUCH ACTION(S), ACCEPTING AND AGREEING TO BE
BOUND BY ALL TERMS AND CONDITIONS OF THIS LICENSE. IF YOU DO NOT
ACCEPT THEM, DO NOT USE, COPY, MODIFY, NOR (RE)DISTRIBUTE THE
SOFTWARE, NOR ANY PART(S) THEREOF.


I. Definitions

1. "This Product" means the work (including, but not limited to,
source code, graphics, texts, and accompanying files) made
available under and governed by this version of this license
("License"), as may be indicated by, but is not limited to,
copyright notice(s) attached to or included in the work.

2. "You" means (and "Your" refers to) an individual or a legal
entity (e.g., a non-profit organization, commercial
organization, government agency, etc.) exercising permissions
granted by this License.

3. "Modification" means (and "modify" refers to) any alteration
of This Product, including, but not limited to, addition to or
deletion from the substance or structure of This Product,
translation into another language, repackaging, alteration or
removal of any file included with This Product, and addition of
any new files to This Product.

4. "Your Product" means This Product modified by You, or any
work You derive from (or base on) any part of This Product. In
addition, "Your Product" means any work in which You include any
(modified or unmodified) portion of This Product. However, if
the work in which you include it is an aggregate software
distribution (such as an operating system distribution or a
cover CD-ROM of a magazine) containing multiple separate
products, then the term "Your Product" includes only those
products (in the aggregate software distribution) that use,
include, or depend on a modified or unmodified version of This
Product (and the term "Your Product" does not include the whole
aggregate software distribution). For the purposes of this
License, a product suite consisting of two or more products is
considered a single product (operating system distributions and
cover media of magazines are not considered product suites).

5. "Distribution" means (and "distribute" refers to), regardless
of means or methods, conveyance, transfer, providing, or making
available of This/Your Product or portions thereof to third
parties (including, but not limited to, making This/Your
Product, or portions thereof, available for download to third
parties, whether or not any third party has downloaded the
product, or any portion thereof, made available for download).



II. Use, Copying, and Distribution of This Product

1. Provided that You comply with all applicable terms and
conditions of this License, You may make copies of This Product
(unmodified) and distribute copies of This Product (unmodified)
that are not included in another product forming Your Product
(except as permitted under Chapter III). Note: For terms and
conditions for copying and distribution of modified versions of
This Product, see Chapter III.

2. Provided that You comply with all applicable terms and
conditions of this License, You may use This Product freely (see
also Chapter III) on any number of computers/systems for non-
commercial and/or commercial purposes.



III. Modification, Derivation, and Inclusion in Other Products

1. If all conditions specified in the following paragraphs in
this Chapter (III) are met (for exceptions, see Section III.2)
and if You comply with all other applicable terms and conditions
of this License, You may modify This Product (thus forming Your
Product), derive new works from This Product or portions thereof
(thus forming Your Product), include This Product or portions
thereof in another product (thus forming Your Product, unless
defined otherwise in Chapter I), and You may use (for non-
commercial and/or commercial purposes), copy, and/or distribute
Your Product.

    a. The name of Your Product (or of Your modified version of
    This Product) must not contain the name TrueCrypt (for
    example, the following names are not allowed: TrueCrypt,
    TrueCrypt+, TrueCrypt Professional, iTrueCrypt, etc.) nor
    any other names confusingly similar to the name TrueCrypt
    (e.g., True-Crypt, True Crypt, TruKrypt, etc.)

    All occurrences of the name TrueCrypt that could reasonably
    be considered to identify Your Product must be removed from
    Your Product and from any associated materials. Logo(s)
    included in (or attached to) Your Product (and in/to
    associated materials) must not incorporate and must not be
    confusingly similar to any of the TrueCrypt logos
    (including, but not limited to, the non-textual logo
    consisting primarily of a key in stylized form) or
    portion(s) thereof. All graphics contained in This Product
    (logos, icons, etc.) must be removed from Your Product (or
    from Your modified version of This Product) and from any
    associated materials.

    b. The following phrases must be removed from Your Product
    and from any associated materials, except the text of this
    License: "A TrueCrypt Foundation Release", "Released by
    TrueCrypt Foundation", "This is a TrueCrypt Foundation
    release."

    c. Phrase "Based on TrueCrypt, freely available at
    http://www.truecrypt.org/" must be displayed by Your Product
    (if technically feasible) and contained in its
    documentation. Alternatively, if This Product or its portion
    You included in Your Product constitutes only a minor
    portion of Your Product, phrase "Portions of this product
    are based in part on TrueCrypt, freely available at
    http://www.truecrypt.org/" may be displayed instead. In each
    of the cases mentioned above in this paragraph,
    "http://www.truecrypt.org/" must be a hyperlink (if
    technically feasible) pointing to http://www.truecrypt.org/
    and You may freely choose the location within the user
    interface (if there is any) of Your Product (e.g., an
    "About" window, etc.) and the way in which Your Product will
    display the respective phrase.

    Your Product (and any associated materials, e.g., the
    documentation, the content of the official web site of Your
    Product, etc.) must not present any Internet address
    containing the domain name truecrypt.org (or any domain name
    that forwards to the domain name truecrypt.org) in a manner
    that might suggest that it is where information about Your
    Product may be obtained or where bugs found in Your Product
    may be reported or where support for Your Product may be
    available or otherwise attempt to indicate that the domain
    name truecrypt.org is associated with Your Product.

    d. The complete source code of Your Product must be freely
    and publicly available (for exceptions, see Section III.2)
    at least until You cease to distribute Your Product. This
    condition can be met in one or both of the following ways:
    (i) You include the complete source code of Your Product
    with every copy of Your Product that You make and distribute
    and You make all such copies of Your Product available to
    the general public free of charge, and/or (ii) You include
    information (valid and correct at least until You cease to
    distribute Your Product) about where the complete source
    code of Your Product can be obtained free of charge (e.g.,
    an Internet address) or for a reasonable reproduction fee
    with every copy of Your Product that You make and distribute
    and, if there is a web site officially associated with Your
    Product, You include the aforementioned information about
    the source code on a freely and publicly accessible web
    page to which such web site links via an easily viewable
    hyperlink (at least until You cease to distribute Your
    Product).

    The source code of Your Product must not be deliberately
    obfuscated and it must not be in an intermediate form (e.g.,
    the output of a preprocessor). Source code means the
    preferred form in which a programmer would usually modify
    the program.

    Portions of the source code of Your Product not contained in
    This Product (e.g., portions added by You in creating Your
    Product, whether created by You or by third parties) must be
    available under license(s) that (however, see also
    Subsection III.1.e) allow(s) anyone to modify and derive new
    works from the portions of the source code that are not
    contained in This Product and to use, copy, and redistribute
    such modifications and/or derivative works. The license(s)
    must be perpetual, non-exclusive, royalty-free, no-charge,
    and worldwide, and must not invalidate, weaken, restrict,
    interpret, amend, modify, interfere with or otherwise affect
    any part, term, provision, or clause of this License. The
    text(s) of the license(s) must be included with every copy
    of Your Product that You make and distribute.

    e. You must not change the license terms of This Product in
    any way (adding any new terms is considered changing the
    license terms even if the original terms are retained),
    which means, e.g., that no part of This Product may be put
    under another license. You must keep intact all the legal
    notices contained in the source code files. You must include
    the following items with every copy of Your Product that You
    make and distribute: a clear and conspicuous notice stating
    that Your Product or portion(s) thereof is/are governed by
    this version of the TrueCrypt License, a verbatim copy of
    this version of the TrueCrypt License (as contained herein),
    a clear and conspicuous notice containing information about
    where the included copy of the License can be found, and an
    appropriate copyright notice.


2. You are not obligated to comply with Subsection III.1.d if
Your Product is not distributed (i.e., Your Product is available
only to You).



IV. Disclaimer of Liability, Disclaimer of Warranty,
Indemnification

You expressly acknowledge and agree to the following:

1. IN NO EVENT WILL ANY (CO)AUTHOR OF THIS PRODUCT, OR ANY
APPLICABLE INTELLECTUAL-PROPERTY OWNER, OR ANY OTHER PARTY WHO
MAY COPY AND/OR (RE)DISTRIBUTE THIS PRODUCT OR PORTIONS THEREOF,
AS MAY BE PERMITTED HEREIN, BE LIABLE TO YOU OR TO ANY OTHER
PARTY FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, ANY
DIRECT, INDIRECT, GENERAL, SPECIAL, INCIDENTAL, PUNITIVE,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, CORRUPTION OR LOSS OF DATA, ANY LOSSES SUSTAINED BY YOU OR
THIRD PARTIES, A FAILURE OF THIS PRODUCT TO OPERATE WITH ANY
OTHER PRODUCT, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR
BUSINESS INTERRUPTION), WHETHER IN CONTRACT, STRICT LIABILITY,
TORT (INCLUDING, BUT NOT LIMITED TO, NEGLIGENCE) OR OTHERWISE,
ARISING OUT OF THE USE, COPYING, MODIFICATION, OR
(RE)DISTRIBUTION OF THIS PRODUCT (OR A PORTION THEREOF) OR OF
YOUR PRODUCT (OR A PORTION THEREOF), OR INABILITY TO USE THIS
PRODUCT (OR A PORTION THEREOF), EVEN IF SUCH DAMAGES (OR THE
POSSIBILITY OF SUCH DAMAGES) ARE/WERE PREDICTABLE OR KNOWN TO
ANY (CO)AUTHOR, INTELLECTUAL-PROPERTY OWNER, OR ANY OTHER PARTY.

2. THIS PRODUCT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
KIND, WHETHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
LIMITED TO, THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THE ENTIRE RISK AS TO
THE QUALITY AND PERFORMANCE OF THIS PRODUCT IS WITH YOU. SHOULD
THIS PRODUCT PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
NECESSARY SERVICING, REPAIR, OR CORRECTION.

3. THIS PRODUCT MAY INCORPORATE IMPLEMENTATIONS OF CRYPTOGRAPHIC
ALGORITHMS THAT ARE REGULATED (E.G., SUBJECT TO EXPORT/IMPORT
CONTROL REGULATIONS) OR ILLEGAL IN SOME COUNTRIES. IT IS SOLELY
YOUR RESPONSIBILITY TO VERIFY THAT IT IS LEGAL TO IMPORT AND/OR
(RE)EXPORT AND/OR USE THIS PRODUCT (OR PORTIONS THEREOF) IN
COUNTRIES WHERE YOU INTEND TO USE IT AND/OR TO WHICH YOU INTEND
TO IMPORT IT AND/OR FROM WHICH YOU INTEND TO EXPORT IT, AND IT
IS SOLELY YOUR RESPONSIBILITY TO COMPLY WITH ANY APPLICABLE
REGULATIONS, RESTRICTIONS, AND LAWS.

4. YOU SHALL INDEMNIFY, DEFEND AND HOLD ALL (CO)AUTHORS OF THIS
PRODUCT, AND APPLICABLE INTELLECTUAL-PROPERTY OWNERS, HARMLESS
FROM AND AGAINST ANY AND ALL LIABILITY, DAMAGES, LOSSES,
SETTLEMENTS, PENALTIES, FINES, COSTS, EXPENSES (INCLUDING
REASONABLE ATTORNEYS' FEES), DEMANDS, CAUSES OF ACTION, CLAIMS,
ACTIONS, PROCEEDINGS, AND SUITS, DIRECTLY RELATED TO OR ARISING
OUT OF YOUR USE, INABILITY TO USE, COPYING, (RE)DISTRIBUTION,
IMPORT AND/OR (RE)EXPORT OF THIS PRODUCT (OR PORTIONS THEREOF)
AND/OR YOUR BREACH OF ANY TERM OF THIS LICENSE.



V. Trademarks

This License does not grant permission to use trademarks
associated with (or applying to) This Product, except for fair
use as defined by applicable law and except for use expressly
permitted or required by this License. Any attempt otherwise to
use trademarks associated with (or applying to) This Product
automatically and immediately terminates Your rights under This
License and may constitute trademark infringement (which may be
prosecuted).



VI. General Terms and Conditions, Miscellaneous Provisions

1. ANYONE WHO USES AND/OR COPIES AND/OR MODIFIES AND/OR CREATES
DERIVATIVE WORKS OF AND/OR (RE)DISTRIBUTES THIS PRODUCT, OR ANY
PORTION(S) THEREOF, IS, BY SUCH ACTION(S), AGREEING TO BE BOUND
BY AND ACCEPTING ALL TERMS AND CONDITIONS OF THIS LICENSE (AND
THE RESPONSIBILITIES AND OBLIGATIONS CONTAINED IN THIS LICENSE).
IF YOU DO NOT ACCEPT (AND AGREE TO BE BOUND BY) ALL TERMS AND
CONDITIONS OF THIS LICENSE, DO NOT USE, COPY, MODIFY, CREATE
DERIVATIVE WORKS OF, NOR (RE)DISTRIBUTE THIS PRODUCT, NOR ANY
PORTION(S) THEREOF.

2. YOU MAY NOT USE, MODIFY, COPY, CREATE DERIVATIVE WORKS OF,
(RE)DISTRIBUTE, OR SUBLICENSE THIS PRODUCT, OR PORTION(S)
THEREOF, EXCEPT AS EXPRESSLY PROVIDED IN THIS LICENSE (EVEN IF
APPLICABLE LAW GIVES YOU MORE RIGHTS). ANY ATTEMPT (EVEN IF
PERMITTED BY APPLICABLE LAW) OTHERWISE TO USE, MODIFY, COPY,
CREATE DERIVATIVE WORKS OF, (RE)DISTRIBUTE, OR SUBLICENSE THIS
PRODUCT, OR PORTION(S) THEREOF, AUTOMATICALLY AND IMMEDIATELY
TERMINATES YOUR RIGHTS UNDER THIS LICENSE AND CAN CONSTITUTE
COPYRIGHT INFRINGEMENT (WHICH MAY BE PROSECUTED). ANY CONDITIONS
AND RESTRICTIONS CONTAINED IN THIS LICENSE ARE ALSO LIMITATIONS
ON THE SCOPE OF THIS LICENSE AND ALSO DEFINE THE SCOPE OF YOUR
RIGHTS UNDER THIS LICENSE. YOUR FAILURE TO COMPLY WITH THE TERMS
AND CONDITIONS OF THIS LICENSE OR FAILURE TO PERFORM ANY
APPLICABLE OBLIGATION IMPOSED BY THIS LICENSE AUTOMATICALLY AND
IMMEDIATELY TERMINATES YOUR RIGHTS UNDER THIS LICENSE AND CAN
CAUSE OR BE CONSIDERED COPYRIGHT INFRINGEMENT (WHICH MAY BE
PROSECUTED). NOTHING IN THIS LICENSE SHALL IMPLY OR BE CONSTRUED
AS A PROMISE, OBLIGATION, OR COVENANT NOT TO SUE FOR COPYRIGHT
OR TRADEMARK INFRINGEMENT IF YOU DO NOT COMPLY WITH THE TERMS
AND CONDITIONS OF THIS LICENSE.

3. This License does not constitute or imply a waiver of any
intellectual property rights except as may be otherwise
expressly provided in this License. This License does not
transfer, assign, or convey any intellectual property rights
(e.g., it does not transfer ownership of copyrights or
trademarks).

4. Subject to the terms and conditions of this License, You may
allow a third party to use Your copy of This Product (or a copy
that You make and distribute, or Your Product) provided that the
third party explicitly accepts and agrees to be bound by all
terms and conditions of this License and the third party is not
prohibited from using This Product (or portions thereof) by this
License (see, e.g., Section VI.7) or by applicable law. However,
You are not obligated to ensure that the third party accepts
(and agrees to be bound by all terms of) this License if You
distribute only the self-extracting package (containing This
Product) that does not allow the user to install (nor extract)
the files contained in the package until he or she accepts and
agrees to be bound by all terms and conditions of this License.

5. Without specific prior written permission from the authors of
This Product (or from their common representative), You must not
use the name of This Product, the names of the authors of This
Product, or the names of the legal entities (or informal groups)
of which the authors were/are members/employees, to endorse or
promote Your Product or any work in which You include a modified
or unmodified version of This Product, or to endorse or promote
You or Your affiliates, or in a way that might suggest that Your
Product (or any work in which You include a modified or
unmodified version of This Product), You, or Your affiliates
is/are endorsed by one or more authors of This Product, or in a
way that might suggest that one or more authors of This Product
is/are affiliated with You (or Your affiliates) or directly
participated in the creation of Your Product or of any work in
which You include a modified or unmodified version of This
Product.

6. IF YOU ARE NOT SURE WHETHER YOU UNDERSTAND ALL PARTS OF THIS
LICENSE OR IF YOU ARE NOT SURE WHETHER YOU CAN COMPLY WITH ALL
TERMS AND CONDITIONS OF THIS LICENSE, YOU MUST NOT USE, COPY,
MODIFY, CREATE DERIVATIVE WORKS OF, NOR (RE)DISTRIBUTE THIS
PRODUCT, NOR ANY PORTION(S) OF IT. YOU SHOULD CONSULT WITH A
LAWYER.

7. IF (IN RELEVANT CONTEXT) ANY PROVISION OF CHAPTER IV OF THIS
LICENSE IS UNENFORCEABLE, INVALID, OR PROHIBITED UNDER
APPLICABLE LAW IN YOUR JURISDICTION, YOU HAVE NO RIGHTS UNDER
THIS LICENSE AND YOU MUST NOT USE, COPY, MODIFY, CREATE
DERIVATIVE WORKS OF, NOR (RE)DISTRIBUTE THIS PRODUCT, NOR ANY
PORTION(S) THEREOF.

8. Except as otherwise provided in this License, if any
provision of this License, or a portion thereof, is found to be
invalid or unenforceable under applicable law, it shall not
affect the validity or enforceability of the remainder of this
License, and such invalid or unenforceable provision shall be
construed to reflect the original intent of the provision and
shall be enforced to the maximum extent permitted by applicable
law so as to effect the original intent of the provision as
closely as possible.

____________________________________________________________


Third-Party Licenses

This Product contains components that were created by third
parties and that are governed by third-party licenses, which are
contained hereinafter (separated by lines consisting of
underscores). Each of the third-party licenses applies only to
(portions of) the source code file(s) in which the third-party
license is contained or in which it is explicitly referenced,
and to compiled or otherwise processed forms of such source
code. None of the third-party licenses applies to This Product
as a whole, even when it uses terms such as "product",
"program", or any other equivalent terms/phrases. This Product
as a whole is governed by the TrueCrypt License (see above).
Some of the third-party components have been modified by the
authors of This Product. Unless otherwise stated, such
modifications and additions are governed by the TrueCrypt
License (see above). Note: Unless otherwise stated, graphics and
files that are not part of the source code are governed by the
TrueCrypt License.

____________________________________________________________

License agreement for Encryption for the Masses.

Copyright (C) 1998-2000 Paul Le Roux. All Rights Reserved.

This product can be copied and distributed free of charge,
including source code.

You may modify this product and source code, and distribute such
modifications, and you may derive new works based on this
product, provided that:

1. Any product which is simply derived from this product cannot
be called E4M, or Encryption for the Masses.

2. If you use any of the source code in your product, and your
product is distributed with source code, you must include this
notice with those portions of this source code that you use.

Or,

If your product is distributed in binary form only, you must
display on any packaging, and marketing materials which
reference your product, a notice which states:

"This product uses components written by Paul Le Roux
<pleroux@swprofessionals.com>"

3. If you use any of the source code originally by Eric Young,
you must in addition follow his terms and conditions.

4. Nothing requires that you accept this License, as you have
not signed it. However, nothing else grants you permission to
modify or distribute the product or its derivative works.

These actions are prohibited by law if you do not accept this
License.

5. If any of these license terms is found to be to broad in
scope, and declared invalid by any court or legal process, you
agree that all other terms shall not be so affected, and shall
remain valid and enforceable.

6. THIS PROGRAM IS DISTRIBUTED FREE OF CHARGE, THEREFORE THERE
IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. UNLESS OTHERWISE STATED THE PROGRAM IS PROVIDED
"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS
WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE
COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

7. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
INABILITY TO USE THE PROGRAM, INCLUDING BUT NOT LIMITED TO LOSS
OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH
ANY OTHER PROGRAMS, EVEN IF SUCH HOLDER OR OTHER PARTY HAD
PREVIOUSLY BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
____________________________________________________________

Copyright (c) 1998-2008, Brian Gladman, Worcester, UK.
All rights reserved.

LICENSE TERMS

The free distribution and use of this software is allowed (with
or without changes) provided that:

 1. source code distributions include the above copyright
    notice, this list of conditions and the following
    disclaimer;

 2. binary distributions include the above copyright notice,
    this list of conditions and the following disclaimer in
    their documentation;

 3. the name of the copyright holder is not used to endorse
    products built using this software without specific written
    permission.

DISCLAIMER

This software is provided 'as is' with no explicit or implied
warranties in respect of its properties, including, but not
limited to, correctness and/or fitness for purpose.
____________________________________________________________

Copyright (C) 2002-2004 Mark Adler, all rights reserved
version 1.8, 9 Jan 2004

This software is provided 'as-is', without any express or
implied warranty.  In no event will the author be held liable
for any damages arising from the use of this software.

Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it and
redistribute it freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; you
   must not claim that you wrote the original software. If you
   use this software in a product, an acknowledgment in the
   product documentation would be appreciated but is not
   required.
2. Altered source versions must be plainly marked as such, and
   must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
   distribution.
____________________________________________________________
">); SecurityTokenInfo token; token.SlotId = slotId; token.Flags = info.flags; char label[sizeof (info.label) + 1]; memset (label, 0, sizeof (label)); memcpy (label, info.label, sizeof (info.label)); token.LabelUtf8 = label; size_t lastSpace = token.LabelUtf8.find_last_not_of (' '); if (lastSpace == string::npos) token.LabelUtf8.clear(); else token.LabelUtf8 = token.LabelUtf8.substr (0, lastSpace + 1); #if defined (TC_WINDOWS) && !defined (TC_PROTOTYPE) token.Label = Utf8StringToWide (token.LabelUtf8); #else token.Label = StringConverter::ToWide (token.LabelUtf8); #endif return token; } void SecurityToken::GetKeyfileData (const SecurityTokenKeyfile &keyfile, vector <byte> &keyfileData) { LoginUserIfRequired (keyfile.SlotId); GetObjectAttribute (keyfile.SlotId, keyfile.Handle, CKA_VALUE, keyfileData); } vector <CK_OBJECT_HANDLE> SecurityToken::GetObjects (CK_SLOT_ID slotId, CK_ATTRIBUTE_TYPE objectClass) { if (Sessions.find (slotId) == Sessions.end()) throw ParameterIncorrect (SRC_POS); CK_ATTRIBUTE findTemplate; findTemplate.type = CKA_CLASS; findTemplate.pValue = &objectClass; findTemplate.ulValueLen = sizeof (objectClass); CK_RV status = Pkcs11Functions->C_FindObjectsInit (Sessions[slotId].Handle, &findTemplate, 1); if (status != CKR_OK) throw Pkcs11Exception (status); finally_do_arg (CK_SLOT_ID, slotId, { Pkcs11Functions->C_FindObjectsFinal (Sessions[finally_arg].Handle); }); CK_ULONG objectCount; vector <CK_OBJECT_HANDLE> objects; while (true) { CK_OBJECT_HANDLE object; CK_RV status = Pkcs11Functions->C_FindObjects (Sessions[slotId].Handle, &object, 1, &objectCount); if (status != CKR_OK) throw Pkcs11Exception (status); if (objectCount != 1) break; objects.push_back (object); } return objects; } void SecurityToken::GetObjectAttribute (CK_SLOT_ID slotId, CK_OBJECT_HANDLE tokenObject, CK_ATTRIBUTE_TYPE attributeType, vector <byte> &attributeValue) { attributeValue.clear(); if (Sessions.find (slotId) == Sessions.end()) throw ParameterIncorrect (SRC_POS); CK_ATTRIBUTE attribute; attribute.type = attributeType; attribute.pValue = NULL_PTR; CK_RV status = Pkcs11Functions->C_GetAttributeValue (Sessions[slotId].Handle, tokenObject, &attribute, 1); if (status != CKR_OK) throw Pkcs11Exception (status); if (attribute.ulValueLen == 0) return; attributeValue = vector <byte> (attribute.ulValueLen); attribute.pValue = &attributeValue.front(); status = Pkcs11Functions->C_GetAttributeValue (Sessions[slotId].Handle, tokenObject, &attribute, 1); if (status != CKR_OK) throw Pkcs11Exception (status); } list <CK_SLOT_ID> SecurityToken::GetTokenSlots () { CheckLibraryStatus(); list <CK_SLOT_ID> slots; CK_ULONG slotCount; CK_RV status = Pkcs11Functions->C_GetSlotList (TRUE, NULL_PTR, &slotCount); if (status != CKR_OK) throw Pkcs11Exception (status); if (slotCount > 0) { vector <CK_SLOT_ID> slotArray (slotCount); status = Pkcs11Functions->C_GetSlotList (TRUE, &slotArray.front(), &slotCount); if (status != CKR_OK) throw Pkcs11Exception (status); for (size_t i = 0; i < slotCount; i++) { CK_SLOT_INFO slotInfo; status = Pkcs11Functions->C_GetSlotInfo (slotArray[i], &slotInfo); if (status != CKR_OK || !(slotInfo.flags & CKF_TOKEN_PRESENT)) continue; slots.push_back (slotArray[i]); } } return slots; } bool SecurityToken::IsKeyfilePathValid (const wstring &securityTokenKeyfilePath) { return securityTokenKeyfilePath.find (TC_SECURITY_TOKEN_KEYFILE_URL_PREFIX) == 0; } void SecurityToken::Login (CK_SLOT_ID slotId, const char* pin) { if (Sessions.find (slotId) == Sessions.end()) OpenSession (slotId); else if (Sessions[slotId].UserLoggedIn) return; size_t pinLen = pin? strlen (pin) : 0; CK_RV status = Pkcs11Functions->C_Login (Sessions[slotId].Handle, CKU_USER, (CK_CHAR_PTR) pin, (CK_ULONG) pinLen); if (status != CKR_OK) throw Pkcs11Exception (status); Sessions[slotId].UserLoggedIn = true; } void SecurityToken::LoginUserIfRequired (CK_SLOT_ID slotId) { CheckLibraryStatus(); CK_RV status; if (Sessions.find (slotId) == Sessions.end()) { OpenSession (slotId); } else { CK_SESSION_INFO sessionInfo; status = Pkcs11Functions->C_GetSessionInfo (Sessions[slotId].Handle, &sessionInfo); if (status == CKR_OK) { Sessions[slotId].UserLoggedIn = (sessionInfo.state == CKS_RO_USER_FUNCTIONS || sessionInfo.state == CKS_RW_USER_FUNCTIONS); } else { try { CloseSession (slotId); } catch (...) { } OpenSession (slotId); } } SecurityTokenInfo tokenInfo = GetTokenInfo (slotId); while (!Sessions[slotId].UserLoggedIn && (tokenInfo.Flags & CKF_LOGIN_REQUIRED)) { try { if (tokenInfo.Flags & CKF_PROTECTED_AUTHENTICATION_PATH) { status = Pkcs11Functions->C_Login (Sessions[slotId].Handle, CKU_USER, NULL_PTR, 0); if (status != CKR_OK) throw Pkcs11Exception (status); } else { string pin = tokenInfo.LabelUtf8; if (tokenInfo.Label.empty()) { stringstream s; s << "#" << slotId; pin = s.str(); } finally_do_arg (string*, &pin, { burn ((void *) finally_arg->c_str(), finally_arg->size()); }); (*PinCallback) (pin); Login (slotId, pin.c_str()); } Sessions[slotId].UserLoggedIn = true; } catch (Pkcs11Exception &e) { CK_RV error = e.GetErrorCode(); if (error == CKR_USER_ALREADY_LOGGED_IN) { break; } else if (error == CKR_PIN_INCORRECT && !(tokenInfo.Flags & CKF_PROTECTED_AUTHENTICATION_PATH)) { PinCallback->notifyIncorrectPin (); (*WarningCallback) (Pkcs11Exception (CKR_PIN_INCORRECT)); continue; } throw; } } } #ifdef TC_WINDOWS void SecurityToken::InitLibrary (const wstring &pkcs11LibraryPath, unique_ptr <GetPinFunctor> pinCallback, unique_ptr <SendExceptionFunctor> warningCallback) #else void SecurityToken::InitLibrary (const string &pkcs11LibraryPath, unique_ptr <GetPinFunctor> pinCallback, unique_ptr <SendExceptionFunctor> warningCallback) #endif { if (Initialized) CloseLibrary(); #ifdef TC_WINDOWS Pkcs11LibraryHandle = LoadLibraryW (pkcs11LibraryPath.c_str()); throw_sys_if (!Pkcs11LibraryHandle); #else Pkcs11LibraryHandle = dlopen (pkcs11LibraryPath.c_str(), RTLD_NOW | RTLD_LOCAL); throw_sys_sub_if (!Pkcs11LibraryHandle, dlerror()); #endif typedef CK_RV (*C_GetFunctionList_t) (CK_FUNCTION_LIST_PTR_PTR ppFunctionList); #ifdef TC_WINDOWS C_GetFunctionList_t C_GetFunctionList = (C_GetFunctionList_t) GetProcAddress (Pkcs11LibraryHandle, "C_GetFunctionList"); #else C_GetFunctionList_t C_GetFunctionList = (C_GetFunctionList_t) dlsym (Pkcs11LibraryHandle, "C_GetFunctionList"); #endif if (!C_GetFunctionList) throw SecurityTokenLibraryNotInitialized(); CK_RV status = C_GetFunctionList (&Pkcs11Functions); if (status != CKR_OK) throw Pkcs11Exception (status); status = Pkcs11Functions->C_Initialize (NULL_PTR); if (status != CKR_OK) throw Pkcs11Exception (status); PinCallback = move_ptr(pinCallback); WarningCallback = move_ptr(warningCallback); Initialized = true; } void SecurityToken::OpenSession (CK_SLOT_ID slotId) { if (Sessions.find (slotId) != Sessions.end()) return; CK_SESSION_HANDLE session; CK_FLAGS flags = CKF_SERIAL_SESSION; if (!(GetTokenInfo (slotId).Flags & CKF_WRITE_PROTECTED)) flags |= CKF_RW_SESSION; CK_RV status = Pkcs11Functions->C_OpenSession (slotId, flags, NULL_PTR, NULL_PTR, &session); if (status != CKR_OK) throw Pkcs11Exception (status); Sessions[slotId].Handle = session; } Pkcs11Exception::operator string () const { if (ErrorCode == CKR_OK) return string(); static const struct { CK_RV ErrorCode; const char *ErrorString; } ErrorStrings[] = { # define TC_TOKEN_ERR(CODE) { CODE, #CODE }, TC_TOKEN_ERR (CKR_CANCEL) TC_TOKEN_ERR (CKR_HOST_MEMORY) TC_TOKEN_ERR (CKR_SLOT_ID_INVALID) TC_TOKEN_ERR (CKR_GENERAL_ERROR) TC_TOKEN_ERR (CKR_FUNCTION_FAILED) TC_TOKEN_ERR (CKR_ARGUMENTS_BAD) TC_TOKEN_ERR (CKR_NO_EVENT) TC_TOKEN_ERR (CKR_NEED_TO_CREATE_THREADS) TC_TOKEN_ERR (CKR_CANT_LOCK) TC_TOKEN_ERR (CKR_ATTRIBUTE_READ_ONLY) TC_TOKEN_ERR (CKR_ATTRIBUTE_SENSITIVE) TC_TOKEN_ERR (CKR_ATTRIBUTE_TYPE_INVALID) TC_TOKEN_ERR (CKR_ATTRIBUTE_VALUE_INVALID) TC_TOKEN_ERR (CKR_DATA_INVALID) TC_TOKEN_ERR (CKR_DATA_LEN_RANGE) TC_TOKEN_ERR (CKR_DEVICE_ERROR) TC_TOKEN_ERR (CKR_DEVICE_MEMORY) TC_TOKEN_ERR (CKR_DEVICE_REMOVED) TC_TOKEN_ERR (CKR_ENCRYPTED_DATA_INVALID) TC_TOKEN_ERR (CKR_ENCRYPTED_DATA_LEN_RANGE) TC_TOKEN_ERR (CKR_FUNCTION_CANCELED) TC_TOKEN_ERR (CKR_FUNCTION_NOT_PARALLEL) TC_TOKEN_ERR (CKR_FUNCTION_NOT_SUPPORTED) TC_TOKEN_ERR (CKR_KEY_HANDLE_INVALID) TC_TOKEN_ERR (CKR_KEY_SIZE_RANGE) TC_TOKEN_ERR (CKR_KEY_TYPE_INCONSISTENT) TC_TOKEN_ERR (CKR_KEY_NOT_NEEDED) TC_TOKEN_ERR (CKR_KEY_CHANGED) TC_TOKEN_ERR (CKR_KEY_NEEDED) TC_TOKEN_ERR (CKR_KEY_INDIGESTIBLE) TC_TOKEN_ERR (CKR_KEY_FUNCTION_NOT_PERMITTED) TC_TOKEN_ERR (CKR_KEY_NOT_WRAPPABLE) TC_TOKEN_ERR (CKR_KEY_UNEXTRACTABLE) TC_TOKEN_ERR (CKR_MECHANISM_INVALID) TC_TOKEN_ERR (CKR_MECHANISM_PARAM_INVALID) TC_TOKEN_ERR (CKR_OBJECT_HANDLE_INVALID) TC_TOKEN_ERR (CKR_OPERATION_ACTIVE) TC_TOKEN_ERR (CKR_OPERATION_NOT_INITIALIZED) TC_TOKEN_ERR (CKR_PIN_INCORRECT) TC_TOKEN_ERR (CKR_PIN_INVALID) TC_TOKEN_ERR (CKR_PIN_LEN_RANGE) TC_TOKEN_ERR (CKR_PIN_EXPIRED) TC_TOKEN_ERR (CKR_PIN_LOCKED) TC_TOKEN_ERR (CKR_SESSION_CLOSED) TC_TOKEN_ERR (CKR_SESSION_COUNT) TC_TOKEN_ERR (CKR_SESSION_HANDLE_INVALID) TC_TOKEN_ERR (CKR_SESSION_PARALLEL_NOT_SUPPORTED) TC_TOKEN_ERR (CKR_SESSION_READ_ONLY) TC_TOKEN_ERR (CKR_SESSION_EXISTS) TC_TOKEN_ERR (CKR_SESSION_READ_ONLY_EXISTS) TC_TOKEN_ERR (CKR_SESSION_READ_WRITE_SO_EXISTS) TC_TOKEN_ERR (CKR_SIGNATURE_INVALID) TC_TOKEN_ERR (CKR_SIGNATURE_LEN_RANGE) TC_TOKEN_ERR (CKR_TEMPLATE_INCOMPLETE) TC_TOKEN_ERR (CKR_TEMPLATE_INCONSISTENT) TC_TOKEN_ERR (CKR_TOKEN_NOT_PRESENT) TC_TOKEN_ERR (CKR_TOKEN_NOT_RECOGNIZED) TC_TOKEN_ERR (CKR_TOKEN_WRITE_PROTECTED) TC_TOKEN_ERR (CKR_UNWRAPPING_KEY_HANDLE_INVALID) TC_TOKEN_ERR (CKR_UNWRAPPING_KEY_SIZE_RANGE) TC_TOKEN_ERR (CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT) TC_TOKEN_ERR (CKR_USER_ALREADY_LOGGED_IN) TC_TOKEN_ERR (CKR_USER_NOT_LOGGED_IN) TC_TOKEN_ERR (CKR_USER_PIN_NOT_INITIALIZED) TC_TOKEN_ERR (CKR_USER_TYPE_INVALID) TC_TOKEN_ERR (CKR_USER_ANOTHER_ALREADY_LOGGED_IN) TC_TOKEN_ERR (CKR_USER_TOO_MANY_TYPES) TC_TOKEN_ERR (CKR_WRAPPED_KEY_INVALID) TC_TOKEN_ERR (CKR_WRAPPED_KEY_LEN_RANGE) TC_TOKEN_ERR (CKR_WRAPPING_KEY_HANDLE_INVALID) TC_TOKEN_ERR (CKR_WRAPPING_KEY_SIZE_RANGE) TC_TOKEN_ERR (CKR_WRAPPING_KEY_TYPE_INCONSISTENT) TC_TOKEN_ERR (CKR_RANDOM_SEED_NOT_SUPPORTED) TC_TOKEN_ERR (CKR_RANDOM_NO_RNG) TC_TOKEN_ERR (CKR_DOMAIN_PARAMS_INVALID) TC_TOKEN_ERR (CKR_BUFFER_TOO_SMALL) TC_TOKEN_ERR (CKR_SAVED_STATE_INVALID) TC_TOKEN_ERR (CKR_INFORMATION_SENSITIVE) TC_TOKEN_ERR (CKR_STATE_UNSAVEABLE) TC_TOKEN_ERR (CKR_CRYPTOKI_NOT_INITIALIZED) TC_TOKEN_ERR (CKR_CRYPTOKI_ALREADY_INITIALIZED) TC_TOKEN_ERR (CKR_MUTEX_BAD) TC_TOKEN_ERR (CKR_MUTEX_NOT_LOCKED) TC_TOKEN_ERR (CKR_NEW_PIN_MODE) TC_TOKEN_ERR (CKR_NEXT_OTP) TC_TOKEN_ERR (CKR_FUNCTION_REJECTED) #undef TC_TOKEN_ERR }; for (size_t i = 0; i < array_capacity (ErrorStrings); ++i) { if (ErrorStrings[i].ErrorCode == ErrorCode) return ErrorStrings[i].ErrorString; } stringstream s; s << "0x" << hex << ErrorCode; return s.str(); } #ifdef TC_HEADER_Common_Exception void Pkcs11Exception::Show (HWND parent) const { string errorString = string (*this); if (!errorString.empty()) { wstringstream subjectErrorCode; if (SubjectErrorCodeValid) subjectErrorCode << L": " << SubjectErrorCode; if (!GetDictionaryValue (errorString.c_str())) { if (errorString.find ("CKR_") == 0) { errorString = errorString.substr (4); for (size_t i = 0; i < errorString.size(); ++i) { if (errorString[i] == '_') errorString[i] = ' '; } } wchar_t err[8192]; StringCbPrintfW (err, sizeof(err),L"%s:\n\n%hs%s", GetString ("SECURITY_TOKEN_ERROR"), errorString.c_str(), subjectErrorCode.str().c_str()); ErrorDirect (err, parent); } else { wstring err = GetString (errorString.c_str()); if (SubjectErrorCodeValid) err += L"\n\nError code" + subjectErrorCode.str(); ErrorDirect (err.c_str(), parent); } } } #endif // TC_HEADER_Common_Exception unique_ptr <GetPinFunctor> SecurityToken::PinCallback; unique_ptr <SendExceptionFunctor> SecurityToken::WarningCallback; bool SecurityToken::Initialized; CK_FUNCTION_LIST_PTR SecurityToken::Pkcs11Functions; map <CK_SLOT_ID, Pkcs11Session> SecurityToken::Sessions; #ifdef TC_WINDOWS HMODULE SecurityToken::Pkcs11LibraryHandle; #else void *SecurityToken::Pkcs11LibraryHandle; #endif #ifdef TC_HEADER_Platform_Exception void Pkcs11Exception::Deserialize (shared_ptr <Stream> stream) { Exception::Deserialize (stream); Serializer sr (stream); uint64 code; sr.Deserialize ("ErrorCode", code); sr.Deserialize ("SubjectErrorCodeValid", SubjectErrorCodeValid); sr.Deserialize ("SubjectErrorCode", SubjectErrorCode); ErrorCode = (CK_RV) code; } void Pkcs11Exception::Serialize (shared_ptr <Stream> stream) const { Exception::Serialize (stream); Serializer sr (stream); sr.Serialize ("ErrorCode", (uint64) ErrorCode); sr.Serialize ("SubjectErrorCodeValid", SubjectErrorCodeValid); sr.Serialize ("SubjectErrorCode", SubjectErrorCode); } # define TC_EXCEPTION(TYPE) TC_SERIALIZER_FACTORY_ADD(TYPE) # undef TC_EXCEPTION_NODECL # define TC_EXCEPTION_NODECL(TYPE) TC_SERIALIZER_FACTORY_ADD(TYPE) TC_SERIALIZER_FACTORY_ADD_EXCEPTION_SET (SecurityTokenException); #endif }