Skip to content

Commit 129a187

Browse files
committed
added SystemSeed helper
1 parent 2cc4e6a commit 129a187

File tree

3 files changed

+102
-0
lines changed

3 files changed

+102
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
* jPOS Project [http://jpos.org]
3+
* Copyright (C) 2000-2015 Alejandro P. Revilla
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU Affero General Public License as
7+
* published by the Free Software Foundation, either version 3 of the
8+
* License, or (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU Affero General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU Affero General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
19+
package org.jpos.security;
20+
21+
import org.bouncycastle.util.encoders.Base64;
22+
import org.jpos.iso.ISOUtil;
23+
24+
import java.io.IOException;
25+
import java.io.InputStream;
26+
27+
@SuppressWarnings("unused")
28+
public class SystemSeed {
29+
public static byte[] getSeed (int l) {
30+
return getSeed(0, l);
31+
}
32+
public static byte[] getSeed (int offset, int l) {
33+
if (offset + l > seed.length)
34+
throw new IllegalArgumentException ("Invalid offset/length");
35+
byte[] b = new byte[l];
36+
System.arraycopy (seed, offset, b, 0, l);
37+
return b;
38+
}
39+
40+
private static final byte[] seed;
41+
static {
42+
try {
43+
byte[] _s0 = get("/META-INF/q2/.seed");
44+
byte[] _s1 = get("/META-INF/.seed");
45+
seed = _s1 == null ? _s0 : ISOUtil.xor(_s0, _s1);
46+
if (seed == null || seed.length < 16)
47+
throw new IllegalArgumentException ("Invalid seed");
48+
} catch (IOException e) {
49+
throw new IllegalArgumentException("Invalid system configuration");
50+
}
51+
}
52+
53+
private static byte[] get (String path) throws IOException {
54+
InputStream is = SystemSeed.class.getResourceAsStream(path);
55+
if (is != null) {
56+
try {
57+
byte[] b = new byte[is.available()];
58+
is.read(b);
59+
return Base64.decode(b);
60+
} finally {
61+
is.close();
62+
}
63+
}
64+
return null;
65+
}
66+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
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
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* jPOS Project [http://jpos.org]
3+
* Copyright (C) 2000-2015 Alejandro P. Revilla
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU Affero General Public License as
7+
* published by the Free Software Foundation, either version 3 of the
8+
* License, or (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU Affero General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU Affero General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
19+
package org.jpos.security;
20+
21+
import org.jpos.iso.ISOUtil;
22+
import org.junit.Test;
23+
24+
import static org.junit.Assert.assertEquals;
25+
public class SystemSeedTest {
26+
@Test
27+
public void testWellKnownSeeds() throws Throwable {
28+
assertEquals("Invalid seed 0",
29+
"371B4CF737319AC15BD6B18DE9E8B8537D2D2CC6323B4E728C8A06C654FBBA06",
30+
ISOUtil.hexString(ISOUtil.xor(SystemSeed.getSeed(16,32), SystemSeed.getSeed(4064-32))));
31+
assertEquals("Invalid seed 1",
32+
"6835BEFB07E7965940A99D46C7FAC87561DCB1FD7BF4932DB5ACC1E0529B1AE891B0368E14D5F9BFFC74E380426C3A7B",
33+
ISOUtil.hexString(ISOUtil.xor(SystemSeed.getSeed(0,1024), SystemSeed.getSeed(2048,48))));
34+
}
35+
}

0 commit comments

Comments
 (0)