src/eric7/Documentation/Source/eric7.EricUtilities.crypto.py3AES.html

branch
eric7
changeset 10928
46651e194fbe
equal deleted inserted replaced
10927:ce599998be7d 10928:46651e194fbe
1 <!DOCTYPE html>
2 <html><head>
3 <title>eric7.EricUtilities.crypto.py3AES</title>
4 <meta charset="UTF-8">
5 <link rel="stylesheet" href="styles.css">
6 </head>
7 <body>
8 <a NAME="top" ID="top"></a>
9 <h1>eric7.EricUtilities.crypto.py3AES</h1>
10 <p>
11 Module implementing classes for encryption according
12 Advanced Encryption Standard.
13 </p>
14
15 <h3>Global Attributes</h3>
16 <table>
17 <tr><td>None</td></tr>
18 </table>
19
20 <h3>Classes</h3>
21 <table>
22 <tr>
23 <td><a href="#AES">AES</a></td>
24 <td>Class implementing the Advanced Encryption Standard algorithm.</td>
25 </tr>
26 <tr>
27 <td><a href="#AESModeOfOperation">AESModeOfOperation</a></td>
28 <td>Class implementing the different AES mode of operations.</td>
29 </tr>
30 </table>
31
32 <h3>Functions</h3>
33 <table>
34 <tr>
35 <td><a href="#append_PKCS7_padding">append_PKCS7_padding</a></td>
36 <td>Function to pad the given data to a multiple of 16-bytes by PKCS7 padding.</td>
37 </tr>
38 <tr>
39 <td><a href="#decryptData">decryptData</a></td>
40 <td>Module function to decrypt the given data with the given key.</td>
41 </tr>
42 <tr>
43 <td><a href="#encryptData">encryptData</a></td>
44 <td>Module function to encrypt the given data with the given key.</td>
45 </tr>
46 <tr>
47 <td><a href="#strip_PKCS7_padding">strip_PKCS7_padding</a></td>
48 <td>Function to strip off PKCS7 padding.</td>
49 </tr>
50 </table>
51
52 <hr />
53 <hr />
54 <a NAME="AES" ID="AES"></a>
55 <h2>AES</h2>
56 <p>
57 Class implementing the Advanced Encryption Standard algorithm.
58 </p>
59
60 <h3>Derived from</h3>
61 None
62 <h3>Class Attributes</h3>
63 <table>
64 <tr><td>KeySize</td></tr>
65 <tr><td>Rcon</td></tr>
66 <tr><td>rsbox</td></tr>
67 <tr><td>sbox</td></tr>
68 </table>
69
70 <h3>Class Methods</h3>
71 <table>
72 <tr><td>None</td></tr>
73 </table>
74
75 <h3>Methods</h3>
76 <table>
77 <tr>
78 <td><a href="#AES.__addRoundKey">__addRoundKey</a></td>
79 <td>Private method to add (XORs) the round key to the state.</td>
80 </tr>
81 <tr>
82 <td><a href="#AES.__aes_invMain">__aes_invMain</a></td>
83 <td>Private method to do the inverse AES encryption for one round.</td>
84 </tr>
85 <tr>
86 <td><a href="#AES.__aes_invRound">__aes_invRound</a></td>
87 <td>Private method to apply the 4 operations of the inverse round in sequence.</td>
88 </tr>
89 <tr>
90 <td><a href="#AES.__aes_main">__aes_main</a></td>
91 <td>Private method to do the AES encryption for one round.</td>
92 </tr>
93 <tr>
94 <td><a href="#AES.__aes_round">__aes_round</a></td>
95 <td>Private method to apply the 4 operations of the forward round in sequence.</td>
96 </tr>
97 <tr>
98 <td><a href="#AES.__core">__core</a></td>
99 <td>Private method performing the key schedule core operation.</td>
100 </tr>
101 <tr>
102 <td><a href="#AES.__createRoundKey">__createRoundKey</a></td>
103 <td>Private method to create a round key.</td>
104 </tr>
105 <tr>
106 <td><a href="#AES.__expandKey">__expandKey</a></td>
107 <td>Private method performing Rijndael's key expansion.</td>
108 </tr>
109 <tr>
110 <td><a href="#AES.__galois_multiplication">__galois_multiplication</a></td>
111 <td>Private method to perform a Galois multiplication of 8 bit characters a and b.</td>
112 </tr>
113 <tr>
114 <td><a href="#AES.__getRconValue">__getRconValue</a></td>
115 <td>Private method to retrieve a given Rcon value.</td>
116 </tr>
117 <tr>
118 <td><a href="#AES.__getSBoxInvert">__getSBoxInvert</a></td>
119 <td>Private method to retrieve a given Inverted S-Box value.</td>
120 </tr>
121 <tr>
122 <td><a href="#AES.__getSBoxValue">__getSBoxValue</a></td>
123 <td>Private method to retrieve a given S-Box value.</td>
124 </tr>
125 <tr>
126 <td><a href="#AES.__mixColumn">__mixColumn</a></td>
127 <td>Private method to perform a galois multiplication of 1 column the 4x4 matrix.</td>
128 </tr>
129 <tr>
130 <td><a href="#AES.__mixColumns">__mixColumns</a></td>
131 <td>Private method to perform a galois multiplication of the 4x4 matrix.</td>
132 </tr>
133 <tr>
134 <td><a href="#AES.__rotate">__rotate</a></td>
135 <td>Private method performing Rijndael's key schedule rotate operation.</td>
136 </tr>
137 <tr>
138 <td><a href="#AES.__shiftRow">__shiftRow</a></td>
139 <td>Private method to shift the bytes of a row to the left.</td>
140 </tr>
141 <tr>
142 <td><a href="#AES.__shiftRows">__shiftRows</a></td>
143 <td>Private method to iterate over the 4 rows and call __shiftRow() with that row.</td>
144 </tr>
145 <tr>
146 <td><a href="#AES.__subBytes">__subBytes</a></td>
147 <td>Private method to substitute all the values from the state with the value in the SBox using the state value as index for the SBox.</td>
148 </tr>
149 <tr>
150 <td><a href="#AES.decrypt">decrypt</a></td>
151 <td>Public method to decrypt a 128 bit input block against the given key of size specified.</td>
152 </tr>
153 <tr>
154 <td><a href="#AES.encrypt">encrypt</a></td>
155 <td>Public method to encrypt a 128 bit input block against the given key of size specified.</td>
156 </tr>
157 </table>
158
159 <h3>Static Methods</h3>
160 <table>
161 <tr><td>None</td></tr>
162 </table>
163
164
165 <a NAME="AES.__addRoundKey" ID="AES.__addRoundKey"></a>
166 <h4>AES.__addRoundKey</h4>
167 <b>__addRoundKey</b>(<i>state, roundKey</i>)
168 <p>
169 Private method to add (XORs) the round key to the state.
170 </p>
171
172 <dl>
173
174 <dt><i>state</i> (bytearray)</dt>
175 <dd>
176 state to be changed
177 </dd>
178 <dt><i>roundKey</i> (bytearray)</dt>
179 <dd>
180 key to be used for the modification
181 </dd>
182 </dl>
183 <dl>
184 <dt>Return:</dt>
185 <dd>
186 modified state
187 </dd>
188 </dl>
189 <dl>
190 <dt>Return Type:</dt>
191 <dd>
192 bytearray
193 </dd>
194 </dl>
195 <a NAME="AES.__aes_invMain" ID="AES.__aes_invMain"></a>
196 <h4>AES.__aes_invMain</h4>
197 <b>__aes_invMain</b>(<i>state, expandedKey, nbrRounds</i>)
198 <p>
199 Private method to do the inverse AES encryption for one round.
200 </p>
201 <p>
202 Perform the initial operations, the standard round, and the
203 final operations of the inverse AES, creating a round key for
204 each round.
205 </p>
206
207 <dl>
208
209 <dt><i>state</i> (bytearray)</dt>
210 <dd>
211 state to be worked on
212 </dd>
213 <dt><i>expandedKey</i> (bytearray)</dt>
214 <dd>
215 expanded key to be used
216 </dd>
217 <dt><i>nbrRounds</i> (int)</dt>
218 <dd>
219 number of rounds to be done
220 </dd>
221 </dl>
222 <dl>
223 <dt>Return:</dt>
224 <dd>
225 modified state
226 </dd>
227 </dl>
228 <dl>
229 <dt>Return Type:</dt>
230 <dd>
231 bytearray
232 </dd>
233 </dl>
234 <a NAME="AES.__aes_invRound" ID="AES.__aes_invRound"></a>
235 <h4>AES.__aes_invRound</h4>
236 <b>__aes_invRound</b>(<i>state, roundKey</i>)
237 <p>
238 Private method to apply the 4 operations of the inverse round in
239 sequence.
240 </p>
241
242 <dl>
243
244 <dt><i>state</i> (bytearray)</dt>
245 <dd>
246 state to be worked on
247 </dd>
248 <dt><i>roundKey</i> (bytearray)</dt>
249 <dd>
250 round key to be used
251 </dd>
252 </dl>
253 <dl>
254 <dt>Return:</dt>
255 <dd>
256 modified state
257 </dd>
258 </dl>
259 <dl>
260 <dt>Return Type:</dt>
261 <dd>
262 bytearray
263 </dd>
264 </dl>
265 <a NAME="AES.__aes_main" ID="AES.__aes_main"></a>
266 <h4>AES.__aes_main</h4>
267 <b>__aes_main</b>(<i>state, expandedKey, nbrRounds</i>)
268 <p>
269 Private method to do the AES encryption for one round.
270 </p>
271 <p>
272 Perform the initial operations, the standard round, and the
273 final operations of the forward AES, creating a round key for
274 each round.
275 </p>
276
277 <dl>
278
279 <dt><i>state</i> (bytearray)</dt>
280 <dd>
281 state to be worked on
282 </dd>
283 <dt><i>expandedKey</i> (bytearray)</dt>
284 <dd>
285 expanded key to be used
286 </dd>
287 <dt><i>nbrRounds</i> (int)</dt>
288 <dd>
289 number of rounds to be done
290 </dd>
291 </dl>
292 <dl>
293 <dt>Return:</dt>
294 <dd>
295 modified state
296 </dd>
297 </dl>
298 <dl>
299 <dt>Return Type:</dt>
300 <dd>
301 bytearray
302 </dd>
303 </dl>
304 <a NAME="AES.__aes_round" ID="AES.__aes_round"></a>
305 <h4>AES.__aes_round</h4>
306 <b>__aes_round</b>(<i>state, roundKey</i>)
307 <p>
308 Private method to apply the 4 operations of the forward round in
309 sequence.
310 </p>
311
312 <dl>
313
314 <dt><i>state</i> (bytearray)</dt>
315 <dd>
316 state to be worked on
317 </dd>
318 <dt><i>roundKey</i> (bytearray)</dt>
319 <dd>
320 round key to be used
321 </dd>
322 </dl>
323 <dl>
324 <dt>Return:</dt>
325 <dd>
326 modified state
327 </dd>
328 </dl>
329 <dl>
330 <dt>Return Type:</dt>
331 <dd>
332 bytearray
333 </dd>
334 </dl>
335 <a NAME="AES.__core" ID="AES.__core"></a>
336 <h4>AES.__core</h4>
337 <b>__core</b>(<i>data, iteration</i>)
338 <p>
339 Private method performing the key schedule core operation.
340 </p>
341
342 <dl>
343
344 <dt><i>data</i> (bytearray)</dt>
345 <dd>
346 data to operate on
347 </dd>
348 <dt><i>iteration</i> (int)</dt>
349 <dd>
350 iteration counter
351 </dd>
352 </dl>
353 <dl>
354 <dt>Return:</dt>
355 <dd>
356 modified data
357 </dd>
358 </dl>
359 <dl>
360 <dt>Return Type:</dt>
361 <dd>
362 bytearray
363 </dd>
364 </dl>
365 <a NAME="AES.__createRoundKey" ID="AES.__createRoundKey"></a>
366 <h4>AES.__createRoundKey</h4>
367 <b>__createRoundKey</b>(<i>expandedKey, roundKeyPointer</i>)
368 <p>
369 Private method to create a round key.
370 </p>
371
372 <dl>
373
374 <dt><i>expandedKey</i> (bytearray)</dt>
375 <dd>
376 expanded key to be used
377 </dd>
378 <dt><i>roundKeyPointer</i> (int)</dt>
379 <dd>
380 position within the expanded key
381 </dd>
382 </dl>
383 <dl>
384 <dt>Return:</dt>
385 <dd>
386 round key
387 </dd>
388 </dl>
389 <dl>
390 <dt>Return Type:</dt>
391 <dd>
392 bytearray
393 </dd>
394 </dl>
395 <a NAME="AES.__expandKey" ID="AES.__expandKey"></a>
396 <h4>AES.__expandKey</h4>
397 <b>__expandKey</b>(<i>key, size, expandedKeySize</i>)
398 <p>
399 Private method performing Rijndael's key expansion.
400 </p>
401 <p>
402 Expands a 128, 192 or 256 bit key into a 176, 208 or 240 bit key.
403 </p>
404
405 <dl>
406
407 <dt><i>key</i> (bytes or bytearray)</dt>
408 <dd>
409 key to be expanded
410 </dd>
411 <dt><i>size</i> (int)</dt>
412 <dd>
413 size of the key in bytes (16, 24 or 32)
414 </dd>
415 <dt><i>expandedKeySize</i> (int)</dt>
416 <dd>
417 size of the expanded key
418 </dd>
419 </dl>
420 <dl>
421 <dt>Return:</dt>
422 <dd>
423 expanded key
424 </dd>
425 </dl>
426 <dl>
427 <dt>Return Type:</dt>
428 <dd>
429 bytearray
430 </dd>
431 </dl>
432 <a NAME="AES.__galois_multiplication" ID="AES.__galois_multiplication"></a>
433 <h4>AES.__galois_multiplication</h4>
434 <b>__galois_multiplication</b>(<i>a, b</i>)
435 <p>
436 Private method to perform a Galois multiplication of 8 bit characters
437 a and b.
438 </p>
439
440 <dl>
441
442 <dt><i>a</i> (bytes)</dt>
443 <dd>
444 first factor
445 </dd>
446 <dt><i>b</i> (bytes)</dt>
447 <dd>
448 second factor
449 </dd>
450 </dl>
451 <dl>
452 <dt>Return:</dt>
453 <dd>
454 result
455 </dd>
456 </dl>
457 <dl>
458 <dt>Return Type:</dt>
459 <dd>
460 bytes
461 </dd>
462 </dl>
463 <a NAME="AES.__getRconValue" ID="AES.__getRconValue"></a>
464 <h4>AES.__getRconValue</h4>
465 <b>__getRconValue</b>(<i>num</i>)
466 <p>
467 Private method to retrieve a given Rcon value.
468 </p>
469
470 <dl>
471
472 <dt><i>num</i> (int)</dt>
473 <dd>
474 position of the value
475 </dd>
476 </dl>
477 <dl>
478 <dt>Return:</dt>
479 <dd>
480 Rcon value
481 </dd>
482 </dl>
483 <dl>
484 <dt>Return Type:</dt>
485 <dd>
486 int
487 </dd>
488 </dl>
489 <a NAME="AES.__getSBoxInvert" ID="AES.__getSBoxInvert"></a>
490 <h4>AES.__getSBoxInvert</h4>
491 <b>__getSBoxInvert</b>(<i>num</i>)
492 <p>
493 Private method to retrieve a given Inverted S-Box value.
494 </p>
495
496 <dl>
497
498 <dt><i>num</i> (int)</dt>
499 <dd>
500 position of the value
501 </dd>
502 </dl>
503 <dl>
504 <dt>Return:</dt>
505 <dd>
506 value of the Inverted S-Box
507 </dd>
508 </dl>
509 <dl>
510 <dt>Return Type:</dt>
511 <dd>
512 int
513 </dd>
514 </dl>
515 <a NAME="AES.__getSBoxValue" ID="AES.__getSBoxValue"></a>
516 <h4>AES.__getSBoxValue</h4>
517 <b>__getSBoxValue</b>(<i>num</i>)
518 <p>
519 Private method to retrieve a given S-Box value.
520 </p>
521
522 <dl>
523
524 <dt><i>num</i> (int)</dt>
525 <dd>
526 position of the value
527 </dd>
528 </dl>
529 <dl>
530 <dt>Return:</dt>
531 <dd>
532 value of the S-Box
533 </dd>
534 </dl>
535 <dl>
536 <dt>Return Type:</dt>
537 <dd>
538 int
539 </dd>
540 </dl>
541 <a NAME="AES.__mixColumn" ID="AES.__mixColumn"></a>
542 <h4>AES.__mixColumn</h4>
543 <b>__mixColumn</b>(<i>column, isInv</i>)
544 <p>
545 Private method to perform a galois multiplication of 1 column the
546 4x4 matrix.
547 </p>
548
549 <dl>
550
551 <dt><i>column</i> (bytearray)</dt>
552 <dd>
553 column to be worked on
554 </dd>
555 <dt><i>isInv</i> (bool)</dt>
556 <dd>
557 flag indicating an inverse operation
558 </dd>
559 </dl>
560 <dl>
561 <dt>Return:</dt>
562 <dd>
563 modified column
564 </dd>
565 </dl>
566 <dl>
567 <dt>Return Type:</dt>
568 <dd>
569 bytearray
570 </dd>
571 </dl>
572 <a NAME="AES.__mixColumns" ID="AES.__mixColumns"></a>
573 <h4>AES.__mixColumns</h4>
574 <b>__mixColumns</b>(<i>state, isInv</i>)
575 <p>
576 Private method to perform a galois multiplication of the 4x4 matrix.
577 </p>
578
579 <dl>
580
581 <dt><i>state</i> (bytearray)</dt>
582 <dd>
583 state to be worked on
584 </dd>
585 <dt><i>isInv</i> (bool)</dt>
586 <dd>
587 flag indicating an inverse operation
588 </dd>
589 </dl>
590 <dl>
591 <dt>Return:</dt>
592 <dd>
593 modified state
594 </dd>
595 </dl>
596 <dl>
597 <dt>Return Type:</dt>
598 <dd>
599 bytearray
600 </dd>
601 </dl>
602 <a NAME="AES.__rotate" ID="AES.__rotate"></a>
603 <h4>AES.__rotate</h4>
604 <b>__rotate</b>(<i>data</i>)
605 <p>
606 Private method performing Rijndael's key schedule rotate operation.
607 </p>
608 <p>
609 Rotate the data word eight bits to the left: eg,
610 rotate(1d2c3a4f) == 2c3a4f1d.
611 </p>
612
613 <dl>
614
615 <dt><i>data</i> (bytearray)</dt>
616 <dd>
617 data of size 4
618 </dd>
619 </dl>
620 <dl>
621 <dt>Return:</dt>
622 <dd>
623 rotated data
624 </dd>
625 </dl>
626 <dl>
627 <dt>Return Type:</dt>
628 <dd>
629 bytearray
630 </dd>
631 </dl>
632 <a NAME="AES.__shiftRow" ID="AES.__shiftRow"></a>
633 <h4>AES.__shiftRow</h4>
634 <b>__shiftRow</b>(<i>state, statePointer, nbr, isInv</i>)
635 <p>
636 Private method to shift the bytes of a row to the left.
637 </p>
638
639 <dl>
640
641 <dt><i>state</i> (bytearray)</dt>
642 <dd>
643 state to be worked on
644 </dd>
645 <dt><i>statePointer</i> (int)</dt>
646 <dd>
647 index into the state
648 </dd>
649 <dt><i>nbr</i> (int)</dt>
650 <dd>
651 number of positions to shift
652 </dd>
653 <dt><i>isInv</i> (bool)</dt>
654 <dd>
655 flag indicating an inverse operation
656 </dd>
657 </dl>
658 <dl>
659 <dt>Return:</dt>
660 <dd>
661 modified state
662 </dd>
663 </dl>
664 <dl>
665 <dt>Return Type:</dt>
666 <dd>
667 bytearray
668 </dd>
669 </dl>
670 <a NAME="AES.__shiftRows" ID="AES.__shiftRows"></a>
671 <h4>AES.__shiftRows</h4>
672 <b>__shiftRows</b>(<i>state, isInv</i>)
673 <p>
674 Private method to iterate over the 4 rows and call __shiftRow() with
675 that row.
676 </p>
677
678 <dl>
679
680 <dt><i>state</i> (bytearray)</dt>
681 <dd>
682 state to be worked on
683 </dd>
684 <dt><i>isInv</i> (bool)</dt>
685 <dd>
686 flag indicating an inverse operation
687 </dd>
688 </dl>
689 <dl>
690 <dt>Return:</dt>
691 <dd>
692 modified state
693 </dd>
694 </dl>
695 <dl>
696 <dt>Return Type:</dt>
697 <dd>
698 bytearray
699 </dd>
700 </dl>
701 <a NAME="AES.__subBytes" ID="AES.__subBytes"></a>
702 <h4>AES.__subBytes</h4>
703 <b>__subBytes</b>(<i>state, isInv</i>)
704 <p>
705 Private method to substitute all the values from the state with the
706 value in the SBox using the state value as index for the SBox.
707 </p>
708
709 <dl>
710
711 <dt><i>state</i> (bytearray)</dt>
712 <dd>
713 state to be worked on
714 </dd>
715 <dt><i>isInv</i> (bool)</dt>
716 <dd>
717 flag indicating an inverse operation
718 </dd>
719 </dl>
720 <dl>
721 <dt>Return:</dt>
722 <dd>
723 modified state
724 </dd>
725 </dl>
726 <dl>
727 <dt>Return Type:</dt>
728 <dd>
729 bytearray
730 </dd>
731 </dl>
732 <a NAME="AES.decrypt" ID="AES.decrypt"></a>
733 <h4>AES.decrypt</h4>
734 <b>decrypt</b>(<i>iput, key, size</i>)
735 <p>
736 Public method to decrypt a 128 bit input block against the given key
737 of size specified.
738 </p>
739
740 <dl>
741
742 <dt><i>iput</i> (bytearray)</dt>
743 <dd>
744 input data
745 </dd>
746 <dt><i>key</i> (bytes or bytearray)</dt>
747 <dd>
748 key to be used
749 </dd>
750 <dt><i>size</i> (int)</dt>
751 <dd>
752 key size (16, 24 or 32)
753 </dd>
754 </dl>
755 <dl>
756 <dt>Return:</dt>
757 <dd>
758 decrypted data
759 </dd>
760 </dl>
761 <dl>
762 <dt>Return Type:</dt>
763 <dd>
764 bytes
765 </dd>
766 </dl>
767 <dl>
768
769 <dt>Raises <b>ValueError</b>:</dt>
770 <dd>
771 key size is invalid
772 </dd>
773 </dl>
774 <a NAME="AES.encrypt" ID="AES.encrypt"></a>
775 <h4>AES.encrypt</h4>
776 <b>encrypt</b>(<i>iput, key, size</i>)
777 <p>
778 Public method to encrypt a 128 bit input block against the given key
779 of size specified.
780 </p>
781
782 <dl>
783
784 <dt><i>iput</i> (bytearray)</dt>
785 <dd>
786 input data
787 </dd>
788 <dt><i>key</i> (bytes or bytearray)</dt>
789 <dd>
790 key to be used
791 </dd>
792 <dt><i>size</i> (int)</dt>
793 <dd>
794 key size (16, 24 or 32)
795 </dd>
796 </dl>
797 <dl>
798 <dt>Return:</dt>
799 <dd>
800 encrypted data
801 </dd>
802 </dl>
803 <dl>
804 <dt>Return Type:</dt>
805 <dd>
806 bytes
807 </dd>
808 </dl>
809 <dl>
810
811 <dt>Raises <b>ValueError</b>:</dt>
812 <dd>
813 key size is invalid
814 </dd>
815 </dl>
816 <div align="right"><a href="#top">Up</a></div>
817 <hr />
818 <hr />
819 <a NAME="AESModeOfOperation" ID="AESModeOfOperation"></a>
820 <h2>AESModeOfOperation</h2>
821 <p>
822 Class implementing the different AES mode of operations.
823 </p>
824
825 <h3>Derived from</h3>
826 None
827 <h3>Class Attributes</h3>
828 <table>
829 <tr><td>ModeOfOperation</td></tr>
830 <tr><td>aes</td></tr>
831 </table>
832
833 <h3>Class Methods</h3>
834 <table>
835 <tr><td>None</td></tr>
836 </table>
837
838 <h3>Methods</h3>
839 <table>
840 <tr>
841 <td><a href="#AESModeOfOperation.__extractBytes">__extractBytes</a></td>
842 <td>Private method to extract a range of bytes from the input.</td>
843 </tr>
844 <tr>
845 <td><a href="#AESModeOfOperation.decrypt">decrypt</a></td>
846 <td>Public method to perform the decryption operation.</td>
847 </tr>
848 <tr>
849 <td><a href="#AESModeOfOperation.encrypt">encrypt</a></td>
850 <td>Public method to perform the encryption operation.</td>
851 </tr>
852 </table>
853
854 <h3>Static Methods</h3>
855 <table>
856 <tr><td>None</td></tr>
857 </table>
858
859
860 <a NAME="AESModeOfOperation.__extractBytes" ID="AESModeOfOperation.__extractBytes"></a>
861 <h4>AESModeOfOperation.__extractBytes</h4>
862 <b>__extractBytes</b>(<i>inputData, start, end, mode</i>)
863 <p>
864 Private method to extract a range of bytes from the input.
865 </p>
866
867 <dl>
868
869 <dt><i>inputData</i> (bytes)</dt>
870 <dd>
871 input data
872 </dd>
873 <dt><i>start</i> (int)</dt>
874 <dd>
875 start index
876 </dd>
877 <dt><i>end</i> (int)</dt>
878 <dd>
879 end index
880 </dd>
881 <dt><i>mode</i> (int)</dt>
882 <dd>
883 mode of operation (0, 1, 2)
884 </dd>
885 </dl>
886 <dl>
887 <dt>Return:</dt>
888 <dd>
889 extracted bytes
890 </dd>
891 </dl>
892 <dl>
893 <dt>Return Type:</dt>
894 <dd>
895 bytearray
896 </dd>
897 </dl>
898 <a NAME="AESModeOfOperation.decrypt" ID="AESModeOfOperation.decrypt"></a>
899 <h4>AESModeOfOperation.decrypt</h4>
900 <b>decrypt</b>(<i>cipherIn, originalsize, mode, key, size, IV</i>)
901 <p>
902 Public method to perform the decryption operation.
903 </p>
904
905 <dl>
906
907 <dt><i>cipherIn</i> (bytes)</dt>
908 <dd>
909 data to be decrypted
910 </dd>
911 <dt><i>originalsize</i> (int)</dt>
912 <dd>
913 unencrypted string length (required for CBC)
914 </dd>
915 <dt><i>mode</i> (int)</dt>
916 <dd>
917 mode of operation (0, 1 or 2)
918 </dd>
919 <dt><i>key</i> (bytes)</dt>
920 <dd>
921 key to be used
922 </dd>
923 <dt><i>size</i> (int)</dt>
924 <dd>
925 length of the key (16, 24 or 32)
926 </dd>
927 <dt><i>IV</i> (bytearray)</dt>
928 <dd>
929 initialisation vector
930 </dd>
931 </dl>
932 <dl>
933 <dt>Return:</dt>
934 <dd>
935 decrypted data
936 </dd>
937 </dl>
938 <dl>
939 <dt>Return Type:</dt>
940 <dd>
941 bytes
942 </dd>
943 </dl>
944 <dl>
945
946 <dt>Raises <b>ValueError</b>:</dt>
947 <dd>
948 key size is invalid or decrypted data is invalid
949 </dd>
950 </dl>
951 <a NAME="AESModeOfOperation.encrypt" ID="AESModeOfOperation.encrypt"></a>
952 <h4>AESModeOfOperation.encrypt</h4>
953 <b>encrypt</b>(<i>inputData, mode, key, size, IV</i>)
954 <p>
955 Public method to perform the encryption operation.
956 </p>
957
958 <dl>
959
960 <dt><i>inputData</i> (bytes)</dt>
961 <dd>
962 data to be encrypted
963 </dd>
964 <dt><i>mode</i> (int)</dt>
965 <dd>
966 mode of operation (0, 1 or 2)
967 </dd>
968 <dt><i>key</i> (bytes)</dt>
969 <dd>
970 key to be used
971 </dd>
972 <dt><i>size</i> (int)</dt>
973 <dd>
974 length of the key (16, 24 or 32)
975 </dd>
976 <dt><i>IV</i> (bytearray)</dt>
977 <dd>
978 initialisation vector
979 </dd>
980 </dl>
981 <dl>
982 <dt>Return:</dt>
983 <dd>
984 tuple with mode of operation, length of the input data and
985 the encrypted data
986 </dd>
987 </dl>
988 <dl>
989 <dt>Return Type:</dt>
990 <dd>
991 tuple of (int, int, bytes)
992 </dd>
993 </dl>
994 <dl>
995
996 <dt>Raises <b>ValueError</b>:</dt>
997 <dd>
998 key size is invalid or decrypted data is invalid
999 </dd>
1000 </dl>
1001 <div align="right"><a href="#top">Up</a></div>
1002 <hr />
1003 <hr />
1004 <a NAME="append_PKCS7_padding" ID="append_PKCS7_padding"></a>
1005 <h2>append_PKCS7_padding</h2>
1006 <b>append_PKCS7_padding</b>(<i>b</i>)
1007 <p>
1008 Function to pad the given data to a multiple of 16-bytes by PKCS7 padding.
1009 </p>
1010
1011 <dl>
1012
1013 <dt><i>b</i> (bytes)</dt>
1014 <dd>
1015 data to be padded
1016 </dd>
1017 </dl>
1018 <dl>
1019 <dt>Return:</dt>
1020 <dd>
1021 padded data
1022 </dd>
1023 </dl>
1024 <dl>
1025 <dt>Return Type:</dt>
1026 <dd>
1027 bytes
1028 </dd>
1029 </dl>
1030 <div align="right"><a href="#top">Up</a></div>
1031 <hr />
1032 <hr />
1033 <a NAME="decryptData" ID="decryptData"></a>
1034 <h2>decryptData</h2>
1035 <b>decryptData</b>(<i>key, data, mode=AESModeOfOperation.ModeOfOperation["CBC"]</i>)
1036 <p>
1037 Module function to decrypt the given data with the given key.
1038 </p>
1039
1040 <dl>
1041
1042 <dt><i>key</i> (bytes)</dt>
1043 <dd>
1044 key to be used for decryption
1045 </dd>
1046 <dt><i>data</i> (bytes)</dt>
1047 <dd>
1048 data to be decrypted (with initialization vector prepended)
1049 </dd>
1050 <dt><i>mode</i> (int)</dt>
1051 <dd>
1052 mode of operations (0, 1 or 2)
1053 </dd>
1054 </dl>
1055 <dl>
1056 <dt>Return:</dt>
1057 <dd>
1058 decrypted data
1059 </dd>
1060 </dl>
1061 <dl>
1062 <dt>Return Type:</dt>
1063 <dd>
1064 bytes
1065 </dd>
1066 </dl>
1067 <dl>
1068
1069 <dt>Raises <b>ValueError</b>:</dt>
1070 <dd>
1071 raised to indicate an invalid key size
1072 </dd>
1073 </dl>
1074 <div align="right"><a href="#top">Up</a></div>
1075 <hr />
1076 <hr />
1077 <a NAME="encryptData" ID="encryptData"></a>
1078 <h2>encryptData</h2>
1079 <b>encryptData</b>(<i>key, data, mode=AESModeOfOperation.ModeOfOperation["CBC"]</i>)
1080 <p>
1081 Module function to encrypt the given data with the given key.
1082 </p>
1083
1084 <dl>
1085
1086 <dt><i>key</i> (bytes)</dt>
1087 <dd>
1088 key to be used for encryption
1089 </dd>
1090 <dt><i>data</i> (bytes)</dt>
1091 <dd>
1092 data to be encrypted
1093 </dd>
1094 <dt><i>mode</i> (int)</dt>
1095 <dd>
1096 mode of operations (0, 1 or 2)
1097 </dd>
1098 </dl>
1099 <dl>
1100 <dt>Return:</dt>
1101 <dd>
1102 encrypted data prepended with the initialization vector
1103 </dd>
1104 </dl>
1105 <dl>
1106 <dt>Return Type:</dt>
1107 <dd>
1108 bytes
1109 </dd>
1110 </dl>
1111 <dl>
1112
1113 <dt>Raises <b>ValueError</b>:</dt>
1114 <dd>
1115 raised to indicate an invalid key size
1116 </dd>
1117 </dl>
1118 <div align="right"><a href="#top">Up</a></div>
1119 <hr />
1120 <hr />
1121 <a NAME="strip_PKCS7_padding" ID="strip_PKCS7_padding"></a>
1122 <h2>strip_PKCS7_padding</h2>
1123 <b>strip_PKCS7_padding</b>(<i>b</i>)
1124 <p>
1125 Function to strip off PKCS7 padding.
1126 </p>
1127
1128 <dl>
1129
1130 <dt><i>b</i> (bytes)</dt>
1131 <dd>
1132 data to be stripped
1133 </dd>
1134 </dl>
1135 <dl>
1136 <dt>Return:</dt>
1137 <dd>
1138 stripped data
1139 </dd>
1140 </dl>
1141 <dl>
1142 <dt>Return Type:</dt>
1143 <dd>
1144 bytes
1145 </dd>
1146 </dl>
1147 <dl>
1148
1149 <dt>Raises <b>ValueError</b>:</dt>
1150 <dd>
1151 data padding is invalid
1152 </dd>
1153 </dl>
1154 <div align="right"><a href="#top">Up</a></div>
1155 <hr />
1156 </body></html>

eric ide

mercurial