/external/apache-harmony/auth/src/test/java/common/org/apache/harmony/auth/tests/javax/security/auth/kerberos/KerberosTicketTest.java

https://gitlab.com/brian0218/rk3188_rk3066_r-box_android4.4.2_sdk · Java · 640 lines · 389 code · 119 blank · 132 comment · 3 complexity · 10829e8a6922c5bf3a5474f1bc6b7f03 MD5 · raw file

  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements. See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License. You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. package org.apache.harmony.auth.tests.javax.security.auth.kerberos;
  18. import java.net.InetAddress;
  19. import java.net.UnknownHostException;
  20. import java.util.Arrays;
  21. import java.util.Date;
  22. import javax.crypto.SecretKey;
  23. import javax.security.auth.DestroyFailedException;
  24. import javax.security.auth.RefreshFailedException;
  25. import javax.security.auth.kerberos.KerberosKey;
  26. import javax.security.auth.kerberos.KerberosPrincipal;
  27. import javax.security.auth.kerberos.KerberosTicket;
  28. import junit.framework.TestCase;
  29. import org.apache.harmony.auth.tests.support.TestUtils;
  30. public class KerberosTicketTest extends TestCase {
  31. private static final String ENV_KDC = "java.security.krb5.kdc";
  32. private static final String ENV_REALM = "java.security.krb5.realm";
  33. // ticket's ASN.1 encoding
  34. private static final byte[] ticket = { 0x01, 0x02, 0x03, 0x04 };
  35. // client's principal
  36. private static final KerberosPrincipal pClient = new KerberosPrincipal(
  37. "client@apache.org");
  38. // server's principal
  39. private static final KerberosPrincipal pServer = new KerberosPrincipal(
  40. "server@apache.org");
  41. // session key
  42. private static final byte[] sessionKey = { 0x01, 0x04, 0x03, 0x02 };
  43. private static final int KEY_TYPE = 1;
  44. // number of flags used by Kerberos protocol
  45. private static final int FLAGS_NUM = 32;
  46. private static final boolean[] flags = { true, false, true, false, true,
  47. false, true, false, true, false, true, false, };
  48. private static final int AUTH_TIME = 0;
  49. private static final Date authTime = new Date(AUTH_TIME);
  50. private static final int START_TIME = 1;
  51. private static final Date startTime = new Date(START_TIME);
  52. private static final int END_TIME = 2;
  53. private static final Date endTime = new Date(END_TIME);
  54. private static final Date renewTill = new Date(3);
  55. private static final InetAddress[] addesses;
  56. static {
  57. try {
  58. addesses = new InetAddress[] { InetAddress.getLocalHost() };
  59. } catch (UnknownHostException e) {
  60. throw new RuntimeException(e);
  61. }
  62. }
  63. /**
  64. * @tests javax.security.auth.kerberos.KerberosTicket#getAuthTime()
  65. */
  66. public void test_getAuthTime() throws Exception {
  67. Date newAuthTime = new Date(AUTH_TIME);
  68. KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
  69. sessionKey, KEY_TYPE, flags, newAuthTime, startTime, endTime,
  70. renewTill, addesses);
  71. // initial value is not copied
  72. newAuthTime.setTime(AUTH_TIME + 1);
  73. assertEquals(AUTH_TIME + 1, krbTicket.getAuthTime().getTime());
  74. // returned value is copied
  75. assertNotSame(krbTicket.getAuthTime(), krbTicket.getAuthTime());
  76. // auth time: null value is illegal for constructor
  77. try {
  78. new KerberosTicket(ticket, pClient, pServer, sessionKey, KEY_TYPE,
  79. flags, null, startTime, endTime, renewTill, addesses);
  80. fail("No expected IllegalArgumentException");
  81. } catch (IllegalArgumentException e) {
  82. }
  83. }
  84. /**
  85. * @tests javax.security.auth.kerberos.KerberosTicket#getClient()
  86. */
  87. public void test_getClient() throws Exception {
  88. KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
  89. sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
  90. renewTill, addesses);
  91. assertSame(pClient, krbTicket.getClient());
  92. // client principal: null value is illegal for constructor
  93. try {
  94. new KerberosTicket(ticket, null, pServer, sessionKey, KEY_TYPE,
  95. flags, authTime, startTime, endTime, renewTill, addesses);
  96. fail("No expected IllegalArgumentException");
  97. } catch (IllegalArgumentException e) {
  98. }
  99. }
  100. /**
  101. * @tests javax.security.auth.kerberos.KerberosTicket#getClientAddresses()
  102. */
  103. public void test_getClientAddresses() throws Exception {
  104. KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
  105. sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
  106. renewTill, addesses);
  107. assertTrue(Arrays.equals(addesses, krbTicket.getClientAddresses()));
  108. // initial value is copied
  109. assertNotSame(addesses, krbTicket.getClientAddresses());
  110. // KerberosTicket instance is immutable
  111. assertNotSame(krbTicket.getClientAddresses(), krbTicket
  112. .getClientAddresses());
  113. // addesses: null value is OK for constructor
  114. krbTicket = new KerberosTicket(ticket, pClient, pServer, sessionKey,
  115. KEY_TYPE, flags, authTime, startTime, endTime, renewTill, null);
  116. assertNull(krbTicket.getClientAddresses());
  117. }
  118. /**
  119. * @tests javax.security.auth.kerberos.KerberosTicket#getEncoded()
  120. */
  121. public void test_getEncoded() throws Exception {
  122. KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
  123. sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
  124. renewTill, addesses);
  125. assertTrue(Arrays.equals(ticket, krbTicket.getEncoded()));
  126. // initial byte array is copied
  127. assertNotSame(ticket, krbTicket.getEncoded());
  128. // KerberosTicket instance is immutable
  129. assertNotSame(krbTicket.getEncoded(), krbTicket.getEncoded());
  130. // ticket: null value is illegal for constructor
  131. try {
  132. new KerberosTicket(null, pClient, pServer, sessionKey, KEY_TYPE,
  133. flags, authTime, startTime, endTime, renewTill, addesses);
  134. fail("No expected IllegalArgumentException");
  135. } catch (IllegalArgumentException e) {
  136. }
  137. }
  138. /**
  139. * @tests javax.security.auth.kerberos.KerberosTicket#getEndTime()
  140. */
  141. public void test_getEndTime() throws Exception {
  142. Date newEndTime = new Date(END_TIME);
  143. KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
  144. sessionKey, KEY_TYPE, flags, authTime, startTime, newEndTime,
  145. renewTill, addesses);
  146. // initial value is not copied
  147. newEndTime.setTime(END_TIME + 1);
  148. assertEquals(END_TIME + 1, krbTicket.getEndTime().getTime());
  149. // returned value is copied
  150. assertNotSame(krbTicket.getEndTime(), krbTicket.getEndTime());
  151. // end time: null value is illegal for constructor
  152. try {
  153. new KerberosTicket(ticket, pClient, pServer, sessionKey, KEY_TYPE,
  154. flags, authTime, startTime, null, renewTill, addesses);
  155. fail("No expected IllegalArgumentException");
  156. } catch (IllegalArgumentException e) {
  157. }
  158. }
  159. /**
  160. * @tests javax.security.auth.kerberos.KerberosTicket#getFlags()
  161. */
  162. public void test_getFlags() {
  163. boolean[] myFlags = new boolean[] { true, //reserved
  164. true, // forwardable
  165. true, // forwarded
  166. true, // proxiable
  167. true, // proxy
  168. true, // may-postdate
  169. true, // postdated
  170. true, // invalid
  171. true, // renewable
  172. true, // initial
  173. true, // pre-authent
  174. true // hw-authent
  175. };
  176. KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
  177. sessionKey, KEY_TYPE, myFlags, // <=== we test this
  178. authTime, startTime, endTime, renewTill, addesses);
  179. // test: returned value is copied
  180. assertNotSame(krbTicket.getFlags(), krbTicket.getFlags());
  181. // test: flags values
  182. assertTrue(krbTicket.isForwardable());
  183. assertTrue(krbTicket.isForwarded());
  184. assertTrue(krbTicket.isInitial());
  185. assertTrue(krbTicket.isPostdated());
  186. assertTrue(krbTicket.isProxiable());
  187. assertTrue(krbTicket.isProxy());
  188. assertTrue(krbTicket.isRenewable());
  189. //
  190. // test: number of flags less the in Kerberos protocol (<32)
  191. //
  192. boolean[] ktFlags = krbTicket.getFlags();
  193. assertEquals("flags length", FLAGS_NUM, ktFlags.length);
  194. int index = 0;
  195. // must match to initial array
  196. for (; index < flags.length; index++) {
  197. assertEquals("Index: " + index, myFlags[index], ktFlags[index]);
  198. }
  199. // the rest is expected to be false
  200. for (; index < FLAGS_NUM; index++) {
  201. assertEquals("Index: " + index, false, ktFlags[index]);
  202. }
  203. //
  204. // test: flags array is greater then 32
  205. //
  206. myFlags = new boolean[50];
  207. krbTicket = new KerberosTicket(ticket, pClient, pServer, sessionKey,
  208. KEY_TYPE, myFlags, // <=== we test this
  209. authTime, startTime, endTime, renewTill, addesses);
  210. ktFlags = krbTicket.getFlags();
  211. assertEquals(myFlags.length, ktFlags.length);
  212. for (index = 0; index < ktFlags.length; index++) {
  213. assertEquals(false, ktFlags[index]);
  214. }
  215. // initial array is copied
  216. assertFalse(krbTicket.isForwardable());
  217. myFlags[1] = true;
  218. assertFalse(krbTicket.isForwardable());
  219. //
  220. // test: Null value
  221. //
  222. krbTicket = new KerberosTicket(ticket, pClient, pServer, sessionKey,
  223. KEY_TYPE, null, // <=== we test this
  224. authTime, startTime, endTime, renewTill, addesses);
  225. assertTrue(Arrays.equals(new boolean[FLAGS_NUM], krbTicket.getFlags()));
  226. }
  227. /**
  228. * @tests javax.security.auth.kerberos.KerberosTicket#getServer()
  229. */
  230. public void test_getServer() throws Exception {
  231. KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
  232. sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
  233. renewTill, addesses);
  234. assertSame(pServer, krbTicket.getServer());
  235. // server principal: null value is illegal for constructor
  236. try {
  237. new KerberosTicket(ticket, pClient, null, sessionKey, KEY_TYPE,
  238. flags, authTime, startTime, endTime, renewTill, addesses);
  239. fail("No expected IllegalArgumentException");
  240. } catch (IllegalArgumentException e) {
  241. }
  242. }
  243. /**
  244. * @tests javax.security.auth.kerberos.KerberosTicket#getSessionKey()
  245. */
  246. public void test_getSessionKey() throws Exception {
  247. KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
  248. sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
  249. renewTill, addesses);
  250. assertSame(krbTicket.getSessionKey(), krbTicket.getSessionKey());
  251. // test returned SecretKey object
  252. SecretKey sKey = krbTicket.getSessionKey();
  253. byte[] keyBytes = sKey.getEncoded();
  254. assertTrue(Arrays.equals(sessionKey, keyBytes));
  255. // initial byte array is copied
  256. assertNotSame(sessionKey, sKey.getEncoded());
  257. // key instance is immutable
  258. assertNotSame(sKey.getEncoded(), sKey.getEncoded());
  259. assertEquals("algorithm", "DES", sKey.getAlgorithm());
  260. assertEquals("format", "RAW", sKey.getFormat());
  261. // sessionKey: null value is illegal for constructor
  262. try {
  263. new KerberosTicket(ticket, pClient, pServer, null, KEY_TYPE, flags,
  264. authTime, startTime, endTime, renewTill, addesses);
  265. fail("No expected IllegalArgumentException");
  266. } catch (IllegalArgumentException e) {
  267. }
  268. }
  269. /**
  270. * @tests javax.security.auth.kerberos.KerberosTicket#getSessionKeyType()
  271. */
  272. public void test_getSessionKeyType() throws Exception {
  273. KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
  274. sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
  275. renewTill, addesses);
  276. assertEquals(KEY_TYPE, krbTicket.getSessionKeyType());
  277. }
  278. /**
  279. * @tests javax.security.auth.kerberos.KerberosTicket#getStartTime()
  280. */
  281. public void test_getStartTime() throws Exception {
  282. Date newStartTime = new Date(START_TIME);
  283. KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
  284. sessionKey, KEY_TYPE, flags, authTime, newStartTime, endTime,
  285. renewTill, addesses);
  286. // initial value is copied
  287. newStartTime.setTime(START_TIME + 1);
  288. assertEquals(START_TIME + 1, krbTicket.getStartTime().getTime());
  289. // returned value is copied
  290. assertNotSame(krbTicket.getStartTime(), krbTicket.getStartTime());
  291. // start time: null value is valid for constructor
  292. krbTicket = new KerberosTicket(ticket, pClient, pServer, sessionKey,
  293. KEY_TYPE, flags, authTime, null, endTime, renewTill, addesses);
  294. assertEquals(authTime, krbTicket.getStartTime());
  295. assertNotSame(authTime, krbTicket.getStartTime());
  296. }
  297. /**
  298. * @tests javax.security.auth.kerberos.KerberosTicket#destroy()
  299. * @tests javax.security.auth.kerberos.KerberosTicket#isDestroyed()
  300. */
  301. public void test_Destroyable() throws Exception {
  302. KerberosTicket kt = new KerberosTicket(ticket, pClient, pServer,
  303. sessionKey, KEY_TYPE, flags, authTime, startTime, endTime,
  304. renewTill, addesses);
  305. assertFalse(kt.isDestroyed());
  306. kt.destroy();
  307. assertTrue(kt.isDestroyed());
  308. // no exceptions for second destroy
  309. kt.destroy();
  310. assertNull(kt.getAuthTime());
  311. assertNull(kt.getClient());
  312. assertNull(kt.getClientAddresses());
  313. try {
  314. kt.getEncoded();
  315. fail("No expected IllegalStateException");
  316. } catch (IllegalStateException e) {
  317. }
  318. assertNull(kt.getEndTime());
  319. assertNull(kt.getFlags());
  320. assertNull(kt.getRenewTill());
  321. assertNull(kt.getServer());
  322. try {
  323. kt.getSessionKey();
  324. fail("No expected IllegalStateException");
  325. } catch (IllegalStateException e) {
  326. }
  327. try {
  328. kt.getSessionKeyType();
  329. fail("No expected IllegalStateException");
  330. } catch (IllegalStateException e) {
  331. }
  332. try {
  333. kt.toString();
  334. fail("No expected IllegalStateException");
  335. } catch (IllegalStateException e) {
  336. }
  337. }
  338. /**
  339. * @tests javax.security.auth.kerberos.KerberosTicket#refresh()
  340. */
  341. public void test_refresh() throws Exception {
  342. boolean[] myFlags = new boolean[] { true, //reserved
  343. true, // forwardable
  344. true, // forwarded
  345. true, // proxiable
  346. true, // proxy
  347. true, // may-postdate
  348. true, // postdated
  349. true, // invalid
  350. true, // renewable: <=== we test this
  351. true, // initial
  352. true, // pre-authent
  353. true // hw-authent
  354. };
  355. //
  356. // test: should not renew ticket because renewTill < current time
  357. //
  358. Date newRenewTill = new Date((new Date()).getTime() - 3600000);
  359. KerberosTicket krbTicket = new KerberosTicket(ticket, pClient, pServer,
  360. sessionKey, KEY_TYPE, myFlags, authTime, startTime, endTime,
  361. newRenewTill, // <=== we test this: it is less then current time
  362. addesses);
  363. try {
  364. krbTicket.refresh();
  365. fail("No expected RefreshFailedException");
  366. } catch (RefreshFailedException e) {
  367. }
  368. //
  369. // test: should not renew ticket because renewable flag is false
  370. //
  371. newRenewTill = new Date((new Date()).getTime() + 3600000);
  372. myFlags[8] = false;
  373. krbTicket = new KerberosTicket(encTicket, pClient, pServer, sessionKey,
  374. KEY_TYPE, myFlags, // <=== we test this: it is not renewable
  375. authTime, startTime, endTime, newRenewTill, addesses);
  376. try {
  377. krbTicket.refresh();
  378. fail("No expected RefreshFailedException");
  379. } catch (RefreshFailedException e) {
  380. }
  381. //
  382. // test: dependency on system props 'kdc' and 'realm'
  383. //
  384. // verify that env. is clean
  385. assertNull(System.getProperty(ENV_KDC));
  386. assertNull(System.getProperty(ENV_REALM));
  387. // create real DES key
  388. byte[] newSessionKey = new KerberosKey(new KerberosPrincipal(
  389. "me@MY.REALM"), "pwd".toCharArray(), "DES").getEncoded();
  390. myFlags[8] = true;
  391. krbTicket = new KerberosTicket(encTicket, pClient, pServer,
  392. newSessionKey, KEY_TYPE, myFlags, authTime, startTime, endTime,
  393. newRenewTill, addesses);
  394. // case 1: unset 'kdc' and set 'realm'
  395. TestUtils.setSystemProperty(ENV_KDC, "some_value");
  396. try {
  397. krbTicket.refresh();
  398. fail("No expected RefreshFailedException");
  399. } catch (RefreshFailedException e) {
  400. } finally {
  401. TestUtils.setSystemProperty(ENV_KDC, null);
  402. }
  403. // case 2: set 'kdc' and unset 'realm' sys.props
  404. TestUtils.setSystemProperty(ENV_REALM, "some_value");
  405. try {
  406. krbTicket.refresh();
  407. fail("No expected RefreshFailedException");
  408. } catch (RefreshFailedException e) {
  409. } finally {
  410. TestUtils.setSystemProperty(ENV_REALM, null);
  411. }
  412. // TODO test: ticket refreshing
  413. }
  414. /**
  415. * @tests javax.security.auth.kerberos.KerberosTicket#equals(java.lang.Object)
  416. */
  417. public void test_equals() throws Exception {
  418. KerberosTicket krbTicket1 = new KerberosTicket(ticket, pClient,
  419. pServer, sessionKey, KEY_TYPE, flags, authTime, startTime,
  420. endTime, renewTill, addesses);
  421. KerberosTicket krbTicket2 = new KerberosTicket(ticket, pClient,
  422. pServer, sessionKey, KEY_TYPE, flags, authTime, startTime,
  423. endTime, renewTill, addesses);
  424. KerberosTicket krbTicket3 = new KerberosTicket(ticket, pClient,
  425. pServer, sessionKey, KEY_TYPE, new boolean[] { true, false },
  426. authTime, startTime, endTime, renewTill, addesses);
  427. assertEquals("krbTicket1 and krbTicket2 should be equivalent ",
  428. krbTicket1, krbTicket2);
  429. assertFalse("krbTicket1 and krbTicket3 sholudn't be equivalent ",
  430. krbTicket1.equals(krbTicket3));
  431. try {
  432. krbTicket2.destroy();
  433. } catch (DestroyFailedException e) {
  434. fail("krbTicket2 destroy failed");
  435. }
  436. assertFalse("Destroyed krbTicket sholudn't be equivalent ", krbTicket1
  437. .equals(krbTicket2));
  438. //Regression test for KerberosTicket.equals().
  439. final KerberosPrincipal clientPrincipal = new KerberosPrincipal(
  440. "leo@EXAMPLE.COM");
  441. final KerberosPrincipal serverPrincipal = new KerberosPrincipal(
  442. "krbtgt/EXAMPLE.COM@EXAMPLE.COM");
  443. KerberosTicket tgt = new KerberosTicket(new byte[0], clientPrincipal,
  444. serverPrincipal, new byte[0], 1, new boolean[0],
  445. new Date(1000), null, new Date(new Date().getTime() + 1000),
  446. null, null);
  447. assertEquals(tgt, tgt);
  448. KerberosTicket tgt1 = new KerberosTicket(new byte[0], clientPrincipal,
  449. serverPrincipal, new byte[0], 1, new boolean[0],
  450. new Date(1000), null, new Date(new Date().getTime() + 1000),
  451. null, null);
  452. assertEquals(tgt, tgt1);
  453. assertEquals(tgt1, tgt);
  454. }
  455. /**
  456. * @tests javax.security.auth.kerberos.KerberosTicket#hashCode()
  457. */
  458. public void test_hashCode() {
  459. KerberosTicket krbTicket1 = new KerberosTicket(ticket, pClient,
  460. pServer, sessionKey, KEY_TYPE, flags, authTime, startTime,
  461. endTime, renewTill, addesses);
  462. KerberosTicket krbTicket2 = new KerberosTicket(ticket, pClient,
  463. pServer, sessionKey, KEY_TYPE, flags, authTime, startTime,
  464. endTime, renewTill, addesses);
  465. assertEquals("krbTicket1 and krbTicket2 should be equivalent",
  466. krbTicket1, krbTicket2);
  467. assertEquals("hashCode should be equivalent", krbTicket1.hashCode(),
  468. krbTicket2.hashCode());
  469. }
  470. // Hands-created ticket encoding:
  471. // - tkt-vno: 5
  472. // - realm: 'MY.REALM'
  473. // - sname: {type=0, string=krbtgt/MY.REALM}
  474. // - enc-part: {etype=3,kvno=1,cipher=0} (i.e. it is empty)
  475. private static final byte[] encTicket = {
  476. // [APPLICATION 1]
  477. (byte) 0x61,
  478. (byte) 0x45,
  479. // SEQUENCE
  480. (byte) 0x30,
  481. (byte) 0x43,
  482. // tkt-vno [0] INTEGER (5)
  483. (byte) 0xa0,
  484. (byte) 0x03,
  485. (byte) 0x02,
  486. (byte) 0x01,
  487. (byte) 0x05,
  488. // realm [1] Realm = 'MY.REALM'
  489. (byte) 0xa1, (byte) 0x0a, (byte) 0x1b, (byte) 0x08, (byte) 0x4d,
  490. (byte) 0x59, (byte) 0x2e, (byte) 0x52,
  491. (byte) 0x45,
  492. (byte) 0x41,
  493. (byte) 0x4c,
  494. (byte) 0x4d,
  495. // sname [2] PrincipalName
  496. (byte) 0xa2,
  497. (byte) 0x1d,
  498. (byte) 0x30,
  499. (byte) 0x1b,
  500. // name-type
  501. (byte) 0xa0, (byte) 0x03,
  502. (byte) 0x02,
  503. (byte) 0x01,
  504. (byte) 0x00,
  505. // name-string: SEQUENCE OF krbtgt/MY.REALM
  506. (byte) 0xa1, (byte) 0x14, (byte) 0x30, (byte) 0x12, (byte) 0x1b,
  507. (byte) 0x06, (byte) 0x6b, (byte) 0x72, (byte) 0x62, (byte) 0x74,
  508. (byte) 0x67, (byte) 0x74, (byte) 0x1b, (byte) 0x08, (byte) 0x4d,
  509. (byte) 0x59, (byte) 0x2e, (byte) 0x52, (byte) 0x45, (byte) 0x41,
  510. (byte) 0x4c, (byte) 0x4d,
  511. // enc-part [3] EncryptedData
  512. (byte) 0xa3, (byte) 0x11,
  513. // SEQUENCE
  514. (byte) 0x30, (byte) 0x0F,
  515. // etype
  516. (byte) 0xa0, (byte) 0x03, (byte) 0x02, (byte) 0x01, (byte) 0x03,
  517. // kvno
  518. (byte) 0xa1, (byte) 0x03, (byte) 0x02, (byte) 0x01, (byte) 0x01,
  519. // cipher
  520. (byte) 0xa2, (byte) 0x03, (byte) 0x04, (byte) 0x01, (byte) 0x00 };
  521. }