Add Janet copyright to GSS command files.
[gssweb.git] / json_gssapi / src / commands / GSSUnwrap.cpp
1 /*
2  * Copyright (c) 2014, JANET(UK)
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * 3. Neither the name of JANET(UK) nor the names of its contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24  * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
31  * OF THE POSSIBILITY OF SUCH DAMAGE.
32  *
33  */
34
35 #include "GSSUnwrap.h"
36 #include <cache/GSSContextCache.h>
37
38 GSSUnwrap::GSSUnwrap ( JSONObject* params, gss_unwrap_type fn )
39 {
40   function = fn;
41   loadParameters(params);
42 }
43
44 bool GSSUnwrap::loadParameters(JSONObject *params)
45 {
46   /* Variables */
47   std::string sInputMessage;
48   
49   /* Error checking */
50   /* Setup */
51   // Should I zeroOut?
52   
53   /* Main processing */
54   
55   /*****************
56    * input_message *
57    *****************/
58   if ( ! params->get("input_message").isNull() )
59   {
60     sInputMessage = params->get("input_message").string();
61     this->inputMessage.setValue(sInputMessage);
62   }
63   
64   /******************
65    * context_handle *
66    ******************/
67   if ( ! params->get("context_handle").isNull() )
68   {
69     sInputMessage = params->get("context_handle").string();
70     GSSContext ctx = GSSContextCache::instance()->retrieve(sInputMessage);
71     this->context = ctx.getContext();
72   }
73   
74   /* Cleanup */
75   /* Return */
76   return true;
77 }
78
79
80 void GSSUnwrap::execute()
81 {
82   /* Variables */
83   gss_buffer_desc output_buf;
84   
85   retVal = function(
86     &(this->minor_status),
87     this->context,
88     this->inputMessage.toGss(),
89     &output_buf,
90     &(this->conf_state),
91     &(this->qop_state)
92   );
93   
94   this->outputMessage.setValue( (char *)output_buf.value, output_buf.length );
95 }
96
97 JSONObject* GSSUnwrap::toJSON()
98 {
99   /* Variables */
100   const char *conf_state;
101   JSONObject *values = new JSONObject();
102   
103   /* Error checking */
104   
105   /* Setup */
106   
107   /* Main */
108   // Return Values
109   // Easy stuff
110   values->set("major_status", this->retVal);
111   values->set("minor_status", this->minor_status);
112   
113   values->set("qop_state", this->qop_state);
114   
115   conf_state = (this->conf_state) ? "TRUE" : "FALSE";
116   values->set("conf_state", conf_state);
117   
118   values->set(
119     "output_message",
120     this->outputMessage.toString().c_str()
121   );
122   
123   /* Cleanup */
124   
125   /* Return */
126   return(values);
127 }