1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include <tomcrypt_test.h> 2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MKAT 4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint katja_test(void) 6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned char in[1024], out[1024], tmp[1024]; 8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_key key, privKey, pubKey; 9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int hash_idx, prng_idx, stat, stat2, size; 10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long kat_msgsize, len, len2, cnt; 11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project static unsigned char lparam[] = { 0x01, 0x02, 0x03, 0x04 }; 12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project hash_idx = find_hash("sha1"); 14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project prng_idx = find_prng("yarrow"); 15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (hash_idx == -1 || prng_idx == -1) { 16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "katja_test requires SHA1 and yarrow"); 17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 1; 18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectfor (size = 1024; size <= 2048; size += 256) { 21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* make 10 random key */ 23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (cnt = 0; cnt < 10; cnt++) { 24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_make_key(&yarrow_prng, prng_idx, size/8, &key)); 25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (mp_count_bits(key.N) < size - 7) { 26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "katja_%d key modulus has %d bits\n", size, mp_count_bits(key.N)); 27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectlen = mp_unsigned_bin_size(key.N); 29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_to_unsigned_bin(key.N, tmp); 30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "N == \n"); 31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectfor (cnt = 0; cnt < len; ) { 32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "%02x ", tmp[cnt]); 33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (!(++cnt & 15)) fprintf(stderr, "\n"); 34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectlen = mp_unsigned_bin_size(key.p); 37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_to_unsigned_bin(key.p, tmp); 38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "p == \n"); 39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectfor (cnt = 0; cnt < len; ) { 40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "%02x ", tmp[cnt]); 41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (!(++cnt & 15)) fprintf(stderr, "\n"); 42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectlen = mp_unsigned_bin_size(key.q); 45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectmp_to_unsigned_bin(key.q, tmp); 46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nq == \n"); 47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectfor (cnt = 0; cnt < len; ) { 48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "%02x ", tmp[cnt]); 49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (!(++cnt & 15)) fprintf(stderr, "\n"); 50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n"); 52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 1; 55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (cnt != 9) { 57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&key); 58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* encrypt the key (without lparam) */ 61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (cnt = 0; cnt < 4; cnt++) { 62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (kat_msgsize = 1; kat_msgsize <= 42; kat_msgsize++) { 63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* make a random key/msg */ 64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project yarrow_read(in, kat_msgsize, &yarrow_prng); 65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project len = sizeof(out); 67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project len2 = kat_msgsize; 68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_encrypt_key(in, kat_msgsize, out, &len, NULL, 0, &yarrow_prng, prng_idx, hash_idx, &key)); 70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* change a byte */ 71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project out[8] ^= 1; 72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_decrypt_key(out, len, tmp, &len2, NULL, 0, hash_idx, &stat2, &key)); 73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* change a byte back */ 74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project out[8] ^= 1; 75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (len2 != kat_msgsize) { 76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nkatja_decrypt_key mismatch len %lu (first decrypt)", len2); 77f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 1; 78f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 79f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 80f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project len2 = kat_msgsize; 81f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_decrypt_key(out, len, tmp, &len2, NULL, 0, hash_idx, &stat, &key)); 82f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (!(stat == 1 && stat2 == 0)) { 83f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "katja_decrypt_key failed"); 84f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 1; 85f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 86f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (len2 != kat_msgsize || memcmp(tmp, in, kat_msgsize)) { 87f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long x; 88f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nkatja_decrypt_key mismatch, len %lu (second decrypt)\n", len2); 89f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "Original contents: \n"); 90f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < kat_msgsize; ) { 91f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "%02x ", in[x]); 92f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (!(++x % 16)) { 93f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n"); 94f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 95f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 96f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n"); 97f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "Output contents: \n"); 98f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (x = 0; x < kat_msgsize; ) { 99f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "%02x ", out[x]); 100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (!(++x % 16)) { 101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n"); 102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\n"); 105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 1; 106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* encrypt the key (with lparam) */ 111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project for (kat_msgsize = 1; kat_msgsize <= 42; kat_msgsize++) { 112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project len = sizeof(out); 113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project len2 = kat_msgsize; 114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_encrypt_key(in, kat_msgsize, out, &len, lparam, sizeof(lparam), &yarrow_prng, prng_idx, hash_idx, &key)); 115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* change a byte */ 116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project out[8] ^= 1; 117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_decrypt_key(out, len, tmp, &len2, lparam, sizeof(lparam), hash_idx, &stat2, &key)); 118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (len2 != kat_msgsize) { 119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "\nkatja_decrypt_key mismatch len %lu (first decrypt)", len2); 120f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 1; 121f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 122f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* change a byte back */ 123f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project out[8] ^= 1; 124f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 125f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project len2 = kat_msgsize; 126f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_decrypt_key(out, len, tmp, &len2, lparam, sizeof(lparam), hash_idx, &stat, &key)); 127f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (!(stat == 1 && stat2 == 0)) { 128f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "katja_decrypt_key failed"); 129f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 1; 130f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 131f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (len2 != kat_msgsize || memcmp(tmp, in, kat_msgsize)) { 132f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "katja_decrypt_key mismatch len %lu", len2); 133f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 1; 134f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 135f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 136f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 137f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if 0 138f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 139f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* sign a message (unsalted, lower cholestorol and Atkins approved) now */ 140f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project len = sizeof(out); 141f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_sign_hash(in, 20, out, &len, &yarrow_prng, prng_idx, hash_idx, 0, &key)); 142f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 143f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* export key and import as both private and public */ 144f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project len2 = sizeof(tmp); 145f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_export(tmp, &len2, PK_PRIVATE, &key)); 146f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_import(tmp, len2, &privKey)); 147f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project len2 = sizeof(tmp); 148f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_export(tmp, &len2, PK_PUBLIC, &key)); 149f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_import(tmp, len2, &pubKey)); 150f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 151f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* verify with original */ 152f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat, &key)); 153f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* change a byte */ 154f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project in[0] ^= 1; 155f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat2, &key)); 156f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 157f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (!(stat == 1 && stat2 == 0)) { 158f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "katja_verify_hash (unsalted, origKey) failed, %d, %d", stat, stat2); 159f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&key); 160f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&pubKey); 161f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&privKey); 162f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 1; 163f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 164f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 165f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* verify with privKey */ 166f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* change a byte */ 167f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project in[0] ^= 1; 168f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat, &privKey)); 169f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* change a byte */ 170f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project in[0] ^= 1; 171f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat2, &privKey)); 172f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 173f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (!(stat == 1 && stat2 == 0)) { 174f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "katja_verify_hash (unsalted, privKey) failed, %d, %d", stat, stat2); 175f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&key); 176f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&pubKey); 177f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&privKey); 178f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 1; 179f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 180f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 181f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* verify with pubKey */ 182f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* change a byte */ 183f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project in[0] ^= 1; 184f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat, &pubKey)); 185f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* change a byte */ 186f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project in[0] ^= 1; 187f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat2, &pubKey)); 188f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 189f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (!(stat == 1 && stat2 == 0)) { 190f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "katja_verify_hash (unsalted, pubkey) failed, %d, %d", stat, stat2); 191f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&key); 192f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&pubKey); 193f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&privKey); 194f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 1; 195f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 196f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 197f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* sign a message (salted) now (use privKey to make, pubKey to verify) */ 198f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project len = sizeof(out); 199f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_sign_hash(in, 20, out, &len, &yarrow_prng, prng_idx, hash_idx, 8, &privKey)); 200f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_verify_hash(out, len, in, 20, hash_idx, 8, &stat, &pubKey)); 201f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* change a byte */ 202f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project in[0] ^= 1; 203f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project DO(katja_verify_hash(out, len, in, 20, hash_idx, 8, &stat2, &pubKey)); 204f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 205f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (!(stat == 1 && stat2 == 0)) { 206f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "katja_verify_hash (salted) failed, %d, %d", stat, stat2); 207f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&key); 208f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&pubKey); 209f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&privKey); 210f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 1; 211f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 212f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 213f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 214f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&key); 215f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&pubKey); 216f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project katja_free(&privKey); 217f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 218f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 219f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* free the key and return */ 220f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 0; 221f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 222f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 223f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 224f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 225f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint katja_test(void) 226f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 227f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project fprintf(stderr, "NOP"); 228f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return 0; 229f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 230f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 231f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 232