Skip to content

Commit 6a9d0c8

Browse files
committed
feat(test): Add test suite for SEED algorithm
1 parent 8bec44d commit 6a9d0c8

2 files changed

Lines changed: 166 additions & 0 deletions

File tree

test/seed-test.js

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
YUI.add(
2+
"algo-seed-test",
3+
function (Y) {
4+
var C = CryptoJS;
5+
6+
Y.Test.Runner.add(
7+
new Y.Test.Case({
8+
name: "SEED",
9+
10+
/**
11+
* SEED는 128비트(16바이트) 고정 길이 대칭키를 사용한다.
12+
* 키가 128비트를 초과하는 경우, 구현체에서 앞 128비트만 사용하므로
13+
* 더 긴 키를 전달하더라도 암호화/복호화 결과는 동일하다.
14+
*/
15+
testEncryptKeySize128: function () {
16+
Y.Assert.areEqual(
17+
"c1f2f511296263d0f38e4a99c2b0ba8a",
18+
C.SEED.encrypt(
19+
C.enc.Hex.parse("00112233445566778899aabbccddeeff"),
20+
C.enc.Hex.parse("9f3c7a1e4b8d2c6a0e5f91d4a7b3c8e2"),
21+
{ mode: C.mode.ECB, padding: C.pad.ZeroPadding }
22+
).ciphertext.toString()
23+
);
24+
},
25+
26+
testEncryptKeySize192: function () {
27+
Y.Assert.areEqual(
28+
"c1f2f511296263d0f38e4a99c2b0ba8a",
29+
C.SEED.encrypt(
30+
C.enc.Hex.parse("00112233445566778899aabbccddeeff"),
31+
C.enc.Hex.parse(
32+
"9f3c7a1e4b8d2c6a0e5f91d4a7b3c8e21011121314151617"
33+
),
34+
{ mode: C.mode.ECB, padding: C.pad.ZeroPadding }
35+
).ciphertext.toString()
36+
);
37+
},
38+
39+
testDecryptKeySize128: function () {
40+
Y.Assert.areEqual(
41+
"00112233445566778899aabbccddeeff",
42+
C.SEED.decrypt(
43+
C.lib.CipherParams.create({
44+
ciphertext: C.enc.Hex.parse("c1f2f511296263d0f38e4a99c2b0ba8a"),
45+
}),
46+
C.enc.Hex.parse("9f3c7a1e4b8d2c6a0e5f91d4a7b3c8e2"),
47+
{ mode: C.mode.ECB, padding: C.pad.ZeroPadding }
48+
).toString()
49+
);
50+
},
51+
52+
testDecryptKeySize192: function () {
53+
Y.Assert.areEqual(
54+
"00112233445566778899aabbccddeeff",
55+
C.SEED.decrypt(
56+
C.lib.CipherParams.create({
57+
ciphertext: C.enc.Hex.parse("c1f2f511296263d0f38e4a99c2b0ba8a"),
58+
}),
59+
C.enc.Hex.parse(
60+
"9f3c7a1e4b8d2c6a0e5f91d4a7b3c8e21011121314151617"
61+
),
62+
{ mode: C.mode.ECB, padding: C.pad.ZeroPadding }
63+
).toString()
64+
);
65+
},
66+
67+
testMultiPart: function () {
68+
var seed = C.algo.SEED.createEncryptor(
69+
C.enc.Hex.parse("9f3c7a1e4b8d2c6a0e5f91d4a7b3c8e2"),
70+
{ mode: C.mode.ECB, padding: C.pad.ZeroPadding }
71+
);
72+
var ciphertext1 = seed.process(C.enc.Hex.parse("001122334455"));
73+
var ciphertext2 = seed.process(C.enc.Hex.parse("66778899aa"));
74+
var ciphertext3 = seed.process(C.enc.Hex.parse("bbccddeeff"));
75+
var ciphertext4 = seed.finalize();
76+
77+
Y.Assert.areEqual(
78+
"c1f2f511296263d0f38e4a99c2b0ba8a",
79+
ciphertext1
80+
.concat(ciphertext2)
81+
.concat(ciphertext3)
82+
.concat(ciphertext4)
83+
.toString()
84+
);
85+
},
86+
87+
testInputIntegrity: function () {
88+
var message = C.enc.Hex.parse("00112233445566778899aabbccddeeff");
89+
var key = C.enc.Hex.parse("9f3c7a1e4b8d2c6a0e5f91d4a7b3c8e2");
90+
var iv = C.enc.Hex.parse("101112131415161718191a1b1c1d1e1f");
91+
92+
var expectedMessage = message.toString();
93+
var expectedKey = key.toString();
94+
var expectedIv = iv.toString();
95+
96+
C.SEED.encrypt(message, key, {
97+
mode: C.mode.CBC,
98+
padding: C.pad.NoPadding,
99+
iv,
100+
});
101+
102+
Y.Assert.areEqual(expectedMessage, message.toString());
103+
Y.Assert.areEqual(expectedKey, key.toString());
104+
Y.Assert.areEqual(expectedIv, iv.toString());
105+
},
106+
107+
testHelper: function () {
108+
// Save original random method
109+
var random = C.lib.WordArray.random;
110+
111+
// Replace random method with one that returns a predictable value
112+
C.lib.WordArray.random = function (nBytes) {
113+
var words = [];
114+
for (var i = 0; i < nBytes; i += 4) {
115+
words.push([0x11223344]);
116+
}
117+
118+
return C.lib.WordArray.create(words, nBytes);
119+
};
120+
121+
// Test
122+
Y.Assert.areEqual(
123+
C.algo.SEED.createEncryptor(C.SHA256("Jefe"), {
124+
mode: C.mode.ECB,
125+
padding: C.pad.NoPadding,
126+
})
127+
.finalize("Hi There")
128+
.toString(),
129+
C.SEED.encrypt("Hi There", C.SHA256("Jefe"), {
130+
mode: C.mode.ECB,
131+
padding: C.pad.NoPadding,
132+
}).ciphertext.toString()
133+
);
134+
Y.Assert.areEqual(
135+
C.lib.SerializableCipher.encrypt(
136+
C.algo.SEED,
137+
"Hi There",
138+
C.SHA256("Jefe"),
139+
{ mode: C.mode.ECB, padding: C.pad.NoPadding }
140+
).toString(),
141+
C.SEED.encrypt("Hi There", C.SHA256("Jefe"), {
142+
mode: C.mode.ECB,
143+
padding: C.pad.NoPadding,
144+
}).toString()
145+
);
146+
Y.Assert.areEqual(
147+
C.lib.PasswordBasedCipher.encrypt(C.algo.SEED, "Hi There", "Jefe", {
148+
mode: C.mode.ECB,
149+
padding: C.pad.NoPadding,
150+
}).toString(),
151+
C.SEED.encrypt("Hi There", "Jefe", {
152+
mode: C.mode.ECB,
153+
padding: C.pad.NoPadding,
154+
}).toString()
155+
);
156+
157+
// Restore random method
158+
C.lib.WordArray.random = random;
159+
},
160+
})
161+
);
162+
},
163+
"$Rev$"
164+
);

test/test.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
<script src="../src/rc4.js"></script>
3535
<script src="../src/rabbit.js"></script>
3636
<script src="../src/rabbit-legacy.js"></script>
37+
<script src="../src/seed.js"></script>
3738
<script src="../src/aes.js"></script>
3839
<script src="../src/blowfish.js"></script>
3940
<script src="../src/tripledes.js"></script>
@@ -86,6 +87,7 @@
8687
<script src="rabbit-test.js"></script>
8788
<script src="rabbit-legacy-test.js"></script>
8889
<script src="cipher-test.js"></script>
90+
<script src="seed-test.js"></script>
8991
<script src="aes-test.js"></script>
9092
<script src="des-test.js"></script>
9193
<script src="tripledes-test.js"></script>

0 commit comments

Comments
 (0)