/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
/**
 * Copyright (C) 2013 Regents of the University of California.
 * @author: Yingdi Yu <yingdi@cs.ucla.edu>
 * @author: Jeff Thompson <jefft0@remap.ucla.edu>
 * See COPYING for copyright and distribution information.
 */

#include "simple-visitor.hpp"
#include <ndn-cpp/security/certificate/public-key.hpp>
#include "../der.hpp"
#include "public-key-visitor.hpp"

using namespace std;
using namespace ndn::ptr_lib;

namespace ndn {

namespace der {
  
ndnboost::any 
PublicKeyVisitor::visit(DerSequence& derSeq)
{
  const DerNodePtrList& children = derSeq.getChildren();

  SimpleVisitor simpleVisitor;
  shared_ptr<DerSequence> algoSeq = dynamic_pointer_cast<DerSequence>(children[0]); 
  OID algorithm = ndnboost::any_cast<OID>(algoSeq->getChildren()[0]->accept(simpleVisitor));  
  Blob raw = derSeq.getRaw();   
  return ndnboost::any(shared_ptr<PublicKey>(new PublicKey(algorithm, raw)));    
}

} // der

}
