• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.bouncycastle.util.encoders;
2 
3 import java.io.ByteArrayOutputStream;
4 import java.io.IOException;
5 import java.io.OutputStream;
6 
7 import org.bouncycastle.util.Strings;
8 
9 /**
10  * Utility class for converting hex data to bytes and back again.
11  */
12 public class Hex
13 {
14     private static final Encoder encoder = new HexEncoder();
15 
toHexString( byte[] data)16     public static String toHexString(
17         byte[] data)
18     {
19         return toHexString(data, 0, data.length);
20     }
21 
toHexString( byte[] data, int off, int length)22     public static String toHexString(
23         byte[] data,
24         int    off,
25         int    length)
26     {
27         byte[] encoded = encode(data, off, length);
28         return Strings.fromByteArray(encoded);
29     }
30 
31     /**
32      * encode the input data producing a Hex encoded byte array.
33      *
34      * @return a byte array containing the Hex encoded data.
35      */
encode( byte[] data)36     public static byte[] encode(
37         byte[]    data)
38     {
39         return encode(data, 0, data.length);
40     }
41 
42     /**
43      * encode the input data producing a Hex encoded byte array.
44      *
45      * @return a byte array containing the Hex encoded data.
46      */
encode( byte[] data, int off, int length)47     public static byte[] encode(
48         byte[]    data,
49         int       off,
50         int       length)
51     {
52         ByteArrayOutputStream    bOut = new ByteArrayOutputStream();
53 
54         try
55         {
56             encoder.encode(data, off, length, bOut);
57         }
58         catch (Exception e)
59         {
60             throw new EncoderException("exception encoding Hex string: " + e.getMessage(), e);
61         }
62 
63         return bOut.toByteArray();
64     }
65 
66     /**
67      * Hex encode the byte data writing it to the given output stream.
68      *
69      * @return the number of bytes produced.
70      */
encode( byte[] data, OutputStream out)71     public static int encode(
72         byte[]         data,
73         OutputStream   out)
74         throws IOException
75     {
76         return encoder.encode(data, 0, data.length, out);
77     }
78 
79     /**
80      * Hex encode the byte data writing it to the given output stream.
81      *
82      * @return the number of bytes produced.
83      */
encode( byte[] data, int off, int length, OutputStream out)84     public static int encode(
85         byte[]         data,
86         int            off,
87         int            length,
88         OutputStream   out)
89         throws IOException
90     {
91         return encoder.encode(data, off, length, out);
92     }
93 
94     /**
95      * decode the Hex encoded input data. It is assumed the input data is valid.
96      *
97      * @return a byte array representing the decoded data.
98      */
decode( byte[] data)99     public static byte[] decode(
100         byte[]    data)
101     {
102         ByteArrayOutputStream    bOut = new ByteArrayOutputStream();
103 
104         try
105         {
106             encoder.decode(data, 0, data.length, bOut);
107         }
108         catch (Exception e)
109         {
110             throw new DecoderException("exception decoding Hex data: " + e.getMessage(), e);
111         }
112 
113         return bOut.toByteArray();
114     }
115 
116     /**
117      * decode the Hex encoded String data - whitespace will be ignored.
118      *
119      * @return a byte array representing the decoded data.
120      */
decode( String data)121     public static byte[] decode(
122         String    data)
123     {
124         ByteArrayOutputStream    bOut = new ByteArrayOutputStream();
125 
126         try
127         {
128             encoder.decode(data, bOut);
129         }
130         catch (Exception e)
131         {
132             throw new DecoderException("exception decoding Hex string: " + e.getMessage(), e);
133         }
134 
135         return bOut.toByteArray();
136     }
137 
138     /**
139      * decode the Hex encoded String data writing it to the given output stream,
140      * whitespace characters will be ignored.
141      *
142      * @return the number of bytes produced.
143      */
decode( String data, OutputStream out)144     public static int decode(
145         String          data,
146         OutputStream    out)
147         throws IOException
148     {
149         return encoder.decode(data, out);
150     }
151 }
152