001: package org.bouncycastle.crypto.test;
002:
003: import java.io.ByteArrayInputStream;
004: import java.security.SecureRandom;
005:
006: import org.bouncycastle.asn1.ASN1InputStream;
007: import org.bouncycastle.asn1.ASN1Sequence;
008: import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
009: import org.bouncycastle.asn1.pkcs.RSAPrivateKeyStructure;
010: import org.bouncycastle.asn1.x509.RSAPublicKeyStructure;
011: import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
012: import org.bouncycastle.crypto.AsymmetricBlockCipher;
013: import org.bouncycastle.crypto.encodings.OAEPEncoding;
014: import org.bouncycastle.crypto.engines.RSAEngine;
015: import org.bouncycastle.crypto.params.ParametersWithRandom;
016: import org.bouncycastle.crypto.params.RSAKeyParameters;
017: import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters;
018: import org.bouncycastle.util.encoders.Hex;
019: import org.bouncycastle.util.test.SimpleTestResult;
020: import org.bouncycastle.util.test.Test;
021: import org.bouncycastle.util.test.TestResult;
022:
023: public class OAEPTest implements Test {
024: static byte[] pubKeyEnc1 = { (byte) 0x30, (byte) 0x5a, (byte) 0x30,
025: (byte) 0x0d, (byte) 0x06, (byte) 0x09, (byte) 0x2a,
026: (byte) 0x86, (byte) 0x48, (byte) 0x86, (byte) 0xf7,
027: (byte) 0x0d, (byte) 0x01, (byte) 0x01, (byte) 0x01,
028: (byte) 0x05, (byte) 0x00, (byte) 0x03, (byte) 0x49,
029: (byte) 0x00, (byte) 0x30, (byte) 0x46, (byte) 0x02,
030: (byte) 0x41, (byte) 0x00, (byte) 0xaa, (byte) 0x36,
031: (byte) 0xab, (byte) 0xce, (byte) 0x88, (byte) 0xac,
032: (byte) 0xfd, (byte) 0xff, (byte) 0x55, (byte) 0x52,
033: (byte) 0x3c, (byte) 0x7f, (byte) 0xc4, (byte) 0x52,
034: (byte) 0x3f, (byte) 0x90, (byte) 0xef, (byte) 0xa0,
035: (byte) 0x0d, (byte) 0xf3, (byte) 0x77, (byte) 0x4a,
036: (byte) 0x25, (byte) 0x9f, (byte) 0x2e, (byte) 0x62,
037: (byte) 0xb4, (byte) 0xc5, (byte) 0xd9, (byte) 0x9c,
038: (byte) 0xb5, (byte) 0xad, (byte) 0xb3, (byte) 0x00,
039: (byte) 0xa0, (byte) 0x28, (byte) 0x5e, (byte) 0x53,
040: (byte) 0x01, (byte) 0x93, (byte) 0x0e, (byte) 0x0c,
041: (byte) 0x70, (byte) 0xfb, (byte) 0x68, (byte) 0x76,
042: (byte) 0x93, (byte) 0x9c, (byte) 0xe6, (byte) 0x16,
043: (byte) 0xce, (byte) 0x62, (byte) 0x4a, (byte) 0x11,
044: (byte) 0xe0, (byte) 0x08, (byte) 0x6d, (byte) 0x34,
045: (byte) 0x1e, (byte) 0xbc, (byte) 0xac, (byte) 0xa0,
046: (byte) 0xa1, (byte) 0xf5, (byte) 0x02, (byte) 0x01,
047: (byte) 0x11 };
048:
049: static byte[] privKeyEnc1 = { (byte) 0x30, (byte) 0x82,
050: (byte) 0x01, (byte) 0x52, (byte) 0x02, (byte) 0x01,
051: (byte) 0x00, (byte) 0x30, (byte) 0x0d, (byte) 0x06,
052: (byte) 0x09, (byte) 0x2a, (byte) 0x86, (byte) 0x48,
053: (byte) 0x86, (byte) 0xf7, (byte) 0x0d, (byte) 0x01,
054: (byte) 0x01, (byte) 0x01, (byte) 0x05, (byte) 0x00,
055: (byte) 0x04, (byte) 0x82, (byte) 0x01, (byte) 0x3c,
056: (byte) 0x30, (byte) 0x82, (byte) 0x01, (byte) 0x38,
057: (byte) 0x02, (byte) 0x01, (byte) 0x00, (byte) 0x02,
058: (byte) 0x41, (byte) 0x00, (byte) 0xaa, (byte) 0x36,
059: (byte) 0xab, (byte) 0xce, (byte) 0x88, (byte) 0xac,
060: (byte) 0xfd, (byte) 0xff, (byte) 0x55, (byte) 0x52,
061: (byte) 0x3c, (byte) 0x7f, (byte) 0xc4, (byte) 0x52,
062: (byte) 0x3f, (byte) 0x90, (byte) 0xef, (byte) 0xa0,
063: (byte) 0x0d, (byte) 0xf3, (byte) 0x77, (byte) 0x4a,
064: (byte) 0x25, (byte) 0x9f, (byte) 0x2e, (byte) 0x62,
065: (byte) 0xb4, (byte) 0xc5, (byte) 0xd9, (byte) 0x9c,
066: (byte) 0xb5, (byte) 0xad, (byte) 0xb3, (byte) 0x00,
067: (byte) 0xa0, (byte) 0x28, (byte) 0x5e, (byte) 0x53,
068: (byte) 0x01, (byte) 0x93, (byte) 0x0e, (byte) 0x0c,
069: (byte) 0x70, (byte) 0xfb, (byte) 0x68, (byte) 0x76,
070: (byte) 0x93, (byte) 0x9c, (byte) 0xe6, (byte) 0x16,
071: (byte) 0xce, (byte) 0x62, (byte) 0x4a, (byte) 0x11,
072: (byte) 0xe0, (byte) 0x08, (byte) 0x6d, (byte) 0x34,
073: (byte) 0x1e, (byte) 0xbc, (byte) 0xac, (byte) 0xa0,
074: (byte) 0xa1, (byte) 0xf5, (byte) 0x02, (byte) 0x01,
075: (byte) 0x11, (byte) 0x02, (byte) 0x40, (byte) 0x0a,
076: (byte) 0x03, (byte) 0x37, (byte) 0x48, (byte) 0x62,
077: (byte) 0x64, (byte) 0x87, (byte) 0x69, (byte) 0x5f,
078: (byte) 0x5f, (byte) 0x30, (byte) 0xbc, (byte) 0x38,
079: (byte) 0xb9, (byte) 0x8b, (byte) 0x44, (byte) 0xc2,
080: (byte) 0xcd, (byte) 0x2d, (byte) 0xff, (byte) 0x43,
081: (byte) 0x40, (byte) 0x98, (byte) 0xcd, (byte) 0x20,
082: (byte) 0xd8, (byte) 0xa1, (byte) 0x38, (byte) 0xd0,
083: (byte) 0x90, (byte) 0xbf, (byte) 0x64, (byte) 0x79,
084: (byte) 0x7c, (byte) 0x3f, (byte) 0xa7, (byte) 0xa2,
085: (byte) 0xcd, (byte) 0xcb, (byte) 0x3c, (byte) 0xd1,
086: (byte) 0xe0, (byte) 0xbd, (byte) 0xba, (byte) 0x26,
087: (byte) 0x54, (byte) 0xb4, (byte) 0xf9, (byte) 0xdf,
088: (byte) 0x8e, (byte) 0x8a, (byte) 0xe5, (byte) 0x9d,
089: (byte) 0x73, (byte) 0x3d, (byte) 0x9f, (byte) 0x33,
090: (byte) 0xb3, (byte) 0x01, (byte) 0x62, (byte) 0x4a,
091: (byte) 0xfd, (byte) 0x1d, (byte) 0x51, (byte) 0x02,
092: (byte) 0x21, (byte) 0x00, (byte) 0xd8, (byte) 0x40,
093: (byte) 0xb4, (byte) 0x16, (byte) 0x66, (byte) 0xb4,
094: (byte) 0x2e, (byte) 0x92, (byte) 0xea, (byte) 0x0d,
095: (byte) 0xa3, (byte) 0xb4, (byte) 0x32, (byte) 0x04,
096: (byte) 0xb5, (byte) 0xcf, (byte) 0xce, (byte) 0x33,
097: (byte) 0x52, (byte) 0x52, (byte) 0x4d, (byte) 0x04,
098: (byte) 0x16, (byte) 0xa5, (byte) 0xa4, (byte) 0x41,
099: (byte) 0xe7, (byte) 0x00, (byte) 0xaf, (byte) 0x46,
100: (byte) 0x12, (byte) 0x0d, (byte) 0x02, (byte) 0x21,
101: (byte) 0x00, (byte) 0xc9, (byte) 0x7f, (byte) 0xb1,
102: (byte) 0xf0, (byte) 0x27, (byte) 0xf4, (byte) 0x53,
103: (byte) 0xf6, (byte) 0x34, (byte) 0x12, (byte) 0x33,
104: (byte) 0xea, (byte) 0xaa, (byte) 0xd1, (byte) 0xd9,
105: (byte) 0x35, (byte) 0x3f, (byte) 0x6c, (byte) 0x42,
106: (byte) 0xd0, (byte) 0x88, (byte) 0x66, (byte) 0xb1,
107: (byte) 0xd0, (byte) 0x5a, (byte) 0x0f, (byte) 0x20,
108: (byte) 0x35, (byte) 0x02, (byte) 0x8b, (byte) 0x9d,
109: (byte) 0x89, (byte) 0x02, (byte) 0x20, (byte) 0x59,
110: (byte) 0x0b, (byte) 0x95, (byte) 0x72, (byte) 0xa2,
111: (byte) 0xc2, (byte) 0xa9, (byte) 0xc4, (byte) 0x06,
112: (byte) 0x05, (byte) 0x9d, (byte) 0xc2, (byte) 0xab,
113: (byte) 0x2f, (byte) 0x1d, (byte) 0xaf, (byte) 0xeb,
114: (byte) 0x7e, (byte) 0x8b, (byte) 0x4f, (byte) 0x10,
115: (byte) 0xa7, (byte) 0x54, (byte) 0x9e, (byte) 0x8e,
116: (byte) 0xed, (byte) 0xf5, (byte) 0xb4, (byte) 0xfc,
117: (byte) 0xe0, (byte) 0x9e, (byte) 0x05, (byte) 0x02,
118: (byte) 0x21, (byte) 0x00, (byte) 0x8e, (byte) 0x3c,
119: (byte) 0x05, (byte) 0x21, (byte) 0xfe, (byte) 0x15,
120: (byte) 0xe0, (byte) 0xea, (byte) 0x06, (byte) 0xa3,
121: (byte) 0x6f, (byte) 0xf0, (byte) 0xf1, (byte) 0x0c,
122: (byte) 0x99, (byte) 0x52, (byte) 0xc3, (byte) 0x5b,
123: (byte) 0x7a, (byte) 0x75, (byte) 0x14, (byte) 0xfd,
124: (byte) 0x32, (byte) 0x38, (byte) 0xb8, (byte) 0x0a,
125: (byte) 0xad, (byte) 0x52, (byte) 0x98, (byte) 0x62,
126: (byte) 0x8d, (byte) 0x51, (byte) 0x02, (byte) 0x20,
127: (byte) 0x36, (byte) 0x3f, (byte) 0xf7, (byte) 0x18,
128: (byte) 0x9d, (byte) 0xa8, (byte) 0xe9, (byte) 0x0b,
129: (byte) 0x1d, (byte) 0x34, (byte) 0x1f, (byte) 0x71,
130: (byte) 0xd0, (byte) 0x9b, (byte) 0x76, (byte) 0xa8,
131: (byte) 0xa9, (byte) 0x43, (byte) 0xe1, (byte) 0x1d,
132: (byte) 0x10, (byte) 0xb2, (byte) 0x4d, (byte) 0x24,
133: (byte) 0x9f, (byte) 0x2d, (byte) 0xea, (byte) 0xfe,
134: (byte) 0xf8, (byte) 0x0c, (byte) 0x18, (byte) 0x26 };
135:
136: static byte[] output1 = { (byte) 0x1b, (byte) 0x8f, (byte) 0x05,
137: (byte) 0xf9, (byte) 0xca, (byte) 0x1a, (byte) 0x79,
138: (byte) 0x52, (byte) 0x6e, (byte) 0x53, (byte) 0xf3,
139: (byte) 0xcc, (byte) 0x51, (byte) 0x4f, (byte) 0xdb,
140: (byte) 0x89, (byte) 0x2b, (byte) 0xfb, (byte) 0x91,
141: (byte) 0x93, (byte) 0x23, (byte) 0x1e, (byte) 0x78,
142: (byte) 0xb9, (byte) 0x92, (byte) 0xe6, (byte) 0x8d,
143: (byte) 0x50, (byte) 0xa4, (byte) 0x80, (byte) 0xcb,
144: (byte) 0x52, (byte) 0x33, (byte) 0x89, (byte) 0x5c,
145: (byte) 0x74, (byte) 0x95, (byte) 0x8d, (byte) 0x5d,
146: (byte) 0x02, (byte) 0xab, (byte) 0x8c, (byte) 0x0f,
147: (byte) 0xd0, (byte) 0x40, (byte) 0xeb, (byte) 0x58,
148: (byte) 0x44, (byte) 0xb0, (byte) 0x05, (byte) 0xc3,
149: (byte) 0x9e, (byte) 0xd8, (byte) 0x27, (byte) 0x4a,
150: (byte) 0x9d, (byte) 0xbf, (byte) 0xa8, (byte) 0x06,
151: (byte) 0x71, (byte) 0x40, (byte) 0x94, (byte) 0x39,
152: (byte) 0xd2 };
153:
154: static byte[] pubKeyEnc2 = { (byte) 0x30, (byte) 0x4c, (byte) 0x30,
155: (byte) 0x0d, (byte) 0x06, (byte) 0x09, (byte) 0x2a,
156: (byte) 0x86, (byte) 0x48, (byte) 0x86, (byte) 0xf7,
157: (byte) 0x0d, (byte) 0x01, (byte) 0x01, (byte) 0x01,
158: (byte) 0x05, (byte) 0x00, (byte) 0x03, (byte) 0x3b,
159: (byte) 0x00, (byte) 0x30, (byte) 0x38, (byte) 0x02,
160: (byte) 0x33, (byte) 0x00, (byte) 0xa3, (byte) 0x07,
161: (byte) 0x9a, (byte) 0x90, (byte) 0xdf, (byte) 0x0d,
162: (byte) 0xfd, (byte) 0x72, (byte) 0xac, (byte) 0x09,
163: (byte) 0x0c, (byte) 0xcc, (byte) 0x2a, (byte) 0x78,
164: (byte) 0xb8, (byte) 0x74, (byte) 0x13, (byte) 0x13,
165: (byte) 0x3e, (byte) 0x40, (byte) 0x75, (byte) 0x9c,
166: (byte) 0x98, (byte) 0xfa, (byte) 0xf8, (byte) 0x20,
167: (byte) 0x4f, (byte) 0x35, (byte) 0x8a, (byte) 0x0b,
168: (byte) 0x26, (byte) 0x3c, (byte) 0x67, (byte) 0x70,
169: (byte) 0xe7, (byte) 0x83, (byte) 0xa9, (byte) 0x3b,
170: (byte) 0x69, (byte) 0x71, (byte) 0xb7, (byte) 0x37,
171: (byte) 0x79, (byte) 0xd2, (byte) 0x71, (byte) 0x7b,
172: (byte) 0xe8, (byte) 0x34, (byte) 0x77, (byte) 0xcf,
173: (byte) 0x02, (byte) 0x01, (byte) 0x03 };
174:
175: static byte[] privKeyEnc2 = { (byte) 0x30, (byte) 0x82,
176: (byte) 0x01, (byte) 0x13, (byte) 0x02, (byte) 0x01,
177: (byte) 0x00, (byte) 0x30, (byte) 0x0d, (byte) 0x06,
178: (byte) 0x09, (byte) 0x2a, (byte) 0x86, (byte) 0x48,
179: (byte) 0x86, (byte) 0xf7, (byte) 0x0d, (byte) 0x01,
180: (byte) 0x01, (byte) 0x01, (byte) 0x05, (byte) 0x00,
181: (byte) 0x04, (byte) 0x81, (byte) 0xfe, (byte) 0x30,
182: (byte) 0x81, (byte) 0xfb, (byte) 0x02, (byte) 0x01,
183: (byte) 0x00, (byte) 0x02, (byte) 0x33, (byte) 0x00,
184: (byte) 0xa3, (byte) 0x07, (byte) 0x9a, (byte) 0x90,
185: (byte) 0xdf, (byte) 0x0d, (byte) 0xfd, (byte) 0x72,
186: (byte) 0xac, (byte) 0x09, (byte) 0x0c, (byte) 0xcc,
187: (byte) 0x2a, (byte) 0x78, (byte) 0xb8, (byte) 0x74,
188: (byte) 0x13, (byte) 0x13, (byte) 0x3e, (byte) 0x40,
189: (byte) 0x75, (byte) 0x9c, (byte) 0x98, (byte) 0xfa,
190: (byte) 0xf8, (byte) 0x20, (byte) 0x4f, (byte) 0x35,
191: (byte) 0x8a, (byte) 0x0b, (byte) 0x26, (byte) 0x3c,
192: (byte) 0x67, (byte) 0x70, (byte) 0xe7, (byte) 0x83,
193: (byte) 0xa9, (byte) 0x3b, (byte) 0x69, (byte) 0x71,
194: (byte) 0xb7, (byte) 0x37, (byte) 0x79, (byte) 0xd2,
195: (byte) 0x71, (byte) 0x7b, (byte) 0xe8, (byte) 0x34,
196: (byte) 0x77, (byte) 0xcf, (byte) 0x02, (byte) 0x01,
197: (byte) 0x03, (byte) 0x02, (byte) 0x32, (byte) 0x6c,
198: (byte) 0xaf, (byte) 0xbc, (byte) 0x60, (byte) 0x94,
199: (byte) 0xb3, (byte) 0xfe, (byte) 0x4c, (byte) 0x72,
200: (byte) 0xb0, (byte) 0xb3, (byte) 0x32, (byte) 0xc6,
201: (byte) 0xfb, (byte) 0x25, (byte) 0xa2, (byte) 0xb7,
202: (byte) 0x62, (byte) 0x29, (byte) 0x80, (byte) 0x4e,
203: (byte) 0x68, (byte) 0x65, (byte) 0xfc, (byte) 0xa4,
204: (byte) 0x5a, (byte) 0x74, (byte) 0xdf, (byte) 0x0f,
205: (byte) 0x8f, (byte) 0xb8, (byte) 0x41, (byte) 0x3b,
206: (byte) 0x52, (byte) 0xc0, (byte) 0xd0, (byte) 0xe5,
207: (byte) 0x3d, (byte) 0x9b, (byte) 0x59, (byte) 0x0f,
208: (byte) 0xf1, (byte) 0x9b, (byte) 0xe7, (byte) 0x9f,
209: (byte) 0x49, (byte) 0xdd, (byte) 0x21, (byte) 0xe5,
210: (byte) 0xeb, (byte) 0x02, (byte) 0x1a, (byte) 0x00,
211: (byte) 0xcf, (byte) 0x20, (byte) 0x35, (byte) 0x02,
212: (byte) 0x8b, (byte) 0x9d, (byte) 0x86, (byte) 0x98,
213: (byte) 0x40, (byte) 0xb4, (byte) 0x16, (byte) 0x66,
214: (byte) 0xb4, (byte) 0x2e, (byte) 0x92, (byte) 0xea,
215: (byte) 0x0d, (byte) 0xa3, (byte) 0xb4, (byte) 0x32,
216: (byte) 0x04, (byte) 0xb5, (byte) 0xcf, (byte) 0xce,
217: (byte) 0x91, (byte) 0x02, (byte) 0x1a, (byte) 0x00,
218: (byte) 0xc9, (byte) 0x7f, (byte) 0xb1, (byte) 0xf0,
219: (byte) 0x27, (byte) 0xf4, (byte) 0x53, (byte) 0xf6,
220: (byte) 0x34, (byte) 0x12, (byte) 0x33, (byte) 0xea,
221: (byte) 0xaa, (byte) 0xd1, (byte) 0xd9, (byte) 0x35,
222: (byte) 0x3f, (byte) 0x6c, (byte) 0x42, (byte) 0xd0,
223: (byte) 0x88, (byte) 0x66, (byte) 0xb1, (byte) 0xd0,
224: (byte) 0x5f, (byte) 0x02, (byte) 0x1a, (byte) 0x00,
225: (byte) 0x8a, (byte) 0x15, (byte) 0x78, (byte) 0xac,
226: (byte) 0x5d, (byte) 0x13, (byte) 0xaf, (byte) 0x10,
227: (byte) 0x2b, (byte) 0x22, (byte) 0xb9, (byte) 0x99,
228: (byte) 0xcd, (byte) 0x74, (byte) 0x61, (byte) 0xf1,
229: (byte) 0x5e, (byte) 0x6d, (byte) 0x22, (byte) 0xcc,
230: (byte) 0x03, (byte) 0x23, (byte) 0xdf, (byte) 0xdf,
231: (byte) 0x0b, (byte) 0x02, (byte) 0x1a, (byte) 0x00,
232: (byte) 0x86, (byte) 0x55, (byte) 0x21, (byte) 0x4a,
233: (byte) 0xc5, (byte) 0x4d, (byte) 0x8d, (byte) 0x4e,
234: (byte) 0xcd, (byte) 0x61, (byte) 0x77, (byte) 0xf1,
235: (byte) 0xc7, (byte) 0x36, (byte) 0x90, (byte) 0xce,
236: (byte) 0x2a, (byte) 0x48, (byte) 0x2c, (byte) 0x8b,
237: (byte) 0x05, (byte) 0x99, (byte) 0xcb, (byte) 0xe0,
238: (byte) 0x3f, (byte) 0x02, (byte) 0x1a, (byte) 0x00,
239: (byte) 0x83, (byte) 0xef, (byte) 0xef, (byte) 0xb8,
240: (byte) 0xa9, (byte) 0xa4, (byte) 0x0d, (byte) 0x1d,
241: (byte) 0xb6, (byte) 0xed, (byte) 0x98, (byte) 0xad,
242: (byte) 0x84, (byte) 0xed, (byte) 0x13, (byte) 0x35,
243: (byte) 0xdc, (byte) 0xc1, (byte) 0x08, (byte) 0xf3,
244: (byte) 0x22, (byte) 0xd0, (byte) 0x57, (byte) 0xcf,
245: (byte) 0x8d };
246:
247: static byte[] output2 = { (byte) 0x14, (byte) 0xbd, (byte) 0xdd,
248: (byte) 0x28, (byte) 0xc9, (byte) 0x83, (byte) 0x35,
249: (byte) 0x19, (byte) 0x23, (byte) 0x80, (byte) 0xe8,
250: (byte) 0xe5, (byte) 0x49, (byte) 0xb1, (byte) 0x58,
251: (byte) 0x2a, (byte) 0x8b, (byte) 0x40, (byte) 0xb4,
252: (byte) 0x48, (byte) 0x6d, (byte) 0x03, (byte) 0xa6,
253: (byte) 0xa5, (byte) 0x31, (byte) 0x1f, (byte) 0x1f,
254: (byte) 0xd5, (byte) 0xf0, (byte) 0xa1, (byte) 0x80,
255: (byte) 0xe4, (byte) 0x17, (byte) 0x53, (byte) 0x03,
256: (byte) 0x29, (byte) 0xa9, (byte) 0x34, (byte) 0x90,
257: (byte) 0x74, (byte) 0xb1, (byte) 0x52, (byte) 0x13,
258: (byte) 0x54, (byte) 0x29, (byte) 0x08, (byte) 0x24,
259: (byte) 0x52, (byte) 0x62, (byte) 0x51 };
260:
261: static byte[] pubKeyEnc3 = { (byte) 0x30, (byte) 0x81, (byte) 0x9d,
262: (byte) 0x30, (byte) 0x0d, (byte) 0x06, (byte) 0x09,
263: (byte) 0x2a, (byte) 0x86, (byte) 0x48, (byte) 0x86,
264: (byte) 0xf7, (byte) 0x0d, (byte) 0x01, (byte) 0x01,
265: (byte) 0x01, (byte) 0x05, (byte) 0x00, (byte) 0x03,
266: (byte) 0x81, (byte) 0x8b, (byte) 0x00, (byte) 0x30,
267: (byte) 0x81, (byte) 0x87, (byte) 0x02, (byte) 0x81,
268: (byte) 0x81, (byte) 0x00, (byte) 0xbb, (byte) 0xf8,
269: (byte) 0x2f, (byte) 0x09, (byte) 0x06, (byte) 0x82,
270: (byte) 0xce, (byte) 0x9c, (byte) 0x23, (byte) 0x38,
271: (byte) 0xac, (byte) 0x2b, (byte) 0x9d, (byte) 0xa8,
272: (byte) 0x71, (byte) 0xf7, (byte) 0x36, (byte) 0x8d,
273: (byte) 0x07, (byte) 0xee, (byte) 0xd4, (byte) 0x10,
274: (byte) 0x43, (byte) 0xa4, (byte) 0x40, (byte) 0xd6,
275: (byte) 0xb6, (byte) 0xf0, (byte) 0x74, (byte) 0x54,
276: (byte) 0xf5, (byte) 0x1f, (byte) 0xb8, (byte) 0xdf,
277: (byte) 0xba, (byte) 0xaf, (byte) 0x03, (byte) 0x5c,
278: (byte) 0x02, (byte) 0xab, (byte) 0x61, (byte) 0xea,
279: (byte) 0x48, (byte) 0xce, (byte) 0xeb, (byte) 0x6f,
280: (byte) 0xcd, (byte) 0x48, (byte) 0x76, (byte) 0xed,
281: (byte) 0x52, (byte) 0x0d, (byte) 0x60, (byte) 0xe1,
282: (byte) 0xec, (byte) 0x46, (byte) 0x19, (byte) 0x71,
283: (byte) 0x9d, (byte) 0x8a, (byte) 0x5b, (byte) 0x8b,
284: (byte) 0x80, (byte) 0x7f, (byte) 0xaf, (byte) 0xb8,
285: (byte) 0xe0, (byte) 0xa3, (byte) 0xdf, (byte) 0xc7,
286: (byte) 0x37, (byte) 0x72, (byte) 0x3e, (byte) 0xe6,
287: (byte) 0xb4, (byte) 0xb7, (byte) 0xd9, (byte) 0x3a,
288: (byte) 0x25, (byte) 0x84, (byte) 0xee, (byte) 0x6a,
289: (byte) 0x64, (byte) 0x9d, (byte) 0x06, (byte) 0x09,
290: (byte) 0x53, (byte) 0x74, (byte) 0x88, (byte) 0x34,
291: (byte) 0xb2, (byte) 0x45, (byte) 0x45, (byte) 0x98,
292: (byte) 0x39, (byte) 0x4e, (byte) 0xe0, (byte) 0xaa,
293: (byte) 0xb1, (byte) 0x2d, (byte) 0x7b, (byte) 0x61,
294: (byte) 0xa5, (byte) 0x1f, (byte) 0x52, (byte) 0x7a,
295: (byte) 0x9a, (byte) 0x41, (byte) 0xf6, (byte) 0xc1,
296: (byte) 0x68, (byte) 0x7f, (byte) 0xe2, (byte) 0x53,
297: (byte) 0x72, (byte) 0x98, (byte) 0xca, (byte) 0x2a,
298: (byte) 0x8f, (byte) 0x59, (byte) 0x46, (byte) 0xf8,
299: (byte) 0xe5, (byte) 0xfd, (byte) 0x09, (byte) 0x1d,
300: (byte) 0xbd, (byte) 0xcb, (byte) 0x02, (byte) 0x01,
301: (byte) 0x11 };
302:
303: static byte[] privKeyEnc3 = { (byte) 0x30, (byte) 0x82,
304: (byte) 0x02, (byte) 0x75, (byte) 0x02, (byte) 0x01,
305: (byte) 0x00, (byte) 0x30, (byte) 0x0d, (byte) 0x06,
306: (byte) 0x09, (byte) 0x2a, (byte) 0x86, (byte) 0x48,
307: (byte) 0x86, (byte) 0xf7, (byte) 0x0d, (byte) 0x01,
308: (byte) 0x01, (byte) 0x01, (byte) 0x05, (byte) 0x00,
309: (byte) 0x04, (byte) 0x82, (byte) 0x02, (byte) 0x5f,
310: (byte) 0x30, (byte) 0x82, (byte) 0x02, (byte) 0x5b,
311: (byte) 0x02, (byte) 0x01, (byte) 0x00, (byte) 0x02,
312: (byte) 0x81, (byte) 0x81, (byte) 0x00, (byte) 0xbb,
313: (byte) 0xf8, (byte) 0x2f, (byte) 0x09, (byte) 0x06,
314: (byte) 0x82, (byte) 0xce, (byte) 0x9c, (byte) 0x23,
315: (byte) 0x38, (byte) 0xac, (byte) 0x2b, (byte) 0x9d,
316: (byte) 0xa8, (byte) 0x71, (byte) 0xf7, (byte) 0x36,
317: (byte) 0x8d, (byte) 0x07, (byte) 0xee, (byte) 0xd4,
318: (byte) 0x10, (byte) 0x43, (byte) 0xa4, (byte) 0x40,
319: (byte) 0xd6, (byte) 0xb6, (byte) 0xf0, (byte) 0x74,
320: (byte) 0x54, (byte) 0xf5, (byte) 0x1f, (byte) 0xb8,
321: (byte) 0xdf, (byte) 0xba, (byte) 0xaf, (byte) 0x03,
322: (byte) 0x5c, (byte) 0x02, (byte) 0xab, (byte) 0x61,
323: (byte) 0xea, (byte) 0x48, (byte) 0xce, (byte) 0xeb,
324: (byte) 0x6f, (byte) 0xcd, (byte) 0x48, (byte) 0x76,
325: (byte) 0xed, (byte) 0x52, (byte) 0x0d, (byte) 0x60,
326: (byte) 0xe1, (byte) 0xec, (byte) 0x46, (byte) 0x19,
327: (byte) 0x71, (byte) 0x9d, (byte) 0x8a, (byte) 0x5b,
328: (byte) 0x8b, (byte) 0x80, (byte) 0x7f, (byte) 0xaf,
329: (byte) 0xb8, (byte) 0xe0, (byte) 0xa3, (byte) 0xdf,
330: (byte) 0xc7, (byte) 0x37, (byte) 0x72, (byte) 0x3e,
331: (byte) 0xe6, (byte) 0xb4, (byte) 0xb7, (byte) 0xd9,
332: (byte) 0x3a, (byte) 0x25, (byte) 0x84, (byte) 0xee,
333: (byte) 0x6a, (byte) 0x64, (byte) 0x9d, (byte) 0x06,
334: (byte) 0x09, (byte) 0x53, (byte) 0x74, (byte) 0x88,
335: (byte) 0x34, (byte) 0xb2, (byte) 0x45, (byte) 0x45,
336: (byte) 0x98, (byte) 0x39, (byte) 0x4e, (byte) 0xe0,
337: (byte) 0xaa, (byte) 0xb1, (byte) 0x2d, (byte) 0x7b,
338: (byte) 0x61, (byte) 0xa5, (byte) 0x1f, (byte) 0x52,
339: (byte) 0x7a, (byte) 0x9a, (byte) 0x41, (byte) 0xf6,
340: (byte) 0xc1, (byte) 0x68, (byte) 0x7f, (byte) 0xe2,
341: (byte) 0x53, (byte) 0x72, (byte) 0x98, (byte) 0xca,
342: (byte) 0x2a, (byte) 0x8f, (byte) 0x59, (byte) 0x46,
343: (byte) 0xf8, (byte) 0xe5, (byte) 0xfd, (byte) 0x09,
344: (byte) 0x1d, (byte) 0xbd, (byte) 0xcb, (byte) 0x02,
345: (byte) 0x01, (byte) 0x11, (byte) 0x02, (byte) 0x81,
346: (byte) 0x81, (byte) 0x00, (byte) 0xa5, (byte) 0xda,
347: (byte) 0xfc, (byte) 0x53, (byte) 0x41, (byte) 0xfa,
348: (byte) 0xf2, (byte) 0x89, (byte) 0xc4, (byte) 0xb9,
349: (byte) 0x88, (byte) 0xdb, (byte) 0x30, (byte) 0xc1,
350: (byte) 0xcd, (byte) 0xf8, (byte) 0x3f, (byte) 0x31,
351: (byte) 0x25, (byte) 0x1e, (byte) 0x06, (byte) 0x68,
352: (byte) 0xb4, (byte) 0x27, (byte) 0x84, (byte) 0x81,
353: (byte) 0x38, (byte) 0x01, (byte) 0x57, (byte) 0x96,
354: (byte) 0x41, (byte) 0xb2, (byte) 0x94, (byte) 0x10,
355: (byte) 0xb3, (byte) 0xc7, (byte) 0x99, (byte) 0x8d,
356: (byte) 0x6b, (byte) 0xc4, (byte) 0x65, (byte) 0x74,
357: (byte) 0x5e, (byte) 0x5c, (byte) 0x39, (byte) 0x26,
358: (byte) 0x69, (byte) 0xd6, (byte) 0x87, (byte) 0x0d,
359: (byte) 0xa2, (byte) 0xc0, (byte) 0x82, (byte) 0xa9,
360: (byte) 0x39, (byte) 0xe3, (byte) 0x7f, (byte) 0xdc,
361: (byte) 0xb8, (byte) 0x2e, (byte) 0xc9, (byte) 0x3e,
362: (byte) 0xda, (byte) 0xc9, (byte) 0x7f, (byte) 0xf3,
363: (byte) 0xad, (byte) 0x59, (byte) 0x50, (byte) 0xac,
364: (byte) 0xcf, (byte) 0xbc, (byte) 0x11, (byte) 0x1c,
365: (byte) 0x76, (byte) 0xf1, (byte) 0xa9, (byte) 0x52,
366: (byte) 0x94, (byte) 0x44, (byte) 0xe5, (byte) 0x6a,
367: (byte) 0xaf, (byte) 0x68, (byte) 0xc5, (byte) 0x6c,
368: (byte) 0x09, (byte) 0x2c, (byte) 0xd3, (byte) 0x8d,
369: (byte) 0xc3, (byte) 0xbe, (byte) 0xf5, (byte) 0xd2,
370: (byte) 0x0a, (byte) 0x93, (byte) 0x99, (byte) 0x26,
371: (byte) 0xed, (byte) 0x4f, (byte) 0x74, (byte) 0xa1,
372: (byte) 0x3e, (byte) 0xdd, (byte) 0xfb, (byte) 0xe1,
373: (byte) 0xa1, (byte) 0xce, (byte) 0xcc, (byte) 0x48,
374: (byte) 0x94, (byte) 0xaf, (byte) 0x94, (byte) 0x28,
375: (byte) 0xc2, (byte) 0xb7, (byte) 0xb8, (byte) 0x88,
376: (byte) 0x3f, (byte) 0xe4, (byte) 0x46, (byte) 0x3a,
377: (byte) 0x4b, (byte) 0xc8, (byte) 0x5b, (byte) 0x1c,
378: (byte) 0xb3, (byte) 0xc1, (byte) 0x02, (byte) 0x41,
379: (byte) 0x00, (byte) 0xee, (byte) 0xcf, (byte) 0xae,
380: (byte) 0x81, (byte) 0xb1, (byte) 0xb9, (byte) 0xb3,
381: (byte) 0xc9, (byte) 0x08, (byte) 0x81, (byte) 0x0b,
382: (byte) 0x10, (byte) 0xa1, (byte) 0xb5, (byte) 0x60,
383: (byte) 0x01, (byte) 0x99, (byte) 0xeb, (byte) 0x9f,
384: (byte) 0x44, (byte) 0xae, (byte) 0xf4, (byte) 0xfd,
385: (byte) 0xa4, (byte) 0x93, (byte) 0xb8, (byte) 0x1a,
386: (byte) 0x9e, (byte) 0x3d, (byte) 0x84, (byte) 0xf6,
387: (byte) 0x32, (byte) 0x12, (byte) 0x4e, (byte) 0xf0,
388: (byte) 0x23, (byte) 0x6e, (byte) 0x5d, (byte) 0x1e,
389: (byte) 0x3b, (byte) 0x7e, (byte) 0x28, (byte) 0xfa,
390: (byte) 0xe7, (byte) 0xaa, (byte) 0x04, (byte) 0x0a,
391: (byte) 0x2d, (byte) 0x5b, (byte) 0x25, (byte) 0x21,
392: (byte) 0x76, (byte) 0x45, (byte) 0x9d, (byte) 0x1f,
393: (byte) 0x39, (byte) 0x75, (byte) 0x41, (byte) 0xba,
394: (byte) 0x2a, (byte) 0x58, (byte) 0xfb, (byte) 0x65,
395: (byte) 0x99, (byte) 0x02, (byte) 0x41, (byte) 0x00,
396: (byte) 0xc9, (byte) 0x7f, (byte) 0xb1, (byte) 0xf0,
397: (byte) 0x27, (byte) 0xf4, (byte) 0x53, (byte) 0xf6,
398: (byte) 0x34, (byte) 0x12, (byte) 0x33, (byte) 0xea,
399: (byte) 0xaa, (byte) 0xd1, (byte) 0xd9, (byte) 0x35,
400: (byte) 0x3f, (byte) 0x6c, (byte) 0x42, (byte) 0xd0,
401: (byte) 0x88, (byte) 0x66, (byte) 0xb1, (byte) 0xd0,
402: (byte) 0x5a, (byte) 0x0f, (byte) 0x20, (byte) 0x35,
403: (byte) 0x02, (byte) 0x8b, (byte) 0x9d, (byte) 0x86,
404: (byte) 0x98, (byte) 0x40, (byte) 0xb4, (byte) 0x16,
405: (byte) 0x66, (byte) 0xb4, (byte) 0x2e, (byte) 0x92,
406: (byte) 0xea, (byte) 0x0d, (byte) 0xa3, (byte) 0xb4,
407: (byte) 0x32, (byte) 0x04, (byte) 0xb5, (byte) 0xcf,
408: (byte) 0xce, (byte) 0x33, (byte) 0x52, (byte) 0x52,
409: (byte) 0x4d, (byte) 0x04, (byte) 0x16, (byte) 0xa5,
410: (byte) 0xa4, (byte) 0x41, (byte) 0xe7, (byte) 0x00,
411: (byte) 0xaf, (byte) 0x46, (byte) 0x15, (byte) 0x03,
412: (byte) 0x02, (byte) 0x40, (byte) 0x54, (byte) 0x49,
413: (byte) 0x4c, (byte) 0xa6, (byte) 0x3e, (byte) 0xba,
414: (byte) 0x03, (byte) 0x37, (byte) 0xe4, (byte) 0xe2,
415: (byte) 0x40, (byte) 0x23, (byte) 0xfc, (byte) 0xd6,
416: (byte) 0x9a, (byte) 0x5a, (byte) 0xeb, (byte) 0x07,
417: (byte) 0xdd, (byte) 0xdc, (byte) 0x01, (byte) 0x83,
418: (byte) 0xa4, (byte) 0xd0, (byte) 0xac, (byte) 0x9b,
419: (byte) 0x54, (byte) 0xb0, (byte) 0x51, (byte) 0xf2,
420: (byte) 0xb1, (byte) 0x3e, (byte) 0xd9, (byte) 0x49,
421: (byte) 0x09, (byte) 0x75, (byte) 0xea, (byte) 0xb7,
422: (byte) 0x74, (byte) 0x14, (byte) 0xff, (byte) 0x59,
423: (byte) 0xc1, (byte) 0xf7, (byte) 0x69, (byte) 0x2e,
424: (byte) 0x9a, (byte) 0x2e, (byte) 0x20, (byte) 0x2b,
425: (byte) 0x38, (byte) 0xfc, (byte) 0x91, (byte) 0x0a,
426: (byte) 0x47, (byte) 0x41, (byte) 0x74, (byte) 0xad,
427: (byte) 0xc9, (byte) 0x3c, (byte) 0x1f, (byte) 0x67,
428: (byte) 0xc9, (byte) 0x81, (byte) 0x02, (byte) 0x40,
429: (byte) 0x47, (byte) 0x1e, (byte) 0x02, (byte) 0x90,
430: (byte) 0xff, (byte) 0x0a, (byte) 0xf0, (byte) 0x75,
431: (byte) 0x03, (byte) 0x51, (byte) 0xb7, (byte) 0xf8,
432: (byte) 0x78, (byte) 0x86, (byte) 0x4c, (byte) 0xa9,
433: (byte) 0x61, (byte) 0xad, (byte) 0xbd, (byte) 0x3a,
434: (byte) 0x8a, (byte) 0x7e, (byte) 0x99, (byte) 0x1c,
435: (byte) 0x5c, (byte) 0x05, (byte) 0x56, (byte) 0xa9,
436: (byte) 0x4c, (byte) 0x31, (byte) 0x46, (byte) 0xa7,
437: (byte) 0xf9, (byte) 0x80, (byte) 0x3f, (byte) 0x8f,
438: (byte) 0x6f, (byte) 0x8a, (byte) 0xe3, (byte) 0x42,
439: (byte) 0xe9, (byte) 0x31, (byte) 0xfd, (byte) 0x8a,
440: (byte) 0xe4, (byte) 0x7a, (byte) 0x22, (byte) 0x0d,
441: (byte) 0x1b, (byte) 0x99, (byte) 0xa4, (byte) 0x95,
442: (byte) 0x84, (byte) 0x98, (byte) 0x07, (byte) 0xfe,
443: (byte) 0x39, (byte) 0xf9, (byte) 0x24, (byte) 0x5a,
444: (byte) 0x98, (byte) 0x36, (byte) 0xda, (byte) 0x3d,
445: (byte) 0x02, (byte) 0x41, (byte) 0x00, (byte) 0xb0,
446: (byte) 0x6c, (byte) 0x4f, (byte) 0xda, (byte) 0xbb,
447: (byte) 0x63, (byte) 0x01, (byte) 0x19, (byte) 0x8d,
448: (byte) 0x26, (byte) 0x5b, (byte) 0xdb, (byte) 0xae,
449: (byte) 0x94, (byte) 0x23, (byte) 0xb3, (byte) 0x80,
450: (byte) 0xf2, (byte) 0x71, (byte) 0xf7, (byte) 0x34,
451: (byte) 0x53, (byte) 0x88, (byte) 0x50, (byte) 0x93,
452: (byte) 0x07, (byte) 0x7f, (byte) 0xcd, (byte) 0x39,
453: (byte) 0xe2, (byte) 0x11, (byte) 0x9f, (byte) 0xc9,
454: (byte) 0x86, (byte) 0x32, (byte) 0x15, (byte) 0x4f,
455: (byte) 0x58, (byte) 0x83, (byte) 0xb1, (byte) 0x67,
456: (byte) 0xa9, (byte) 0x67, (byte) 0xbf, (byte) 0x40,
457: (byte) 0x2b, (byte) 0x4e, (byte) 0x9e, (byte) 0x2e,
458: (byte) 0x0f, (byte) 0x96, (byte) 0x56, (byte) 0xe6,
459: (byte) 0x98, (byte) 0xea, (byte) 0x36, (byte) 0x66,
460: (byte) 0xed, (byte) 0xfb, (byte) 0x25, (byte) 0x79,
461: (byte) 0x80, (byte) 0x39, (byte) 0xf7 };
462:
463: static byte[] output3 = Hex
464: .decode("b8246b56a6ed5881aeb585d9a25b2ad790c417e080681bf1ac2bc3deb69d8bce"
465: + "f0c4366fec400af052a72e9b0effb5b3f2f192dbeaca03c12740057113bf1f06"
466: + "69ac22e9f3a7852e3c15d913cab0b8863a95c99294ce8674214954610346f4d4"
467: + "74b26f7c48b42ee68e1f572a1fc4026ac456b4f59f7b621ea1b9d88f64202fb1");
468:
469: private class Rand extends SecureRandom {
470: byte[] seed = { (byte) 0xaa, (byte) 0xfd, (byte) 0x12,
471: (byte) 0xf6, (byte) 0x59, (byte) 0xca, (byte) 0xe6,
472: (byte) 0x34, (byte) 0x89, (byte) 0xb4, (byte) 0x79,
473: (byte) 0xe5, (byte) 0x07, (byte) 0x6d, (byte) 0xde,
474: (byte) 0xc2, (byte) 0xf0, (byte) 0x6c, (byte) 0xb5,
475: (byte) 0x8f };
476:
477: public void nextBytes(byte[] bytes) {
478: System.arraycopy(seed, 0, bytes, 0, bytes.length);
479: }
480: }
481:
482: private class OAEPTester implements Test {
483: private int id;
484: private byte[] pubKeyEnc;
485: private byte[] privKeyEnc;
486: private byte[] output;
487:
488: OAEPTester(int id, byte[] pubKeyEnc, byte[] privKeyEnc,
489: byte[] output) {
490: this .id = id;
491: this .pubKeyEnc = pubKeyEnc;
492: this .privKeyEnc = privKeyEnc;
493: this .output = output;
494: }
495:
496: public String getName() {
497: return "OAEPTest " + id;
498: }
499:
500: public TestResult perform() {
501: ByteArrayInputStream bIn = new ByteArrayInputStream(
502: pubKeyEnc);
503: ASN1InputStream dIn = new ASN1InputStream(bIn);
504:
505: //
506: // extract the public key info.
507: //
508: RSAPublicKeyStructure pubStruct;
509:
510: try {
511: pubStruct = new RSAPublicKeyStructure(
512: (ASN1Sequence) new SubjectPublicKeyInfo(
513: (ASN1Sequence) dIn.readObject())
514: .getPublicKey());
515: } catch (Exception e) {
516: return new SimpleTestResult(false, getName()
517: + ": exception - " + e.toString());
518: }
519:
520: bIn = new ByteArrayInputStream(privKeyEnc);
521: dIn = new ASN1InputStream(bIn);
522:
523: //
524: // extract the private key info.
525: //
526: RSAPrivateKeyStructure privStruct;
527:
528: try {
529: privStruct = new RSAPrivateKeyStructure(
530: (ASN1Sequence) (new PrivateKeyInfo(
531: (ASN1Sequence) dIn.readObject())
532: .getPrivateKey()));
533: } catch (Exception e) {
534: return new SimpleTestResult(false, getName()
535: + ": exception - " + e.toString());
536: }
537:
538: RSAKeyParameters pubParameters = new RSAKeyParameters(
539: false, pubStruct.getModulus(), pubStruct
540: .getPublicExponent());
541:
542: RSAKeyParameters privParameters = new RSAPrivateCrtKeyParameters(
543: privStruct.getModulus(), privStruct
544: .getPublicExponent(), privStruct
545: .getPrivateExponent(), privStruct
546: .getPrime1(), privStruct.getPrime2(),
547: privStruct.getExponent1(), privStruct
548: .getExponent2(), privStruct
549: .getCoefficient());
550:
551: AsymmetricBlockCipher cipher = new OAEPEncoding(
552: new RSAEngine());
553:
554: cipher.init(true, new ParametersWithRandom(pubParameters,
555: new Rand()));
556:
557: byte[] out;
558: byte[] input = new byte[] { (byte) 0x54, (byte) 0x85,
559: (byte) 0x9b, (byte) 0x34, (byte) 0x2c, (byte) 0x49,
560: (byte) 0xea, (byte) 0x2a };
561:
562: try {
563: out = cipher.processBlock(input, 0, input.length);
564: } catch (Exception e) {
565: return new SimpleTestResult(false, getName()
566: + ": exception - " + e.toString());
567: }
568:
569: for (int i = 0; i != output.length; i++) {
570: if (out[i] != output[i]) {
571: return new SimpleTestResult(false, getName()
572: + ": failed encryption");
573: }
574: }
575:
576: cipher.init(false, privParameters);
577: try {
578: out = cipher.processBlock(output, 0, output.length);
579: } catch (Exception e) {
580: return new SimpleTestResult(false, getName()
581: + ": exception - " + e.toString());
582: }
583:
584: for (int i = 0; i != input.length; i++) {
585: if (out[i] != input[i]) {
586: return new SimpleTestResult(false, getName()
587: + ": failed decoding");
588: }
589: }
590:
591: return new SimpleTestResult(true, getName() + ": Okay");
592: }
593: }
594:
595: public OAEPTest() {
596: }
597:
598: public String getName() {
599: return "OAEP";
600: }
601:
602: public TestResult perform() {
603: Test test = new OAEPTester(1, pubKeyEnc1, privKeyEnc1, output1);
604: TestResult result = test.perform();
605:
606: if (!result.isSuccessful()) {
607: return result;
608: }
609:
610: test = new OAEPTester(2, pubKeyEnc2, privKeyEnc2, output2);
611: result = test.perform();
612:
613: if (!result.isSuccessful()) {
614: return result;
615: }
616:
617: test = new OAEPTester(3, pubKeyEnc3, privKeyEnc3, output3);
618: result = test.perform();
619:
620: if (!result.isSuccessful()) {
621: return result;
622: }
623:
624: return new SimpleTestResult(true, "OAEP: Okay");
625: }
626:
627: public static void main(String[] args) {
628: OAEPTest test = new OAEPTest();
629: TestResult result = test.perform();
630:
631: System.out.println(result);
632: }
633: }
|