diff options
author | Florian Dold <florian.dold@gmail.com> | 2014-08-06 19:41:51 +0000 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2014-08-06 19:41:51 +0000 |
commit | 92844bdea0fd13eee6d7aa738681321bf43052a4 (patch) | |
tree | d00ceb4bc2603be3df759f3acaf85a389dca9717 | |
parent | 430a7c7d6450904e5586a5ab5023c54621e73dd8 (diff) | |
download | gnunet-java-92844bdea0fd13eee6d7aa738681321bf43052a4.tar.gz gnunet-java-92844bdea0fd13eee6d7aa738681321bf43052a4.zip |
fix string en-/decoding
-rw-r--r-- | src/main/java/org/gnunet/util/Strings.java | 47 | ||||
-rw-r--r-- | src/test/java/org/gnunet/util/PeerIdentityTest.java | 9 |
2 files changed, 50 insertions, 6 deletions
diff --git a/src/main/java/org/gnunet/util/Strings.java b/src/main/java/org/gnunet/util/Strings.java index 8de30ab..1efaecf 100644 --- a/src/main/java/org/gnunet/util/Strings.java +++ b/src/main/java/org/gnunet/util/Strings.java | |||
@@ -24,7 +24,7 @@ package org.gnunet.util; | |||
24 | * Common functions on Strings, specific to gnunet-java | 24 | * Common functions on Strings, specific to gnunet-java |
25 | */ | 25 | */ |
26 | public class Strings { | 26 | public class Strings { |
27 | private static final String encTable = "0123456789ABCDEFGHIJKLMNOPQRSTUV"; | 27 | private static final String encTable = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"; |
28 | 28 | ||
29 | /** | 29 | /** |
30 | * Convert binary data to ASCII encoding. The ASCII encoding is rather | 30 | * Convert binary data to ASCII encoding. The ASCII encoding is rather |
@@ -170,11 +170,45 @@ public class Strings { | |||
170 | } | 170 | } |
171 | 171 | ||
172 | private static int getValue(char a) { | 172 | private static int getValue(char a) { |
173 | if ((a >= '0') && (a <= '9')) { | 173 | int dec; |
174 | return a - '0'; | 174 | |
175 | } | 175 | switch (a) |
176 | if ((a >= 'A') && (a <= 'V')) { | 176 | { |
177 | return (a - 'A' + 10); | 177 | case 'O': |
178 | case 'o': | ||
179 | a = '0'; | ||
180 | break; | ||
181 | case 'i': | ||
182 | case 'I': | ||
183 | case 'l': | ||
184 | case 'L': | ||
185 | a = '1'; | ||
186 | break; | ||
187 | /* also consider U to be V */ | ||
188 | case 'u': | ||
189 | case 'U': | ||
190 | a = 'V'; | ||
191 | break; | ||
192 | default: | ||
193 | break; | ||
194 | } | ||
195 | if ((a >= '0') && (a <= '9')) | ||
196 | return a - '0'; | ||
197 | if ((a >= 'a') && (a <= 'z')) | ||
198 | a = Character.toUpperCase((char) a); | ||
199 | /* return (a - 'a' + 10); */ | ||
200 | dec = 0; | ||
201 | if ((a >= 'A') && (a <= 'Z')) | ||
202 | { | ||
203 | if ('I' < a) | ||
204 | dec++; | ||
205 | if ('L' < a) | ||
206 | dec++; | ||
207 | if ('O' < a) | ||
208 | dec++; | ||
209 | if ('U' < a) | ||
210 | dec++; | ||
211 | return (a - 'A' + 10 - dec); | ||
178 | } | 212 | } |
179 | return -1; | 213 | return -1; |
180 | } | 214 | } |
@@ -183,3 +217,4 @@ public class Strings { | |||
183 | return stringToData(s, getDecodedDataLength(s.length())); | 217 | return stringToData(s, getDecodedDataLength(s.length())); |
184 | } | 218 | } |
185 | } | 219 | } |
220 | |||
diff --git a/src/test/java/org/gnunet/util/PeerIdentityTest.java b/src/test/java/org/gnunet/util/PeerIdentityTest.java index ac09813..7dd8c95 100644 --- a/src/test/java/org/gnunet/util/PeerIdentityTest.java +++ b/src/test/java/org/gnunet/util/PeerIdentityTest.java | |||
@@ -19,5 +19,14 @@ public class PeerIdentityTest { | |||
19 | Assert.assertArrayEquals(peerIdentity.data, peerIdentity2.data); | 19 | Assert.assertArrayEquals(peerIdentity.data, peerIdentity2.data); |
20 | } | 20 | } |
21 | 21 | ||
22 | /** | ||
23 | * Test that new encoding works (test string from Ilya Migal) | ||
24 | */ | ||
25 | @Test | ||
26 | public void test_ilya() { | ||
27 | PeerIdentity peerIdentity = PeerIdentity.fromString("NF0QZQSD5JEAXTK701H84YP0D2K0ZRM7GYA7MN2RFBJDJPVVYM90"); | ||
28 | Assert.assertNotNull(peerIdentity); | ||
29 | } | ||
30 | |||
22 | } | 31 | } |
23 | 32 | ||