Example #1
0
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;
}
Example #2
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_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;
}
Example #3
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;
}
Example #6
0
/*
EVP_DECRYPT(cStr, cKey [, [cMethod='des-ede3-cbc'] [, [cDigestMethod='md5'] [, [cInitVector='']]]]) --> cEncrypted
*/
int
clip_EVP_DECRYPT(ClipMachine *mp)
{
	return do_cipher(mp, 0);
}
Example #7
0
/*
EVP_ENCRYPT(cStr, cKey [, [cMethod='des-ede3-cbc'] [, [cDigestMethod='md5'] [, [cInitVector='']]]]) --> cEncrypted
*/
int
clip_EVP_ENCRYPT(ClipMachine *mp)
{
	return do_cipher(mp, 1);
}