Annotation of embedaddon/axTLS/ssl/test/perf_bigint.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (c) 2007, Cameron Rich
! 3: *
! 4: * All rights reserved.
! 5: *
! 6: * Redistribution and use in source and binary forms, with or without
! 7: * modification, are permitted provided that the following conditions are met:
! 8: *
! 9: * * Redistributions of source code must retain the above copyright notice,
! 10: * this list of conditions and the following disclaimer.
! 11: * * Redistributions in binary form must reproduce the above copyright notice,
! 12: * this list of conditions and the following disclaimer in the documentation
! 13: * and/or other materials provided with the distribution.
! 14: * * Neither the name of the axTLS project nor the names of its contributors
! 15: * may be used to endorse or promote products derived from this software
! 16: * without specific prior written permission.
! 17: *
! 18: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
! 19: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
! 20: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
! 21: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
! 22: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
! 23: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
! 24: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
! 25: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
! 26: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
! 27: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
! 28: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
! 29: */
! 30:
! 31: /**
! 32: * Some performance testing of bigint.
! 33: */
! 34:
! 35: #include <stdio.h>
! 36: #include <stdlib.h>
! 37: #include <string.h>
! 38:
! 39: #include "os_port.h"
! 40: #include "ssl.h"
! 41:
! 42: /**************************************************************************
! 43: * BIGINT tests
! 44: *
! 45: **************************************************************************/
! 46:
! 47: int main(int argc, char *argv[])
! 48: {
! 49: #ifdef CONFIG_SSL_CERT_VERIFICATION
! 50: RSA_CTX *rsa_ctx = NULL;
! 51: BI_CTX *ctx;
! 52: bigint *bi_data, *bi_res;
! 53: float diff;
! 54: int res = 1;
! 55: struct timeval tv_old, tv_new;
! 56: const char *plaintext;
! 57: uint8_t compare[MAX_KEY_BYTE_SIZE];
! 58: int i, max_biggie = 10; /* really crank performance */
! 59: int len;
! 60: uint8_t *buf;
! 61:
! 62: /**
! 63: * 512 bit key
! 64: */
! 65: plaintext = /* 64 byte number */
! 66: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^";
! 67:
! 68: len = get_file("../ssl/test/axTLS.key_512", &buf);
! 69: asn1_get_private_key(buf, len, &rsa_ctx);
! 70: ctx = rsa_ctx->bi_ctx;
! 71: bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext));
! 72: bi_res = RSA_public(rsa_ctx, bi_data);
! 73: bi_data = bi_res; /* reuse again */
! 74:
! 75: gettimeofday(&tv_old, NULL);
! 76: for (i = 0; i < max_biggie; i++)
! 77: {
! 78: bi_res = RSA_private(rsa_ctx, bi_copy(bi_data));
! 79: if (i < max_biggie-1)
! 80: {
! 81: bi_free(ctx, bi_res);
! 82: }
! 83: }
! 84:
! 85: gettimeofday(&tv_new, NULL);
! 86: bi_free(ctx, bi_data);
! 87:
! 88: diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 +
! 89: (tv_new.tv_usec-tv_old.tv_usec)/1000;
! 90: printf("512 bit decrypt time: %.2fms\n", diff/max_biggie);
! 91: TTY_FLUSH();
! 92: bi_export(ctx, bi_res, compare, 64);
! 93: RSA_free(rsa_ctx);
! 94: free(buf);
! 95: if (memcmp(plaintext, compare, 64) != 0)
! 96: goto end;
! 97:
! 98: /**
! 99: * 1024 bit key
! 100: */
! 101: plaintext = /* 128 byte number */
! 102: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
! 103: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^";
! 104:
! 105: len = get_file("../ssl/test/axTLS.key_1024", &buf);
! 106: rsa_ctx = NULL;
! 107: asn1_get_private_key(buf, len, &rsa_ctx);
! 108: ctx = rsa_ctx->bi_ctx;
! 109: bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext));
! 110: bi_res = RSA_public(rsa_ctx, bi_data);
! 111: bi_data = bi_res; /* reuse again */
! 112:
! 113: gettimeofday(&tv_old, NULL);
! 114: for (i = 0; i < max_biggie; i++)
! 115: {
! 116: bi_res = RSA_private(rsa_ctx, bi_copy(bi_data));
! 117: if (i < max_biggie-1)
! 118: {
! 119: bi_free(ctx, bi_res);
! 120: }
! 121: }
! 122:
! 123: gettimeofday(&tv_new, NULL);
! 124: bi_free(ctx, bi_data);
! 125:
! 126: diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 +
! 127: (tv_new.tv_usec-tv_old.tv_usec)/1000;
! 128: printf("1024 bit decrypt time: %.2fms\n", diff/max_biggie);
! 129: TTY_FLUSH();
! 130: bi_export(ctx, bi_res, compare, 128);
! 131: RSA_free(rsa_ctx);
! 132: free(buf);
! 133: if (memcmp(plaintext, compare, 128) != 0)
! 134: goto end;
! 135:
! 136: /**
! 137: * 2048 bit key
! 138: */
! 139: plaintext = /* 256 byte number */
! 140: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
! 141: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
! 142: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
! 143: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^";
! 144:
! 145: len = get_file("../ssl/test/axTLS.key_2048", &buf);
! 146: rsa_ctx = NULL;
! 147: asn1_get_private_key(buf, len, &rsa_ctx);
! 148: ctx = rsa_ctx->bi_ctx;
! 149: bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext));
! 150: bi_res = RSA_public(rsa_ctx, bi_data);
! 151: bi_data = bi_res; /* reuse again */
! 152:
! 153: gettimeofday(&tv_old, NULL);
! 154: for (i = 0; i < max_biggie; i++)
! 155: {
! 156: bi_res = RSA_private(rsa_ctx, bi_copy(bi_data));
! 157: if (i < max_biggie-1)
! 158: {
! 159: bi_free(ctx, bi_res);
! 160: }
! 161: }
! 162: gettimeofday(&tv_new, NULL);
! 163: bi_free(ctx, bi_data);
! 164:
! 165: diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 +
! 166: (tv_new.tv_usec-tv_old.tv_usec)/1000;
! 167: printf("2048 bit decrypt time: %.2fms\n", diff/max_biggie);
! 168: TTY_FLUSH();
! 169: bi_export(ctx, bi_res, compare, 256);
! 170: RSA_free(rsa_ctx);
! 171: free(buf);
! 172: if (memcmp(plaintext, compare, 256) != 0)
! 173: goto end;
! 174:
! 175: /**
! 176: * 4096 bit key
! 177: */
! 178: plaintext = /* 512 byte number */
! 179: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
! 180: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
! 181: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
! 182: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
! 183: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
! 184: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
! 185: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^"
! 186: "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*^";
! 187:
! 188: len = get_file("../ssl/test/axTLS.key_4096", &buf);
! 189: rsa_ctx = NULL;
! 190: asn1_get_private_key(buf, len, &rsa_ctx);
! 191: ctx = rsa_ctx->bi_ctx;
! 192: bi_data = bi_import(ctx, (uint8_t *)plaintext, strlen(plaintext));
! 193: gettimeofday(&tv_old, NULL);
! 194: bi_res = RSA_public(rsa_ctx, bi_data);
! 195: gettimeofday(&tv_new, NULL);
! 196: diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 +
! 197: (tv_new.tv_usec-tv_old.tv_usec)/1000;
! 198: printf("4096 bit encrypt time: %.2fms\n", diff);
! 199: TTY_FLUSH();
! 200: bi_data = bi_res; /* reuse again */
! 201:
! 202: gettimeofday(&tv_old, NULL);
! 203: for (i = 0; i < max_biggie; i++)
! 204: {
! 205: bi_res = RSA_private(rsa_ctx, bi_copy(bi_data));
! 206: if (i < max_biggie-1)
! 207: {
! 208: bi_free(ctx, bi_res);
! 209: }
! 210: }
! 211:
! 212: gettimeofday(&tv_new, NULL);
! 213: bi_free(ctx, bi_data);
! 214:
! 215: diff = (tv_new.tv_sec-tv_old.tv_sec)*1000 +
! 216: (tv_new.tv_usec-tv_old.tv_usec)/1000;
! 217: printf("4096 bit decrypt time: %.2fms\n", diff/max_biggie);
! 218: TTY_FLUSH();
! 219: bi_export(ctx, bi_res, compare, 512);
! 220: RSA_free(rsa_ctx);
! 221: free(buf);
! 222: if (memcmp(plaintext, compare, 512) != 0)
! 223: goto end;
! 224:
! 225: /* done */
! 226: printf("Bigint performance testing complete\n");
! 227: res = 0;
! 228:
! 229: end:
! 230: return res;
! 231: #else
! 232: return 0;
! 233: #endif
! 234: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>