48
48
# Open a session on our token
49
49
with token.open(user_pin='1234') as session:
50
50
# Generate an AES key in this session
51
- key = session.generate_key(pkcs11.KeyType.AES, 256, store=False )
51
+ key = session.generate_key(pkcs11.KeyType.AES, 256)
52
52
53
53
# Get an initialisation vector
54
54
iv = session.generate_random(128) # AES blocks are fixed at 128 bits
55
55
# Encrypt our data
56
56
crypttext = key.encrypt(data, mechanism_param=iv)
57
57
58
+ 3DES
59
+ ~~~~
60
+
61
+ ::
62
+
63
+ import pkcs11
64
+
65
+ # Initialise our PKCS#11 library
66
+ lib = pkcs11.lib(os.environ['PKCS11_MODULE'])
67
+ token = lib.get_token(token_label='DEMO')
68
+
69
+ data = b'INPUT DATA'
70
+
71
+ # Open a session on our token
72
+ with token.open(user_pin='1234') as session:
73
+ # Generate a DES key in this session
74
+ key = session.generate_key(pkcs11.KeyType.DES3)
75
+
76
+ # Get an initialisation vector
77
+ iv = session.generate_random(64) # DES blocks are fixed at 64 bits
78
+ # Encrypt our data
79
+ crypttext = key.encrypt(data, mechanism_param=iv)
80
+
58
81
RSA
59
82
~~~
60
83
70
93
# Open a session on our token
71
94
with token.open(user_pin='1234') as session:
72
95
# Generate an RSA keypair in this session
73
- pub, priv = session.generate_keypair(pkcs11.KeyType.RSA, 2048, store=False )
96
+ pub, priv = session.generate_keypair(pkcs11.KeyType.RSA, 2048)
74
97
75
98
# Encrypt as one block
76
99
crypttext = pub.encrypt(data)
77
100
101
+ DSA
102
+ ~~~
103
+
104
+ ::
105
+
106
+ import pkcs11
107
+
108
+ lib = pkcs11.lib(os.environ['PKCS11_MODULE'])
109
+ token = lib.get_token(token_label='DEMO')
110
+
111
+ data = b'INPUT DATA'
112
+
113
+ # Open a session on our token
114
+ with token.open(user_pin='1234') as session:
115
+ # Generate an DSA keypair in this session
116
+ pub, priv = session.generate_keypair(pkcs11.KeyType.DSA, 1024)
117
+
118
+ # Sign
119
+ signature = priv.sign(data)
120
+
121
+ ECDSA
122
+ ~~~~~
123
+
124
+ ::
125
+
126
+ import pkcs11
127
+
128
+ lib = pkcs11.lib(os.environ['PKCS11_MODULE'])
129
+ token = lib.get_token(token_label='DEMO')
130
+
131
+ data = b'INPUT DATA'
132
+
133
+ # Open a session on our token
134
+ with token.open(user_pin='1234') as session:
135
+ # Generate an EC keypair in this session from a named curve
136
+ pub, priv = session.create_domain_parameters(
137
+ pkcs11.KeyType.EC, {
138
+ pkcs11.Attribute: pkcs11.util.ec.encode_named_curve_parameters('prime256v1'),
139
+ }, local=True)
140
+
141
+ # Sign
142
+ signature = priv.sign(data)
78
143
79
144
Diffie-Hellman
80
145
~~~~~~~~~~~~~~
@@ -182,9 +247,9 @@ Tested Compatibility
182
247
| DES3 +---------------------+--------------+-----------------+
183
248
| | Encrypt/Decrypt | Works | Works |
184
249
| +---------------------+--------------+-----------------+
185
- | | Wrap/Unwrap | ? | ? |
250
+ | | Wrap/Unwrap | Not tested | Not tested |
186
251
| +---------------------+--------------+-----------------+
187
- | | Sign/Verify | ? | ? |
252
+ | | Sign/Verify | Not tested | Not tested |
188
253
+--------+---------------------+--------------+-----------------+
189
254
| RSA | Generate key pair | Works | Works |
190
255
| +---------------------+--------------+-----------------+
@@ -196,7 +261,7 @@ Tested Compatibility
196
261
+--------+---------------------+--------------+-----------------+
197
262
| DSA | Generate parameters | Works | Error |
198
263
| +---------------------+--------------+-----------------+
199
- | | Generate key pair | Works | Works |
264
+ | | Generate key pair | Works | Caveats [ 5 ]_ |
200
265
| +---------------------+--------------+-----------------+
201
266
| | Sign/Verify | Works | Works [4 ]_ |
202
267
+--------+---------------------+--------------+-----------------+
@@ -206,7 +271,7 @@ Tested Compatibility
206
271
| +---------------------+--------------+-----------------+
207
272
| | Derive Key | Works | Caveats [7 ]_ |
208
273
+--------+---------------------+--------------+-----------------+
209
- | EC | Generate key pair | Caveats [5 ]_ | ? [3 ]_ |
274
+ | EC | Generate key pair | Caveats [6 ]_ | ? [3 ]_ |
210
275
| +---------------------+--------------+-----------------+
211
276
| | Sign/Verify (ECDSA) | Works [4 ]_ | ? [3 ]_ |
212
277
| +---------------------+--------------+-----------------+
@@ -219,7 +284,7 @@ Tested Compatibility
219
284
.. [2 ] Digesting keys is not supported.
220
285
.. [3 ] Untested: requires support in device.
221
286
.. [4 ] Default mechanism not supported, must specify a mechanism.
222
- .. [5 ] Partial support: mechanisms missing
287
+ .. [5 ] From existing domain parameters.
223
288
.. [6 ] Local domain parameters only.
224
289
.. [7 ] Generates security warnings about the derived key.
225
290
0 commit comments