Exemple #1
0
static void
sha1_result(sha1_ctxt * ctxt, uint8_t *digest0)
{
        uint8_t    *digest;

        digest = (uint8_t *) digest0;
        sha1_pad(ctxt);
#ifdef BIG_ENDIAN_ORDER
        memmove(digest, &ctxt->h.b8[0], 20);
#else
        digest[0] = ctxt->h.b8[3];
        digest[1] = ctxt->h.b8[2];
        digest[2] = ctxt->h.b8[1];
        digest[3] = ctxt->h.b8[0];
        digest[4] = ctxt->h.b8[7];
        digest[5] = ctxt->h.b8[6];
        digest[6] = ctxt->h.b8[5];
        digest[7] = ctxt->h.b8[4];
        digest[8] = ctxt->h.b8[11];
        digest[9] = ctxt->h.b8[10];
        digest[10] = ctxt->h.b8[9];
        digest[11] = ctxt->h.b8[8];
        digest[12] = ctxt->h.b8[15];
        digest[13] = ctxt->h.b8[14];
        digest[14] = ctxt->h.b8[13];
        digest[15] = ctxt->h.b8[12];
        digest[16] = ctxt->h.b8[19];
        digest[17] = ctxt->h.b8[18];
        digest[18] = ctxt->h.b8[17];
        digest[19] = ctxt->h.b8[16];
#endif
}
Exemple #2
0
void
SHA1Final(os_byte *digest0, SHA1_CTXT* ctxt)
{
	os_byte	   *digest;

	digest = (os_byte *) digest0;
	sha1_pad(ctxt);
#ifdef WORDS_BIGENDIAN
	memmove(digest, &ctxt->h.b8[0], 20);
#else
	digest[0] = ctxt->h.b8[3];
	digest[1] = ctxt->h.b8[2];
	digest[2] = ctxt->h.b8[1];
	digest[3] = ctxt->h.b8[0];
	digest[4] = ctxt->h.b8[7];
	digest[5] = ctxt->h.b8[6];
	digest[6] = ctxt->h.b8[5];
	digest[7] = ctxt->h.b8[4];
	digest[8] = ctxt->h.b8[11];
	digest[9] = ctxt->h.b8[10];
	digest[10] = ctxt->h.b8[9];
	digest[11] = ctxt->h.b8[8];
	digest[12] = ctxt->h.b8[15];
	digest[13] = ctxt->h.b8[14];
	digest[14] = ctxt->h.b8[13];
	digest[15] = ctxt->h.b8[12];
	digest[16] = ctxt->h.b8[19];
	digest[17] = ctxt->h.b8[18];
	digest[18] = ctxt->h.b8[17];
	digest[19] = ctxt->h.b8[16];
#endif
}
Exemple #3
0
static void
sha1_result(
	struct sha1_ctxt *ctxt,
	caddr_t digest0)
{
	u_int8_t *digest;

	digest = (u_int8_t *)digest0;
	sha1_pad(ctxt);
#if BYTE_ORDER == BIG_ENDIAN
	bcopy(&ctxt->h.b8[0], digest, 20);
#else
	digest[0] = ctxt->h.b8[3]; digest[1] = ctxt->h.b8[2];
	digest[2] = ctxt->h.b8[1]; digest[3] = ctxt->h.b8[0];
	digest[4] = ctxt->h.b8[7]; digest[5] = ctxt->h.b8[6];
	digest[6] = ctxt->h.b8[5]; digest[7] = ctxt->h.b8[4];
	digest[8] = ctxt->h.b8[11]; digest[9] = ctxt->h.b8[10];
	digest[10] = ctxt->h.b8[9]; digest[11] = ctxt->h.b8[8];
	digest[12] = ctxt->h.b8[15]; digest[13] = ctxt->h.b8[14];
	digest[14] = ctxt->h.b8[13]; digest[15] = ctxt->h.b8[12];
	digest[16] = ctxt->h.b8[19]; digest[17] = ctxt->h.b8[18];
	digest[18] = ctxt->h.b8[17]; digest[19] = ctxt->h.b8[16];
#endif

	// TODO should we bzero() the context ?  the SHA2 routines do.
}
Exemple #4
0
void sha1_result(struct sha1_ctxt *ctxt,unsigned char *digest0)
{
    uint8_t *digest;
    digest = (uint8_t *)digest0;
    sha1_pad(ctxt);
#if BIG_ENDIAN
    memcpy(digest, &ctxt->h.b8[0],20);
#else
    digest[0] = ctxt->h.b8[3]; digest[1] = ctxt->h.b8[2];
    digest[2] = ctxt->h.b8[1]; digest[3] = ctxt->h.b8[0];
    digest[4] = ctxt->h.b8[7]; digest[5] = ctxt->h.b8[6];
    digest[6] = ctxt->h.b8[5]; digest[7] = ctxt->h.b8[4];
    digest[8] = ctxt->h.b8[11]; digest[9] = ctxt->h.b8[10];
    digest[10] = ctxt->h.b8[9]; digest[11] = ctxt->h.b8[8];
    digest[12] = ctxt->h.b8[15]; digest[13] = ctxt->h.b8[14];
    digest[14] = ctxt->h.b8[13]; digest[15] = ctxt->h.b8[12];
    digest[16] = ctxt->h.b8[19]; digest[17] = ctxt->h.b8[18];
    digest[18] = ctxt->h.b8[17]; digest[19] = ctxt->h.b8[16];
#endif
}
Exemple #5
0
void challenge_29()
{
	unsigned char message[128] = "comment1=cooking%20MCs;userdata=foo;"
		"comment2=%20like%20a%20pound%20of%20bacon";
	int mlen = 77, plen;
	unsigned char padded_message[256] = {0};
	memcpy(padded_message, message, 128);
	unsigned char append[16] = ";admin=true";
	int alen = 11;
	unsigned char mac[20], forged_mac[20], test_mac[20];

	print_str("Base MAC");
	sha1_keyed_mac(message, strlen((char *) message),
			(unsigned char *) get_static_word(),
			strlen(get_static_word()), mac);
	print_hex(mac, 20);

	print_str("\nForged MAC");
	// Assumes secret length 8, but will be the same for any
	// secret length that doesn't increase or decrease the
	// number of 64 byte blocks in the hash input + padding
	sha1_length_extension(mac, mlen + 8 + sha1_pad_length(mlen + 8), append, alen, forged_mac);
	print_hex(forged_mac, 20);

	print_str("\nPlaintext verified by server: ");
	int i;
	for (i = 0; i < 16; ++i) {
		plen = sha1_pad(padded_message, mlen, i);
		memcpy(padded_message + plen, append, alen);
		plen += alen;
		sha1_keyed_mac(padded_message, plen,
				(unsigned char *) get_static_word(),
				strlen(get_static_word()), test_mac);
		if (memcmp(forged_mac, test_mac, 20) == 0) {
			print_hex(test_mac, 20);
			print_binary(padded_message, plen);
		}
	}
}
Exemple #6
0
void
sha1_result(struct sha1_ctxt *ctxt, void *digest0)
{
	uint8_t *digest;

	digest = (uint8_t *)digest0;
	sha1_pad(ctxt);
#if WORDS_BIGENDIAN
	memmove(digest, &ctxt->h.b8[0], 20);
#else
	digest[0] = ctxt->h.b8[3]; digest[1] = ctxt->h.b8[2];
	digest[2] = ctxt->h.b8[1]; digest[3] = ctxt->h.b8[0];
	digest[4] = ctxt->h.b8[7]; digest[5] = ctxt->h.b8[6];
	digest[6] = ctxt->h.b8[5]; digest[7] = ctxt->h.b8[4];
	digest[8] = ctxt->h.b8[11]; digest[9] = ctxt->h.b8[10];
	digest[10] = ctxt->h.b8[9]; digest[11] = ctxt->h.b8[8];
	digest[12] = ctxt->h.b8[15]; digest[13] = ctxt->h.b8[14];
	digest[14] = ctxt->h.b8[13]; digest[15] = ctxt->h.b8[12];
	digest[16] = ctxt->h.b8[19]; digest[17] = ctxt->h.b8[18];
	digest[18] = ctxt->h.b8[17]; digest[19] = ctxt->h.b8[16];
#endif
	safe_memset(ctxt, 0, sizeof(struct sha1_ctxt));
}