Mercurial > 510Connectbot
comparison src/ch/ethz/ssh2/crypto/SimpleDERReader.java @ 273:91a31873c42a ganymed
start conversion from trilead to ganymed
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Fri, 18 Jul 2014 11:21:46 -0700 |
parents | |
children | e0da43026046 |
comparison
equal
deleted
inserted
replaced
272:ce2f4e397703 | 273:91a31873c42a |
---|---|
1 /* | |
2 * Copyright (c) 2006-2011 Christian Plattner. All rights reserved. | |
3 * Please refer to the LICENSE.txt for licensing details. | |
4 */ | |
5 package ch.ethz.ssh2.crypto; | |
6 | |
7 import java.io.IOException; | |
8 | |
9 import java.math.BigInteger; | |
10 | |
11 /** | |
12 * SimpleDERReader. | |
13 * | |
14 * @author Christian Plattner | |
15 * @version 2.50, 03/15/10 | |
16 */ | |
17 public class SimpleDERReader | |
18 { | |
19 byte[] buffer; | |
20 int pos; | |
21 int count; | |
22 | |
23 public SimpleDERReader(byte[] b) | |
24 { | |
25 resetInput(b); | |
26 } | |
27 | |
28 public SimpleDERReader(byte[] b, int off, int len) | |
29 { | |
30 resetInput(b, off, len); | |
31 } | |
32 | |
33 public void resetInput(byte[] b) | |
34 { | |
35 resetInput(b, 0, b.length); | |
36 } | |
37 | |
38 public void resetInput(byte[] b, int off, int len) | |
39 { | |
40 buffer = b; | |
41 pos = off; | |
42 count = len; | |
43 } | |
44 | |
45 private byte readByte() throws IOException | |
46 { | |
47 if (count <= 0) | |
48 throw new IOException("DER byte array: out of data"); | |
49 count--; | |
50 return buffer[pos++]; | |
51 } | |
52 | |
53 private byte[] readBytes(int len) throws IOException | |
54 { | |
55 if (len > count) | |
56 throw new IOException("DER byte array: out of data"); | |
57 | |
58 byte[] b = new byte[len]; | |
59 | |
60 System.arraycopy(buffer, pos, b, 0, len); | |
61 | |
62 pos += len; | |
63 count -= len; | |
64 | |
65 return b; | |
66 } | |
67 | |
68 public int available() | |
69 { | |
70 return count; | |
71 } | |
72 | |
73 private int readLength() throws IOException | |
74 { | |
75 int len = readByte() & 0xff; | |
76 | |
77 if ((len & 0x80) == 0) | |
78 return len; | |
79 | |
80 int remain = len & 0x7F; | |
81 | |
82 if (remain == 0) | |
83 return -1; | |
84 | |
85 len = 0; | |
86 | |
87 while (remain > 0) | |
88 { | |
89 len = len << 8; | |
90 len = len | (readByte() & 0xff); | |
91 remain--; | |
92 } | |
93 | |
94 return len; | |
95 } | |
96 | |
97 public int ignoreNextObject() throws IOException | |
98 { | |
99 int type = readByte() & 0xff; | |
100 | |
101 int len = readLength(); | |
102 | |
103 if ((len < 0) || len > available()) | |
104 throw new IOException("Illegal len in DER object (" + len + ")"); | |
105 | |
106 readBytes(len); | |
107 | |
108 return type; | |
109 } | |
110 | |
111 public BigInteger readInt() throws IOException | |
112 { | |
113 int type = readByte() & 0xff; | |
114 | |
115 if (type != 0x02) | |
116 throw new IOException("Expected DER Integer, but found type " + type); | |
117 | |
118 int len = readLength(); | |
119 | |
120 if ((len < 0) || len > available()) | |
121 throw new IOException("Illegal len in DER object (" + len + ")"); | |
122 | |
123 byte[] b = readBytes(len); | |
124 | |
125 return new BigInteger(b); | |
126 } | |
127 | |
128 public byte[] readSequenceAsByteArray() throws IOException | |
129 { | |
130 int type = readByte() & 0xff; | |
131 | |
132 if (type != 0x30) | |
133 throw new IOException("Expected DER Sequence, but found type " + type); | |
134 | |
135 int len = readLength(); | |
136 | |
137 if ((len < 0) || len > available()) | |
138 throw new IOException("Illegal len in DER object (" + len + ")"); | |
139 | |
140 return readBytes(len); | |
141 } | |
142 | |
143 public byte[] readOctetString() throws IOException | |
144 { | |
145 int type = readByte() & 0xff; | |
146 | |
147 if (type != 0x04) | |
148 throw new IOException("Expected DER Octetstring, but found type " + type); | |
149 | |
150 int len = readLength(); | |
151 | |
152 if ((len < 0) || len > available()) | |
153 throw new IOException("Illegal len in DER object (" + len + ")"); | |
154 | |
155 return readBytes(len); | |
156 } | |
157 | |
158 } |