Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
michael@0 | 1 | /* This Source Code Form is subject to the terms of the Mozilla Public |
michael@0 | 2 | * License, v. 2.0. If a copy of the MPL was not distributed with this |
michael@0 | 3 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
michael@0 | 4 | |
michael@0 | 5 | /* Prototypes of the functions defined in the assembler file. */ |
michael@0 | 6 | void intel_aes_encrypt_init_128(const unsigned char *key, PRUint32 *expanded); |
michael@0 | 7 | void intel_aes_encrypt_init_192(const unsigned char *key, PRUint32 *expanded); |
michael@0 | 8 | void intel_aes_encrypt_init_256(const unsigned char *key, PRUint32 *expanded); |
michael@0 | 9 | void intel_aes_decrypt_init_128(const unsigned char *key, PRUint32 *expanded); |
michael@0 | 10 | void intel_aes_decrypt_init_192(const unsigned char *key, PRUint32 *expanded); |
michael@0 | 11 | void intel_aes_decrypt_init_256(const unsigned char *key, PRUint32 *expanded); |
michael@0 | 12 | SECStatus intel_aes_encrypt_ecb_128(AESContext *cx, unsigned char *output, |
michael@0 | 13 | unsigned int *outputLen, |
michael@0 | 14 | unsigned int maxOutputLen, |
michael@0 | 15 | const unsigned char *input, |
michael@0 | 16 | unsigned int inputLen, |
michael@0 | 17 | unsigned int blocksize); |
michael@0 | 18 | SECStatus intel_aes_decrypt_ecb_128(AESContext *cx, unsigned char *output, |
michael@0 | 19 | unsigned int *outputLen, |
michael@0 | 20 | unsigned int maxOutputLen, |
michael@0 | 21 | const unsigned char *input, |
michael@0 | 22 | unsigned int inputLen, |
michael@0 | 23 | unsigned int blocksize); |
michael@0 | 24 | SECStatus intel_aes_encrypt_cbc_128(AESContext *cx, unsigned char *output, |
michael@0 | 25 | unsigned int *outputLen, |
michael@0 | 26 | unsigned int maxOutputLen, |
michael@0 | 27 | const unsigned char *input, |
michael@0 | 28 | unsigned int inputLen, |
michael@0 | 29 | unsigned int blocksize); |
michael@0 | 30 | SECStatus intel_aes_decrypt_cbc_128(AESContext *cx, unsigned char *output, |
michael@0 | 31 | unsigned int *outputLen, |
michael@0 | 32 | unsigned int maxOutputLen, |
michael@0 | 33 | const unsigned char *input, |
michael@0 | 34 | unsigned int inputLen, |
michael@0 | 35 | unsigned int blocksize); |
michael@0 | 36 | SECStatus intel_aes_encrypt_ctr_128(CTRContext *cx, unsigned char *output, |
michael@0 | 37 | unsigned int *outputLen, |
michael@0 | 38 | unsigned int maxOutputLen, |
michael@0 | 39 | const unsigned char *input, |
michael@0 | 40 | unsigned int inputLen, |
michael@0 | 41 | unsigned int blocksize); |
michael@0 | 42 | SECStatus intel_aes_encrypt_ecb_192(AESContext *cx, unsigned char *output, |
michael@0 | 43 | unsigned int *outputLen, |
michael@0 | 44 | unsigned int maxOutputLen, |
michael@0 | 45 | const unsigned char *input, |
michael@0 | 46 | unsigned int inputLen, |
michael@0 | 47 | unsigned int blocksize); |
michael@0 | 48 | SECStatus intel_aes_decrypt_ecb_192(AESContext *cx, unsigned char *output, |
michael@0 | 49 | unsigned int *outputLen, |
michael@0 | 50 | unsigned int maxOutputLen, |
michael@0 | 51 | const unsigned char *input, |
michael@0 | 52 | unsigned int inputLen, |
michael@0 | 53 | unsigned int blocksize); |
michael@0 | 54 | SECStatus intel_aes_encrypt_cbc_192(AESContext *cx, unsigned char *output, |
michael@0 | 55 | unsigned int *outputLen, |
michael@0 | 56 | unsigned int maxOutputLen, |
michael@0 | 57 | const unsigned char *input, |
michael@0 | 58 | unsigned int inputLen, |
michael@0 | 59 | unsigned int blocksize); |
michael@0 | 60 | SECStatus intel_aes_decrypt_cbc_192(AESContext *cx, unsigned char *output, |
michael@0 | 61 | unsigned int *outputLen, |
michael@0 | 62 | unsigned int maxOutputLen, |
michael@0 | 63 | const unsigned char *input, |
michael@0 | 64 | unsigned int inputLen, |
michael@0 | 65 | unsigned int blocksize); |
michael@0 | 66 | SECStatus intel_aes_encrypt_ctr_192(CTRContext *cx, unsigned char *output, |
michael@0 | 67 | unsigned int *outputLen, |
michael@0 | 68 | unsigned int maxOutputLen, |
michael@0 | 69 | const unsigned char *input, |
michael@0 | 70 | unsigned int inputLen, |
michael@0 | 71 | unsigned int blocksize); |
michael@0 | 72 | SECStatus intel_aes_encrypt_ecb_256(AESContext *cx, unsigned char *output, |
michael@0 | 73 | unsigned int *outputLen, |
michael@0 | 74 | unsigned int maxOutputLen, |
michael@0 | 75 | const unsigned char *input, |
michael@0 | 76 | unsigned int inputLen, |
michael@0 | 77 | unsigned int blocksize); |
michael@0 | 78 | SECStatus intel_aes_decrypt_ecb_256(AESContext *cx, unsigned char *output, |
michael@0 | 79 | unsigned int *outputLen, |
michael@0 | 80 | unsigned int maxOutputLen, |
michael@0 | 81 | const unsigned char *input, |
michael@0 | 82 | unsigned int inputLen, |
michael@0 | 83 | unsigned int blocksize); |
michael@0 | 84 | SECStatus intel_aes_encrypt_cbc_256(AESContext *cx, unsigned char *output, |
michael@0 | 85 | unsigned int *outputLen, |
michael@0 | 86 | unsigned int maxOutputLen, |
michael@0 | 87 | const unsigned char *input, |
michael@0 | 88 | unsigned int inputLen, |
michael@0 | 89 | unsigned int blocksize); |
michael@0 | 90 | SECStatus intel_aes_decrypt_cbc_256(AESContext *cx, unsigned char *output, |
michael@0 | 91 | unsigned int *outputLen, |
michael@0 | 92 | unsigned int maxOutputLen, |
michael@0 | 93 | const unsigned char *input, |
michael@0 | 94 | unsigned int inputLen, |
michael@0 | 95 | unsigned int blocksize); |
michael@0 | 96 | SECStatus intel_aes_encrypt_ctr_256(CTRContext *cx, unsigned char *output, |
michael@0 | 97 | unsigned int *outputLen, |
michael@0 | 98 | unsigned int maxOutputLen, |
michael@0 | 99 | const unsigned char *input, |
michael@0 | 100 | unsigned int inputLen, |
michael@0 | 101 | unsigned int blocksize); |
michael@0 | 102 | |
michael@0 | 103 | |
michael@0 | 104 | #define intel_aes_ecb_worker(encrypt, keysize) \ |
michael@0 | 105 | ((encrypt) \ |
michael@0 | 106 | ? ((keysize) == 16 ? intel_aes_encrypt_ecb_128 : \ |
michael@0 | 107 | (keysize) == 24 ? intel_aes_encrypt_ecb_192 : \ |
michael@0 | 108 | intel_aes_encrypt_ecb_256) \ |
michael@0 | 109 | : ((keysize) == 16 ? intel_aes_decrypt_ecb_128 : \ |
michael@0 | 110 | (keysize) == 24 ? intel_aes_decrypt_ecb_192 : \ |
michael@0 | 111 | intel_aes_decrypt_ecb_256)) |
michael@0 | 112 | |
michael@0 | 113 | |
michael@0 | 114 | #define intel_aes_cbc_worker(encrypt, keysize) \ |
michael@0 | 115 | ((encrypt) \ |
michael@0 | 116 | ? ((keysize) == 16 ? intel_aes_encrypt_cbc_128 : \ |
michael@0 | 117 | (keysize) == 24 ? intel_aes_encrypt_cbc_192 : \ |
michael@0 | 118 | intel_aes_encrypt_cbc_256) \ |
michael@0 | 119 | : ((keysize) == 16 ? intel_aes_decrypt_cbc_128 : \ |
michael@0 | 120 | (keysize) == 24 ? intel_aes_decrypt_cbc_192 : \ |
michael@0 | 121 | intel_aes_decrypt_cbc_256)) |
michael@0 | 122 | |
michael@0 | 123 | #define intel_aes_ctr_worker(nr) \ |
michael@0 | 124 | ((nr) == 10 ? intel_aes_encrypt_ctr_128 : \ |
michael@0 | 125 | (nr) == 12 ? intel_aes_encrypt_ctr_192 : \ |
michael@0 | 126 | intel_aes_encrypt_ctr_256) |
michael@0 | 127 | |
michael@0 | 128 | |
michael@0 | 129 | #define intel_aes_init(encrypt, keysize) \ |
michael@0 | 130 | do { \ |
michael@0 | 131 | if (encrypt) { \ |
michael@0 | 132 | if (keysize == 16) \ |
michael@0 | 133 | intel_aes_encrypt_init_128(key, cx->expandedKey); \ |
michael@0 | 134 | else if (keysize == 24) \ |
michael@0 | 135 | intel_aes_encrypt_init_192(key, cx->expandedKey); \ |
michael@0 | 136 | else \ |
michael@0 | 137 | intel_aes_encrypt_init_256(key, cx->expandedKey); \ |
michael@0 | 138 | } else { \ |
michael@0 | 139 | if (keysize == 16) \ |
michael@0 | 140 | intel_aes_decrypt_init_128(key, cx->expandedKey); \ |
michael@0 | 141 | else if (keysize == 24) \ |
michael@0 | 142 | intel_aes_decrypt_init_192(key, cx->expandedKey); \ |
michael@0 | 143 | else \ |
michael@0 | 144 | intel_aes_decrypt_init_256(key, cx->expandedKey); \ |
michael@0 | 145 | } \ |
michael@0 | 146 | } while (0) |