streamcipher::suite_t& streamcipher::suite() { static suite_t s; #define do_cipher(name,type) \ static factoryof<streamcipher,type> type##_var; \ s[to_unicase(name)]=&type##_var; if (s.empty()) { do_cipher ("ARCFOUR", arcfour_t); do_cipher ("CHACHA20", chacha20); do_cipher ("XSYND", xsynd); } return s; }
int main(int argc, char* argv[]) { u_init_ulib(argv); U_INTERNAL_TRACE("main(%d,%p)", argc, argv) if (argc == 1) do_cipher(argv[1], U_ENCRYPT); else if (argc == 2 && memcmp(argv[1], U_CONSTANT_TO_PARAM("-d")) == 0) do_cipher(argv[2], U_DECRYPT); else { fprintf(stderr, "%s", usage); exit(1); } return 0; }
int main(int argc, char* argv[]) { u_init_ulib(argv); U_INTERNAL_TRACE("main(%d,%p)", argc, argv) if (argc == 1) do_cipher(argv[1], U_ENCODE); else if (argc == 2 && strcmp(argv[1], "-d") == 0) do_cipher(argv[2], U_DECODE); else { fprintf(stderr, "%s", usage); exit(1); } return 0; }
int sc_pkcs15_wrap_data(sc_context_t *ctx, const char *passphrase, const u8 *in, size_t in_len, u8 **out, size_t *out_len) { struct sc_pkcs15_enveloped_data envdata; EVP_CIPHER_CTX cipher_ctx; struct sc_pbkdf2_params der_info; u8 des_iv[8]; int r; memset(&envdata, 0, sizeof(envdata)); memset(&der_info, 0, sizeof(der_info)); RAND_bytes(des_iv, sizeof(des_iv)); der_info.salt_len = sizeof(der_info.salt); RAND_bytes(der_info.salt, sizeof(der_info.salt)); der_info.iterations = 32; der_info.hash_alg.algorithm = SC_ALGORITHM_SHA1; envdata.id.len = 1; envdata.ke_alg.algorithm = SC_ALGORITHM_PBKDF2; envdata.ke_alg.params = &der_info; envdata.ce_alg.algorithm = SC_ALGORITHM_3DES; envdata.ce_alg.params = des_iv; envdata.key = (u8 *) ""; r = sc_pkcs15_derive_key(ctx, &envdata.ke_alg, &envdata.ce_alg, passphrase, &cipher_ctx, 1); if (r < 0) return r; /* Now encrypt the data using the derived key */ r = do_cipher(&cipher_ctx, in, in_len, &envdata.content, &envdata.content_len); if (r < 0) return r; /* Finally, DER encode the whole mess */ r = sc_pkcs15_encode_enveloped_data(ctx, &envdata, out, out_len); free(envdata.content); return r; }
int sc_pkcs15_unwrap_data(sc_context_t *ctx, const char *passphrase, const u8 *in, size_t in_len, u8 **out, size_t *out_len) { struct sc_pkcs15_enveloped_data envdata; EVP_CIPHER_CTX cipher_ctx; int r; memset(&envdata, 0, sizeof(envdata)); r = sc_pkcs15_decode_enveloped_data(ctx, &envdata, in, in_len); if (r < 0) { sc_error(ctx, "Failed to decode EnvelopedData.\n"); return r; } /* Derive the key using the info in EnvelopedData */ r = sc_pkcs15_derive_key(ctx, &envdata.ke_alg, &envdata.ce_alg, passphrase, &cipher_ctx, 0); if (r < 0) return r; /* Now decrypt the data using the derived key */ r = do_cipher(&cipher_ctx, envdata.content, envdata.content_len, out, out_len); if (r < 0) return r; if (envdata.ce_alg.params) free(envdata.ce_alg.params); if (envdata.ke_alg.params) free(envdata.ke_alg.params); free(envdata.content); return r; }
/* EVP_DECRYPT(cStr, cKey [, [cMethod='des-ede3-cbc'] [, [cDigestMethod='md5'] [, [cInitVector='']]]]) --> cEncrypted */ int clip_EVP_DECRYPT(ClipMachine *mp) { return do_cipher(mp, 0); }
/* EVP_ENCRYPT(cStr, cKey [, [cMethod='des-ede3-cbc'] [, [cDigestMethod='md5'] [, [cInitVector='']]]]) --> cEncrypted */ int clip_EVP_ENCRYPT(ClipMachine *mp) { return do_cipher(mp, 1); }