Hello,
> Does somebody know how can I derive ks1,ks2 and ks3 shedules from password
> entered by command line:
> openssl enc -des3 -in pass.dec -out pass.enc -pass file:password.txt
To generate this input keys, IV to this key schedules function
EVP_BytesToKey() is used (example attached).
But I suggest to use PKCS5_PBKDF2_HMAC_SHA1() function.

> What's name is of cryptography library what openssl works with?
OpenSSL is crypto library itself.

Best regards,
Marek Marcola <[EMAIL PROTECTED]>
#include <string.h>

#include <openssl/evp.h>

#ifdef WIN32
typedef unsigned __int64 spc_uint64_t;
#else
typedef unsigned long long spc_uint64_t;
#endif

void spc_pbkdf2(unsigned char *pw, unsigned int pwlen, char *salt,
                 spc_uint64_t saltlen, unsigned int ic, unsigned char *dk,
                 spc_uint64_t dklen);

int main()
{
	const EVP_CIPHER *cipher=EVP_aes_256_cbc();
	const EVP_MD *dgst=EVP_sha1();

	u_char pass[256];
	char salt[256];

	u_char key[256];
	u_char iv[256];

	int i;

	printf("key_len: %d\n", cipher->key_len);
	printf(" iv_len: %d\n", cipher->iv_len);

	strcpy((char*)pass, "password");
	strcpy((char*)salt, "ATHENA.MIT.EDUraeburn");

	EVP_BytesToKey(cipher, dgst, salt, pass, strlen((char*)pass), 1, key, iv);

	printf("    key:\n         ");
	for(i=0; i<cipher->key_len; i++){
		printf("%02x", key[i]);
	}
	printf("\n");

	printf("     iv:\n         ");
	for(i=0; i<cipher->iv_len; i++){
		printf("%02x", iv[i]);
	}
	printf("\n");

	

	spc_pbkdf2(pass, strlen((char*)pass), salt, strlen(salt), 1, key, 16);
	//spc_pbkdf2(pass, strlen((char*)pass), salt, 8, 1, key, 16);

	printf("    spc:\n         ");
	for(i=0; i<16; i++){
		printf("%02x", key[i]);
	}
	printf("\n");
}

Reply via email to