2 * Copyright (c) 2014 <copyright holder> <email>
4 * For license details, see the LICENSE file in the root of this project.
10 #include "GSSPseudoRandom.h"
12 GSSPseudoRandom::GSSPseudoRandom(JSONObject *params,
13 gss_pseudo_random_type fn) : GSSCommand(params)
19 loadParameters(params);
28 * {"method": "gss_pseudo_random",
31 * "context_handle": "########",
33 * "prf_in": "la la la input message",
34 * "desired_output_len": ####
38 bool GSSPseudoRandom::loadParameters ( JSONObject* params )
41 std::string sInputMessage;
50 if ( ! params->get("arguments").get("prf_key").isNull() )
52 if (params->get("arguments").get("prf_key").isInteger())
53 this->key = params->get("arguments").get("prf_key").integer();
55 throw std::invalid_argument( "Unrecognized argument type for prf_key." );
59 /**********************
60 * desired_output_len *
61 **********************/
62 if ( ! params->get("arguments").get("desired_output_len").isNull() )
64 if (params->get("arguments").get("desired_output_len").isInteger())
65 this->desiredOutputLength = params->get("arguments").get("desired_output_len").integer();
67 throw std::invalid_argument( "Unrecognized argument type for desired_output_len." );
74 if ( ! params->get("arguments").get("prf_in").isNull() )
76 if (params->get("arguments").get("prf_in").isString())
78 sInputMessage = params->get("arguments").get("prf_in").string();
79 this->inputMessage.setValue(sInputMessage);
89 void GSSPseudoRandom::execute()
92 gss_buffer_desc output_buf;
99 this->inputMessage.toGss(),
100 this->desiredOutputLength,
104 this->minor_status = minor;
105 this->outputMessage.setValue( (char *)output_buf.value, output_buf.length );
108 /* Desired JSON output:
111 * "command": "gss_pseudo_random",
116 * "random_bytes": "asdf"
120 JSONObject* GSSPseudoRandom::toJSON()
123 JSONObject *ret = new JSONObject();
124 JSONObject *values = new JSONObject();
133 values->set("major_status", this->retVal);
134 values->set("minor_status", this->minor_status);
138 this->outputMessage.toString().c_str()
141 // Put it all together.
142 ret->set("command", "gss_pseudo_random");
143 ret->set("return_values", *values);