17c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// Copyright 2012 Google Inc. All Rights Reserved. 27c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// 37c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// Licensed under the Apache License, Version 2.0 (the "License"); 47c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// you may not use this file except in compliance with the License. 57c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// You may obtain a copy of the License at 67c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// 77c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// http://www.apache.org/licenses/LICENSE-2.0 87c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// 97c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// Unless required by applicable law or agreed to in writing, software 107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// distributed under the License is distributed on an "AS IS" BASIS, 117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// See the License for the specific language governing permissions and 137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// limitations under the License. 147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#ifndef POLO_PAIRING_POLOCHALLENGERESPONSE_H_ 167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#define POLO_PAIRING_POLOCHALLENGERESPONSE_H_ 177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include <openssl/x509v3.h> 197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include <openssl/ssl.h> 207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include <stdint.h> 217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include <vector> 227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#include "polo/util/macros.h" 237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetnamespace polo { 257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetnamespace pairing { 267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichettypedef std::vector<uint8_t> Alpha, Gamma, Nonce; 287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet// A Polo challenge response that contains the certificate keys. 307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetclass PoloChallengeResponse { 317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public: 327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Creates a new challenge response with the given certificates. This does not 337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // take ownership of the given pointers. 347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // @param client_cert the client certificate 357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // @param server_cert the server certificate 367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet PoloChallengeResponse(X509* client_cert, X509* server_cert); 377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual ~PoloChallengeResponse() {} 397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Computes the alpha value based on the given nonce. 417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual Alpha* GetAlpha(const Nonce& nonce) const; 427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Computes the gamma value based on the given nonce. 447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual Gamma* GetGamma(const Nonce& nonce) const; 457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Extracts the nonce from the given gamma value. 477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual Nonce* ExtractNonce(const Gamma& gamma) const; 487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet // Verifies that the given gamma value is correct. 507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet virtual bool CheckGamma(const Gamma& gamma) const; 517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet private: 527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet X509* client_cert; 537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet X509* server_cert; 547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet DISALLOW_COPY_AND_ASSIGN(PoloChallengeResponse); 567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet}; 577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} // namespace pairing 597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} // namespace polo 607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet#endif // POLO_PAIRING_POLOCHALLENGERESPONSE_H_ 62