media/mtransport/dtlsidentity.h
author Brian Smith <bsmith@mozilla.com>
Wed, 05 Dec 2012 15:19:18 -0800
changeset 115146 5d514385c585f71d77e0bcd279e958bfc2d986d6
parent 109578 a8fac69129b0bac8b55e33574f4c4338d494b150
child 161341 cffe18264682805febc35f0985ad91a3d6174ee6
permissions -rw-r--r--
Bug 816392: Update to NSS 3.14.1 beta 2 (NSS_3_14_1_BETA2), r=me, a=rrelyea

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef dtls_identity_h__
#define dtls_identity_h__

#include <string>

#include "m_cpp_utils.h"
#include "mozilla/RefPtr.h"
#include "nsISupportsImpl.h"
#include "ScopedNSSTypes.h"

// All code in this module requires NSS to be live.
// Callers must initialize NSS and implement the nsNSSShutdownObject
// protocol.
namespace mozilla {

class DtlsIdentity {
 public:
  ~DtlsIdentity();

  // Generate an identity with a random name.
  static TemporaryRef<DtlsIdentity> Generate();

  // Note: the following two functions just provide access. They
  // do not transfer ownership. If you want a pointer that lasts
  // past the lifetime of the DtlsIdentity, you must make
  // a copy yourself.
  CERTCertificate *cert() { return cert_; }
  SECKEYPrivateKey *privkey() { return privkey_; }

  nsresult ComputeFingerprint(const std::string algorithm,
                              unsigned char *digest,
                              std::size_t size,
                              std::size_t *digest_length);

  static nsresult ComputeFingerprint(const CERTCertificate *cert,
                                     const std::string algorithm,
                                     unsigned char *digest,
                                     std::size_t size,
                                     std::size_t *digest_length);

  static std::string FormatFingerprint(const unsigned char *digest,
                                       std::size_t size);
  static nsresult ParseFingerprint(const std::string fp,
                                   unsigned char *digest,
                                   size_t size, size_t *length);

  NS_INLINE_DECL_THREADSAFE_REFCOUNTING(DtlsIdentity)

 private:
  DtlsIdentity(SECKEYPrivateKey *privkey, CERTCertificate *cert)
      : privkey_(privkey), cert_(cert) {}
  DISALLOW_COPY_ASSIGN(DtlsIdentity);

  ScopedSECKEYPrivateKey privkey_;
  CERTCertificate *cert_;  // TODO: Using a smart pointer here causes link
                           // errors.
};
}  // close namespace
#endif