blob: 484a08e1823dbf733e04913081f78a2e751dad04 [file] [log] [blame]
Yingdi Yu3715f8d2014-01-30 00:32:20 -08001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
2/**
3 * Copyright (C) 2013 Regents of the University of California.
4 * @author: Yingdi Yu <yingdi@cs.ucla.edu>
5 * See COPYING for copyright and distribution information.
6 */
7
Alexander Afanasyeve2dcdfd2014-02-07 15:53:28 -08008#include "common.hpp"
9
Yingdi Yu3715f8d2014-01-30 00:32:20 -080010#include "sec-rule-specific.hpp"
11#include "signature-sha256-with-rsa.hpp"
12
Yingdi Yu3715f8d2014-01-30 00:32:20 -080013using namespace std;
14
Yingdi Yufc40d872014-02-18 12:56:04 -080015namespace ndn {
Yingdi Yu3715f8d2014-01-30 00:32:20 -080016
17SecRuleSpecific::SecRuleSpecific(shared_ptr<Regex> dataRegex,
18 shared_ptr<Regex> signerRegex)
19 : SecRule(true)
20 , m_dataRegex(dataRegex)
21 , m_signerRegex(signerRegex)
22{}
23
24SecRuleSpecific::SecRuleSpecific(const SecRuleSpecific& rule)
25 : SecRule(true)
26 , m_dataRegex(rule.m_dataRegex)
27 , m_signerRegex(rule.m_signerRegex)
28{}
29
30bool
31SecRuleSpecific::matchDataName(const Data& data)
32{ return m_dataRegex->match(data.getName()); }
33
34bool
35SecRuleSpecific::matchSignerName(const Data& data)
36{
37 try{
38 SignatureSha256WithRsa sig(data.getSignature());
39 Name signerName = sig.getKeyLocator().getName ();
40 return m_signerRegex->match(signerName);
41 }catch(SignatureSha256WithRsa::Error &e){
42 return false;
43 }catch(KeyLocator::Error &e){
44 return false;
45 }
46}
47
48bool
49SecRuleSpecific::satisfy(const Data & data)
Yingdi Yufc40d872014-02-18 12:56:04 -080050{
51 return (matchDataName(data) && matchSignerName(data)) ? true : false ;
52}
Yingdi Yu3715f8d2014-01-30 00:32:20 -080053
54bool
55SecRuleSpecific::satisfy(const Name & dataName, const Name & signerName)
Yingdi Yufc40d872014-02-18 12:56:04 -080056{
57 return (m_dataRegex->match(dataName) && m_signerRegex->match(signerName));
Yingdi Yu3715f8d2014-01-30 00:32:20 -080058}
Yingdi Yufc40d872014-02-18 12:56:04 -080059
60} // namespace ndn