Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
JniResponse5Kmip.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.text.DateFormat;
7 import java.text.SimpleDateFormat;
8 import java.util.Date;
9 import java.util.TimeZone;
10 
11 import static org.junit.Assert.assertEquals;
12 
22 public class JniResponse5Kmip {
23 
24  @BeforeClass
25  public static void oneTimeSetUp() {
26  // NOOP
27  System.out.println("@BeforeClass - oneTimeSetUp");
28  }
29 
30  @AfterClass
31  public static void oneTimeTearDown() {
32  // NOOP
33  System.out.println("@AfterClass - oneTimeTearDown");
34  }
35 
36  @Before
37  public void setUp() {
38  // NOOP
39  System.out.println("@Before - setUp");
40  }
41 
42  @After
43  public void tearDown() {
44  // NOOP
45  System.out.println("@After - tearDown");
46  }
47 
53  @Test
54  public void JNICall_Response5KMIP() {
55  System.out.println("@Test - JNICall-Respnse5KMIP");
56 
57  P6KMIPServerLib sl = new P6KMIPServerLib();
58 
59  try {
60  sl.initializeLibrary(P6KMIPServerLib.FLAGS_NONE);
61 
62  // [A] Generate a response message in TTLV
63  sl.startResponseMessage(3, KMIPConstants.FORMAT_TTLV, 3);
64 
65  byte[] batchId0 = {0x01, 0x02, 0x03, 0x04};
66  byte[] batchId1 = {0x51, 0x52, 0x53, 0x54};
67  byte[] batchId2 = {0x71, 0x72, 0x73, 0x74};
68 
69  byte[] fakeKeyMaterial = {0x7F, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};
70 
71  // -> parts of an RSA private key
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 };
77 
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 };
82 
83  byte[] pubE_value = { (byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x01,(byte)0x00,(byte)0x01 };
84 
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 };
87 
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 };
90 
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 };
93 
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 };
96 
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 };
99 
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);
108 
109 
110  long timeStamp = System.currentTimeMillis();
111  DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss Z");
112  df.setTimeZone(TimeZone.getTimeZone("GMT"));
113 
114  Date today = new Date(timeStamp);
115  System.out.println("Unix Time stamp: " + timeStamp + ", date: " + df.format(today) + "\n");
116 
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));
120 
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);
123 
124  Attribute[] attributes = new Attribute[4];
125  attributes[0] = state;
126  attributes[1] = initialDate;
127  attributes[2] = cryptoMask;
128  attributes[3] = custom;
129 
130  GetSymmetricKeyResponse sk = new GetSymmetricKeyResponse(batchId0, "1111-2222-3333-4444-5555", fakeKeyMaterial, KMIPConstants.KEYFORMAT_TRANSYMKEY, -1, KMIPConstants.ALG_AES, 128, attributes);
131  sl.addBatchItem(sk);
132 
133  GetTransparentRSAKeyResponse rk = new GetTransparentRSAKeyResponse(batchId1, "AAAA-BBBB-CCCC-4444-5555", Modulus, PrivateExponent, PublicExponent, P, Q, PrimeExponentP, PrimeExponentQ, CRTCoefficient, null); // Private Key
134  sl.addBatchItem(rk);
135 
136  GetTransparentRSAKeyResponse tk = new GetTransparentRSAKeyResponse(batchId2, "EEEE-QQQQ-CCCC-4444-5555", Modulus, PublicExponent, null); // Public key
137  sl.addBatchItem(tk);
138 
139 
140  byte[] responseBuffer = sl.endResponseMessage(0);
141  for (int j = 0; j < responseBuffer.length; j++) {
142  System.out.print(responseBuffer[j]);
143  }
144  System.out.println("\n");
145 
146 
147  // [B] Do the same thing in XML
148  sl.startResponseMessage(3, KMIPConstants.FORMAT_MSGXML, 3);
149 
150  sl.addBatchItem(sk);
151  sl.addBatchItem(rk);
152  sl.addBatchItem(tk);
153 
154  byte[] responseBuffer2 = sl.endResponseMessage(0);
155  System.out.println(new String(responseBuffer2));
156  System.out.println("\n");
157 
158 
159  // [C] Test encoding of the Custom Attribute
160  sl.startResponseMessage(1, KMIPConstants.FORMAT_MSGXML, 4);
161 
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;
166 
167  GetAttributesResponse response = new GetAttributesResponse(null, "123", attributes2 );
168  sl.addBatchItem(response);
169 
170  byte[] responseBuffer3 = sl.endResponseMessage(0);
171  System.out.println(new String(responseBuffer3));
172  System.out.println("\n");
173 
174 
175  sl.freeLibrary();
176 
177  } catch (Exception e) {
178  // -> we should not get here
179  System.out.println(e.toString());
180  assertEquals(0, 1);
181  }
182  }
183 
184 }
void JNICall_Response5KMIP()
Test: Generate responses of keys in the transparent key formats.
A JUNIT test demonstrating how to parse an incoming KMIP request from a client.