CoreTextController::CoreTextRun::CoreTextRun(CTRunRef ctRun, const SimpleFontData* fontData, const UChar* characters, unsigned stringLocation, size_t stringLength)
    : m_CTRun(ctRun)
    , m_fontData(fontData)
    , m_characters(characters)
    , m_stringLocation(stringLocation)
    , m_stringLength(stringLength)
{
    m_glyphCount = CTRunGetGlyphCount(ctRun);
    m_indices = CTRunGetStringIndicesPtr(ctRun);
    if (!m_indices) {
        m_indicesData.adoptCF(CFDataCreateMutable(kCFAllocatorDefault, m_glyphCount * sizeof(CFIndex)));
        CFDataIncreaseLength(m_indicesData.get(), m_glyphCount * sizeof(CFIndex));
        m_indices = reinterpret_cast<const CFIndex*>(CFDataGetMutableBytePtr(m_indicesData.get()));
        CTRunGetStringIndices(ctRun, CFRangeMake(0, 0), const_cast<CFIndex*>(m_indices));
    }
}
/* write a 32-bit word, little endian */
void appendUint32(
	CFMutableDataRef	buf,
	uint32_t			word)
{
#if 1
	unsigned char cb[4];
	OSWriteLittleInt32(cb, 0, word);
	CFDataAppendBytes(buf, cb, 4);
#else
	/* This is an alternate implementation which may or may not be faster than
	   the above. */
	CFIndex offset = CFDataGetLength(buf);
	UInt8 *bytes = CFDataGetMutableBytePtr(buf);
	CFDataIncreaseLength(buf, 4);
	OSWriteLittleInt32(bytes, offset, word);
#endif
}
Esempio n. 3
0
 void Blob::increaseLength(Index amount)
 {
     CFDataIncreaseLength(getStorage(), amount);
 }
Esempio n. 4
0
static void tests(void)
{
    {
        const char *password =          "******";
        const char *salt =              "salt";
        const int iterations =          1;
        const uint8_t expected[20] =  { 0x0c, 0x60, 0xc8, 0x0f,
                                        0x96, 0x1f, 0x0e, 0x71,
                                        0xf3, 0xa9, 0xb5, 0x24,
                                        0xaf, 0x60, 0x12, 0x06,
                                        0x2f, 0xe0, 0x37, 0xa6
                                      };

        const char resultSize = sizeof(expected);

        uint8_t actual[resultSize];

        pbkdf2_hmac_sha1((const uint8_t*) password, strlen(password), (const uint8_t*) salt, strlen(salt), iterations, actual, resultSize);

        ok(memcmp(expected, actual, resultSize) == 0, "pbkdf-sha-1: P-'password' S-'Salt' I-1");
    }

    {
        const char *password =          "******";
        const char *salt =              "salt";
        const int iterations =          2;
        const uint8_t expected[20] =  { 0xea, 0x6c, 0x01, 0x4d,
                                        0xc7, 0x2d, 0x6f, 0x8c,
                                        0xcd, 0x1e, 0xd9, 0x2a,
                                        0xce, 0x1d, 0x41, 0xf0,
                                        0xd8, 0xde, 0x89, 0x57
                                      };

        const char resultSize = sizeof(expected);

        uint8_t actual[resultSize];

        pbkdf2_hmac_sha1((const uint8_t*) password, strlen(password), (const uint8_t*) salt, strlen(salt), iterations, actual, resultSize);

        ok(memcmp(expected, actual, resultSize) == 0, "pbkdf-sha-1: P-'password' S-'Salt' I-2");
    }

    {
        const char *password =          "******";
        const char *salt =              "salt";
        const int iterations =          4096;
        const uint8_t expected[20] =  { 0x4b, 0x00, 0x79, 0x01,
                                        0xb7, 0x65, 0x48, 0x9a,
                                        0xbe, 0xad, 0x49, 0xd9,
                                        0x26, 0xf7, 0x21, 0xd0,
                                        0x65, 0xa4, 0x29, 0xc1
                                      };

        const char resultSize = sizeof(expected);

        uint8_t actual[resultSize];

        pbkdf2_hmac_sha1((const uint8_t*) password, strlen(password), (const uint8_t*) salt, strlen(salt), iterations, actual, resultSize);

        ok(memcmp(expected, actual, resultSize) == 0, "pbkdf-sha-1: P-'password' S-'Salt' I-4096");
    }

SKIP: {
        skip("16777216 iterations is too slow", 1, 0);

        const char *password =          "******";
        const char *salt =              "salt";
        const int iterations =          16777216;
        const uint8_t expected[20] =  { 0xee, 0xfe, 0x3d, 0x61,
                                        0xcd, 0x4d, 0xa4, 0xe4,
                                        0xe9, 0x94, 0x5b, 0x3d,
                                        0x6b, 0xa2, 0x15, 0x8c,
                                        0x26, 0x34, 0xe9, 0x84
                                      };

        const char resultSize = sizeof(expected);

        uint8_t actual[resultSize];

        pbkdf2_hmac_sha1((const uint8_t*) password, strlen(password), (const uint8_t*) salt, strlen(salt), iterations, actual, resultSize);

        ok(memcmp(expected, actual, resultSize) == 0, "pbkdf-sha-1: P-'password' S-'Salt' I-16777216");
    }


    {
        CFStringRef password    = CFStringCreateWithCString(NULL, "password", kCFStringEncodingUTF8);
        CFStringRef salt        = CFStringCreateWithCString(NULL, "salt", kCFStringEncodingUTF8);

        CFDataRef   passwordData    = CFStringCreateExternalRepresentation(NULL, password, kCFStringEncodingUTF8, 0);
        CFDataRef   saltData        = CFStringCreateExternalRepresentation(NULL, salt, kCFStringEncodingUTF8, 0);

        const int iterations =          1;
        const uint8_t expected[20] =  { 0x0c, 0x60, 0xc8, 0x0f,
                                        0x96, 0x1f, 0x0e, 0x71,
                                        0xf3, 0xa9, 0xb5, 0x24,
                                        0xaf, 0x60, 0x12, 0x06,
                                        0x2f, 0xe0, 0x37, 0xa6
                                      };

        const char resultSize = sizeof(expected);

        CFMutableDataRef resultData = CFDataCreateMutable(NULL, resultSize);
        CFDataIncreaseLength(resultData, resultSize);

        SecKeyFromPassphraseDataHMACSHA1(passwordData, saltData, iterations, resultData);

        ok(memcmp(expected, CFDataGetBytePtr(resultData), resultSize) == 0, "pbkdf-sha-1: P-'password' S-'Salt' I-1");

        CFReleaseSafe(password);
        CFReleaseSafe(salt);
        CFReleaseSafe(passwordData);
        CFReleaseSafe(saltData);
        CFReleaseSafe(resultData);
    }

    {
        CFStringRef password    = CFStringCreateWithCString(NULL, "password", kCFStringEncodingUTF8);
        CFStringRef salt        = CFStringCreateWithCString(NULL, "salt", kCFStringEncodingUTF8);

        CFDataRef   passwordData    = CFStringCreateExternalRepresentation(NULL, password, kCFStringEncodingUTF8, 0);
        CFDataRef   saltData        = CFStringCreateExternalRepresentation(NULL, salt, kCFStringEncodingUTF8, 0);

        const int iterations =          2;
        const uint8_t expected[20] =  { 0xea, 0x6c, 0x01, 0x4d,
                                        0xc7, 0x2d, 0x6f, 0x8c,
                                        0xcd, 0x1e, 0xd9, 0x2a,
                                        0xce, 0x1d, 0x41, 0xf0,
                                        0xd8, 0xde, 0x89, 0x57
                                      };

        const char resultSize = sizeof(expected);

        CFMutableDataRef resultData = CFDataCreateMutable(NULL, resultSize);
        CFDataIncreaseLength(resultData, resultSize);

        SecKeyFromPassphraseDataHMACSHA1(passwordData, saltData, iterations, resultData);

        ok(memcmp(expected, CFDataGetBytePtr(resultData), resultSize) == 0, "pbkdf-sha-1: P-'password' S-'Salt' I-1");

        CFReleaseSafe(password);
        CFReleaseSafe(salt);
        CFReleaseSafe(passwordData);
        CFReleaseSafe(saltData);
        CFReleaseSafe(resultData);
    }

    {
        CFStringRef password    = CFStringCreateWithCString(NULL, "password", kCFStringEncodingUTF8);
        CFStringRef salt        = CFStringCreateWithCString(NULL, "salt", kCFStringEncodingUTF8);

        CFDataRef   passwordData    = CFStringCreateExternalRepresentation(NULL, password, kCFStringEncodingUTF8, 0);
        CFDataRef   saltData        = CFStringCreateExternalRepresentation(NULL, salt, kCFStringEncodingUTF8, 0);

        const int iterations =          4096;
        const uint8_t expected[20] =  { 0x4b, 0x00, 0x79, 0x01,
                                        0xb7, 0x65, 0x48, 0x9a,
                                        0xbe, 0xad, 0x49, 0xd9,
                                        0x26, 0xf7, 0x21, 0xd0,
                                        0x65, 0xa4, 0x29, 0xc1
                                      };


        const char resultSize = sizeof(expected);

        CFMutableDataRef resultData = CFDataCreateMutable(NULL, resultSize);
        CFDataIncreaseLength(resultData, resultSize);

        SecKeyFromPassphraseDataHMACSHA1(passwordData, saltData, iterations, resultData);

        ok(memcmp(expected, CFDataGetBytePtr(resultData), resultSize) == 0, "pbkdf-sha-1: P-'password' S-'Salt' I-1");

        CFReleaseSafe(password);
        CFReleaseSafe(salt);
        CFReleaseSafe(passwordData);
        CFReleaseSafe(saltData);
        CFReleaseSafe(resultData);
    }

SKIP: {
        skip("16777216 iterations is too slow", 1, 0);

        CFStringRef password    = CFStringCreateWithCString(NULL, "password", kCFStringEncodingUTF8);
        CFStringRef salt        = CFStringCreateWithCString(NULL, "salt", kCFStringEncodingUTF8);

        CFDataRef   passwordData    = CFStringCreateExternalRepresentation(NULL, password, kCFStringEncodingUTF8, 0);
        CFDataRef   saltData        = CFStringCreateExternalRepresentation(NULL, salt, kCFStringEncodingUTF8, 0);

        const int iterations =          16777216;
        const uint8_t expected[20] =  { 0xee, 0xfe, 0x3d, 0x61,
                                        0xcd, 0x4d, 0xa4, 0xe4,
                                        0xe9, 0x94, 0x5b, 0x3d,
                                        0x6b, 0xa2, 0x15, 0x8c,
                                        0x26, 0x34, 0xe9, 0x84
                                      };


        const char resultSize = sizeof(expected);

        CFMutableDataRef resultData = CFDataCreateMutable(NULL, resultSize);
        CFDataIncreaseLength(resultData, resultSize);

        SecKeyFromPassphraseDataHMACSHA1(passwordData, saltData, iterations, resultData);

        ok(memcmp(expected, CFDataGetBytePtr(resultData), resultSize) == 0, "pbkdf-sha-1: P-'password' S-'Salt' I-1");

        CFReleaseSafe(password);
        CFReleaseSafe(salt);
        CFReleaseSafe(passwordData);
        CFReleaseSafe(saltData);
        CFReleaseSafe(resultData);
    }

}