Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
JniRegisterPGPKeyKmip.java
Go to the documentation of this file.
1 package com.p6r.kmipserverlib;
2 
3 import org.junit.*;
4 
5 import java.math.BigInteger;
6 import java.nio.charset.Charset;
7 
8 import static org.junit.Assert.assertEquals;
9 import static org.junit.Assert.assertNotEquals;
10 
20 public class JniRegisterPGPKeyKmip {
21 
22  @BeforeClass
23  public static void oneTimeSetUp() {
24  // NOOP
25  System.out.println("@BeforeClass - oneTimeSetUp");
26  }
27 
28  @AfterClass
29  public static void oneTimeTearDown() {
30  // NOOP
31  System.out.println("@AfterClass - oneTimeTearDown");
32  }
33 
34  @Before
35  public void setUp() {
36  // NOOP
37  System.out.println("@Before - setUp");
38  }
39 
40  @After
41  public void tearDown() {
42  // NOOP
43  System.out.println("@After - tearDown");
44  }
45 
51  @Test
53  System.out.println("@Test - JNICall-RegisterPGPKeyKMIP");
54 
55  byte[] expectedBytes = {
56  0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20, 0x50, 0x47, 0x50, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45, 0x59, 0x20, 0x42, 0x4C, 0x4F, 0x43, 0x4B, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A, 0x0A, 0x6D, 0x51, 0x45, 0x4E, 0x42, 0x46,
57  0x48, 0x41, 0x2F, 0x64, 0x51, 0x42, 0x43, 0x41, 0x44, 0x67, 0x65, 0x64, 0x39, 0x65, 0x36, 0x74, 0x69, 0x62, 0x38, 0x6B, 0x6C, 0x46, 0x68, 0x50, 0x70, 0x77, 0x53, 0x6E, 0x69, 0x31, 0x4A, 0x73, 0x65, 0x63, 0x6B, 0x71, 0x6A, 0x53, 0x4C, 0x35, 0x77, 0x54, 0x31, 0x51,
58  0x4B, 0x4B, 0x6D, 0x4A, 0x4D, 0x4D, 0x52, 0x79, 0x49, 0x31, 0x52, 0x75, 0x35, 0x52, 0x0A, 0x72, 0x4A, 0x53, 0x42, 0x63, 0x52, 0x77, 0x6A, 0x4F, 0x6F, 0x61, 0x61, 0x52, 0x64, 0x61, 0x76, 0x6E, 0x5A, 0x45, 0x4A, 0x31, 0x78, 0x75, 0x6A, 0x55, 0x33, 0x32, 0x5A, 0x6A,
59  0x2B, 0x32, 0x48, 0x32, 0x73, 0x71, 0x73, 0x36, 0x73, 0x53, 0x6E, 0x69, 0x7A, 0x43, 0x4E, 0x6E, 0x6B, 0x46, 0x35, 0x48, 0x43, 0x57, 0x4F, 0x32, 0x4A, 0x33, 0x62, 0x35, 0x4D, 0x35, 0x76, 0x50, 0x6B, 0x64, 0x47, 0x0A, 0x50, 0x59, 0x71, 0x72, 0x6C, 0x63, 0x76, 0x37,
60  0x6C, 0x76, 0x50, 0x38, 0x50, 0x30, 0x77, 0x6A, 0x63, 0x54, 0x4F, 0x75, 0x65, 0x44, 0x78, 0x6E, 0x53, 0x67, 0x78, 0x36, 0x49, 0x6A, 0x6E, 0x34, 0x51, 0x44, 0x6A, 0x64, 0x2B, 0x74, 0x4C, 0x6E, 0x54, 0x78, 0x54, 0x4B, 0x38, 0x55, 0x30, 0x59, 0x68, 0x7A, 0x73, 0x47,
61  0x5A, 0x43, 0x77, 0x75, 0x2B, 0x33, 0x53, 0x36, 0x6B, 0x77, 0x68, 0x67, 0x0A, 0x78, 0x6C, 0x57, 0x53, 0x7A, 0x2B, 0x33, 0x39, 0x6F, 0x50, 0x30, 0x6B, 0x54, 0x35, 0x38, 0x2B, 0x4A, 0x76, 0x6E, 0x6C, 0x78, 0x38, 0x76, 0x6F, 0x77, 0x74, 0x76, 0x71, 0x5A, 0x2B, 0x37,
62  0x6E, 0x70, 0x71, 0x72, 0x4D, 0x4F, 0x6F, 0x6A, 0x49, 0x56, 0x65, 0x64, 0x46, 0x53, 0x66, 0x6B, 0x2B, 0x7A, 0x32, 0x43, 0x6F, 0x31, 0x55, 0x4F, 0x62, 0x6A, 0x36, 0x6C, 0x2B, 0x78, 0x7A, 0x54, 0x74, 0x0A, 0x31, 0x6B, 0x71, 0x51, 0x5A, 0x66, 0x58, 0x43, 0x2F, 0x79,
63  0x79, 0x4D, 0x41, 0x46, 0x77, 0x54, 0x4B, 0x63, 0x50, 0x45, 0x79, 0x2F, 0x4B, 0x43, 0x77, 0x36, 0x75, 0x32, 0x62, 0x7A, 0x76, 0x6F, 0x75, 0x5A, 0x4D, 0x4D, 0x33, 0x64, 0x6B, 0x67, 0x66, 0x55, 0x2F, 0x41, 0x75, 0x71, 0x71, 0x70, 0x4B, 0x53, 0x42, 0x41, 0x42, 0x48,
64  0x30, 0x5A, 0x2F, 0x62, 0x6C, 0x6E, 0x43, 0x32, 0x54, 0x79, 0x0A, 0x51, 0x64, 0x53, 0x75, 0x4F, 0x4B, 0x78, 0x7A, 0x67, 0x63, 0x79, 0x49, 0x42, 0x63, 0x57, 0x35, 0x77, 0x52, 0x6E, 0x4B, 0x74, 0x6A, 0x73, 0x74, 0x57, 0x57, 0x39, 0x59, 0x43, 0x66, 0x2F, 0x6A, 0x49,
65  0x36, 0x45, 0x74, 0x41, 0x42, 0x45, 0x42, 0x41, 0x41, 0x47, 0x30, 0x54, 0x30, 0x74, 0x4E, 0x53, 0x56, 0x41, 0x67, 0x56, 0x56, 0x4E, 0x46, 0x55, 0x69, 0x42, 0x53, 0x55, 0x30, 0x45, 0x67, 0x0A, 0x4B, 0x45, 0x39, 0x42, 0x55, 0x30, 0x6C, 0x54, 0x49, 0x45, 0x74, 0x6C,
66  0x65, 0x53, 0x42, 0x4E, 0x59, 0x57, 0x35, 0x68, 0x5A, 0x32, 0x56, 0x74, 0x5A, 0x57, 0x35, 0x30, 0x49, 0x45, 0x6C, 0x75, 0x64, 0x47, 0x56, 0x79, 0x62, 0x33, 0x42, 0x6C, 0x63, 0x6D, 0x46, 0x69, 0x61, 0x57, 0x78, 0x70, 0x64, 0x48, 0x6B, 0x67, 0x55, 0x48, 0x4A, 0x76,
67  0x64, 0x47, 0x39, 0x6A, 0x62, 0x32, 0x77, 0x70, 0x0A, 0x49, 0x44, 0x78, 0x72, 0x62, 0x57, 0x6C, 0x77, 0x4D, 0x30, 0x42, 0x72, 0x62, 0x57, 0x6C, 0x77, 0x4C, 0x6D, 0x4E, 0x76, 0x62, 0x54, 0x36, 0x4A, 0x41, 0x54, 0x59, 0x45, 0x45, 0x77, 0x45, 0x43, 0x41, 0x43, 0x41,
68  0x46, 0x41, 0x6C, 0x48, 0x41, 0x2F, 0x64, 0x51, 0x43, 0x47, 0x79, 0x38, 0x47, 0x43, 0x77, 0x6B, 0x49, 0x42, 0x77, 0x4D, 0x43, 0x42, 0x42, 0x55, 0x43, 0x43, 0x41, 0x4D, 0x45, 0x0A, 0x46, 0x67, 0x49, 0x44, 0x41, 0x51, 0x49, 0x65, 0x41, 0x51, 0x49, 0x58, 0x67, 0x41,
69  0x41, 0x4B, 0x43, 0x52, 0x41, 0x6B, 0x44, 0x42, 0x65, 0x7A, 0x62, 0x4D, 0x6F, 0x4E, 0x4A, 0x6B, 0x64, 0x31, 0x42, 0x2F, 0x39, 0x50, 0x4C, 0x70, 0x68, 0x47, 0x62, 0x78, 0x50, 0x4F, 0x32, 0x37, 0x79, 0x65, 0x79, 0x58, 0x39, 0x43, 0x6E, 0x5A, 0x2F, 0x5A, 0x73, 0x52,
70  0x50, 0x62, 0x47, 0x56, 0x48, 0x57, 0x0A, 0x58, 0x6D, 0x4D, 0x52, 0x32, 0x72, 0x69, 0x58, 0x6F, 0x42, 0x58, 0x42, 0x31, 0x46, 0x52, 0x34, 0x64, 0x6C, 0x56, 0x2F, 0x58, 0x6E, 0x67, 0x72, 0x65, 0x76, 0x6B, 0x34, 0x53, 0x5A, 0x42, 0x58, 0x46, 0x49, 0x4B, 0x78, 0x32,
71  0x77, 0x30, 0x68, 0x70, 0x70, 0x53, 0x51, 0x56, 0x67, 0x72, 0x42, 0x4B, 0x59, 0x43, 0x6D, 0x73, 0x2F, 0x68, 0x46, 0x43, 0x4B, 0x53, 0x63, 0x56, 0x61, 0x56, 0x62, 0x0A, 0x63, 0x4E, 0x51, 0x79, 0x38, 0x4C, 0x30, 0x51, 0x35, 0x54, 0x4E, 0x6A, 0x46, 0x50, 0x7A, 0x78,
72  0x79, 0x55, 0x41, 0x50, 0x38, 0x4D, 0x4C, 0x55, 0x46, 0x75, 0x2B, 0x52, 0x72, 0x35, 0x4F, 0x49, 0x69, 0x50, 0x49, 0x59, 0x75, 0x47, 0x46, 0x4D, 0x32, 0x36, 0x51, 0x6E, 0x54, 0x42, 0x66, 0x44, 0x46, 0x4F, 0x68, 0x44, 0x68, 0x37, 0x4D, 0x76, 0x6A, 0x6A, 0x32, 0x77,
73  0x57, 0x55, 0x75, 0x5A, 0x0A, 0x62, 0x32, 0x6F, 0x56, 0x36, 0x69, 0x36, 0x67, 0x6A, 0x39, 0x37, 0x6D, 0x66, 0x79, 0x4E, 0x4A, 0x31, 0x6D, 0x4A, 0x48, 0x66, 0x72, 0x2B, 0x4D, 0x62, 0x4F, 0x36, 0x68, 0x42, 0x65, 0x62, 0x41, 0x50, 0x76, 0x6E, 0x73, 0x36, 0x6B, 0x59,
74  0x69, 0x76, 0x53, 0x44, 0x79, 0x72, 0x47, 0x72, 0x30, 0x36, 0x63, 0x70, 0x55, 0x61, 0x74, 0x6F, 0x65, 0x68, 0x30, 0x2B, 0x32, 0x59, 0x4E, 0x32, 0x35, 0x0A, 0x58, 0x64, 0x45, 0x6D, 0x44, 0x6B, 0x30, 0x62, 0x71, 0x79, 0x39, 0x6B, 0x70, 0x4A, 0x4D, 0x77, 0x48, 0x6A,
75  0x6A, 0x55, 0x4C, 0x6B, 0x77, 0x6E, 0x73, 0x46, 0x6A, 0x62, 0x76, 0x2B, 0x4B, 0x68, 0x58, 0x78, 0x6C, 0x32, 0x6A, 0x47, 0x36, 0x6D, 0x6C, 0x45, 0x71, 0x4E, 0x69, 0x41, 0x69, 0x55, 0x56, 0x50, 0x66, 0x74, 0x58, 0x59, 0x34, 0x79, 0x4B, 0x6D, 0x54, 0x66, 0x69, 0x42,
76  0x5A, 0x61, 0x0A, 0x34, 0x4A, 0x30, 0x6A, 0x30, 0x34, 0x6F, 0x6D, 0x6B, 0x55, 0x38, 0x4A, 0x6A, 0x34, 0x66, 0x76, 0x6C, 0x6B, 0x4F, 0x6F, 0x32, 0x6F, 0x36, 0x6B, 0x62, 0x73, 0x2B, 0x68, 0x74, 0x71, 0x44, 0x2B, 0x4A, 0x35, 0x57, 0x48, 0x78, 0x6D, 0x58, 0x31, 0x54,
77  0x6F, 0x73, 0x67, 0x72, 0x66, 0x7A, 0x75, 0x56, 0x38, 0x7A, 0x35, 0x4D, 0x74, 0x37, 0x55, 0x0A, 0x3D, 0x6E, 0x56, 0x4F, 0x79, 0x0A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x50, 0x47, 0x50, 0x20, 0x50, 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x4B, 0x45,
78  0x59, 0x20, 0x42, 0x4C, 0x4F, 0x43, 0x4B, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x0A
79  };
80 
81  // -> this parser is multi-thread safe by using JNI monitor locking
82  // -> use one parser object per server thread is recommended
83  P6KMIPServerLib sl = new P6KMIPServerLib();
84 
85  // -> KMIP 1.4 XML message with 1 batch item generated by P6R's Secure KMIP Client (SKC)
86  String testMessage =
87  "<RequestMessage>\n" +
88  " <RequestHeader>\n" +
89  " <ProtocolVersion>\n" +
90  " <ProtocolVersionMajor type=\"Integer\" value=\"1\"/>\n" +
91  " <ProtocolVersionMinor type=\"Integer\" value=\"4\"/>\n" +
92  " </ProtocolVersion>\n" +
93  " <BatchCount type=\"Integer\" value=\"1\"/>\n" +
94  " </RequestHeader>\n" +
95  " <BatchItem>\n" +
96  " <Operation type=\"Enumeration\" value=\"Register\"/>\n" +
97  " <RequestPayload>\n" +
98  " <ObjectType type=\"Enumeration\" value=\"PGPKey\"/>\n" +
99  " <TemplateAttribute>\n" +
100  " <Attribute>\n" +
101  " <AttributeName type=\"TextString\" value=\"x-ID\"/>\n" +
102  " <AttributeValue type=\"TextString\" value=\"TC-PGP-1-14-pubkey1\"/>\n" +
103  " </Attribute>\n" +
104  " <Attribute>\n" +
105  " <AttributeName type=\"TextString\" value=\"Alternative Name\"/>\n" +
106  " <AttributeValue>\n" +
107  " <AlternativeNameValue type=\"TextString\" value=\"KMIP USER RSA (OASIS Key Management Interoperability Protocol) &lt;kmip3@kmip.com&gt;\"/>\n" +
108  " <AlternativeNameType type=\"Enumeration\" value=\"UninterpretedTextString\"/>\n" +
109  " </AttributeValue>\n" +
110  " </Attribute>\n" +
111  " <Attribute>\n" +
112  " <AttributeName type=\"TextString\" value=\"Alternative Name\"/>\n" +
113  " <AttributeValue>\n" +
114  " <AlternativeNameValue type=\"TextString\" value=\"6CCA0D26\"/>\n" +
115  " <AlternativeNameType type=\"Enumeration\" value=\"ObjectSerialNumber\"/>\n" +
116  " </AttributeValue>\n" +
117  " </Attribute>\n" +
118  " </TemplateAttribute>\n" +
119  " <PGPKey>\n" +
120  " <PGPKeyVersion type=\"Integer\" value=\"4\"/>\n" +
121  " <KeyBlock>\n" +
122  " <KeyFormatType type=\"Enumeration\" value=\"Raw\"/>\n" +
123  " <KeyValue>\n" +
124  " <KeyMaterial type=\"ByteString\" value=\"2D2D2D2D2D424547494E20504750205055424C4943204B455920424C4F434B2D2D2D2D2D0A0A6D51454E424648412F645142434144676564396536746962386B6C4668507077536E69314A7365636B716A534C35775431514B4B6D4A4D4D52794931527535520A724A53426352776A4F6F6161526461766E5A454A3178756A5533325A6A2B3248327371733673536E697A434E6E6B46354843574F324A3362354D3576506B64470A505971726C6376376C7650385030776A63544F756544786E53677836496A6E3451446A642B744C6E5478544B38553059687A73475A4377752B3353366B7768670A786C57537A2B33396F50306B5435382B4A766E6C7838766F777476715A2B376E7071724D4F6F6A495665644653666B2B7A32436F31554F626A366C2B787A54740A316B71515A6658432F79794D414677544B635045792F4B4377367532627A766F755A4D4D33646B6766552F41757171704B5342414248305A2F626C6E433254790A516453754F4B787A676379494263573577526E4B746A73745757395943662F6A4936457441424542414147305430744E5356416756564E4655694253553045670A4B45394255306C544945746C6553424E595735685A3256745A57353049456C75644756796233426C636D46696157787064486B6755484A766447396A623277700A4944787262576C774D30427262576C774C6D4E766254364A415459454577454341434146416C48412F6451434779384743776B4942774D434242554343414D450A4667494441514965415149586741414B4352416B4442657A624D6F4E4A6B6431422F39504C7068476278504F32377965795839436E5A2F5A73525062475648570A586D4D52327269586F42584231465234646C562F586E677265766B34535A425846494B783277306870705351566772424B59436D732F6846434B5363566156620A634E5179384C305135544E6A46507A7879554150384D4C5546752B5272354F49695049597547464D3236516E54426644464F684468374D766A6A32775755755A0A62326F56366936676A39376D66794E4A316D4A4866722B4D624F36684265624150766E73366B596976534479724772303663705561746F6568302B32594E32350A5864456D446B30627179396B704A4D77486A6A554C6B776E73466A62762B4B6858786C326A47366D6C45714E6941695556506674585934794B6D546669425A610A344A306A30346F6D6B55384A6A3466766C6B4F6F326F366B62732B687471442B4A355748786D5831546F736772667A7556387A354D7437550A3D6E564F790A2D2D2D2D2D454E4420504750205055424C4943204B455920424C4F434B2D2D2D2D2D0A\"/>\n" +
125  " </KeyValue>\n" +
126  " <CryptographicAlgorithm type=\"Enumeration\" value=\"RSA\"/>\n" +
127  " <CryptographicLength type=\"Integer\" value=\"2048\"/>\n" +
128  " </KeyBlock>\n" +
129  " </PGPKey>\n" +
130  "</RequestPayload>\n" +
131  "</BatchItem>\n" +
132  "</RequestMessage>";
133 
134  try {
135  sl.initializeLibrary(P6KMIPServerLib.FLAGS_NONE);
136 
137  String libVersion = sl.getLibraryVersion();
138  System.out.println(libVersion);
139 
140  sl.setMessageBuffer(testMessage.getBytes(Charset.forName("UTF-8")), KMIPConstants.FORMAT_MSGXML);
141 
142  RequestHeader rh = sl.getRequestHeader();
143  assertEquals("1.4", rh.getProtocolVersion());
144 
145  // -> parsed message is maintained in parser until another call to setMessageBuffer() of freeLibrary() is called
146  for (int i = 0; i < rh.getBatchCount(); i++) {
147 
148  BatchItem bi = sl.getBatchItem(i + 1);
149  if (bi instanceof RegisterPGPKeyBatchItem) {
150  RegisterPGPKeyBatchItem ck = (RegisterPGPKeyBatchItem) bi;
151 
152  byte[] batchId = ck.getUniqueBatchId();
153  assertEquals(null, batchId);
154 
155  int keyVersion = ck.getKeyVersion();
156  assertEquals(4, keyVersion);
157 
158  byte[] keyMaterial = ck.getKeyMaterial();
159  assertEquals(expectedBytes.length, keyMaterial.length);
160  for( int j=0; j < expectedBytes.length; j++ ) {
161  assertEquals(expectedBytes[j], keyMaterial[j]);
162  }
163 
164  String[] attributes = ck.getTemplateAttributes();
165  assertEquals(3, attributes.length);
166  assertEquals("x-ID: TC-PGP-1-14-pubkey1", attributes[0]);
167  assertEquals("Alternative Name: KMIP USER RSA (OASIS Key Management Interoperability Protocol) <kmip3@kmip.com> - text_string", attributes[1]);
168  assertEquals("Alternative Name: 6CCA0D26 - serial_number", attributes[2]);
169  }
170  }
171  sl.freeLibrary();
172 
173  } catch (Exception e) {
174  // -> we shoud not get here
175  System.out.println(e.toString());
176  assertEquals(0, 1);
177  }
178  }
179 }
void JNICall_RegisterPGPKeyKMIP()
Test: Verify parser can handle an XML formated Register PGP Key operation.
A JUNIT test demonstrating how to parse an incoming KMIP request from a client.