int qcrypto_hmac_bytesv(QCryptoHmac *hmac, const struct iovec *iov, size_t niov, uint8_t **result, size_t *resultlen, Error **errp) { QCryptoHmacGcrypt *ctx; gcry_error_t err; uint32_t ret; int i; ctx = hmac->opaque; for (i = 0; i < niov; i++) { gcry_mac_write(ctx->handle, iov[i].iov_base, iov[i].iov_len); } ret = gcry_mac_get_algo_maclen(qcrypto_hmac_alg_map[hmac->alg]); if (ret <= 0) { error_setg(errp, "Unable to get hmac length: %s", gcry_strerror(ret)); return -1; } if (*resultlen == 0) { *resultlen = ret; *result = g_new0(uint8_t, *resultlen); } else if (*resultlen != ret) { error_setg(errp, "Result buffer size %zu is smaller than hmac %d", *resultlen, ret); return -1; } err = gcry_mac_read(ctx->handle, *result, resultlen); if (err != 0) { error_setg(errp, "Cannot get result: %s", gcry_strerror(err)); return -1; } err = gcry_mac_reset(ctx->handle); if (err != 0) { error_setg(errp, "Cannot reset hmac context: %s", gcry_strerror(err)); return -1; } return 0; }
int main(int argc, char *argv[]) { if(argc != 2){ printf("Missing input file Parameter.\nUsage: ./cryptogator <input_file_name>\n"); return -1; } gcry_check_version(NULL); char fileName[FILE_NAME_LENGTH]; strcpy(fileName, argv[1]); printf("\n*******************AES128**************************\n"); int algo = GCRY_CIPHER_AES128; int keyLength = gcry_cipher_get_algo_keylen(algo); processSymmetricCrypto(algo, keyLength, fileName); printReport(1); printf("\n*******************AES256**************************\n"); algo = GCRY_CIPHER_AES256; keyLength = gcry_cipher_get_algo_keylen(algo); processSymmetricCrypto(algo, keyLength, fileName); printReport(1); printf("\n*******************HMAC MD5**************************\n"); algo = GCRY_MAC_HMAC_MD5; keyLength = gcry_mac_get_algo_maclen(algo); processHashFunction(fileName, algo, keyLength); printReport(0); printf("\n*******************HMAC SHA1**************************\n"); algo = GCRY_MAC_HMAC_SHA1; keyLength = gcry_mac_get_algo_maclen(algo); processHashFunction(fileName, algo, keyLength); printReport(0); printf("\n*******************HMAC SHA256**************************\n"); algo = GCRY_MAC_HMAC_SHA256; keyLength = gcry_mac_get_algo_maclen(algo); processHashFunction(fileName, algo, keyLength); printReport(0); printf("\n*******************Digital Signature**************************\n"); processDigitalSignature(fileName); printf("\n*******************RSA1024**************************\n"); processAsymmetricCrypto(fileName, 1024, key1024); printReport(1); printf("\n*******************RSA4096**************************\n"); processAsymmetricCrypto(fileName, 4096, key4096); printReport(1); /*char *data = "This is an encryption test."; gcry_sexp_t pub_key, plainText, cipherText, decryptedText; gcry_sexp_sscan(&pub_key, NULL, key, strlen(key)); gcry_sexp_build (&plainText, NULL, "(data (flags raw) (value %b))", strlen(data), data); int response = gcry_pk_encrypt (&cipherText, plainText, pub_key); printf("%s\n", gcry_sexp_nth_string(gcry_sexp_find_token(cipherText, "a", 1), 1)); gcry_pk_decrypt(&decryptedText, cipherText, pub_key); printf("%s\n", gcry_sexp_nth_string(decryptedText, 0)); printf("done"); gcry_sexp_t rsa_parms; gcry_sexp_t rsa_keypair; printf("generating key\n"); time_t start = time(NULL); gcry_error_t err = gcry_sexp_build(&rsa_parms, NULL, "(genkey (rsa (nbits 4:4096)))"); err = gcry_pk_genkey(&rsa_keypair, rsa_parms); size_t keyLength = get_keypair_size(4096); char* rsaKeyExpression = (char*) calloc(sizeof(char), keyLength); gcry_sexp_sprint(rsa_keypair, GCRYSEXP_FMT_ADVANCED, rsaKeyExpression, keyLength); printf("%s\n", rsaKeyExpression); time_t end = time(NULL); double encTime = (double) ((end - start)); printf("Time: %.2f\n", encTime); printf("generated key\n"); */ }