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; }
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; }