CommonDHtest.c   [plain text]


#include <Availability.h>
#include "capabilities.h"
#include "testmore.h"
#include "testbyteBuffer.h"

#if (CCDH == 0)
entryPoint(CommonDH,"Diffie-Hellman Key Agreement")
#else

#include "CommonDH.h"
static int kTestTestCount = 2;

int CommonDH(int argc, char *const *argv) {
    CCDHRef dh1, dh2;

    plan_tests(kTestTestCount);
    
    
    dh1 = CCDHCreate(kCCDHRFC2409Group2);
    ok(dh1 == NULL, "kCCDHRFC2409Group2 isn't implemented in corecrypto");

    dh1 = CCDHCreate(kCCDHRFC3526Group5);
    ok(dh1 != NULL, "got a DH ref");
    
    dh2 = CCDHCreate(kCCDHRFC3526Group5);
    ok(dh2 != NULL, "got a DH ref");
    
    diag("CCDHRefs Created\n");

    uint8_t pubkey1[4096], pubkey2[4096];
    size_t len1 = 4096, len2 = 4096;
    int ret1 = CCDHGenerateKey(dh1, pubkey1, &len1);
    int ret2 = CCDHGenerateKey(dh2, pubkey2, &len2);

    ok(ret1 != -1 && ret2 != -1, "pubkeys generated");

    diag("Pubkeys Created\n");
    
    uint8_t sharedkey1[4096], sharedkey2[4096];
    size_t slen1 = 4096, slen2 = 4096;

    int sret1 = CCDHComputeKey(sharedkey1, &slen1, pubkey2, len2, dh1);
    int sret2 = CCDHComputeKey(sharedkey2, &slen2, pubkey1, len1, dh2);
    
    ok(sret1 != -1 && sret2 != -1, "shared keys generated");

    ok(slen1 == slen2, "shared key lengths are equal");
    
    ok(memcmp(sharedkey1, sharedkey2, slen1) == 0, "shared keys are equal");
    
    
    
    CCDHRelease(dh1);
    ok(1, "Didn't crash");


    return 0;
}

#endif