blob: f057a6de0ce8bea96a64dfe00319c0f981db3455 [file] [log] [blame]
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
/*
* Copyright (c) 2013, Regents of the University of California
* Yingdi Yu
*
* BSD license, See the LICENSE file for more information
*
* Author: Yingdi Yu <yingdi@cs.ucla.edu>
*/
#include "profile-data.h"
#include "exception.h"
#include <ndn.cxx/fields/signature-sha256-with-rsa.h>
#include "logging.h"
using namespace ndn;
using namespace std;
INIT_LOGGER("ProfileData");
ProfileData::ProfileData(const Name& identity,
const Profile& profile)
: Data()
, m_identity(identity)
, m_profile(profile)
{
Name dataName = identity;
TimeInterval ti = time::NowUnixTimestamp();
ostringstream oss;
oss << ti.total_seconds();
dataName.append("PROFILE").append(oss.str());
setName(dataName);
Ptr<Blob> profileBlob = profile.toDerBlob();
setContent(Content(profileBlob->buf(), profileBlob->size()));
}
ProfileData::ProfileData(const ProfileData& profileData)
: Data()
, m_identity(profileData.m_identity)
, m_profile(profileData.m_profile)
{
Ptr<const signature::Sha256WithRsa> dataSig = boost::dynamic_pointer_cast<const signature::Sha256WithRsa>(profileData.getSignature());
Ptr<signature::Sha256WithRsa> newSig = Ptr<signature::Sha256WithRsa>::Create();
Ptr<SignedBlob> newSignedBlob = NULL;
if(profileData.getSignedBlob() != NULL)
newSignedBlob = Ptr<SignedBlob>(new SignedBlob(*profileData.getSignedBlob()));
newSig->setKeyLocator(dataSig->getKeyLocator());
newSig->setPublisherKeyDigest(dataSig->getPublisherKeyDigest());
newSig->setSignatureBits(dataSig->getSignatureBits());
setName(profileData.getName());
setSignature(newSig);
setContent(profileData.getContent());
setSignedBlob(newSignedBlob);
}
ProfileData::ProfileData(const Data& data)
: Data()
{
// _LOG_DEBUG("ProfileData constructor");
const Name& dataName = data.getName();
name::Component appFlag(string("PROFILE"));
int profileIndex = -1;
for(int i = 0; i < dataName.size(); i++)
{
if(0 == dataName.get(i).compare(appFlag))
{
profileIndex = i;
break;
}
}
if(profileIndex < 0)
throw LnException("No PROFILE component in data name!");
m_identity = dataName.getSubName(0, profileIndex);
Ptr<const signature::Sha256WithRsa> dataSig = boost::dynamic_pointer_cast<const signature::Sha256WithRsa>(data.getSignature());
Ptr<signature::Sha256WithRsa> newSig = Ptr<signature::Sha256WithRsa>::Create();
Ptr<SignedBlob> newSignedBlob = NULL;
if(data.getSignedBlob() != NULL)
newSignedBlob = Ptr<SignedBlob>(new SignedBlob(*data.getSignedBlob()));
newSig->setKeyLocator(dataSig->getKeyLocator());
newSig->setPublisherKeyDigest(dataSig->getPublisherKeyDigest());
newSig->setSignatureBits(dataSig->getSignatureBits());
setName(data.getName());
setSignature(newSig);
setContent(data.getContent());
setSignedBlob(newSignedBlob);
// _LOG_DEBUG("Decode Profile");
m_profile = *Profile::fromDerBlob(data.content());
// _LOG_DEBUG("Profile Decoded");
}