14969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin/* Copyright (c) 2016, Google Inc. 24969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * 34969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * Permission to use, copy, modify, and/or distribute this software for any 44969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * purpose with or without fee is hereby granted, provided that the above 54969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * copyright notice and this permission notice appear in all copies. 64969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * 74969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 84969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 94969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 104969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 114969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 124969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 134969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ 144969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 154969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin#include <openssl/evp.h> 164969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 174969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 184969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjaminvoid EVP_CIPHER_do_all_sorted(void (*callback)(const EVP_CIPHER *cipher, 194969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin const char *name, 204969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin const char *unused, void *arg), 214969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin void *arg) { 224969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_128_cbc(), "AES-128-CBC", NULL, arg); 234969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_128_ctr(), "AES-128-CTR", NULL, arg); 244969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_128_ecb(), "AES-128-ECB", NULL, arg); 254969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_128_ofb(), "AES-128-OFB", NULL, arg); 264969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_256_cbc(), "AES-256-CBC", NULL, arg); 274969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_256_ctr(), "AES-256-CTR", NULL, arg); 284969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_256_ecb(), "AES-256-ECB", NULL, arg); 294969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_256_ofb(), "AES-256-OFB", NULL, arg); 304969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_256_xts(), "AES-256-XTS", NULL, arg); 314969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_des_cbc(), "DES-CBC", NULL, arg); 324969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_des_ecb(), "DES-ECB", NULL, arg); 334969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_des_ede(), "DES-EDE", NULL, arg); 344969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_des_ede_cbc(), "DES-EDE-CBC", NULL, arg); 354969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_des_ede3_cbc(), "DES-EDE3-CBC", NULL, arg); 364969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_rc2_cbc(), "RC2-CBC", NULL, arg); 374969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_rc4(), "RC4", NULL, arg); 384969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 394969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin /* OpenSSL returns everything twice, the second time in lower case. */ 404969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_128_cbc(), "aes-128-cbc", NULL, arg); 414969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_128_ctr(), "aes-128-ctr", NULL, arg); 424969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_128_ecb(), "aes-128-ecb", NULL, arg); 434969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_128_ofb(), "aes-128-ofb", NULL, arg); 444969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_256_cbc(), "aes-256-cbc", NULL, arg); 454969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_256_ctr(), "aes-256-ctr", NULL, arg); 464969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_256_ecb(), "aes-256-ecb", NULL, arg); 474969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_256_ofb(), "aes-256-ofb", NULL, arg); 484969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_aes_256_xts(), "aes-256-xts", NULL, arg); 494969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_des_cbc(), "des-cbc", NULL, arg); 504969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_des_ecb(), "des-ecb", NULL, arg); 514969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_des_ede(), "des-ede", NULL, arg); 524969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_des_ede_cbc(), "des-ede-cbc", NULL, arg); 534969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_des_ede3_cbc(), "des-ede3-cbc", NULL, arg); 544969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_rc2_cbc(), "rc2-cbc", NULL, arg); 554969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_rc4(), "rc4", NULL, arg); 564969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin} 574969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 584969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjaminvoid EVP_MD_do_all_sorted(void (*callback)(const EVP_MD *cipher, 594969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin const char *name, const char *unused, 604969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin void *arg), 614969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin void *arg) { 624969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_md4(), "MD4", NULL, arg); 634969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_md5(), "MD5", NULL, arg); 644969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_sha1(), "SHA1", NULL, arg); 654969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_sha224(), "SHA224", NULL, arg); 664969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_sha256(), "SHA256", NULL, arg); 674969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_sha384(), "SHA384", NULL, arg); 684969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_sha512(), "SHA512", NULL, arg); 694969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 704969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_md4(), "md4", NULL, arg); 714969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_md5(), "md5", NULL, arg); 724969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_sha1(), "sha1", NULL, arg); 734969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_sha224(), "sha224", NULL, arg); 744969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_sha256(), "sha256", NULL, arg); 754969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_sha384(), "sha384", NULL, arg); 764969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin callback(EVP_sha512(), "sha512", NULL, arg); 774969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin} 78