예제 #1
0
void
Entry::setData(const Data& data, bool isUnsolicited, const ndn::ConstBufferPtr& digest)
{
  m_dataPacket = data.shared_from_this();
  m_digest = digest;

  updateStaleTime();

  m_nameWithDigest = data.getName();
  m_nameWithDigest.append(ndn::name::Component(getDigest()));
}
예제 #2
0
/**
 * Finish the hash calculation and free resources.
 * @param context the hash context
 * @param digest - the buffer to hold the digest.
 *        Must be NULL or of size AJ_SHA256_DIGEST_LENGTH.
 *        If the value is NULL, resources are freed but the digest
 *        is not calculated.
 * @return AJ_OK if successful, otherwise error.
 */
AJ_Status AJ_SHA256_Final(AJ_SHA256_Context* context, uint8_t* digest)
{
    AJ_Status status = AJ_OK;

    if (!digest) {
        AJ_MemZeroSecure(context, sizeof(*context));
        AJ_Free(context);
    } else {
        status = getDigest(context, digest, 0);
    }
    return status;
}
예제 #3
0
파일: reboot.cpp 프로젝트: Disasm/rebootd
int main(int argc, char* argv[])
{
    if(argc != 3)
    {
        fprintf(stderr, "Usage: %s <keyfile> <server_ip>\n", argv[0]);
        return 1;
    }
    
    int res = readKey(argv[1]);
    if(res) return 2;

    char* ip = argv[2];

    sock = socket(PF_INET, SOCK_STREAM, 0);

    struct sockaddr_in sa;
    memset(&sa, 0, sizeof(sa));
    sa.sin_family = AF_INET;
    sa.sin_port = htons(SERVER_PORT);
    sa.sin_addr.s_addr = inet_addr(ip);

    if(connect(sock, (struct sockaddr*)&sa, sizeof(sa))==-1)
    {
        perror("connect");
        return 3;
    }
    
    uint8_t challenge[CHALLENGE_SIZE];
    int len = recv(sock, challenge, sizeof(challenge), 0);
    if(len<=0)
    {
        perror("recv");
        return 4;
    }
    if(len!=sizeof(challenge))
    {
        fprintf(stderr, "short challenge\n");
        return 5;
    }
    
    uint8_t digest[20];
    getDigest(digest, challenge, sizeof(challenge));
    
    send(sock, digest, sizeof(digest), 0);
    
    while(!feof(stdin))
    {
        if(loop()<0) break;
    }
    
    return 0;
}
예제 #4
0
SHA256Block getLogicalSessionUserDigestForLoggedInUser(const OperationContext* opCtx) {
    auto client = opCtx->getClient();
    ServiceContext* serviceContext = client->getServiceContext();

    if (AuthorizationManager::get(serviceContext)->isAuthEnabled()) {
        UserName userName;

        const auto user = AuthorizationSession::get(client)->getSingleUser();
        invariant(user);

        return user->getDigest();
    } else {
        return kNoAuthDigest;
    }
}
예제 #5
0
////////////////////////////////////////////////////////////////////////
// Md5stream
//
const char* Md5stream::getHexDigest()
{
  static const char hexDigits[] = "0123456789abcdef";
  unsigned char md5[16];
  getDigest(md5);
  int i;
  char* p = hexdigest;
  for (i = 0; i < 16; ++i)
  {
    *p++ = hexDigits[md5[i] >> 4];
    *p++ = hexDigits[md5[i] & 0xf];
  }
  *p = '\0';
  log_debug("md5: " << hexdigest);
  return hexdigest;
}
예제 #6
0
LogicalSessionRecord makeLogicalSessionRecord(OperationContext* opCtx,
                                              const LogicalSessionId& lsid,
                                              Date_t lastUse) {
    auto lsr = makeLogicalSessionRecord(lsid, lastUse);

    auto client = opCtx->getClient();
    ServiceContext* serviceContext = client->getServiceContext();
    if (AuthorizationManager::get(serviceContext)->isAuthEnabled()) {
        auto user = AuthorizationSession::get(client)->getSingleUser();
        invariant(user);

        if (user->getDigest() == lsid.getUid()) {
            lsr.setUser(StringData(user->getName().toString()));
        }
    }

    return lsr;
}
예제 #7
0
LogicalSessionRecord makeLogicalSessionRecord(OperationContext* opCtx, Date_t lastUse) {
    LogicalSessionId id{};
    LogicalSessionRecord lsr{};

    auto client = opCtx->getClient();
    ServiceContext* serviceContext = client->getServiceContext();
    if (AuthorizationManager::get(serviceContext)->isAuthEnabled()) {
        auto user = AuthorizationSession::get(client)->getSingleUser();
        invariant(user);

        id.setUid(user->getDigest());
        lsr.setUser(StringData(user->getName().toString()));
    } else {
        id.setUid(kNoAuthDigest);
    }

    id.setId(UUID::gen());

    lsr.setId(id);
    lsr.setLastUse(lastUse);

    return lsr;
}
예제 #8
0
파일: create_user.c 프로젝트: rkun/COMP3334
void createUser(char* username, char* password, int randomDataFd, int outputFd)
{
	unsigned char salt[SALT_LEN];
	unsigned char digest[SHA256_DIGEST_LENGTH];
	unsigned char hmac[SHA256_DIGEST_LENGTH];
	ssize_t nByte;

	getSalt(salt, randomDataFd);
	getDigest(digest, salt, password);
	getHMAC(hmac, digest);

	nByte = write(outputFd, username, strlen(username));
	nByte = write(outputFd, "|", 1);
	nByte = write(outputFd, salt, SALT_LEN);
	nByte = write(outputFd, "|", 1);
	nByte = write(outputFd, digest, SHA256_DIGEST_LENGTH);
	nByte = write(outputFd, "|", 1);
	nByte = write(outputFd, hmac, SHA256_DIGEST_LENGTH);
	nByte = write(outputFd, "\n", 1);

	printf("User %s is created!\n", username);
	printf("---------------------------------------------------------\n");
}
예제 #9
0
void Server::update() {
	if (!((! qsRegName.isEmpty()) && (! qsRegName.isEmpty()) && (! qsRegPassword.isEmpty()) && qurlRegWeb.isValid() && qsPassword.isEmpty() && bAllowPing))
		return;

	// When QNAM distinguishes connections by client cert, move this to Meta
	if (! qnamNetwork)
		qnamNetwork = new QNetworkAccessManager(this);

	qtTick.start(1000 * (60 * 60 + (qrand() % 300)));

	QDomDocument doc;
	QDomElement root=doc.createElement(QLatin1String("server"));
	doc.appendChild(root);

	OSInfo::fillXml(doc, root, meta->qsOS, meta->qsOSVersion, qlBind);

	QDomElement tag;
	QDomText t;

	tag=doc.createElement(QLatin1String("name"));
	root.appendChild(tag);
	t=doc.createTextNode(qsRegName);
	tag.appendChild(t);

	tag=doc.createElement(QLatin1String("host"));
	root.appendChild(tag);
	t=doc.createTextNode(qsRegHost);
	tag.appendChild(t);

	tag=doc.createElement(QLatin1String("password"));
	root.appendChild(tag);
	t=doc.createTextNode(qsRegPassword);
	tag.appendChild(t);

	tag=doc.createElement(QLatin1String("port"));
	root.appendChild(tag);
	t=doc.createTextNode(QString::number(usPort));
	tag.appendChild(t);

	tag=doc.createElement(QLatin1String("url"));
	root.appendChild(tag);
	t=doc.createTextNode(qurlRegWeb.toString());
	tag.appendChild(t);

	tag=doc.createElement(QLatin1String("digest"));
	root.appendChild(tag);
	t=doc.createTextNode(getDigest());
	tag.appendChild(t);

	tag=doc.createElement(QLatin1String("users"));
	root.appendChild(tag);
	t=doc.createTextNode(QString::number(qhUsers.count()));
	tag.appendChild(t);

	tag=doc.createElement(QLatin1String("channels"));
	root.appendChild(tag);
	t=doc.createTextNode(QString::number(qhChannels.count()));
	tag.appendChild(t);

	QNetworkRequest qnr(QUrl(QLatin1String("https://mumble.hive.no/register.cgi")));
	qnr.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("text/xml"));

	QSslConfiguration ssl = qnr.sslConfiguration();
	ssl.setLocalCertificate(qscCert);
	ssl.setPrivateKey(qskKey);

	/* Work around bug in QSslConfiguration */
	QList<QSslCertificate> calist = ssl.caCertificates();
	calist << QSslSocket::defaultCaCertificates();
	calist << qscCert;
	ssl.setCaCertificates(calist);

	qnr.setSslConfiguration(ssl);

	QNetworkReply *rep = qnamNetwork->post(qnr, doc.toString().toUtf8());
	connect(rep, SIGNAL(finished()), this, SLOT(finished()));
	connect(rep, SIGNAL(sslErrors(const QList<QSslError> &)), this, SLOT(regSslError(const QList<QSslError> &)));
}
예제 #10
0
/**
 * Retrieve the digest but keep the hash active for further updates.
 * @param context the hash context
 * @param digest the buffer to hold the digest.  Must be of size AJ_SHA256_DIGEST_LENGTH
 * @return AJ_OK if successful, otherwise error.
 */
AJ_Status AJ_SHA256_GetDigest(AJ_SHA256_Context* context, uint8_t* digest)
{
    return getDigest(context, digest, 1);
}