Browse Source
Change-Id: I5c1ed0397ef99eb5d4f120da331b66c2d0f1707a Signed-off-by: Michael Dardis <git@md-5.net> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>stable-5.8
Michael Dardis
5 years ago
committed by
Matthias Sohn
4 changed files with 113 additions and 2 deletions
@ -0,0 +1,49 @@
|
||||
/* |
||||
* Copyright (C) 2010, Google Inc. |
||||
* Copyright (C) 2020 Michael Dardis and others |
||||
* |
||||
* This program and the accompanying materials are made available under the |
||||
* terms of the Eclipse Distribution License v. 1.0 which is available at |
||||
* https://www.eclipse.org/org/documents/edl-v10.php.
|
||||
* |
||||
* SPDX-License-Identifier: BSD-3-Clause |
||||
*/ |
||||
|
||||
package org.eclipse.jgit.util; |
||||
|
||||
import static org.eclipse.jgit.util.Hex.decode; |
||||
import static org.eclipse.jgit.util.Hex.toHexString; |
||||
import static org.junit.Assert.assertEquals; |
||||
|
||||
import org.eclipse.jgit.junit.JGitTestUtil; |
||||
import org.eclipse.jgit.lib.Constants; |
||||
import org.junit.Test; |
||||
|
||||
public class HexTest { |
||||
@Test |
||||
public void testEncode() { |
||||
assertEquals("68690a", toHexString(b("hi\n"))); |
||||
assertEquals("0001020d0a0971", toHexString(b("\0\1\2\r\n\tq"))); |
||||
} |
||||
|
||||
@Test |
||||
public void testDecode() { |
||||
JGitTestUtil.assertEquals(b("hi\n"), decode("68690a")); |
||||
JGitTestUtil.assertEquals(b("\0\1\2\r\n\tq"), decode("0001020d0a0971")); |
||||
JGitTestUtil.assertEquals(b("\u000EB"), decode("0E42")); |
||||
} |
||||
|
||||
@Test |
||||
public void testEncodeMatchesDecode() { |
||||
String[] testStrings = { "", "cow", "a", "a secret string", |
||||
"\0\1\2\r\n\t" }; |
||||
for (String e : testStrings) { |
||||
JGitTestUtil.assertEquals(b(e), decode(toHexString(b(e)))); |
||||
} |
||||
} |
||||
|
||||
private static byte[] b(String str) { |
||||
return Constants.encode(str); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,63 @@
|
||||
/* |
||||
* Copyright (C) 2020, Michael Dardis. and others |
||||
* |
||||
* This program and the accompanying materials are made available under the |
||||
* terms of the Eclipse Distribution License v. 1.0 which is available at |
||||
* https://www.eclipse.org/org/documents/edl-v10.php.
|
||||
* |
||||
* SPDX-License-Identifier: BSD-3-Clause |
||||
*/ |
||||
|
||||
package org.eclipse.jgit.util; |
||||
|
||||
/** |
||||
* Encodes and decodes to and from hexadecimal notation. |
||||
* |
||||
* @since 5.7 |
||||
*/ |
||||
public final class Hex { |
||||
|
||||
private static final char[] HEX = "0123456789abcdef".toCharArray(); //$NON-NLS-1$
|
||||
|
||||
/** Defeats instantiation. */ |
||||
private Hex() { |
||||
// empty
|
||||
} |
||||
|
||||
/** |
||||
* Decode a hexadecimal string to a byte array. |
||||
* |
||||
* Note this method performs no validation on input content. |
||||
* |
||||
* @param s hexadecimal string |
||||
* @return decoded array |
||||
*/ |
||||
public static byte[] decode(String s) { |
||||
int len = s.length(); |
||||
byte[] b = new byte[len / 2]; |
||||
|
||||
for (int i = 0; i < len; i += 2) { |
||||
b[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) | Character.digit(s.charAt(i + 1), 16)); |
||||
} |
||||
return b; |
||||
} |
||||
|
||||
/** |
||||
* Encode a byte array to a hexadecimal string. |
||||
* |
||||
* @param b byte array |
||||
* @return hexadecimal string |
||||
*/ |
||||
public static String toHexString(byte[] b) { |
||||
char[] c = new char[b.length * 2]; |
||||
|
||||
for (int i = 0; i < b.length; i++) { |
||||
int v = b[i] & 0xFF; |
||||
|
||||
c[i * 2] = HEX[v >>> 4]; |
||||
c[i * 2 + 1] = HEX[v & 0x0F]; |
||||
} |
||||
|
||||
return new String(c); |
||||
} |
||||
} |
Loading…
Reference in new issue