Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
JniResponse1Kmip.java
Go to the documentation of this file.
1 package com.p6r.kmipserverlib;
2 
3 import org.junit.*;
4 
5 import static org.junit.Assert.assertEquals;
6 
16 public class JniResponse1Kmip {
17 
18  @BeforeClass
19  public static void oneTimeSetUp() {
20  // NOOP
21  System.out.println("@BeforeClass - oneTimeSetUp");
22  }
23 
24  @AfterClass
25  public static void oneTimeTearDown() {
26  // NOOP
27  System.out.println("@AfterClass - oneTimeTearDown");
28  }
29 
30  @Before
31  public void setUp() {
32  // NOOP
33  System.out.println("@Before - setUp");
34  }
35 
36  @After
37  public void tearDown() {
38  // NOOP
39  System.out.println("@After - tearDown");
40  }
41 
47  @Test
48  public void JNICall_Response1KMIP() {
49  System.out.println("@Test - JNICall-Respnse1KMIP");
50 
51  // -> this parser is multi-thread safe by using JNI monitor locking
52  // -> use one parser object per server thread is recommended
53  P6KMIPServerLib sl = new P6KMIPServerLib();
54 
55  try {
56  sl.initializeLibrary(P6KMIPServerLib.FLAGS_NONE);
57 
58  // [A] Generate a response message in TTLV
59  sl.startResponseMessage(2, KMIPConstants.FORMAT_TTLV, 4);
60 
61  byte[] batchId1 = { 0x01, 0x02, 0x03, 0x04 };
62  CreateResponse cr1 = new CreateResponse(batchId1, KMIPConstants.OBJECT_SYMMETRICKEY, "1111-2222-3333-4444-5555", null, null);
63  sl.addBatchItem(cr1);
64 
65  Attribute state = new Attribute( KMIPConstants.ATTRIB_STATE, 0, KMIPConstants.STATE_PREACTIVE );
66  Attribute[] attributes = new Attribute[1];
67  attributes[0] = state;
68 
69  byte[] batchId2 = { 0x11, 0x22, 0x33 };
70  CreateResponse cr2 = new CreateResponse(batchId2, KMIPConstants.OBJECT_SECRETDATA, "AB11-2222-33ef-4444-555", attributes, null);
71  sl.addBatchItem(cr2);
72 
73  byte[] responseBuffer = sl.endResponseMessage(0);
74  for( int j=0; j < responseBuffer.length; j++ ) {
75  System.out.print(responseBuffer[j]);
76  }
77  System.out.println( "\n" );
78 
79 
80  // [B] Do the same thing in XML
81  sl.startResponseMessage(2, KMIPConstants.FORMAT_MSGXML, 3);
82 
83  sl.addBatchItem(cr1);
84  sl.addBatchItem(cr2);
85 
86  byte[] responseBuffer2 = sl.endResponseMessage(0);
87  System.out.println(new String(responseBuffer2));
88  System.out.println("\n");
89 
90 
91  // [C] Error response
92  sl.startResponseMessage(2, KMIPConstants.FORMAT_MSGXML, 2);
93 
94  ErrorResponse rp = new ErrorResponse(batchId2, KMIPConstants.OP_DECRYPT, KMIPConstants.RESULT_FAILED, KMIPConstants.REASON_OPREATION_NOTSUPPORTED, "This is for client logging");
95  sl.addBatchItem(cr1);
96  sl.addBatchItem(rp);
97 
98  byte[] responseBuffer3 = sl.endResponseMessage(0);
99  System.out.println(new String(responseBuffer3));
100  System.out.println("\n");
101 
102 
103  // [D] An error response when a request cannot be parsed
104  sl.startResponseMessage(1, KMIPConstants.FORMAT_MSGXML, 2);
105 
106  ErrorResponse rp1 = new ErrorResponse(null, KMIPConstants.OP_NONE, KMIPConstants.RESULT_FAILED, KMIPConstants.REASON_INVALID_MESSAGE, "This is for client logging");
107  sl.addBatchItem(rp1);
108 
109  byte[] errorResponse1 = sl.endResponseMessage(0);
110  System.out.println(new String(errorResponse1));
111  System.out.println("\n");
112 
113 
114  // [E] Lets do a single response with no batch Id assuming that the client request did not have one
115  sl.startResponseMessage(1, KMIPConstants.FORMAT_MSGXML, 2);
116 
117  CreateResponse cr = new CreateResponse(null, KMIPConstants.OBJECT_SYMMETRICKEY, "1111-2222-3333-4444-5555", null, null);
118  sl.addBatchItem(cr);
119 
120  byte[] responseBuffer4 = sl.endResponseMessage(0);
121  System.out.println(new String(responseBuffer4));
122  System.out.println("\n");
123 
124 
125  // [F] Show a response with an attribute list and a name list as part of a template-attribute structure
126  sl.startResponseMessage(1, KMIPConstants.FORMAT_MSGXML, 4);
127 
128  NameAttribute nameOne = new NameAttribute(new String("Name One"), KMIPConstants.NAME_TEXTSTR);
129  NameAttribute nameTwo = new NameAttribute(new String("Name Two"), KMIPConstants.NAME_TEXTSTR);
130  NameAttribute[] names = new NameAttribute[2];
131  names[0] = nameOne;
132  names[1] = nameTwo;
133 
134  CreateResponse crfull = new CreateResponse(null, KMIPConstants.OBJECT_SYMMETRICKEY, "AAAA-BBBB-3333-4444-5555", attributes, names);
135  sl.addBatchItem(crfull);
136 
137  byte[] responseBuffer5 = sl.endResponseMessage(0);
138  System.out.println(new String(responseBuffer5));
139  System.out.println("\n");
140 
141 
142  // [G] Return an empty version response
143  sl.startResponseMessage(1, KMIPConstants.FORMAT_MSGXML, 2);
144 
145  VersionResponse vr1 = new VersionResponse(null, null);
146  sl.addBatchItem(vr1);
147 
148  byte[] responseBuffer6 = sl.endResponseMessage(0);
149  System.out.println(new String(responseBuffer6));
150  System.out.println("\n");
151 
152 
153  // [H] Crypto operation responses
154  byte[] batchId11 = { 0x00, 0x00, 0x00, 0x00 };
155  byte[] batchId12 = { 0x00, 0x00, 0x00, 0x01 };
156  byte[] batchId13 = { 0x00, 0x00, 0x00, 0x02 };
157  byte[] batchId14 = { 0x00, 0x00, 0x00, 0x03 };
158  byte[] batchId15 = { 0x00, 0x00, 0x00, 0x04 };
159  byte[] batchId16 = { 0x00, 0x00, 0x00, 0x05 };
160  byte[] batchId17 = { 0x00, 0x00, 0x00, 0x06 };
161  byte[] plainText1 = { 0x02, (byte)0x87, (byte)0xab, (byte)0xcd, 0x45 };
162  byte[] cipherText1 = { 0x22, (byte)0x87, (byte)0xab, 0x00, (byte)0xcd, 0x45, 0x3B, 0x00, 0x4B, 0x5C };
163  byte[] cipherText2 = { 0x22, (byte)0x87, (byte)0xab, (byte)0xcd, 0x45, 0x3B, 0x4B, 0x5C };
164  byte[] IV = { 0x0A, 0x0A, 0x0A, 0x0A};
165  byte[] correlation = { 0x34, 0x35, 0x37, 0x35, 0x31, 0x35, 0x38, 0x36, 0x2D, 0x66, 0x33, 0x30, 0x63, 0x2D, 0x34, 0x61, 0x39, 0x33, 0x2D, 0x61, 0x34, 0x39, 0x66, 0x2D, 0x34, 0x62, 0x34, 0x37, 0x32, 0x66, 0x33, 0x66, 0x62, 0x61, 0x31, 0x32 };
166  byte[] tagData = { 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11 };
167 
168  sl.startResponseMessage(7, KMIPConstants.FORMAT_MSGXML, 4);
169 
170  // -> er3 and er4 are streaming encrypt responses
171  DecryptResponse dr = new DecryptResponse(batchId11, "123-9393-333", plainText1);
172 
173  SignResponse sr = new SignResponse(batchId12, "123-9393-333", cipherText2);
174 
175  EncryptResponse er1 = new EncryptResponse(batchId13, "abcd-383837-3938eie", cipherText1, null);
176 
177  EncryptResponse er2 = new EncryptResponse(batchId14, "abcd-383837-3938eie", cipherText1, IV);
178  er2.setAuthenticatedEncryptionTag(tagData);
179 
180  EncryptResponse er3 = new EncryptResponse(batchId15, "abcd-383837-3938eie", cipherText1, null, correlation);
181 
182  EncryptResponse er4 = new EncryptResponse(batchId16, "abcd-383837-3938eie", null, null, correlation);
183 
184  SignatureVerifyResponse sv = new SignatureVerifyResponse(batchId17, "abcd-383837-3938eie", null, KMIPConstants.VALIDITY_INVALID);
185 
186  sl.addBatchItem(dr);
187  sl.addBatchItem(sr);
188  sl.addBatchItem(er1);
189  sl.addBatchItem(er2);
190  sl.addBatchItem(er3);
191  sl.addBatchItem(er4);
192  sl.addBatchItem(sv);
193 
194  byte[] responseBuffer7 = sl.endResponseMessage(0);
195  System.out.println(new String(responseBuffer7));
196  System.out.println("\n");
197 
198 
199  // [C] MACs
200  sl.startResponseMessage(2, KMIPConstants.FORMAT_MSGXML, 2);
201  MACResponse macResponse = new MACResponse(null, "abcd-383837-3938eie", cipherText1 );
202  MACVerifyResponse verifyResponse = new MACVerifyResponse(null, "abcd-383837-3938eie", KMIPConstants.VALIDITY_VALID);
203  sl.addBatchItem(macResponse);
204  sl.addBatchItem(verifyResponse);
205 
206  byte[] responseBuffer8 = sl.endResponseMessage(0);
207  System.out.println(new String(responseBuffer8));
208  System.out.println("\n");
209 
210  sl.freeLibrary();
211 
212  } catch (Exception e) {
213  // -> we should not get here
214  System.out.println(e.toString());
215  assertEquals(0, 1);
216  }
217  }
218 }
void JNICall_Response1KMIP()
Test: Generate a message with multiple batch items.
A JUNIT test demonstrating how to parse an incoming KMIP request from a client.