aboutsummaryrefslogblamecommitdiff
path: root/application-aware-signing.graffle
blob: 86d2f47b0fd08e097453e5138c5ef058dcc0a9e1 (plain) (tree)
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
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
#!/usr/bin/env python

"""
Securely back up private keys from one Cryptech HSM to another.

This works by having the destination HSM (the one importing keys)
create an RSA keypair (the "KEKEK"), the public key of which can then
be imported into the source HSM (the one exporting keys) and used to
encrypt AES key encryption keys (KEKs) which in turn can be used to
wrap the private keys being transfered.  Transfers are encoded in
JSON; the underlying ASN.1 formats are SubjectPublicKeyInfo (KEKEK
public key) and PKCS #8 EncryptedPrivateKeyInfo (everything else).

NOTE WELL: while this process makes it POSSIBLE to back up keys
securely, it is not sufficient by itself: the operator MUST make
sure only to export keys using a KEKEK known to have been generated by
the target HSM.  See the unit tests in the source repository for
an example of how to fake this in a few lines of Python.

We also implement a software-based variant on this backup mechanism,
for cases where there is no second HSM.  The protocol is much the
same, but the KEKEK is generated in software and encrypted using a
symmetric key derived from a passphrase using PBKDF2.  This requires
the PyCrypto library, and is only as secure as memory on the machine
where you're running it (so it's theoretically vulnerable to root or
anybody with access to /dev/mem).  Don't use this mode unless you
understand the risks, and see the "NOTE WELL" above.

YOU HAVE BEEN WARNED.  Be careful out there.
"""

# Diagram of the trivial protocol we're using:
#
#    SOURCE HSM                            DESTINATION HSM
#
#                                          Generate and export KEKEK:
#                                               hal_rpc_pkey_generate_rsa()
#                                               hal_rpc_pkey_get_public_key()
#
#   Load KEKEK public        <---------    Export KEKEK public
#        hal_rpc_pkey_load()
#        hal_rpc_pkey_export()
#
#   Export PKCS #8 and KEK   ---------->   Load PKCS #8 and KEK, import key
#                                               hal_rpc_pkey_import()

import sys
import json
import uuid
import atexit
import getpass
import argparse

from cryptech.libhal import *

def main():

    parser = argparse.ArgumentParser(
        formatter_class = argparse.RawDescriptionHelpFormatter,
        description = __doc__)
    subparsers = parser.add_subparsers(
        title = "Commands (use \"--help\" after command name for help with individual commands)",
        metavar = "")
    setup_parser  = defcmd(subparsers, cmd_setup)
    export_parser = defcmd(subparsers, cmd_export)
    import_parser = defcmd(subparsers, cmd_import)
    setup_mutex_group = setup_parser.add_mutually_exclusive_group()


    parser.add_argument(
        "-p", "--pin",
        help    = "wheel PIN")


    setup_mutex_group.add_argument(
        "-n", "--new",
        action  = "store_true",
        help    = "force creation of new KEKEK")

    setup_mutex_group.add_argument(
        "-u", "--uuid",
        help    = "UUID of existing KEKEK to use")

    setup_mutex_group.add_argument(
        "-s", "--soft-backup",
        action = "store_true",
        help   = "software-based backup, see warnings")

    setup_parser.add_argument(
        "-k", "--keylen",
        type    = int,
        default = 2048,
        help    = "length of new KEKEK if we need to create one")

    setup_parser.add_argument(
        "-o", "--output",
        type    = argparse.FileType("w"),
        default = "-",
        help    = "output file")


    export_parser.add_argument(
        "-i", "--input",
        type    = argparse.FileType("r"),
        default = "-",
        help    = "input file")

    export_parser.add_argument(
        "-o", "--output",
        type    = argparse.FileType("w"),
        default = "-",
        help    = "output file")


    import_parser.add_argument(
        "-i", "--input",
        type    = argparse.FileType("r"),
        default = "-",
        help    = "input file")


    args = parser.parse_args()

    hsm = HSM()

    try:
        hsm.login(HAL_USER_WHEEL, args.pin or getpass.getpass("Wheel PIN: "))

    except HALError as e:
        sys.exit("Couldn't log into HSM: {}".format(e))

    try:
        sys.exit(args.func(args, hsm))

    finally:
        hsm.logout()


def defcmd(subparsers, func):
    assert func.__name__.startswith("cmd_")
    subparser = subparsers.add_parser(func.__name__[4:],
                                      description = func.__doc__,
                                      help = func.__doc__.strip().splitlines()[0])
    subparser.set_defaults(func = func)
    return subparser


def b64(bytes):
    return bytes.encode("base64").splitlines()

def b64join(lines):
    return "".join(lines).decode("base64")


def cmd_setup(args, hsm):
    """
    Set up backup HSM for subsequent import.
    Generates an RSA keypair with appropriate usage settings
    to use as a key-encryption-key-encryption-key (KEKEK), and
    writes the KEKEK to a JSON file for transfer to primary HSM.
    """

    result = {}
    uuids  = []

    if args.soft_backup:
        SoftKEKEK.generate(args, result)
    elif args.uuid:
        uuids.append(args.uuid)
    elif not args.new:
        uuids.extend(hsm.pkey_match(
            type  = HAL_KEY_TYPE_RSA_PRIVATE,
            mask  = HAL_KEY_FLAG_USAGE_KEYENCIPHERMENT | HAL_KEY_FLAG_TOKEN,
            flags = HAL_KEY_FLAG_USAGE_KEYENCIPHERMENT | HAL_KEY_FLAG_TOKEN))

    for uuid in uuids:
        with hsm.pkey_open(uuid) as kekek:
            if kekek.key_type != HAL_KEY_TYPE_RSA_PRIVATE:
                sys.stderr.write("Key {} is not an RSA private key\n".format(uuid))
            elif (kekek.key_flags & HAL_KEY_FLAG_USAGE_KEYENCIPHERMENT) == 0:
                sys.stderr.write("Key {} does not allow key encipherment\n".format(uuid))
            else:
                result.update(kekek_uuid   = str(kekek.uuid),
                              kekek_pubkey = b64(kekek.public_key))
                break

    if not result and not args.uuid:
        with hsm.pkey_generate_rsa(
                keylen = args.keylen,
                flags = HAL_KEY_FLAG_USAGE_KEYENCIPHERMENT | HAL_KEY_FLAG_TOKEN) as kekek:
            result.update(kekek_uuid   = str(kekek.uuid),
                          kekek_pubkey = b64(kekek.public_key))
    if not result:
        sys.exit("Could not find suitable KEKEK")

    if args.soft_backup:
        result.update(comment = "KEKEK software keypair")
    else:
        result.update(comment = "KEKEK public key")

    json.dump(result, args.output, indent = 4, sort_keys = True)
    args.output.write("\n")


def key_flag_names(flags):
    names = dict(digitalsignature = HAL_KEY_FLAG_USAGE_DIGITALSIGNATURE,
                 keyencipherment  = HAL_KEY_FLAG_USAGE_KEYENCIPHERMENT,
                 dataencipherment = HAL_KEY_FLAG_USAGE_DATAENCIPHERMENT,
                 token            = HAL_KEY_FLAG_TOKEN,
                 public           = HAL_KEY_FLAG_PUBLIC,
                 exportable       = HAL_KEY_FLAG_EXPORTABLE)
    return ", ".join(sorted(k for k, v in names.iteritems() if (flags & v) != 0))


def cmd_export(args, hsm):
    """
    Export encrypted keys from primary HSM.
    Takes a JSON file containing KEKEK (generated by running this
    script's "setup" command against the backup HSM
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>ActiveLayerIndex</key>
	<integer>0</integer>
	<key>ApplicationVersion</key>
	<array>
		<string>com.omnigroup.OmniGraffle6</string>
		<string>159.2.0.222945</string>
	</array>
	<key>AutoAdjust</key>
	<false/>
	<key>BackgroundGraphic</key>
	<dict>
		<key>Bounds</key>
		<string>{{0, 0}, {818, 571}}</string>
		<key>Class</key>
		<string>SolidGraphic</string>
		<key>ID</key>
		<integer>2</integer>
		<key>Style</key>
		<dict>
			<key>stroke</key>
			<dict>
				<key>Draws</key>
				<string>NO</string>
			</dict>
		</dict>
	</dict>
	<key>BaseZoom</key>
	<integer>0</integer>
	<key>CanvasOrigin</key>
	<string>{0, 0}</string>
	<key>ColumnAlign</key>
	<integer>1</integer>
	<key>ColumnSpacing</key>
	<real>36</real>
	<key>CreationDate</key>
	<string>2015-01-08 13:51:19 +0000</string>
	<key>Creator</key>
	<string>Jakob Schlyter</string>
	<key>DisplayScale</key>
	<string>1.0000 cm = 1.0000 cm</string>
	<key>FileType</key>
	<string>flat</string>
	<key>GraphDocumentVersion</key>
	<integer>12</integer>
	<key>GraphicsList</key>
	<array>
		<dict>
			<key>Class</key>
			<string>LineGraphic</string>
			<key>FontInfo</key>
			<dict>
				<key>Font</key>
				<string>Helvetica</string>
				<key>Size</key>
				<real>12</real>
			</dict>
			<key>Head</key>
			<dict>
				<key>ID</key>
				<integer>235</integer>
			</dict>
			<key>ID</key>
			<integer>255</integer>
			<key>Points</key>
			<array>
				<string>{541.41732965961216, 340.15748308249351}</string>
				<string>{541.41732965961216, 299.05508109346147}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
				<key>stroke</key>
				<dict>
					<key>HeadArrow</key>
					<string>FilledArrow</string>
					<key>Legacy</key>
					<false/>
					<key>LineType</key>
					<integer>1</integer>
					<key>TailArrow</key>
					<string>0</string>
				</dict>
			</dict>
			<key>Tail</key>
			<dict>
				<key>ID</key>
				<integer>254</integer>
			</dict>
		</dict>
		<dict>
			<key>Bounds</key>
			<string>{{541.41732965961205, 348.66142016752497}, {99.212599325367762, 28.346456527709961}}</string>
			<key>Class</key>
			<string>ShapedGraphic</string>
			<key>ID</key>
			<integer>252</integer>
			<key>Magnets</key>
			<array>
				<string>{-0.59628479399994394, -1.1925695879998879}</string>
				<string>{0, -1.3333333333333333}</string>
				<string>{0.59628479399994572, -1.1925695879998872}</string>
				<string>{1.1925695879998883, -0.59628479399994305}</string>
				<string>{1.3333333333333335, 0}</string>
				<string>{1.1925695879998894, 0.5962847939999415}</string>
				<string>{0.59628479399994649, 1.1925695879998865}</string>
				<string>{0, 1.3333333333333333}</string>
				<string>{-0.59628479399994472, 1.1925695879998872}</string>
				<string>{-1.1925695879998888, 0.59628479399994228}</string>
				<string>{-1.3333333333333333, 0}</string>
				<string>{-1.1925695879998879, -0.59628479399994394}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
			</dict>
			<key>Text</key>
			<dict>
				<key>Text</key>
				<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\f0\fs20 \cf0 RPKI}</string>
				<key>VerticalPad</key>
				<integer>0</integer>
			</dict>
		</dict>
		<dict>
			<key>Bounds</key>
			<string>{{541.41732965961216, 377.00787669523493}, {99.212599325367762, 28.346456527709961}}</string>
			<key>Class</key>
			<string>ShapedGraphic</string>
			<key>ID</key>
			<integer>251</integer>
			<key>Magnets</key>
			<array>
				<string>{-0.59628479399994394, -1.1925695879998879}</string>
				<string>{0, -1.3333333333333333}</string>
				<string>{0.59628479399994572, -1.1925695879998872}</string>
				<string>{1.1925695879998883, -0.59628479399994305}</string>
				<string>{1.3333333333333335, 0}</string>
				<string>{1.1925695879998894, 0.5962847939999415}</string>
				<string>{0.59628479399994649, 1.1925695879998865}</string>
				<string>{0, 1.3333333333333333}</string>
				<string>{-0.59628479399994472, 1.1925695879998872}</string>
				<string>{-1.1925695879998888, 0.59628479399994228}</string>
				<string>{-1.3333333333333333, 0}</string>
				<string>{-1.1925695879998879, -0.59628479399994394}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
			</dict>
			<key>Text</key>
			<dict>
				<key>Text</key>
				<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\f0\fs20 \cf0 SAML}</string>
				<key>VerticalPad</key>
				<integer>0</integer>
			</dict>
		</dict>
		<dict>
			<key>Bounds</key>
			<string>{{442.20473033424423, 377.00787669523493}, {99.212599325367762, 28.346456527709961}}</string>
			<key>Class</key>
			<string>ShapedGraphic</string>
			<key>ID</key>
			<integer>250</integer>
			<key>Magnets</key>
			<array>
				<string>{-0.59628479399994394, -1.1925695879998879}</string>
				<string>{0, -1.3333333333333333}</string>
				<string>{0.59628479399994572, -1.1925695879998872}</string>
				<string>{1.1925695879998883, -0.59628479399994305}</string>
				<string>{1.3333333333333335, 0}</string>
				<string>{1.1925695879998894, 0.5962847939999415}</string>
				<string>{0.59628479399994649, 1.1925695879998865}</string>
				<string>{0, 1.3333333333333333}</string>
				<string>{-0.59628479399994472, 1.1925695879998872}</string>
				<string>{-1.1925695879998888, 0.59628479399994228}</string>
				<string>{-1.3333333333333333, 0}</string>
				<string>{-1.1925695879998879, -0.59628479399994394}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
			</dict>
			<key>Text</key>
			<dict>
				<key>Text</key>
				<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\f0\fs20 \cf0 X.509/PKIX\
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\fs16 \cf0 CSR/CRL/OCSP}</string>
				<key>VerticalPad</key>
				<integer>0</integer>
			</dict>
		</dict>
		<dict>
			<key>Bounds</key>
			<string>{{442.20473033424423, 348.66142016752497}, {99.212599325367762, 28.346456527709961}}</string>
			<key>Class</key>
			<string>ShapedGraphic</string>
			<key>ID</key>
			<integer>249</integer>
			<key>Magnets</key>
			<array>
				<string>{-0.59628479399994394, -1.1925695879998879}</string>
				<string>{0, -1.3333333333333333}</string>
				<string>{0.59628479399994572, -1.1925695879998872}</string>
				<string>{1.1925695879998883, -0.59628479399994305}</string>
				<string>{1.3333333333333335, 0}</string>
				<string>{1.1925695879998894, 0.5962847939999415}</string>
				<string>{0.59628479399994649, 1.1925695879998865}</string>
				<string>{0, 1.3333333333333333}</string>
				<string>{-0.59628479399994472, 1.1925695879998872}</string>
				<string>{-1.1925695879998888, 0.59628479399994228}</string>
				<string>{-1.3333333333333333, 0}</string>
				<string>{-1.1925695879998879, -0.59628479399994394}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
			</dict>
			<key>Text</key>
			<dict>
				<key>Text</key>
				<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\f0\fs20 \cf0 DNSSEC}</string>
				<key>VerticalPad</key>
				<integer>0</integer>
			</dict>
		</dict>
		<dict>
			<key>Class</key>
			<string>LineGraphic</string>
			<key>FontInfo</key>
			<dict>
				<key>Font</key>
				<string>Helvetica</string>
				<key>Size</key>
				<real>12</real>
			</dict>
			<key>Head</key>
			<dict>
				<key>ID</key>
				<integer>233</integer>
			</dict>
			<key>ID</key>
			<integer>248</integer>
			<key>Points</key>
			<array>
				<string>{103.90070816388307, 279.21258109346149}</string>
				<string>{201.2598458333278, 279.21258109346149}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
				<key>stroke</key>
				<dict>
					<key>HeadArrow</key>
					<string>FilledArrow</string>
					<key>Legacy</key>
					<false/>
					<key>LineType</key>
					<integer>1</integer>
					<key>TailArrow</key>
					<string>0</string>
				</dict>
			</dict>
			<key>Tail</key>
			<dict>
				<key>ID</key>
				<integer>245</integer>
			</dict>
		</dict>
		<dict>
			<key>Class</key>
			<string>LineGraphic</string>
			<key>FontInfo</key>
			<dict>
				<key>Font</key>
				<string>Helvetica</string>
				<key>Size</key>
				<real>12</real>
			</dict>
			<key>Head</key>
			<dict>
				<key>ID</key>
				<integer>257</integer>
			</dict>
			<key>ID</key>
			<integer>247</integer>
			<key>Points</key>
			<array>
				<string>{103.90070816388307, 279.21258109346149}</string>
				<string>{201.25984583332797, 331.65352655741185}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
				<key>stroke</key>
				<dict>
					<key>HeadArrow</key>
					<string>FilledArrow</string>
					<key>Legacy</key>
					<false/>
					<key>LineType</key>
					<integer>1</integer>
					<key>TailArrow</key>
					<string>0</string>
				</dict>
			</dict>
			<key>Tail</key>
			<dict>
				<key>ID</key>
				<integer>245</integer>
			</dict>
		</dict>
		<dict>
			<key>Class</key>
			<string>LineGraphic</string>
			<key>FontInfo</key>
			<dict>
				<key>Font</key>
				<string>Helvetica</string>
				<key>Size</key>
				<real>12</real>
			</dict>
			<key>Head</key>
			<dict>
				<key>ID</key>
				<integer>261</integer>
			</dict>
			<key>ID</key>
			<integer>246</integer>
			<key>Points</key>
			<array>
				<string>{103.90070816388307, 279.21258109346149}</string>
				<string>{201.25984583332797, 226.77163562951122}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
				<key>stroke</key>
				<dict>
					<key>HeadArrow</key>
					<string>FilledArrow</string>
					<key>Legacy</key>
					<false/>
					<key>LineType</key>
					<integer>1</integer>
					<key>TailArrow</key>
					<string>0</string>
				</dict>
			</dict>
			<key>Tail</key>
			<dict>
				<key>ID</key>
				<integer>245</integer>
			</dict>
		</dict>
		<dict>
			<key>Bounds</key>
			<string>{{54.294408501199186, 259.37008109346152}, {99.212599325367762, 39.685000000000002}}</string>
			<key>Class</key>
			<string>ShapedGraphic</string>
			<key>ID</key>
			<integer>245</integer>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
			</dict>
			<key>Text</key>
			<dict>
				<key>Text</key>
				<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\f0\fs20 \cf0 Application}</string>
				<key>VerticalPad</key>
				<integer>0</integer>
			</dict>
		</dict>
		<dict>
			<key>Class</key>
			<string>LineGraphic</string>
			<key>FontInfo</key>
			<dict>
				<key>Font</key>
				<string>Helvetica</string>
				<key>Size</key>
				<real>12</real>
			</dict>
			<key>Head</key>
			<dict>
				<key>ID</key>
				<integer>241</integer>
			</dict>
			<key>ID</key>
			<integer>242</integer>
			<key>Points</key>
			<array>
				<string>{591.02362932229607, 279.21258109346149}</string>
				<string>{620.78740880113878, 279.21258109346149}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
				<key>stroke</key>
				<dict>
					<key>HeadArrow</key>
					<string>FilledArrow</string>
					<key>Legacy</key>
					<false/>
					<key>LineType</key>
					<integer>1</integer>
					<key>TailArrow</key>
					<string>0</string>
				</dict>
			</dict>
			<key>Tail</key>
			<dict>
				<key>ID</key>
				<integer>235</integer>
			</dict>
		</dict>
		<dict>
			<key>Bounds</key>
			<string>{{620.78740880113878, 259.37008109346152}, {99.212599325367762, 39.685000000000002}}</string>
			<key>Class</key>
			<string>ShapedGraphic</string>
			<key>ID</key>
			<integer>241</integer>
			<key>Magnets</key>
			<array>
				<string>{1, 0}</string>
				<string>{-1, 0}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
			</dict>
			<key>Text</key>
			<dict>
				<key>Text</key>
				<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\f0\fs20 \cf0 Signer}</string>
				<key>VerticalPad</key>
				<integer>0</integer>
			</dict>
		</dict>
		<dict>
			<key>Class</key>
			<string>LineGraphic</string>
			<key>FontInfo</key>
			<dict>
				<key>Font</key>
				<string>Helvetica</string>
				<key>Size</key>
				<real>12</real>
			</dict>
			<key>Head</key>
			<dict>
				<key>ID</key>
				<integer>235</integer>
				<key>Info</key>
				<integer>11</integer>
			</dict>
			<key>ID</key>
			<integer>239</integer>
			<key>Points</key>
			<array>
				<string>{399.6850444840635, 279.21258109346149}</string>
				<string>{491.81102999692826, 279.21258109346149}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
				<key>stroke</key>
				<dict>
					<key>HeadArrow</key>
					<string>FilledArrow</string>
					<key>Legacy</key>
					<false/>
					<key>LineType</key>
					<integer>1</integer>
					<key>TailArrow</key>
					<string>0</string>
				</dict>
			</dict>
			<key>Tail</key>
			<dict>
				<key>ID</key>
				<integer>233</integer>
			</dict>
		</dict>
		<dict>
			<key>Class</key>
			<string>LineGraphic</string>
			<key>FontInfo</key>
			<dict>
				<key>Font</key>
				<string>Helvetica</string>
				<key>Size</key>
				<real>12</real>
			</dict>
			<key>Head</key>
			<dict>
				<key>ID</key>
				<integer>235</integer>
				<key>Info</key>
				<integer>10</integer>
			</dict>
			<key>ID</key>
			<integer>238</integer>
			<key>Points</key>
			<array>
				<string>{399.68504448406367, 331.65352655741185}</string>
				<string>{491.81102999692826, 289.13383109346148}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
				<key>stroke</key>
				<dict>
					<key>HeadArrow</key>
					<string>FilledArrow</string>
					<key>Legacy</key>
					<false/>
					<key>LineType</key>
					<integer>1</integer>
					<key>TailArrow</key>
					<string>0</string>
				</dict>
			</dict>
			<key>Tail</key>
			<dict>
				<key>ID</key>
				<integer>258</integer>
			</dict>
		</dict>
		<dict>
			<key>Class</key>
			<string>LineGraphic</string>
			<key>FontInfo</key>
			<dict>
				<key>Font</key>
				<string>Helvetica</string>
				<key>Size</key>
				<real>12</real>
			</dict>
			<key>Head</key>
			<dict>
				<key>ID</key>
				<integer>235</integer>
				<key>Info</key>
				<integer>12</integer>
			</dict>
			<key>ID</key>
			<integer>237</integer>
			<key>Points</key>
			<array>
				<string>{399.68504448406361, 226.77163562951122}</string>
				<string>{491.81102999692831, 269.29133109346151}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
				<key>stroke</key>
				<dict>
					<key>HeadArrow</key>
					<string>FilledArrow</string>
					<key>Legacy</key>
					<false/>
					<key>LineType</key>
					<integer>1</integer>
					<key>TailArrow</key>
					<string>0</string>
				</dict>
			</dict>
			<key>Tail</key>
			<dict>
				<key>ID</key>
				<integer>260</integer>
			</dict>
		</dict>
		<dict>
			<key>Class</key>
			<string>LineGraphic</string>
			<key>FontInfo</key>
			<dict>
				<key>Font</key>
				<string>Helvetica</string>
				<key>Size</key>
				<real>12</real>
			</dict>
			<key>Head</key>
			<dict>
				<key>ID</key>
				<integer>235</integer>
			</dict>
			<key>ID</key>
			<integer>236</integer>
			<key>Points</key>
			<array>
				<string>{541.41732965961216, 205.29918035556122}</string>
				<string>{541.41732965961216, 259.37008109346152}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
				<key>stroke</key>
				<dict>
					<key>HeadArrow</key>
					<string>FilledArrow</string>
					<key>Legacy</key>
					<false/>
					<key>LineType</key>
					<integer>1</integer>
					<key>TailArrow</key>
					<string>0</string>
				</dict>
			</dict>
			<key>Tail</key>
			<dict>
				<key>ID</key>
				<integer>13</integer>
			</dict>
		</dict>
		<dict>
			<key>Bounds</key>
			<string>{{505.41732965961216, 170.07874201939808}, {72, 39.685000000000002}}</string>
			<key>Class</key>
			<string>ShapedGraphic</string>
			<key>ID</key>
			<integer>13</integer>
			<key>Magnets</key>
			<array>
				<string>{0, 1}</string>
				<string>{0, -1}</string>
				<string>{1, 0}</string>
				<string>{-1, 0}</string>
			</array>
			<key>Shape</key>
			<string>DocumentShape</string>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
			</dict>
			<key>Text</key>
			<dict>
				<key>Text</key>
				<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\f0\fs20 \cf0 Module\
Policy}</string>
				<key>VerticalPad</key>
				<integer>0</integer>
			</dict>
		</dict>
		<dict>
			<key>Bounds</key>
			<string>{{491.81102999692826, 259.37008109346152}, {99.212599325367762, 39.685000000000002}}</string>
			<key>Class</key>
			<string>ShapedGraphic</string>
			<key>ID</key>
			<integer>235</integer>
			<key>Magnets</key>
			<array>
				<string>{-0.59628479399994394, -1.1925695879998879}</string>
				<string>{0, -1.3333333333333333}</string>
				<string>{0.59628479399994572, -1.1925695879998872}</string>
				<string>{1.1925695879998883, -0.59628479399994305}</string>
				<string>{1.3333333333333335, 0}</string>
				<string>{1.1925695879998894, 0.5962847939999415}</string>
				<string>{0.59628479399994649, 1.1925695879998865}</string>
				<string>{0, 1.3333333333333333}</string>
				<string>{-0.59628479399994472, 1.1925695879998872}</string>
				<string>{-1.1925695879998888, 0.59628479399994228}</string>
				<string>{-1.3333333333333333, 0}</string>
				<string>{-1.1925695879998879, -0.59628479399994394}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
			</dict>
			<key>Text</key>
			<dict>
				<key>Text</key>
				<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\f0\fs20 \cf0 Inspection Module}</string>
				<key>VerticalPad</key>
				<integer>0</integer>
			</dict>
		</dict>
		<dict>
			<key>Class</key>
			<string>Group</string>
			<key>Graphics</key>
			<array>
				<dict>
					<key>Bounds</key>
					<string>{{201.25984583332797, 311.81102655741182}, {99.212599325367762, 39.685000000000002}}</string>
					<key>Class</key>
					<string>ShapedGraphic</string>
					<key>ID</key>
					<integer>257</integer>
					<key>Magnets</key>
					<array>
						<string>{1, 0}</string>
						<string>{-1, 0}</string>
					</array>
					<key>Style</key>
					<dict>
						<key>shadow</key>
						<dict>
							<key>Draws</key>
							<string>NO</string>
						</dict>
					</dict>
					<key>Text</key>
					<dict>
						<key>Text</key>
						<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\f0\fs20 \cf0 CKM_SHA256}</string>
						<key>VerticalPad</key>
						<integer>0</integer>
					</dict>
				</dict>
				<dict>
					<key>Bounds</key>
					<string>{{300.47244515869585, 311.81102655741182}, {99.212599325367762, 39.685000000000002}}</string>
					<key>Class</key>
					<string>ShapedGraphic</string>
					<key>ID</key>
					<integer>258</integer>
					<key>Magnets</key>
					<array>
						<string>{1, 0}</string>
						<string>{-1, 0}</string>
					</array>
					<key>Style</key>
					<dict>
						<key>shadow</key>
						<dict>
							<key>Draws</key>
							<string>NO</string>
						</dict>
					</dict>
					<key>Text</key>
					<dict>
						<key>Text</key>
						<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\f0\fs20 \cf0 CKM_ECDSA}</string>
						<key>VerticalPad</key>
						<integer>0</integer>
					</dict>
				</dict>
			</array>
			<key>ID</key>
			<integer>256</integer>
		</dict>
		<dict>
			<key>Bounds</key>
			<string>{{201.2598458333278, 259.37008109346152}, {198.42519865073572, 39.685000000000002}}</string>
			<key>Class</key>
			<string>ShapedGraphic</string>
			<key>ID</key>
			<integer>233</integer>
			<key>Magnets</key>
			<array>
				<string>{1, 0}</string>
				<string>{-1, 0}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
			</dict>
			<key>Text</key>
			<dict>
				<key>Text</key>
				<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\f0\fs20 \cf0 CKM_SHA256_RSA_PKCS}</string>
				<key>VerticalPad</key>
				<integer>0</integer>
			</dict>
		</dict>
		<dict>
			<key>Class</key>
			<string>Group</string>
			<key>Graphics</key>
			<array>
				<dict>
					<key>Bounds</key>
					<string>{{300.47244515869585, 206.92913562951122}, {99.212599325367762, 39.685000000000002}}</string>
					<key>Class</key>
					<string>ShapedGraphic</string>
					<key>ID</key>
					<integer>260</integer>
					<key>Magnets</key>
					<array>
						<string>{1, 0}</string>
						<string>{-1, 0}</string>
					</array>
					<key>Style</key>
					<dict>
						<key>shadow</key>
						<dict>
							<key>Draws</key>
							<string>NO</string>
						</dict>
					</dict>
					<key>Text</key>
					<dict>
						<key>Text</key>
						<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\f0\fs20 \cf0 CKM_RSA_PKCS}</string>
						<key>VerticalPad</key>
						<integer>0</integer>
					</dict>
				</dict>
				<dict>
					<key>Bounds</key>
					<string>{{201.25984583332797, 206.92913562951122}, {99.212599325367762, 39.685000000000002}}</string>
					<key>Class</key>
					<string>ShapedGraphic</string>
					<key>ID</key>
					<integer>261</integer>
					<key>Magnets</key>
					<array>
						<string>{1, 0}</string>
						<string>{-1, 0}</string>
					</array>
					<key>Style</key>
					<dict>
						<key>shadow</key>
						<dict>
							<key>Draws</key>
							<string>NO</string>
						</dict>
					</dict>
					<key>Text</key>
					<dict>
						<key>Text</key>
						<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc

\f0\fs20 \cf0 CKM_SHA256}</string>
						<key>VerticalPad</key>
						<integer>0</integer>
					</dict>
				</dict>
			</array>
			<key>ID</key>
			<integer>259</integer>
		</dict>
		<dict>
			<key>Bounds</key>
			<string>{{184.89250291133504, 195.05909091062659}, {231.1598844947213, 181.94878578460836}}</string>
			<key>Class</key>
			<string>ShapedGraphic</string>
			<key>FontInfo</key>
			<dict>
				<key>Font</key>
				<string>Helvetica</string>
				<key>Size</key>
				<real>8</real>
			</dict>
			<key>ID</key>
			<integer>243</integer>
			<key>Magnets</key>
			<array>
				<string>{-0.59628479399994394, -1.1925695879998879}</string>
				<string>{0, -1.3333333333333333}</string>
				<string>{0.59628479399994572, -1.1925695879998872}</string>
				<string>{1.1925695879998883, -0.59628479399994305}</string>
				<string>{1.3333333333333335, 0}</string>
				<string>{1.1925695879998894, 0.5962847939999415}</string>
				<string>{0.59628479399994649, 1.1925695879998865}</string>
				<string>{0, 1.3333333333333333}</string>
				<string>{-0.59628479399994472, 1.1925695879998872}</string>
				<string>{-1.1925695879998888, 0.59628479399994228}</string>
				<string>{-1.3333333333333333, 0}</string>
				<string>{-1.1925695879998879, -0.59628479399994394}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>fill</key>
				<dict>
					<key>Color</key>
					<dict>
						<key>b</key>
						<string>0.901961</string>
						<key>g</key>
						<string>0.901961</string>
						<key>r</key>
						<string>0.901961</string>
					</dict>
				</dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
				<key>stroke</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
			</dict>
			<key>Text</key>
			<dict>
				<key>Align</key>
				<integer>0</integer>
				<key>Text</key>
				<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720

\f0\fs16 \cf0 PKCS#11}</string>
			</dict>
			<key>TextPlacement</key>
			<integer>2</integer>
		</dict>
		<dict>
			<key>Bounds</key>
			<string>{{435.82677752047073, 340.15748308249346}, {211.18110427828282, 86.456693697820469}}</string>
			<key>Class</key>
			<string>ShapedGraphic</string>
			<key>ID</key>
			<integer>254</integer>
			<key>Magnets</key>
			<array>
				<string>{-0.59628479399994394, -1.1925695879998879}</string>
				<string>{0, -1.3333333333333333}</string>
				<string>{0.59628479399994572, -1.1925695879998872}</string>
				<string>{1.1925695879998883, -0.59628479399994305}</string>
				<string>{1.3333333333333335, 0}</string>
				<string>{1.1925695879998894, 0.5962847939999415}</string>
				<string>{0.59628479399994649, 1.1925695879998865}</string>
				<string>{0, 1.3333333333333333}</string>
				<string>{-0.59628479399994472, 1.1925695879998872}</string>
				<string>{-1.1925695879998888, 0.59628479399994228}</string>
				<string>{-1.3333333333333333, 0}</string>
				<string>{-1.1925695879998879, -0.59628479399994394}</string>
			</array>
			<key>Style</key>
			<dict>
				<key>fill</key>
				<dict>
					<key>Color</key>
					<dict>
						<key>b</key>
						<string>0.901961</string>
						<key>g</key>
						<string>0.901961</string>
						<key>r</key>
						<string>0.901961</string>
					</dict>
				</dict>
				<key>shadow</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
				<key>stroke</key>
				<dict>
					<key>Draws</key>
					<string>NO</string>
				</dict>
			</dict>
			<key>Text</key>
			<dict>
				<key>Align</key>
				<integer>0</integer>
				<key>Text</key>
				<string>{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural

\f0\i\fs16 \cf0 Content Inspection Modules}</string>
			</dict>
			<key>TextPlacement</key>
			<integer>2</integer>
		</dict>
	</array>
	<key>GridInfo</key>
	<dict>
		<key>GridSpacing</key>
		<real>5.6692914962768555</real>
		<key>MajorGridSpacing</key>
		<integer>10</integer>
		<key>ShowsGrid</key>
		<string>YES</string>
	</dict>
	<key>GuidesLocked</key>
	<string>NO</string>
	<key>GuidesVisible</key>
	<string>YES</string>
	<key>HPages</key>
	<integer>1</integer>
	<key>ImageCounter</key>
	<integer>2</integer>
	<key>KeepToScale</key>
	<false/>
	<key>Layers</key>
	<array>
		<dict>
			<key>Lock</key>
			<string>NO</string>
			<key>Name</key>
			<string>Layer 1</string>
			<key>Print</key>
			<string>YES</string>
			<key>View</key>
			<string>YES</string>
		</dict>
	</array>
	<key>LayoutInfo</key>
	<dict>
		<key>Animate</key>
		<string>NO</string>
		<key>circoMinDist</key>
		<real>18</real>
		<key>circoSeparation</key>
		<real>0.0</real>
		<key>layoutEngine</key>
		<string>dot</string>
		<key>neatoLineLength</key>
		<real>0.20000000298023224</real>
		<key>neatoSeparation</key>
		<real>0.0</real>
		<key>twopiSeparation</key>
		<real>0.0</real>
	</dict>
	<key>LinksVisible</key>
	<string>NO</string>
	<key>MagnetsVisible</key>
	<string>NO</string>
	<key>MasterSheets</key>
	<array/>
	<key>ModificationDate</key>
	<string>2015-01-09 14:26:57 +0000</string>
	<key>Modifier</key>
	<string>Jakob Schlyter</string>
	<key>NotesVisible</key>
	<string>NO</string>
	<key>Orientation</key>
	<integer>2</integer>
	<key>OriginVisible</key>
	<string>NO</string>
	<key>OutlineStyle</key>
	<string>Basic</string>
	<key>PageBreaks</key>
	<string>YES</string>
	<key>PrintInfo</key>
	<dict>
		<key>NSBottomMargin</key>
		<array>
			<string>float</string>
			<string>12</string>
		</array>
		<key>NSHorizonalPagination</key>
		<array>
			<string>coded</string>
			<string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG</string>
		</array>
		<key>NSLeftMargin</key>
		<array>
			<string>float</string>
			<string>12</string>
		</array>
		<key>NSOrientation</key>
		<array>
			<string>coded</string>
			<string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwGG</string>
		</array>
		<key>NSPaperSize</key>
		<array>
			<string>size</string>
			<string>{842, 595}</string>
		</array>
		<key>NSPrintReverseOrientation</key>
		<array>
			<string>coded</string>
			<string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG</string>
		</array>
		<key>NSRightMargin</key>
		<array>
			<string>float</string>
			<string>12</string>
		</array>
		<key>NSTopMargin</key>
		<array>
			<string>float</string>
			<string>12</string>
		</array>
	</dict>
	<key>PrintOnePage</key>
	<false/>
	<key>ReadOnly</key>
	<string>NO</string>
	<key>RowAlign</key>
	<integer>1</integer>
	<key>RowSpacing</key>
	<real>36</real>
	<key>SheetTitle</key>
	<string>AAS</string>
	<key>SmartAlignmentGuidesActive</key>
	<string>YES</string>
	<key>SmartDistanceGuidesActive</key>
	<string>YES</string>
	<key>UniqueID</key>
	<integer>3</integer>
	<key>UseEntirePage</key>
	<true/>
	<key>VPages</key>
	<integer>1</integer>
	<key>WindowInfo</key>
	<dict>
		<key>CurrentSheet</key>
		<integer>0</integer>
		<key>Expanded_Canvases</key>
		<array>
			<string>Key protection</string>
		</array>
		<key>FitInWindow</key>
		<true/>
		<key>Frame</key>
		<string>{{30, 45}, {1626, 982}}</string>
		<key>ShowInfo</key>
		<true/>
		<key>ShowRuler</key>
		<true/>
		<key>Sidebar</key>
		<true/>
		<key>SidebarWidth</key>
		<integer>230</integer>
		<key>TopSlabHeight</key>
		<real>363</real>
		<key>VisibleRegion</key>
		<string>{{0, -29.999999999999993}, {818.00000000000011, 632.77818853974134}}</string>
		<key>Zoom</key>
		<real>1.3227383863080684</real>
		<key>ZoomValues</key>
		<array>
			<array>
				<string>AAS</string>
				<real>0.0</real>
				<real>1</real>
			</array>
		</array>
	</dict>
</dict>
</plist>