예제 #1
0
void setup_test_rsa_keyptrs()
    {
    /*
     * set up key pointers
     */

    assert(pub_keyring.nkeys);

    alpha_pub_keydata=ops_keyring_find_key_by_userid(&pub_keyring,
						     alpha_user_id);
    bravo_pub_keydata=ops_keyring_find_key_by_userid(&pub_keyring,
						     bravo_user_id);
    assert(alpha_pub_keydata);
    assert(bravo_pub_keydata);

    alpha_sec_keydata=ops_keyring_find_key_by_userid(&sec_keyring,
						     alpha_user_id);
    bravo_sec_keydata=ops_keyring_find_key_by_userid(&sec_keyring,
						     bravo_user_id);
    assert(alpha_sec_keydata);
    assert(bravo_sec_keydata);

    alpha_pkey=ops_get_public_key_from_data(alpha_pub_keydata);
    alpha_skey=ops_get_secret_key_from_data(alpha_sec_keydata);
    bravo_pkey=ops_get_public_key_from_data(bravo_pub_keydata);
    bravo_skey=ops_decrypt_secret_key_from_data(bravo_sec_keydata,
						bravo_passphrase);

    assert(alpha_pkey);
    assert(alpha_skey);
    assert(bravo_pkey);
    assert(bravo_skey); //not yet set because of passphrase
}
예제 #2
0
void setup_test_dsa_keyptrs()
    {
    /*
     * set up key pointers
     */

    assert(pub_keyring.nkeys);

    alphadsa_pub_keydata=ops_keyring_find_key_by_userid(&pub_keyring,
							alphadsa_user_id);
    bravodsa_pub_keydata=ops_keyring_find_key_by_userid(&pub_keyring,
							bravodsa_user_id);
    printf("%s\n", alphadsa_user_id);
    assert(alphadsa_pub_keydata);
    assert(bravodsa_pub_keydata);

    alphadsa_sec_keydata=ops_keyring_find_key_by_userid(&sec_keyring,
							alphadsa_user_id);
    bravodsa_sec_keydata=ops_keyring_find_key_by_userid(&sec_keyring,
							bravodsa_user_id);
    assert(alphadsa_sec_keydata);
    assert(bravodsa_sec_keydata);

    alphadsa_pkey=ops_get_public_key_from_data(alphadsa_pub_keydata);
    alphadsa_skey=ops_get_secret_key_from_data(alphadsa_sec_keydata);
    bravodsa_pkey=ops_get_public_key_from_data(bravodsa_pub_keydata);
    bravodsa_skey=ops_decrypt_secret_key_from_data(bravodsa_sec_keydata,
						   bravodsa_passphrase);

    assert(alphadsa_pkey);
    assert(alphadsa_skey);
    assert(bravodsa_pkey);
    assert(bravodsa_skey); 
}
예제 #3
0
ops_parse_cb_return_t
callback_cmd_get_secret_key(const ops_parser_content_t *content_,ops_parse_cb_info_t *cbinfo)
{
	ops_parser_content_union_t* content=(ops_parser_content_union_t *)&content_->content;
	const ops_secret_key_t *secret;
	ops_parser_content_t pc;

	OPS_USED(cbinfo);

	//    ops_print_packet(content_);

	switch(content_->tag)
	{
		case OPS_PARSER_CMD_GET_SECRET_KEY:
			cbinfo->cryptinfo.keydata=ops_keyring_find_key_by_id(cbinfo->cryptinfo.keyring,content->get_secret_key.pk_session_key->key_id);
			if (!cbinfo->cryptinfo.keydata || !ops_is_key_secret(cbinfo->cryptinfo.keydata))
				return 0;

			/* now get the key from the data */
			secret=ops_get_secret_key_from_data(cbinfo->cryptinfo.keydata);
			int tag_to_use = OPS_PARSER_CMD_GET_SK_PASSPHRASE ;
			int nbtries = 0 ;

			while( (!secret) && nbtries++ < 3)
			{
				if (!cbinfo->cryptinfo.passphrase)
				{
					memset(&pc,'\0',sizeof pc);
					pc.content.secret_key_passphrase.passphrase=&cbinfo->cryptinfo.passphrase;
					CB(cbinfo,tag_to_use,&pc);
					if (!cbinfo->cryptinfo.passphrase)
					{
						fprintf(stderr,"can't get passphrase\n");
						assert(0);
					}
				}
				/* then it must be encrypted */
				secret=ops_decrypt_secret_key_from_data(cbinfo->cryptinfo.keydata,cbinfo->cryptinfo.passphrase);

				free(cbinfo->cryptinfo.passphrase) ;
				cbinfo->cryptinfo.passphrase = NULL ;
				tag_to_use = OPS_PARSER_CMD_GET_SK_PASSPHRASE_PREV_WAS_BAD ;
			}

			if(!secret)
				return 0 ;

			*content->get_secret_key.secret_key=secret;
			break;

		default:
			//        return callback_general(content_,cbinfo);
			break;
	}

	return OPS_RELEASE_MEMORY;
}