1 package com.p6r.kmipserverlib;
5 import java.math.BigInteger;
6 import java.text.DateFormat;
7 import java.text.SimpleDateFormat;
9 import java.util.TimeZone;
11 import static org.junit.Assert.assertEquals;
27 System.out.println(
"@BeforeClass - oneTimeSetUp");
33 System.out.println(
"@AfterClass - oneTimeTearDown");
39 System.out.println(
"@Before - setUp");
45 System.out.println(
"@After - tearDown");
55 System.out.println(
"@Test - JNICall-Respnse5KMIP");
57 P6KMIPServerLib sl =
new P6KMIPServerLib();
60 sl.initializeLibrary(P6KMIPServerLib.FLAGS_NONE);
63 sl.startResponseMessage(3, KMIPConstants.FORMAT_TTLV, 3);
65 byte[] batchId0 = {0x01, 0x02, 0x03, 0x04};
66 byte[] batchId1 = {0x51, 0x52, 0x53, 0x54};
67 byte[] batchId2 = {0x71, 0x72, 0x73, 0x74};
69 byte[] fakeKeyMaterial = {0x7F, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};
72 byte[] N_value = { (byte)0x9b,(byte)0xcc,(byte)0xc7,(byte)0x73,(byte)0x38,(byte)0x70,(byte)0x5d,(byte)0xe3,(byte)0x0f,(byte)0xae,(byte)0x34,(byte)0x3f,(byte)0xd0,(byte)0x2f,(byte)0x8f,(byte)0x94,(byte)0xec,(byte)0x46,(byte)0x57,(byte)0xa8,(byte)0xc2,(byte)0x4a,(byte)0x0e,(byte)0x56,(byte)0x10,(byte)0x3b,(byte)0xc4,
73 (byte)0x5d,(byte)0xb6,(byte)0xd7,(byte)0x40,(byte)0x86,(byte)0x8b,(byte)0x9a,(byte)0xc3,
74 (byte)0xfb,(byte)0xcc,(byte)0x0e,(byte)0xba,(byte)0xc6,(byte)0xe1,(byte)0xe8,(byte)0xa9,(byte)0x54,(byte)0xa8,(byte)0x50,(byte)0x50,(byte)0xd6,(byte)0xaa,(byte)0xe7,(byte)0x60,(byte)0x09,(byte)0x34,(byte)0xb8,(byte)0xeb,(byte)0xe8,(byte)0xb0,(byte)0x3d,(byte)0xb6,(byte)0xba,(byte)0x08,(byte)0x84,(byte)0xb1,(byte)0xae,(byte)0xe6,(byte)0x9e,(byte)0x4f,(byte)0xc3,(byte)0xa1,(byte)0xbd,
75 (byte)0x11,(byte)0xfc,(byte)0xbf,(byte)0xef,(byte)0x68,(byte)0xde,(byte)0x0b,(byte)0xaa,(byte)0x88,(byte)0x8d,(byte)0x1f,(byte)0x5c,(byte)0xbc,(byte)0xa2,(byte)0xd8,(byte)0x1a,(byte)0x31,(byte)0x68,(byte)0xb2,(byte)0xa9,(byte)0x01,(byte)0xe9,(byte)0xf8,(byte)0x4d,(byte)0x38,(byte)0x54,(byte)0xee,(byte)0x10,(byte)0xaa,(byte)0x72,(byte)0x35,(byte)0xdf,(byte)0xef,(byte)0x06,(byte)0x84,
76 (byte)0xf5,(byte)0x8d,(byte)0x98,(byte)0x87,(byte)0x9c,(byte)0x93,(byte)0x63,(byte)0x72,(byte)0x43,(byte)0x5f,(byte)0x2c,(byte)0xb1,(byte)0x02,(byte)0x78,(byte)0x2d,(byte)0x38,(byte)0x84,(byte)0xf9,(byte)0xab,(byte)0xb8,(byte)0x18,(byte)0x81,(byte)0x7d };
78 byte[] prvE_value = { (byte)0x66,(byte)0x3f,(byte)0xd0,(byte)0x0a,(byte)0x23,(byte)0x59,(byte)0x43,(byte)0x94,(byte)0xd8,(byte)0x5e,(byte)0xa8,(byte)0xf5,(byte)0xd4,(byte)0x68,(byte)0xd2,(byte)0x5f,(byte)0x97,(byte)0x6d,(byte)0x56,(byte)0xec,(byte)0x6f,(byte)0x8e,(byte)0x70,(byte)0xb8,(byte)0x34,(byte)0xf1,(byte)0x34,(byte)0x9f,(byte)0x98,(byte)0x76,(byte)0xce,(byte)0x67,(byte)0x3e,(byte)0xc9,(byte)0xf4,
79 (byte)0xa3,(byte)0x95,(byte)0x39,(byte)0x79,(byte)0x85,(byte)0x3b,(byte)0x10,(byte)0x19,(byte)0xc9,(byte)0x70,(byte)0xa9,(byte)0x3d,(byte)0x54,(byte)0x95,(byte)0x57,(byte)0x42,(byte)0x64,(byte)0xe8,(byte)0x50,(byte)0x10,(byte)0xab,(byte)0x66,(byte)0xb7,(byte)0x29,(byte)0xec,(byte)0x0f,(byte)0xd9,(byte)0x1e,(byte)0x4e,(byte)0xb2,(byte)0xad,(byte)0xb3,(byte)0xc7,(byte)0xdb,(byte)0x9c,
80 (byte)0x45,(byte)0x33,(byte)0x5a,(byte)0xf1,(byte)0x4a,(byte)0xe6,(byte)0x97,(byte)0xd1,(byte)0x1f,(byte)0x4c,(byte)0x9e,(byte)0xfa,(byte)0xf1,(byte)0x2c,(byte)0x20,(byte)0x10,(byte)0x11,(byte)0x54,(byte)0x1b,(byte)0xe7,(byte)0x41,(byte)0x6d,(byte)0xab,(byte)0x85,(byte)0x6f,(byte)0x7e,(byte)0x65,(byte)0x93,(byte)0x9f,(byte)0x1e,(byte)0xb6,(byte)0x74,(byte)0x6d,(byte)0x29,(byte)0x16,
81 (byte)0x10,(byte)0x67,(byte)0x17,(byte)0xc8,(byte)0x70,(byte)0xa0,(byte)0xa2,(byte)0x60,(byte)0xb5,(byte)0x24,(byte)0x0c,(byte)0x9a,(byte)0x43,(byte)0x2c,(byte)0x5e,(byte)0x19,(byte)0x4c,(byte)0x16,(byte)0xb5,(byte)0xe9,(byte)0xe2,(byte)0x35,(byte)0x41 };
83 byte[] pubE_value = { (byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x01 };
85 byte[] P_value = { (byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0xf3,(byte)0xf5,(byte)0xb1,(byte)0x9e,(byte)0xdf,(byte)0x65,(byte)0x7a,(byte)0xaa,(byte)0x4d,(byte)0xc2,(byte)0x51,(byte)0x67,(byte)0xc6,(byte)0x9a,(byte)0x72,(byte)0x51,(byte)0x17,(byte)0xc7,(byte)0xf8,(byte)0xec,(byte)0x7b,(byte)0x77,(byte)0xab,(byte)0x2b,(byte)0x18,(byte)0xe0,(byte)0x7b,
86 (byte)0x05,(byte)0x1d,(byte)0x52,(byte)0x04,(byte)0x70,(byte)0x77,(byte)0x16,(byte)0x61,(byte)0xcc,(byte)0xb7,(byte)0x15,(byte)0x65,(byte)0x75,(byte)0xf6,(byte)0x1a,(byte)0x16,(byte)0x65,(byte)0x21,(byte)0x0f,(byte)0xd8,(byte)0x6a,(byte)0x42,(byte)0x77,(byte)0x33,(byte)0x1b,(byte)0x1b,(byte)0x50,(byte)0xf8,(byte)0x22,(byte)0xbc,(byte)0x51,(byte)0xfa,(byte)0x8d,(byte)0x23,(byte)0x34,(byte)0xff,(byte)0x6d };
88 byte[] Q_value = { (byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0xa3,(byte)0x7d,(byte)0x3b,(byte)0x2b,(byte)0xc4,(byte)0xab,(byte)0x29,(byte)0xed,(byte)0x59,(byte)0xdb,(byte)0xc6,(byte)0xdd,(byte)0xfa,(byte)0x7f,(byte)0x91,(byte)0x04,(byte)0xe5,(byte)0x17,(byte)0x91,(byte)0xe7,(byte)0xe9,(byte)0x1b,(byte)0x26,(byte)0x89,(byte)0xb5,(byte)0x05,(byte)0xf6,
89 (byte)0x0d,(byte)0xa6,(byte)0x85,(byte)0x1f,(byte)0x1e,(byte)0xfe,(byte)0xf7,(byte)0xd3,(byte)0xd1,(byte)0xbd,(byte)0x20,(byte)0x11,(byte)0xc4,(byte)0x33,(byte)0xb0,(byte)0x28,(byte)0x7f,(byte)0x30,(byte)0x93,(byte)0x29,(byte)0xfb,(byte)0xc4,(byte)0x90,(byte)0x58,(byte)0x2c,(byte)0x9d,(byte)0xe0,(byte)0xee,(byte)0xfe,(byte)0xf2,(byte)0x3f,(byte)0xd7,(byte)0x42,(byte)0x56,(byte)0x64,(byte)0x70,(byte)0x51 };
91 byte[] expP_value = { (byte)0x33,(byte)0xc7,(byte)0x94,(byte)0x39,(byte)0x9a,(byte)0x44,(byte)0xd9,(byte)0xb2,(byte)0x47,(byte)0xea,(byte)0xd4,(byte)0x88,(byte)0x68,(byte)0x38,(byte)0xe3,(byte)0xc6,(byte)0x9e,(byte)0x7b,(byte)0x8d,(byte)0x33,(byte)0xf4,(byte)0x48,(byte)0xc4,(byte)0x05,(byte)0xd3,(byte)0xb3,(byte)0xe1,(byte)0xa8,(byte)0x86,(byte)0x3e,(byte)0xa0,(byte)0x3e,(byte)0x96,(byte)0xa8,(byte)0x23,
92 (byte)0x7d,(byte)0xe5,(byte)0xe6,(byte)0x1e,(byte)0xb0,(byte)0xd8,(byte)0xd9,(byte)0x54,(byte)0xa3,(byte)0x86,(byte)0x4e,(byte)0xec,(byte)0xaa,(byte)0x31,(byte)0x0d,(byte)0x47,(byte)0xc5,(byte)0x9b,(byte)0x18,(byte)0xa6,(byte)0x72,(byte)0x08,(byte)0xf2,(byte)0x85,(byte)0x71,(byte)0x6b,(byte)0x65,(byte)0x96,(byte)0x49 };
94 byte[] expQ_value = { (byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x98,(byte)0x3b,(byte)0xc7,(byte)0x3a,(byte)0x55,(byte)0x32,(byte)0x50,(byte)0xa3,(byte)0x3b,(byte)0xd6,(byte)0x23,(byte)0x52,(byte)0x95,(byte)0xab,(byte)0xed,(byte)0x7c,(byte)0x92,(byte)0x5a,(byte)0x25,(byte)0x39,(byte)0xbe,(byte)0x5c,(byte)0xd2,(byte)0xc0,(byte)0xcd,(byte)0xb8,(byte)0x54,
95 (byte)0x4a,(byte)0x97,(byte)0xb1,(byte)0x43,(byte)0xae,(byte)0x58,(byte)0x1a,(byte)0xaa,(byte)0xb9,(byte)0x95,(byte)0x92,(byte)0xe4,(byte)0x18,(byte)0x3f,(byte)0x4d,(byte)0x1c,(byte)0x18,(byte)0x7b,(byte)0x41,(byte)0xbd,(byte)0x89,(byte)0x3b,(byte)0x9a,(byte)0x71,(byte)0x10,(byte)0x72,(byte)0x9e,(byte)0x7d,(byte)0xcd,(byte)0x16,(byte)0x04,(byte)0x0e,(byte)0x4c,(byte)0x2e,(byte)0x27,(byte)0xee,(byte)0x51 };
97 byte[] crt_value = { (byte)0x54,(byte)0x8a,(byte)0xd3,(byte)0x97,(byte)0x60,(byte)0xb4,(byte)0xf5,(byte)0xfa,(byte)0xbc,(byte)0xd6,(byte)0xd5,(byte)0xe7,(byte)0xbb,(byte)0xdc,(byte)0xbf,(byte)0x79,(byte)0x54,(byte)0xf9,(byte)0xf3,(byte)0x22,(byte)0x56,(byte)0xfb,(byte)0xa1,(byte)0x59,(byte)0xd6,(byte)0xb1,(byte)0x38,(byte)0xc4,(byte)0xfb,(byte)0x3a,(byte)0xd9,(byte)0xff,(byte)0x07,(byte)0x80,(byte)0x41,
98 (byte)0xf5,(byte)0x3a,(byte)0xf2,(byte)0xc6,(byte)0xaa,(byte)0xd9,(byte)0xb8,(byte)0x84,(byte)0x72,(byte)0x79,(byte)0xfe,(byte)0xb5,(byte)0x76,(byte)0xb4,(byte)0xf0,(byte)0x16,(byte)0xc3,(byte)0xf3,(byte)0x9d,(byte)0xaf,(byte)0xe4,(byte)0xb8,(byte)0x17,(byte)0xed,(byte)0x4f,(byte)0x09,(byte)0xe9,(byte)0x5d,(byte)0xa1 };
100 BigInteger Modulus =
new BigInteger(N_value);
101 BigInteger PrivateExponent =
new BigInteger(prvE_value);
102 BigInteger PublicExponent =
new BigInteger(pubE_value);
103 BigInteger P =
new BigInteger(P_value);
104 BigInteger Q =
new BigInteger(Q_value);
105 BigInteger PrimeExponentP =
new BigInteger(expP_value);
106 BigInteger PrimeExponentQ =
new BigInteger(expQ_value);
107 BigInteger CRTCoefficient =
new BigInteger(crt_value);
110 long timeStamp = System.currentTimeMillis();
111 DateFormat df =
new SimpleDateFormat(
"MM/dd/yyyy HH:mm:ss Z");
112 df.setTimeZone(TimeZone.getTimeZone(
"GMT"));
114 Date today =
new Date(timeStamp);
115 System.out.println(
"Unix Time stamp: " + timeStamp +
", date: " + df.format(today) +
"\n");
117 Attribute state =
new Attribute(KMIPConstants.ATTRIB_STATE, 0, KMIPConstants.STATE_ACTIVE);
118 Attribute cryptoMask =
new Attribute(KMIPConstants.ATTRIB_CRYPTOUSAGEMASK, 0,
new Integer((KMIPConstants.USAGE_MASK_ENCRYPT | KMIPConstants.USAGE_MASK_DECRYPT)));
119 Attribute initialDate =
new Attribute(KMIPConstants.ATTRIB_INITIALDATE, 0,
new Long(timeStamp));
121 CustomAttribute ca2 =
new CustomAttribute(
"x-p6r-clientcomment",
"by convention we place company name after x- to avoid collisions");
122 Attribute custom =
new Attribute(0, ca2);
124 Attribute[] attributes =
new Attribute[4];
125 attributes[0] = state;
126 attributes[1] = initialDate;
127 attributes[2] = cryptoMask;
128 attributes[3] = custom;
130 GetSymmetricKeyResponse sk =
new GetSymmetricKeyResponse(batchId0,
"1111-2222-3333-4444-5555", fakeKeyMaterial, KMIPConstants.KEYFORMAT_TRANSYMKEY, -1, KMIPConstants.ALG_AES, 128, attributes);
133 GetTransparentRSAKeyResponse rk =
new GetTransparentRSAKeyResponse(batchId1,
"AAAA-BBBB-CCCC-4444-5555", Modulus, PrivateExponent, PublicExponent, P, Q, PrimeExponentP, PrimeExponentQ, CRTCoefficient, null);
136 GetTransparentRSAKeyResponse tk =
new GetTransparentRSAKeyResponse(batchId2,
"EEEE-QQQQ-CCCC-4444-5555", Modulus, PublicExponent, null);
140 byte[] responseBuffer = sl.endResponseMessage(0);
141 for (
int j = 0; j < responseBuffer.length; j++) {
142 System.out.print(responseBuffer[j]);
144 System.out.println(
"\n");
148 sl.startResponseMessage(3, KMIPConstants.FORMAT_MSGXML, 3);
154 byte[] responseBuffer2 = sl.endResponseMessage(0);
155 System.out.println(
new String(responseBuffer2));
156 System.out.println(
"\n");
160 sl.startResponseMessage(1, KMIPConstants.FORMAT_MSGXML, 4);
162 Attribute[] attributes2 =
new Attribute[1];
163 CustomAttribute ca3 =
new CustomAttribute(
"x-attribute",
"attributevalue");
164 Attribute custom3 =
new Attribute(0, ca3);
165 attributes2[0] = custom3;
167 GetAttributesResponse response =
new GetAttributesResponse(null,
"123", attributes2 );
168 sl.addBatchItem(response);
170 byte[] responseBuffer3 = sl.endResponseMessage(0);
171 System.out.println(
new String(responseBuffer3));
172 System.out.println(
"\n");
177 }
catch (Exception e) {
179 System.out.println(e.toString());
void JNICall_Response5KMIP()
Test: Generate responses of keys in the transparent key formats.
static void oneTimeSetUp()
A JUNIT test demonstrating how to parse an incoming KMIP request from a client.
static void oneTimeTearDown()