[Pki-devel] [PATCH] Ticket #888 - TPS rewrite: provide remote authority functions (patch 1: TKS functions)

Christina Fu cfu at redhat.com
Fri Mar 14 18:42:43 UTC 2014


Thank you Endi and Jack for your comments.
Attached please find the patch that addressed your comments.

thanks,
Christina

On 03/13/2014 08:16 AM, Endi Sukma Dewata wrote:
> On 3/11/2014 9:13 PM, Christina Fu wrote:
>> This is a request for review for the attached patch.
>> The patch is the first part for https://fedorahosted.org/pki/ticket/888
>> - TPS rewrite: provide remote authority functions
>>
>> This patch provides functions for TKS:
>>    - computeSessionKey
>>    - createKeySetData
>>    - encryptData
>>    - computeRandomData
>>
>> Two things to note:
>> * Because of code not yet available, only computeRandomData() was
>> tested.  Other functions can be tested/adusted when the needed info are
>> available.
>> * Because we don't know where the tps profile name will be at this
>> point, computeSessionKey currently has a hard-coded entry in there. It
>> is noted in a TODO comment.  Again, this will be adjusted when it's more
>> clear where it comes from.
>>
>> thanks,
>> Christina
>
> Some comments:
>
> 1. In RemoteRequestHandler.parserResponse() now if the content is null 
> the method will return null too. I suppose content should never be 
> null, so this is an error case. As I mentioned in the previous review, 
> if an error is detected, it would be better to throw an exception 
> instead of returning null so that it can be traced to the actual error.
>
>   if (content == null) {
>       throw new EBaseException("RemoteRequestHandler: 
> parserResponse(): no response content.");
>   }
>
> On the other hand, if null content is considered a valid input 
> (meaning empty content), it would be better to return an empty 
> hashtable so the caller doesn't need to worry about null hashtable:
>
>   Hashtable<String, Object> vars = new Hashtable<String, Object>();
>   if (content == null) {
>       return vars;
>   }
>
> 2. In RemoteRequestHandler.parserResponse() it's not necessary to 
> create a new string nvs from string e:
>
>   for (String e : elements) {
>       String nvs = new String(e);
>       String[] nv = nvs.split(NAME_VALUE_EQUAL);
>       ...
>   }
>
> Java strings are immutable and the split() will create new strings, so 
> the original content won't be affected. The code can be simplified as 
> follows:
>
>   for (String nvs : elements) {
>       String[] nv = nvs.split(NAME_VALUE_EQUAL);
>       ...
>   }
>
> 3. In RemoteRequestHandler.parserResponse() the following null 
> checking is unnecessary because split() doesn't return null string 
> elements.
>
>   String[] nv = nvs.split(NAME_VALUE_EQUAL);
>   if (nv[0] != null && nv[1] != null) {
>       vars.put(nv[0], nv[1]);
>   }
>
> Instead, we should check whether the array contains 2 elements. What 
> should we do if it contains more, or less, than 2 elements?
>
>   if (nv.length == 2) {
>       vars.put(nv[0], nv[1]);
>   } else {
>       // throw error, skip, or ignore the extra elements?
>   }
>
> 4. Since both the name and the value are strings, 
> RemoteRequestHandler.parserResponse() can actually return a 
> Hashtable<String, String> so it's not necessary to downcast the values 
> into string again later.
>
> 5. Similar to #1, in TKSRemoteRequestHandler.computeSessionKey() if 
> the TKS response is null it's an error case, so it should throw an 
> exception instead of returning null again. Also note the extra 
> parentheses in the if-statement can be removed.
>
>   String content = resp.getContent();
>
>   if (content != null && !content.equals("")) {
>       ...
>
>   } else {
>       throw new EBaseException("TKSRemoteRequestHandler: 
> computeSessionKey(): no response content.");
>   }
>
> 6. Regardless of #1, the following null response checking in 
> TKSRemoteRequestHandler.computeSessionKey() is unnecessary because the 
> response will never be null since parseResponse() will never receive a 
> null content:
>
>   if (content != null && !content.equals("")) {
>
>        // content can't be null
>        Hashtable<String, Object> response =
>            parseResponse(content);
>
>        // response can't be null
>        if (response == null) {
>            CMS.debug("TKSRemoteRequestHandler: computeSessionKey(): 
> parseResponse returned null.");
>            return null;
>        }
>
> 7. Similar to #1, if missing status is considered an error then it 
> should throw an exception:
>
>   String value = response.get(TKS_RESPONSE_STATUS);
>   if (value == null) {
>       throw new EBaseException("TKSRemoteRequestHandler: 
> computeSessionKey(): Bad TKS Connection. Please make sure TKS is 
> accessible by TPS.");
>
>   } else {
>       CMS.debug("TKSRemoteRequestHandler: computeSessionKey(): got 
> status =" + value);
>   }
>
> 8. The computeSessionKey() now returns a hashtable containing 
> attributes, so someone calling this method will have to check the docs 
> to make sure he/she uses the right attributes and casts the values to 
> the right types. It would be better to define a class for the return 
> value:
>
>   CreateSessionKeyResponse response = tksReq.computeSessionKey(...);
>   String status = response.getStatus();
>   byte[] sessionKey = response.getSessionKey();
>
> 9. Comments #5-#8 also apply to createKeySetData(), 
> computeRandomData(), and encryptData().
>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Ticket-888-part-1-TKS-TPS-rewrite-provide-remote-aut.patch
Type: text/x-patch
Size: 54056 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/pki-devel/attachments/20140314/761d61f9/attachment.bin>


More information about the Pki-devel mailing list