Beispiel #1
0
/* Construct ECGroup from named parameters. */
ECGroup *
ECGroup_fromName(const ECCurveName name)
{
    ECGroup *group = NULL;
    ECCurveParams *params = NULL;
    mp_err res = MP_OKAY;

    params = EC_GetNamedCurveParams(name);
    if (params == NULL) {
        res = MP_UNDEF;
        goto CLEANUP;
    }

    /* construct actual group */
    group = ecgroup_fromNameAndHex(name, params);
    if (group == NULL) {
        res = MP_UNDEF;
        goto CLEANUP;
    }

CLEANUP:
    EC_FreeCurveParams(params);
    if (res != MP_OKAY) {
        ECGroup_free(group);
        return NULL;
    }
    return group;
}
Beispiel #2
0
/* Duplicates an ECCurveParams */
ECCurveParams *
ECCurveParams_dup(const ECCurveParams * params, int kmflag)
{
        int res = 1;
        ECCurveParams *ret = NULL;

#ifdef _KERNEL
        ret = (ECCurveParams *) kmem_zalloc(sizeof(ECCurveParams), kmflag);
#else
        CHECK(ret = (ECCurveParams *) calloc(1, sizeof(ECCurveParams)));
#endif
        if (params->text != NULL) {
#ifdef _KERNEL
                ret->text = kmem_alloc(strlen(params->text) + 1, kmflag);
                bcopy(params->text, ret->text, strlen(params->text) + 1);
#else
                CHECK(ret->text = strdup(params->text));
#endif
        }
        ret->field = params->field;
        ret->size = params->size;
        if (params->irr != NULL) {
#ifdef _KERNEL
                ret->irr = kmem_alloc(strlen(params->irr) + 1, kmflag);
                bcopy(params->irr, ret->irr, strlen(params->irr) + 1);
#else
                CHECK(ret->irr = strdup(params->irr));
#endif
        }
        if (params->curvea != NULL) {
#ifdef _KERNEL
                ret->curvea = kmem_alloc(strlen(params->curvea) + 1, kmflag);
                bcopy(params->curvea, ret->curvea, strlen(params->curvea) + 1);
#else
                CHECK(ret->curvea = strdup(params->curvea));
#endif
        }
        if (params->curveb != NULL) {
#ifdef _KERNEL
                ret->curveb = kmem_alloc(strlen(params->curveb) + 1, kmflag);
                bcopy(params->curveb, ret->curveb, strlen(params->curveb) + 1);
#else
                CHECK(ret->curveb = strdup(params->curveb));
#endif
        }
        if (params->genx != NULL) {
#ifdef _KERNEL
                ret->genx = kmem_alloc(strlen(params->genx) + 1, kmflag);
                bcopy(params->genx, ret->genx, strlen(params->genx) + 1);
#else
                CHECK(ret->genx = strdup(params->genx));
#endif
        }
        if (params->geny != NULL) {
#ifdef _KERNEL
                ret->geny = kmem_alloc(strlen(params->geny) + 1, kmflag);
                bcopy(params->geny, ret->geny, strlen(params->geny) + 1);
#else
                CHECK(ret->geny = strdup(params->geny));
#endif
        }
        if (params->order != NULL) {
#ifdef _KERNEL
                ret->order = kmem_alloc(strlen(params->order) + 1, kmflag);
                bcopy(params->order, ret->order, strlen(params->order) + 1);
#else
                CHECK(ret->order = strdup(params->order));
#endif
        }
        ret->cofactor = params->cofactor;

  CLEANUP:
        if (res != 1) {
                EC_FreeCurveParams(ret);
                return NULL;
        }
        return ret;
}
Beispiel #3
0
/* Performs tests of elliptic curve cryptography over prime fields If
 * tests fail, then it prints an error message, aborts, and returns an
 * error code. Otherwise, returns 0. */
int
main(int argv, char **argc)
{

    int ectestTime = 0;
    int ectestPrint = 0;
    int i;
    ECGroup *group = NULL;
    ECCurveParams *params = NULL;
    mp_err res;

    /* read command-line arguments */
    for (i = 1; i < argv; i++) {
        if ((strcasecmp(argc[i], "time") == 0) || (strcasecmp(argc[i], "-time") == 0) || (strcasecmp(argc[i], "--time") == 0)) {
            ectestTime = 1;
        } else if ((strcasecmp(argc[i], "print") == 0) || (strcasecmp(argc[i], "-print") == 0) || (strcasecmp(argc[i], "--print") == 0)) {
            ectestPrint = 1;
        } else {
            printUsage();
            return 0;
        }
    }

    /* generic arithmetic tests */
    ECTEST_GENERIC_GFP("SECP-160R1", ECCurve_SECG_PRIME_160R1);

    /* specific arithmetic tests */
    ECTEST_NAMED_GFP("NIST-P192", ECCurve_NIST_P192);
    ECTEST_NAMED_GFP("NIST-P224", ECCurve_NIST_P224);
    ECTEST_NAMED_GFP("NIST-P256", ECCurve_NIST_P256);
    ECTEST_NAMED_GFP("NIST-P384", ECCurve_NIST_P384);
    ECTEST_NAMED_GFP("NIST-P521", ECCurve_NIST_P521);
    ECTEST_NAMED_GFP("ANSI X9.62 PRIME192v1", ECCurve_X9_62_PRIME_192V1);
    ECTEST_NAMED_GFP("ANSI X9.62 PRIME192v2", ECCurve_X9_62_PRIME_192V2);
    ECTEST_NAMED_GFP("ANSI X9.62 PRIME192v3", ECCurve_X9_62_PRIME_192V3);
    ECTEST_NAMED_GFP("ANSI X9.62 PRIME239v1", ECCurve_X9_62_PRIME_239V1);
    ECTEST_NAMED_GFP("ANSI X9.62 PRIME239v2", ECCurve_X9_62_PRIME_239V2);
    ECTEST_NAMED_GFP("ANSI X9.62 PRIME239v3", ECCurve_X9_62_PRIME_239V3);
    ECTEST_NAMED_GFP("ANSI X9.62 PRIME256v1", ECCurve_X9_62_PRIME_256V1);
    ECTEST_NAMED_GFP("SECP-112R1", ECCurve_SECG_PRIME_112R1);
    ECTEST_NAMED_GFP("SECP-112R2", ECCurve_SECG_PRIME_112R2);
    ECTEST_NAMED_GFP("SECP-128R1", ECCurve_SECG_PRIME_128R1);
    ECTEST_NAMED_GFP("SECP-128R2", ECCurve_SECG_PRIME_128R2);
    ECTEST_NAMED_GFP("SECP-160K1", ECCurve_SECG_PRIME_160K1);
    ECTEST_NAMED_GFP("SECP-160R1", ECCurve_SECG_PRIME_160R1);
    ECTEST_NAMED_GFP("SECP-160R2", ECCurve_SECG_PRIME_160R2);
    ECTEST_NAMED_GFP("SECP-192K1", ECCurve_SECG_PRIME_192K1);
    ECTEST_NAMED_GFP("SECP-192R1", ECCurve_SECG_PRIME_192R1);
    ECTEST_NAMED_GFP("SECP-224K1", ECCurve_SECG_PRIME_224K1);
    ECTEST_NAMED_GFP("SECP-224R1", ECCurve_SECG_PRIME_224R1);
    ECTEST_NAMED_GFP("SECP-256K1", ECCurve_SECG_PRIME_256K1);
    ECTEST_NAMED_GFP("SECP-256R1", ECCurve_SECG_PRIME_256R1);
    ECTEST_NAMED_GFP("SECP-384R1", ECCurve_SECG_PRIME_384R1);
    ECTEST_NAMED_GFP("SECP-521R1", ECCurve_SECG_PRIME_521R1);
    ECTEST_NAMED_GFP("WTLS-6 (112)", ECCurve_WTLS_6);
    ECTEST_NAMED_GFP("WTLS-7 (160)", ECCurve_WTLS_7);
    ECTEST_NAMED_GFP("WTLS-8 (112)", ECCurve_WTLS_8);
    ECTEST_NAMED_GFP("WTLS-9 (160)", ECCurve_WTLS_9);
    ECTEST_NAMED_GFP("WTLS-12 (224)", ECCurve_WTLS_12);
    ECTEST_NAMED_GFP("Curve25519", ECCurve25519);

CLEANUP:
    EC_FreeCurveParams(params);
    ECGroup_free(group);
    if (res != MP_OKAY) {
        printf("Error: exiting with error value %i\n", res);
    }
    return res;
}
Beispiel #4
0
/* Performs tests of elliptic curve cryptography over binary polynomial
 * fields. If tests fail, then it prints an error message, aborts, and
 * returns an error code. Otherwise, returns 0. */
int
main(int argv, char **argc)
{

    int ectestTime = 0;
    int ectestPrint = 0;
    int i;
    ECGroup *group = NULL;
    ECCurveParams *params = NULL;
    mp_err res;

    /* read command-line arguments */
    for (i = 1; i < argv; i++) {
        if ((strcasecmp(argc[i], "time") == 0) || (strcasecmp(argc[i], "-time") == 0) || (strcasecmp(argc[i], "--time") == 0)) {
            ectestTime = 1;
        } else if ((strcasecmp(argc[i], "print") == 0) || (strcasecmp(argc[i], "-print") == 0) || (strcasecmp(argc[i], "--print") == 0)) {
            ectestPrint = 1;
        } else {
            printUsage();
            return 0;
        }
    }

    /* generic arithmetic tests */
    ECTEST_GENERIC_GF2M("SECT-131R1", ECCurve_SECG_CHAR2_131R1);

    /* specific arithmetic tests */
    ECTEST_NAMED_GF2M("NIST-K163", ECCurve_NIST_K163);
    ECTEST_NAMED_GF2M("NIST-B163", ECCurve_NIST_B163);
    ECTEST_NAMED_GF2M("NIST-K233", ECCurve_NIST_K233);
    ECTEST_NAMED_GF2M("NIST-B233", ECCurve_NIST_B233);
    ECTEST_NAMED_GF2M("NIST-K283", ECCurve_NIST_K283);
    ECTEST_NAMED_GF2M("NIST-B283", ECCurve_NIST_B283);
    ECTEST_NAMED_GF2M("NIST-K409", ECCurve_NIST_K409);
    ECTEST_NAMED_GF2M("NIST-B409", ECCurve_NIST_B409);
    ECTEST_NAMED_GF2M("NIST-K571", ECCurve_NIST_K571);
    ECTEST_NAMED_GF2M("NIST-B571", ECCurve_NIST_B571);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2PNB163V1", ECCurve_X9_62_CHAR2_PNB163V1);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2PNB163V2", ECCurve_X9_62_CHAR2_PNB163V2);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2PNB163V3", ECCurve_X9_62_CHAR2_PNB163V3);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2PNB176V1", ECCurve_X9_62_CHAR2_PNB176V1);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2TNB191V1", ECCurve_X9_62_CHAR2_TNB191V1);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2TNB191V2", ECCurve_X9_62_CHAR2_TNB191V2);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2TNB191V3", ECCurve_X9_62_CHAR2_TNB191V3);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2PNB208W1", ECCurve_X9_62_CHAR2_PNB208W1);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2TNB239V1", ECCurve_X9_62_CHAR2_TNB239V1);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2TNB239V2", ECCurve_X9_62_CHAR2_TNB239V2);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2TNB239V3", ECCurve_X9_62_CHAR2_TNB239V3);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2PNB272W1", ECCurve_X9_62_CHAR2_PNB272W1);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2PNB304W1", ECCurve_X9_62_CHAR2_PNB304W1);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2TNB359V1", ECCurve_X9_62_CHAR2_TNB359V1);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2PNB368W1", ECCurve_X9_62_CHAR2_PNB368W1);
    ECTEST_NAMED_GF2M("ANSI X9.62 C2TNB431R1", ECCurve_X9_62_CHAR2_TNB431R1);
    ECTEST_NAMED_GF2M("SECT-113R1", ECCurve_SECG_CHAR2_113R1);
    ECTEST_NAMED_GF2M("SECT-113R2", ECCurve_SECG_CHAR2_113R2);
    ECTEST_NAMED_GF2M("SECT-131R1", ECCurve_SECG_CHAR2_131R1);
    ECTEST_NAMED_GF2M("SECT-131R2", ECCurve_SECG_CHAR2_131R2);
    ECTEST_NAMED_GF2M("SECT-163K1", ECCurve_SECG_CHAR2_163K1);
    ECTEST_NAMED_GF2M("SECT-163R1", ECCurve_SECG_CHAR2_163R1);
    ECTEST_NAMED_GF2M("SECT-163R2", ECCurve_SECG_CHAR2_163R2);
    ECTEST_NAMED_GF2M("SECT-193R1", ECCurve_SECG_CHAR2_193R1);
    ECTEST_NAMED_GF2M("SECT-193R2", ECCurve_SECG_CHAR2_193R2);
    ECTEST_NAMED_GF2M("SECT-233K1", ECCurve_SECG_CHAR2_233K1);
    ECTEST_NAMED_GF2M("SECT-233R1", ECCurve_SECG_CHAR2_233R1);
    ECTEST_NAMED_GF2M("SECT-239K1", ECCurve_SECG_CHAR2_239K1);
    ECTEST_NAMED_GF2M("SECT-283K1", ECCurve_SECG_CHAR2_283K1);
    ECTEST_NAMED_GF2M("SECT-283R1", ECCurve_SECG_CHAR2_283R1);
    ECTEST_NAMED_GF2M("SECT-409K1", ECCurve_SECG_CHAR2_409K1);
    ECTEST_NAMED_GF2M("SECT-409R1", ECCurve_SECG_CHAR2_409R1);
    ECTEST_NAMED_GF2M("SECT-571K1", ECCurve_SECG_CHAR2_571K1);
    ECTEST_NAMED_GF2M("SECT-571R1", ECCurve_SECG_CHAR2_571R1);
    ECTEST_NAMED_GF2M("WTLS-1 (113)", ECCurve_WTLS_1);
    ECTEST_NAMED_GF2M("WTLS-3 (163)", ECCurve_WTLS_3);
    ECTEST_NAMED_GF2M("WTLS-4 (113)", ECCurve_WTLS_4);
    ECTEST_NAMED_GF2M("WTLS-5 (163)", ECCurve_WTLS_5);
    ECTEST_NAMED_GF2M("WTLS-10 (233)", ECCurve_WTLS_10);
    ECTEST_NAMED_GF2M("WTLS-11 (233)", ECCurve_WTLS_11);

CLEANUP:
    EC_FreeCurveParams(params);
    ECGroup_free(group);
    if (res != MP_OKAY) {
        printf("Error: exiting with error value %i\n", res);
    }
    return res;
}