1 package com.p6r.kmipserverlib;
5 import java.nio.charset.Charset;
6 import static org.junit.Assert.assertEquals;
22 System.out.println(
"@BeforeClass - oneTimeSetUp");
28 System.out.println(
"@AfterClass - oneTimeTearDown");
34 System.out.println(
"@Before - setUp");
40 System.out.println(
"@After - tearDown");
50 System.out.println(
"@Test - JNICall-DeriveKeyKMIP");
54 P6KMIPServerLib sl =
new P6KMIPServerLib();
57 String testMessage =
"<RequestMessage><RequestHeader><ProtocolVersion><ProtocolVersionMajor type=\"Integer\" value=\"1\"/><ProtocolVersionMinor type=\"Integer\" value=\"3\"/></ProtocolVersion><BatchCount type=\"Integer\" value=\"1\"/></RequestHeader><BatchItem><Operation type=\"Enumeration\" value=\"DeriveKey\"/><RequestPayload><ObjectType type=\"Enumeration\" value=\"SymmetricKey\"/><UniqueIdentifier type=\"TextString\" value=\"5daf8487-c50b-43ce-a02f-f1784b8cbc16\"/><UniqueIdentifier type=\"TextString\" value=\"CDFf8487-c50b-43ce-a02f-f1784b8cbc16\"/><DerivationMethod type=\"Enumeration\" value=\"PBKDF2\"/><DerivationParameters><CryptographicParameters><HashingAlgorithm type=\"Enumeration\" value=\"SHA_256\"/></CryptographicParameters><Salt type=\"ByteString\" value=\"73616C74\"/><IterationCount type=\"Integer\" value=\"4096\"/></DerivationParameters><TemplateAttribute><Attribute><AttributeName type=\"TextString\" value=\"Cryptographic Algorithm\"/><AttributeValue type=\"Enumeration\" value=\"AES\"/></Attribute><Attribute><AttributeName type=\"TextString\" value=\"Cryptographic Length\"/><AttributeValue type=\"Integer\" value=\"256\"/></Attribute><Attribute><AttributeName type=\"TextString\" value=\"Cryptographic Usage Mask\"/><AttributeValue type=\"Integer\" value=\"0x0000000C\"/></Attribute></TemplateAttribute></RequestPayload></BatchItem></RequestMessage>";
60 String testMessage1 =
"<RequestMessage><RequestHeader><ProtocolVersion><ProtocolVersionMajor type=\"Integer\" value=\"1\"/><ProtocolVersionMinor type=\"Integer\" value=\"3\"/></ProtocolVersion><BatchCount type=\"Integer\" value=\"1\"/></RequestHeader>" +
62 "<Operation type=\"Enumeration\" value=\"DeriveKey\"/>\n" +
63 "<RequestPayload>\n" +
64 "<ObjectType type=\"Enumeration\" value=\"SymmetricKey\"/>\n" +
65 "<UniqueIdentifier type=\"TextString\" value=\"5daf8487-c50b-43ce-a02f-f1784b8cbc16\"/>\n" +
66 "<DerivationMethod type=\"Enumeration\" value=\"HASH\"/>\n" +
67 "<DerivationParameters>\n" +
68 "<CryptographicParameters>\n" +
69 "<HashingAlgorithm type=\"Enumeration\" value=\"SHA_256\"/>\n" +
70 "</CryptographicParameters>\n" +
71 "</DerivationParameters>\n" +
72 "<TemplateAttribute>\n" +
74 "<AttributeName type=\"TextString\" value=\"Cryptographic Algorithm\"/>\n" +
75 "<AttributeValue type=\"Enumeration\" value=\"AES\"/>\n" +
78 "<AttributeName type=\"TextString\" value=\"Cryptographic Length\"/>\n" +
79 "<AttributeValue type=\"Integer\" value=\"128\"/>\n" +
82 "<AttributeName type=\"TextString\" value=\"Cryptographic Usage Mask\"/>\n" +
83 "<AttributeValue type=\"Integer\" value=\"Decrypt Encrypt\"/>\n" +
85 "</TemplateAttribute>\n" +
86 "</RequestPayload>\n" +
91 sl.initializeLibrary(P6KMIPServerLib.FLAGS_ALLLOG);
93 String libVersion = sl.getLibraryVersion();
94 System.out.println(libVersion);
98 sl.setMessageBuffer(testMessage.getBytes(Charset.forName(
"UTF-8")), KMIPConstants.FORMAT_MSGXML);
101 RequestHeader rh = sl.getRequestHeader();
102 assertEquals(
"1.3", rh.getProtocolVersion());
105 for (
int i = 0; i < rh.getBatchCount(); i++) {
107 BatchItem bi = sl.getBatchItem(i + 1);
108 if (bi instanceof DeriveKeyBatchItem) {
109 DeriveKeyBatchItem ck = (DeriveKeyBatchItem) bi;
112 byte[] batchId = ck.getUniqueBatchId();
113 assertEquals(null, batchId);
115 int objectType = ck.getObjectType();
116 assertEquals(KMIPConstants.OBJECT_SYMMETRICKEY, objectType);
118 String[] UIDs = ck.getUniqueIds();
119 assertEquals(2, UIDs.length);
120 assertEquals(
"5daf8487-c50b-43ce-a02f-f1784b8cbc16", UIDs[0]);
121 assertEquals(
"CDFf8487-c50b-43ce-a02f-f1784b8cbc16", UIDs[1]);
123 String[] attribNames = ck.getTemplateNames();
124 assertEquals(null, attribNames);
126 String[] attributes = ck.getAttributes();
127 assertEquals(3, attributes.length);
128 assertEquals(
"Cryptographic Algorithm: 3", attributes[0]);
129 assertEquals(
"Cryptographic Length: 256", attributes[1]);
130 assertEquals(
"Cryptographic Usage Mask: c", attributes[2]);
132 int derivationMethod = ck.getDerivationMethod();
133 assertEquals(KMIPConstants.DERIVE_PBKDF2, derivationMethod);
135 DerivationParameters params = ck.getParams();
136 assertEquals(4096, params.getIterationCount());
137 byte[] salt = params.getSalt();
138 assertEquals(0x73, salt[0]);
139 assertEquals(0x61, salt[1]);
140 assertEquals(0x6C, salt[2]);
141 assertEquals(0x74, salt[3]);
143 CryptograhicParameters cp = params.getCryptoParams();
144 assertEquals(KMIPConstants.HASH_SHA256, cp.getHashAlgorithm());
149 }
catch (Exception e) {
151 System.out.println(e.toString());
void JNICall_DeriveKeyKMIP()
Test: Verify parser can handle an XML formated Derive Key operation.
static void oneTimeTearDown()
static void oneTimeSetUp()
A JUNIT test demonstrating how to parse an incoming KMIP request from a client.