08894cf94777b05b50c8e766944d8eb17e86901e
[gssweb.git] / json_gssapi / src / commands / GSSWrap.h
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 #ifndef GSSWRAP_H
36 #define GSSWRAP_H
37
38 #include <gssapi.h>
39
40 #include "GSSCommand.h"
41 #include "datamodel/GSSBuffer.h"
42
43 typedef OM_uint32 (KRB5_CALLCONV *gss_wrap_type) (
44     OM_uint32 *,        /* minor_status */
45     gss_ctx_id_t,       /* context_handle */
46     int,                /* conf_req_flag */
47     gss_qop_t,          /* qop_req */
48     gss_buffer_t,       /* input_message_buffer */
49     int *,              /* conf_state */
50     gss_buffer_t);      /* output_message_buffer */
51
52
53 class GSSWrap :  GSSCommand
54 {
55 public:
56     GSSWrap( gss_wrap_type fn = &gss_wrap ) : function(fn) {};
57     GSSWrap( JSONObject *params, gss_wrap_type fn = &gss_wrap);
58     ~GSSWrap();
59     virtual void execute();
60     virtual JSONObject* toJSON();
61     
62     gss_wrap_type getGSSFunction() const { return(function); }
63     
64     void setConfReq(int conf_req_flag) { conf_req = conf_req_flag; }
65     void setContextHandle ( gss_ctx_id_t context_handle ) { context = context_handle; }
66     void setQopReq ( int arg1 ) { qop_req = arg1; }
67     void setInputMessage ( GSSBuffer* input ) { inputMessage.setValue(input->toString()); };
68     
69     int getConfState () const { return(conf_state); }
70     GSSBuffer getOutputMessage () const { return(outputMessage); }
71     int getConfReq() const { return(conf_req); }
72     gss_qop_t getQopReq() const { return(qop_req); }
73     GSSBuffer getInputMessage () const { return(inputMessage); }
74     gss_ctx_id_t getContext() const { return(context); }
75     
76 private:
77     gss_wrap_type function;
78     int conf_req;
79     gss_ctx_id_t context;
80     gss_qop_t qop_req;
81     GSSBuffer inputMessage;
82     GSSBuffer outputMessage;
83     
84   
85     OM_uint32 retVal;
86     OM_uint32 minor_status;
87     int conf_state;
88
89     bool loadParameters(JSONObject *params);
90 };
91
92 #endif // GSSWRAP_H