示例#1
0
ndn_Error
ndn_TcpTransport_isLocal(const char *host, int *result)
{
  // Imitate ndn_SocketTransport_connect to use getaddrinfo.
  struct addrinfo hints;
  struct addrinfo *serverInfo;
  char ipString[INET6_ADDRSTRLEN];

  ndn_memset((uint8_t *)&hints, 0, sizeof(hints));
  hints.ai_family = AF_UNSPEC;
  hints.ai_socktype = SOCK_STREAM;

  if (getaddrinfo(host, NULL, &hints, &serverInfo) != 0)
    return NDN_ERROR_SocketTransport_error_in_getaddrinfo;

  // Only look at the first serverInfo.
  if (serverInfo->ai_family == AF_INET) {
    struct sockaddr_in *ipv4 = (struct sockaddr_in *)serverInfo->ai_addr;
    inet_ntop(serverInfo->ai_family, &ipv4->sin_addr, ipString, sizeof(ipString));

    *result = (ndn_memcmp((const uint8_t *)ipString,
                          (const uint8_t *)"127.", 4) == 0 ? 1 : 0);
  }
  else {
    struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)serverInfo->ai_addr;
    inet_ntop(serverInfo->ai_family,  &ipv6->sin6_addr, ipString, sizeof(ipString));

    *result = (strcmp(ipString, "::1") == 0 ? 1 : 0);
  }

  freeaddrinfo(serverInfo);
  return NDN_ERROR_success;
}
示例#2
0
bool
PolicyManager::verifyDigestSha256Signature
  (const Blob& signature, const SignedBlob& signedBlob)
{
  // Set signedPortionDigest to the digest of the signed portion of the signedBlob.
  uint8_t signedPortionDigest[SHA256_DIGEST_LENGTH];
  ndn_digestSha256
    (signedBlob.signedBuf(), signedBlob.signedSize(), signedPortionDigest);

  return signature.size() == sizeof(signedPortionDigest) && ndn_memcmp
    (signature.buf(), signedPortionDigest, sizeof(signedPortionDigest)) == 0;
}