Example #1
0
PKIError GenerateCAKeyPair (ByteArray *caPrivateKey, ByteArray *caPublicKey)
{
    FUNCTION_INIT();

    CHECK_NULL(caPrivateKey, ISSUER_NULL_PASSED);
    CHECK_NULL(caPrivateKey->data, ISSUER_NULL_PASSED);
    CHECK_NULL(caPublicKey, ISSUER_NULL_PASSED);
    CHECK_NULL(caPublicKey->data, ISSUER_NULL_PASSED);

    CHECK_COND(uECC_make_key(caPublicKey->data, caPrivateKey->data), ISSUER_MAKE_KEY_ERROR);
    caPublicKey->len = PUBLIC_KEY_SIZE;
    caPrivateKey->len = PRIVATE_KEY_SIZE;

    CHECK_CALL(InitCKMInfo);
    CHECK_CALL(SetCAPrivateKey, caPrivateKey);
    CHECK_CALL(SetCAPublicKey, caPublicKey);
    CHECK_CALL(SaveCKMInfo);
    FUNCTION_CLEAR();
}
static PKIError InitCA()
{
    FUNCTION_INIT();

    if (IsCKMInfoFileExists())
    {
        CHECK_CALL(InitCKMInfo);
    }
    else
    {
        ByteArray rootName  = BYTE_ARRAY_INITIALIZER;
        ByteArray CAPubKey  = BYTE_ARRAY_INITIALIZER;
        ByteArray CAPrivKey = BYTE_ARRAY_INITIALIZER;
        ByteArray rootCert  = BYTE_ARRAY_INITIALIZER;


        uint8_t rootCertData[ISSUER_MAX_CERT_SIZE];
        uint8_t CAPubKeyData[PUBLIC_KEY_SIZE];
        uint8_t CAPrivKeyData[PRIVATE_KEY_SIZE];
        const char rootNameStr[] = "Sample_Root";

        CAPubKey.data  = CAPubKeyData;
        CAPubKey.len   = PUBLIC_KEY_SIZE;
        CAPrivKey.data = CAPrivKeyData;
        CAPrivKey.len  = PRIVATE_KEY_SIZE;
        rootCert.data  = rootCertData;
        rootCert.len   = ISSUER_MAX_CERT_SIZE;
        rootName.data  = (uint8_t *)rootNameStr;
        rootName.len   = strlen(rootNameStr);

        CHECK_CALL(SetRootName, rootName);
        CHECK_CALL(GenerateCAKeyPair, &CAPrivKey, &CAPubKey);
        CHECK_CALL(SetSerialNumber, 1);
        CHECK_CALL(CKMIssueRootCertificate, NULL, NULL, &rootCert);
        CHECK_CALL(SetCACertificate, &rootCert);
    }

    FUNCTION_CLEAR();
}