Bug 373108 - Implement AES Galois Counter Mode (GCM)
r=wtc,emaldona git-svn-id: svn://10.0.0.236/trunk@264319 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
1df0a8859c
commit
b967e76161
@ -0,0 +1,47 @@
|
||||
# Raeburn Standards Track [Page 12]
|
||||
#
|
||||
# RFC 3962 AES Encryption for Kerberos 5 February 2005
|
||||
#
|
||||
# Some test vectors for CBC with ciphertext stealing, using an initial
|
||||
# vector of all-zero.
|
||||
#
|
||||
# Original Test vectors were for AES CTS-3 (Kerberos). These test vectors have been modified for AES CTS-1 (NIST)
|
||||
#
|
||||
|
||||
Key: 63 68 69 63 6b 65 6e 20 74 65 72 69 79 61 6b 69
|
||||
IV: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
Input: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65 20
|
||||
Output: 97 c6 35 35 68 f2 bf 8c b4 d8 a5 80 36 2d a7 ff 7f
|
||||
Next IV: c6 35 35 68 f2 bf 8c b4 d8 a5 80 36 2d a7 ff 7f
|
||||
|
||||
Key: 63 68 69 63 6b 65 6e 20 74 65 72 69 79 61 6b 69
|
||||
IV: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
Input: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20
|
||||
Output: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 fc 00 78 3e 0e fd b2 c1 d4 45 d4 c8 ef f7 ed 22
|
||||
Next IV: fc 00 78 3e 0e fd b2 c1 d4 45 d4 c8 ef f7 ed 22
|
||||
|
||||
Key: 63 68 69 63 6b 65 6e 20 74 65 72 69 79 61 6b 69
|
||||
IV: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
Input: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20 43
|
||||
Output: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 84 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 a8
|
||||
Next IV: 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 a8
|
||||
|
||||
Key: 63 68 69 63 6b 65 6e 20 74 65 72 69 79 61 6b 69
|
||||
IV: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
Input: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20 43 68 69 63 6b 65 6e 2c 20 70 6c 65 61 73 65 2c
|
||||
Output: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 84 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 b3 ff fd 94 0c 16 a1 8c 1b 55 49 d2 f8 38 02 9e
|
||||
Next IV: b3 ff fd 94 0c 16 a1 8c 1b 55 49 d2 f8 38 02 9e
|
||||
|
||||
Key: 63 68 69 63 6b 65 6e 20 74 65 72 69 79 61 6b 69
|
||||
IV: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
Input: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20 43 68 69 63 6b 65 6e 2c 20 70 6c 65 61 73 65 2c 20
|
||||
Output: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 84 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 a8 9d ad 8b bb 96 c4 cd c0 3b c1 03 e1 a1 94 bb d8
|
||||
Next IV: 9d ad 8b bb 96 c4 cd c0 3b c1 03 e1 a1 94 bb d8
|
||||
|
||||
Key: 63 68 69 63 6b 65 6e 20 74 65 72 69 79 61 6b 69
|
||||
IV: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
Input: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20 43 68 69 63 6b 65 6e 2c 20 70 6c 65 61 73 65 2c 20 61 6e 64 20 77 6f 6e 74 6f 6e 20 73 6f 75 70 2e
|
||||
Output: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 84 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 a8 9d ad 8b bb 96 c4 cd c0 3b c1 03 e1 a1 94 bb d8 48 07 ef e8 36 ee 89 a5 26 73 0d bc 2f 7b c8 40
|
||||
Next IV: 48 07 ef e8 36 ee 89 a5 26 73 0d bc 2f 7b c8 40
|
||||
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
Key: 63 68 69 63 6b 65 6e 20 74 65 72 69 79 61 6b 69
|
||||
IV: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
Input: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65 20
|
||||
Output: 97 c6 35 35 68 f2 bf 8c b4 d8 a5 80 36 2d a7 ff 7f
|
||||
Next IV: c6 35 35 68 f2 bf 8c b4 d8 a5 80 36 2d a7 ff 7f
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
Key: 63 68 69 63 6b 65 6e 20 74 65 72 69 79 61 6b 69
|
||||
IV: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
Input: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20
|
||||
Output: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 fc 00 78 3e 0e fd b2 c1 d4 45 d4 c8 ef f7 ed 22
|
||||
Next IV: fc 00 78 3e 0e fd b2 c1 d4 45 d4 c8 ef f7 ed 22
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
Key: 63 68 69 63 6b 65 6e 20 74 65 72 69 79 61 6b 69
|
||||
IV: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
Input: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20 43
|
||||
Output: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 84 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 a8
|
||||
Next IV: 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 a8
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
Key: 63 68 69 63 6b 65 6e 20 74 65 72 69 79 61 6b 69
|
||||
IV: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
Input: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20 43 68 69 63 6b 65 6e 2c 20 70 6c 65 61 73 65 2c
|
||||
Output: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 84 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 b3 ff fd 94 0c 16 a1 8c 1b 55 49 d2 f8 38 02 9e
|
||||
Next IV: b3 ff fd 94 0c 16 a1 8c 1b 55 49 d2 f8 38 02 9e
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
Key: 63 68 69 63 6b 65 6e 20 74 65 72 69 79 61 6b 69
|
||||
IV: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
Input: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20 43 68 69 63 6b 65 6e 2c 20 70 6c 65 61 73 65 2c 20
|
||||
Output: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 84 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 a8 9d ad 8b bb 96 c4 cd c0 3b c1 03 e1 a1 94 bb d8
|
||||
Next IV: 9d ad 8b bb 96 c4 cd c0 3b c1 03 e1 a1 94 bb d8
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
Key: 63 68 69 63 6b 65 6e 20 74 65 72 69 79 61 6b 69
|
||||
IV: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||
Input: 49 20 77 6f 75 6c 64 20 6c 69 6b 65 20 74 68 65 20 47 65 6e 65 72 61 6c 20 47 61 75 27 73 20 43 68 69 63 6b 65 6e 2c 20 70 6c 65 61 73 65 2c 20 61 6e 64 20 77 6f 6e 74 6f 6e 20 73 6f 75 70 2e
|
||||
Output: 97 68 72 68 d6 ec cc c0 c0 7b 25 e2 5e cf e5 84 39 31 25 23 a7 86 62 d5 be 7f cb cc 98 eb f5 a8 9d ad 8b bb 96 c4 cd c0 3b c1 03 e1 a1 94 bb d8 48 07 ef e8 36 ee 89 a5 26 73 0d bc 2f 7b c8 40
|
||||
Next IV: 48 07 ef e8 36 ee 89 a5 26 73 0d bc 2f 7b c8 40
|
||||
|
||||
@ -0,0 +1 @@
|
||||
l8Y1NWjyv4y02KWANi2n/38=
|
||||
@ -0,0 +1 @@
|
||||
l2hyaNbszMDAeyXiXs/l/AB4Pg79ssHURdTI7/ftIg==
|
||||
@ -0,0 +1 @@
|
||||
l2hyaNbszMDAeyXiXs/lhDkxJSOnhmLVvn/LzJjr9ag=
|
||||
@ -0,0 +1 @@
|
||||
l2hyaNbszMDAeyXiXs/lhDkxJSOnhmLVvn/LzJjr9bP//ZQMFqGMG1VJ0vg4Ap4=
|
||||
@ -0,0 +1 @@
|
||||
l2hyaNbszMDAeyXiXs/lhDkxJSOnhmLVvn/LzJjr9aidrYu7lsTNwDvBA+GhlLvY
|
||||
@ -0,0 +1,2 @@
|
||||
l2hyaNbszMDAeyXiXs/lhDkxJSOnhmLVvn/LzJjr9aidrYu7lsTNwDvBA+GhlLvY
|
||||
SAfv6DbuiaUmcw28L3vIQA==
|
||||
BIN
mozilla/security/nss/cmd/bltest/tests/aes_cts/iv0
Normal file
BIN
mozilla/security/nss/cmd/bltest/tests/aes_cts/iv0
Normal file
Binary file not shown.
BIN
mozilla/security/nss/cmd/bltest/tests/aes_cts/iv1
Normal file
BIN
mozilla/security/nss/cmd/bltest/tests/aes_cts/iv1
Normal file
Binary file not shown.
BIN
mozilla/security/nss/cmd/bltest/tests/aes_cts/iv2
Normal file
BIN
mozilla/security/nss/cmd/bltest/tests/aes_cts/iv2
Normal file
Binary file not shown.
BIN
mozilla/security/nss/cmd/bltest/tests/aes_cts/iv3
Normal file
BIN
mozilla/security/nss/cmd/bltest/tests/aes_cts/iv3
Normal file
Binary file not shown.
BIN
mozilla/security/nss/cmd/bltest/tests/aes_cts/iv4
Normal file
BIN
mozilla/security/nss/cmd/bltest/tests/aes_cts/iv4
Normal file
Binary file not shown.
BIN
mozilla/security/nss/cmd/bltest/tests/aes_cts/iv5
Normal file
BIN
mozilla/security/nss/cmd/bltest/tests/aes_cts/iv5
Normal file
Binary file not shown.
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/key0
Normal file
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/key0
Normal file
@ -0,0 +1 @@
|
||||
chicken teriyaki
|
||||
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/key1
Normal file
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/key1
Normal file
@ -0,0 +1 @@
|
||||
chicken teriyaki
|
||||
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/key2
Normal file
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/key2
Normal file
@ -0,0 +1 @@
|
||||
chicken teriyaki
|
||||
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/key3
Normal file
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/key3
Normal file
@ -0,0 +1 @@
|
||||
chicken teriyaki
|
||||
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/key4
Normal file
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/key4
Normal file
@ -0,0 +1 @@
|
||||
chicken teriyaki
|
||||
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/key5
Normal file
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/key5
Normal file
@ -0,0 +1 @@
|
||||
chicken teriyaki
|
||||
9
mozilla/security/nss/cmd/bltest/tests/aes_cts/mktst.sh
Normal file
9
mozilla/security/nss/cmd/bltest/tests/aes_cts/mktst.sh
Normal file
@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
for i in 0 1 2 3 4 5
|
||||
do
|
||||
file="aes_cts_$i.txt"
|
||||
grep "Key" $file | sed -e 's;Key:;;' | hex > key$i
|
||||
grep "IV" $file | sed -e 's;IV:;;' | hex > iv$i
|
||||
grep "Input" $file | sed -e 's;Input:;;' | hex > plaintext$i
|
||||
grep "Output" $file | sed -e 's;Output:;;' | hex | btoa > ciphertext$i
|
||||
done
|
||||
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/numtests
Normal file
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/numtests
Normal file
@ -0,0 +1 @@
|
||||
6
|
||||
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/plaintext0
Normal file
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/plaintext0
Normal file
@ -0,0 +1 @@
|
||||
I would like the
|
||||
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/plaintext1
Normal file
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/plaintext1
Normal file
@ -0,0 +1 @@
|
||||
I would like the General Gau's
|
||||
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/plaintext2
Normal file
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/plaintext2
Normal file
@ -0,0 +1 @@
|
||||
I would like the General Gau's C
|
||||
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/plaintext3
Normal file
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/plaintext3
Normal file
@ -0,0 +1 @@
|
||||
I would like the General Gau's Chicken, please,
|
||||
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/plaintext4
Normal file
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/plaintext4
Normal file
@ -0,0 +1 @@
|
||||
I would like the General Gau's Chicken, please,
|
||||
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/plaintext5
Normal file
1
mozilla/security/nss/cmd/bltest/tests/aes_cts/plaintext5
Normal file
@ -0,0 +1 @@
|
||||
I would like the General Gau's Chicken, please, and wonton soup.
|
||||
@ -115,7 +115,7 @@ CTS_EncryptUpdate(CTSContext *cts, unsigned char *outbuf,
|
||||
if (rv != SECSuccess) {
|
||||
return SECFailure;
|
||||
}
|
||||
PORT_Assert(*outlen == fullblocks);
|
||||
*outlen = fullblocks; /* AES low level doesn't set outlen */
|
||||
inbuf += fullblocks;
|
||||
inlen -= fullblocks;
|
||||
if (inlen == 0) {
|
||||
@ -140,7 +140,6 @@ CTS_EncryptUpdate(CTSContext *cts, unsigned char *outbuf,
|
||||
blocksize, blocksize);
|
||||
PORT_Memset(lastBlock, 0, blocksize);
|
||||
if (rv == SECSuccess) {
|
||||
PORT_Assert(tmp == blocksize);
|
||||
*outlen = written + blocksize;
|
||||
}
|
||||
return rv;
|
||||
@ -208,19 +207,19 @@ CTS_DecryptUpdate(CTSContext *cts, unsigned char *outbuf,
|
||||
* the comment for encrypt. NOTE2: since we can't modify inbuf unless
|
||||
* inbuf and outbuf overlap, just copy inbuf to outbuf and modify it there
|
||||
*/
|
||||
pad = blocksize + (inlen - fullblocks);
|
||||
if (pad != blocksize) {
|
||||
pad = inlen - fullblocks;
|
||||
if (pad != 0) {
|
||||
if (inbuf != outbuf) {
|
||||
memcpy(outbuf, inbuf, inlen);
|
||||
/* keep the names so we logically know how we are using the
|
||||
* buffers */
|
||||
inbuf = outbuf;
|
||||
}
|
||||
memcpy(lastBlock, inbuf+inlen-blocksize-pad, blocksize);
|
||||
memcpy(lastBlock, inbuf+inlen-blocksize, blocksize);
|
||||
/* we know inbuf == outbuf now, inbuf is declared const and can't
|
||||
* be the target, so use outbuf for the target here */
|
||||
memcpy(outbuf+inlen-blocksize-pad, inbuf+inlen-pad, pad);
|
||||
memcpy(outbuf+inlen-blocksize, lastBlock, blocksize);
|
||||
memcpy(outbuf+inlen-pad, inbuf+inlen-blocksize-pad, pad);
|
||||
memcpy(outbuf+inlen-blocksize-pad, lastBlock, blocksize);
|
||||
}
|
||||
/* save the previous to last block so we can undo the misordered
|
||||
* chaining */
|
||||
@ -233,7 +232,7 @@ CTS_DecryptUpdate(CTSContext *cts, unsigned char *outbuf,
|
||||
if (rv != SECSuccess) {
|
||||
return SECFailure;
|
||||
}
|
||||
PORT_Assert(*outlen == fullblocks);
|
||||
*outlen = fullblocks; /* AES low level doesn't set outlen */
|
||||
inbuf += fullblocks;
|
||||
inlen -= fullblocks;
|
||||
if (inlen == 0) {
|
||||
@ -275,7 +274,7 @@ CTS_DecryptUpdate(CTSContext *cts, unsigned char *outbuf,
|
||||
PORT_Memcpy(outbuf, lastBlock, inlen);
|
||||
*outlen += inlen;
|
||||
/* copy Cn-1* into last buf to recover Cn-1 */
|
||||
PORT_Memcpy(lastBlock, Cn-1, inlen);
|
||||
PORT_Memcpy(lastBlock, Cn_1, inlen);
|
||||
/* note: because Cn and Cn-1 were out of order, our pointer to Pn also
|
||||
* points to where Pn-1 needs to reside. From here on out read Pn in
|
||||
* the code as really Pn-1. */
|
||||
@ -284,7 +283,6 @@ CTS_DecryptUpdate(CTSContext *cts, unsigned char *outbuf,
|
||||
if (rv != SECSuccess) {
|
||||
return SECFailure;
|
||||
}
|
||||
PORT_Assert(tmpLen == blocksize);
|
||||
/* make up for the out of order CBC decryption */
|
||||
XOR_BLOCK(Pn, Cn_2, blocksize);
|
||||
XOR_BLOCK(Pn, Cn, blocksize);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user