|
Модераторы: AntonSaburov |
|
romul |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.3.2008 Репутация: 1 Всего: 1 |
Доброе время суток.
Есть проблема с обновременным получением/передачей данных за один вызов функции SCardTransmit. Есть апплет написаный мною для карточки. Есть Java клиент (опять же мой), который вполне нормально работает с карточкой в любом режиме. Принимает и получает данные. Но когда я воспользовался функцией SCardTransmit из winscard.dll, то она мне вернула "error 87". Если я вызываю функцию апплета которая только читает данные но не возвращает в буфер, все ок - 90 00. Если функцию апплета которая только возвращает данные (в буфер ничего не ложу), тоже 90 00. Как только функция апплета использует буфер и для приема и для передачи - 87 error. В апплете используются самые примитивные функции получения /отдачи данных? и к тому же они отлизаны с помощью Java клиента. На них не приходится "грешить". Единственный момент в котором может быть трабла, SCardTransmit вызывается из дельфового компонента. Но на первый взгляд реализация вызова внушает доверие. Пока даже не знаю куда копать. Может быть кто-то сталкивался с такой проблемой? Я понимаю, что вопрос на совсем по Java, но точно по Java Card-ам :) (Прошу прощенья за дубль темы. Глючил браузер) Это сообщение отредактировал(а) romul - 31.3.2008, 17:32 |
|||
|
||||
firstone |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 116 Регистрация: 25.9.2007 Где: Кровью залитая Св ятая Земля Репутация: 5 Всего: 7 |
Это не ошибка класса SCARD_ERROR.
Первое, что нужно проверить, является ли эта ошибка производной 6A87 (если конечно 87 в шестнадцатиричной системе). T.e. incorrect parameters (см. таблицу кодов ISO/IEC 7816 например здесь: http://forum.vingrad.ru/articles/topic-192...-card-iso.html) Второе, используете ли Вы какие-либо крипто функции в самом апплете при обработке APDU? Вы можете опубликовать здесь trace log посланных APDU? Если это возможно, скопируйте сюда код который работает с буфером. Это сообщение отредактировал(а) firstone - 1.4.2008, 13:50 --------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй. |
|||
|
||||
firstone |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 116 Регистрация: 25.9.2007 Где: Кровью залитая Св ятая Земля Репутация: 5 Всего: 7 |
Вот пример того, как происходит считывание из буфера и запись в него. Может будет helpful:
--------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй. |
|||
|
||||
romul |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.3.2008 Репутация: 1 Всего: 1 |
В отдельных функциях я использую криптофункции. Но в случае моего теста я упростил все до минимума.
Вот кусочек апплета
Вот trace log из клиента Java: Видно что команды нормально отрабатывают:
А вот trace log из клиента Delphi:
Казалось бы виноват Делфи компонент который рулит SCardTransmit из dll. Но ведь он и отправляет и получает данные командами 1A и 1B. Когда идет обмед данными в одну сторону. Но в случае когда обмен данными идет в обе стороны напрочь отказывается работать. Возможно я не учитываю какую-то особенность работы с карточкой или с мелкософтовской библиотечкой winscard.dll для работы PS/CS... Попытки чего-то изменить методом нацчного тыка в компоненте не привели ни к чему хорошему Вот кстати вызов функции в компоненте, несколько мной упрощенный для форума:
|
||||||||
|
|||||||||
romul |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.3.2008 Репутация: 1 Всего: 1 |
Я слишком много вывалил?
|
|||
|
||||
romul |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.3.2008 Репутация: 1 Всего: 1 |
Народ, хелп плиз! Скажите хотябы где спросить можно. Форум, контакт. Или где почитать. У меня проект стал :(
|
|||
|
||||
Kangaroo |
|
|||
AA - Aussie Animal Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 1 Всего: 104 |
Попробуй напиши firstone'y в личку. Я так понимаю, он пока один у нас эксперт в Java Card -------------------- Lost.... |
|||
|
||||
romul |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.3.2008 Репутация: 1 Всего: 1 |
Спасибо, так и сделаю. |
|||
|
||||
firstone |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 116 Регистрация: 25.9.2007 Где: Кровью залитая Св ятая Земля Репутация: 5 Всего: 7 |
Извиняюсь за поздний ответ.
Только чтo запустил Ваш апплет на карте. И все работает. Клиент я написал сам. Использовал windows PC/SC. Видимо Ваш клиент работает неправильно. К сожалению сказать где именно ошибка в клиенте невозможно за неимением егo кода. Предлагаю залогить вызовы PC/SC функций (с параметрами) и опубликовать лог здесь. Если нужен работающий PC/SC framework на .NET, я могу Вам послать. С уважением, firstone. --------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй. |
|||
|
||||
romul |
|
||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.3.2008 Репутация: 1 Всего: 1 |
Спасибо за ответ. То, что с клиентом не так это 100%, поскольку работающий клиент на Java обменивается данными на ура.
Наиболее важную часть своего клиента я в большом своем письме привел самым последним. Но чтобы не мотать туда-сюда страничку повторю и добавлю подробности: Это функция вызывающая SCardTransmit из MS-овской библиотечки winscard.dll для работы PS/CS.
Вызываю ее со следущими строками (Send мой запрос, Responce получаемый ответ):
К сообщению прикрепляю полный код клиента и компонента для работы с библиотечкой. Это сообщение отредактировал(а) romul - 7.4.2008, 15:00 |
||||
|
|||||
firstone |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 116 Регистрация: 25.9.2007 Где: Кровью залитая Св ятая Земля Репутация: 5 Всего: 7 |
Странно. У меня Ваш клиент работает:
Добавлено через 10 минут и 26 секунд Каким ридером Вы пользуетесь? --------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй. |
|||
|
||||
romul |
|
||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.3.2008 Репутация: 1 Всего: 1 |
Это хорошая новость!
А это хорошая мысль. Зря я ее отгонял так далеко от себя. Smart Card Reader ACR38T. Вроди бы китайский какой-то. Попробую другие использовать. |
||||
|
|||||
romul |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.3.2008 Репутация: 1 Всего: 1 |
Попробовал 3 разных кардридера от 2 производителя. Попробовал 2 разных карточки разных производителя. Эффект тот же.
Очень странно. |
|||
|
||||
firstone |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 116 Регистрация: 25.9.2007 Где: Кровью залитая Св ятая Земля Репутация: 5 Всего: 7 |
Попробуйте на другом компьютере.
--------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй. |
|||
|
||||
romul |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.3.2008 Репутация: 1 Всего: 1 |
Не работает на 3-х компьютерах. Эксперименты продолжаю. Наверно легче убить "сибя ап стенку", чем заставить ее заработать.
А каким ридером пользуетесь Вы? И что у вас за карточка на которой эксперимент был удачным? И на какой оси пробовали? Это сообщение отредактировал(а) romul - 8.4.2008, 11:08 |
|||
|
||||
firstone |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 116 Регистрация: 25.9.2007 Где: Кровью залитая Св ятая Земля Репутация: 5 Всего: 7 |
Да Действительно странно...
У меня Omnikey CardMan 5321 ридер. Кстати очень рекомендую заиметь такой. ОС: WinXP Карта от Athena Добавлено через 7 минут и 49 секунд Ваше приложение написано на Object Paskal для .NET? --------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй. |
|||
|
||||
romul |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.3.2008 Репутация: 1 Всего: 1 |
Клиент был написан для Turbo Delphi под Win32. Но код неспецифичен и довольно легко переносится куда угодно.
Есть еще одно предположение. Возможно дело в скомпилированном cap файле. Я использовал Eclipse Version: 3.3.1.1 + plugin IBM JCOP Tools 3.1.1.b. Может быть cap file кривой? А чем компилировали Вы? Может быть Вы можете выслать мне мылом ваш cap file? Это сообщение отредактировал(а) romul - 8.4.2008, 12:40 |
|||
|
||||
firstone |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 116 Регистрация: 25.9.2007 Где: Кровью залитая Св ятая Земля Репутация: 5 Всего: 7 |
Да. Как-то я не подумал об этом. Хорошая идея.
Вот мой CAP. Присоединённый файл ( Кол-во скачиваний: 12 ) forum.cap 3,60 Kb --------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй. |
|||
|
||||
romul |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.3.2008 Репутация: 1 Всего: 1 |
Я использую для upload JCOPTools22 cardman.exe. Он требует для upload - X.cab и возможно X.exp X.props.
При попытке upload Вашего cab файла утиль кричит "Header component corrupted". Чем Вы делаете upload? Какие файлы кроме .cab генеряться для upload-а? |
|||
|
||||
firstone |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 116 Регистрация: 25.9.2007 Где: Кровью залитая Св ятая Земля Репутация: 5 Всего: 7 |
Eclipse 3.1.2
JCOP Tools: 3.1.1.b Видимо версия не совпадает. Генерятся еще 2 файла: .exp & .props Но для загрузки они не нужны. Мой клиент спокойно грузит на карту только .cap Какой версии Ваши Java Card? --------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй. |
|||
|
||||
romul |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.3.2008 Репутация: 1 Всего: 1 |
Есть 2.X, есть 3.0. C загрузчиком пока непонятки. А есть у Вас загрузчик как отдельное приложение. Чтобы грузить не из Eclipse? Если есть можно его намылить?
|
|||
|
||||
firstone |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 116 Регистрация: 25.9.2007 Где: Кровью залитая Св ятая Земля Репутация: 5 Всего: 7 |
Послал. Пожалуйста обратите внимание на то, что я написал Вам в личку.
--------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй. |
|||
|
||||
romul |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 31.3.2008 Репутация: 1 Всего: 1 |
Когда докапываешься до ответа на вопрос, почему-то всегда стыдно, что не дошел до этого раньше.
В настройках карты можно указать режим ответа. В одном из них карта возвращает специальный код + длину данных. После этого нужно вычитать остальные данные. Но для SELECT-а этот вариант не проходит например. Причем такой метод вычитки понадобился именно для "дуплексного режима". В драйвере присутствовало 2 функции. Одна делала вычитку обычным способом, другая проверяла ответ на наличие "извращенного". Я же в своем стремлении к универсализации использовал только первую. В некоторых случаях это проходило (в зависимости от настроек карты), в некоторых нет. Посему отловить причину бага сразу не удалось. Помогла трассировка драйвера. Отдельная большая благодарность firstone за терпение в помощи решения проблемы. |
|||
|
||||
firstone |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 116 Регистрация: 25.9.2007 Где: Кровью залитая Св ятая Земля Репутация: 5 Всего: 7 |
romul, Я рад, что все разрешилось. Как видно, проблема была совсем нетривиальна и Вы все же с ней справились! Будем Вам очень рады, если вы заглянете еще раз.
--------------------
В программировании я конфуцианец. В жизни я либерал-демократ. В душе я буддист.Добавлено через 1 минуту и 9 секундА на самом деле я лентяй. |
|||
|
||||
foxsik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 15.4.2009 Репутация: нет Всего: нет |
Vsem zdrasti !
U menja takaja problemma ! Rabotaju s readerom.... pishu programmu na delphi Da vot odna stroka ne dajot spat` spokojno....... label2.caption := Bin2HexExt(pcsc.GetResponseFromCard(Hex2Bin('FF00000004D44A0100')), true, true); label2.caption := Bin2HexExt(pcsc.GetResponseFromCard(Hex2Bin('FFC000000E')), true, true); Poka k readeru ne podnesjo6 karto4ku programma visit.... :( ktonebut` znaet kak s etim barotsja ? |
|||
|
||||
neutrino |
|
|||
Gothic soul Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Дело в том, что не зная как работает класс pcsc невозможно ответить на Ваш вопрос.
Два совета: 1) Создайте отдельную тему 2) Хотя бы опишите в общих чертах как работает класс pcsc. Судя по названию это какой-то враппер для PC/SC WinAPI, приведите список его методов. 3) Когда подносят карту к ридеру (я так понимаю у вас бесконтактные ридер и карта - ISO/IEC 13334), то PC/SC WinAPI вызывает специальное событие. Было бы неплохо увидеть всю актуальную для работы с pcsc часть кода... -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
mobilka |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 29.5.2010 Репутация: нет Всего: нет |
подскажи как подключиться к этому ридеру? PCSCLink.Close; PCSCLink.Init; pcsclink.UseReaderNum:=0; pcsclink.Connect; PCSCLink : TPCSCConnector; |
|||
|
||||
neutrino |
|
|||
Gothic soul Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
mobilka, Что такое PCSCLink(TPCSCConnector)?
Я коннектился с помощью своего враппера для PCSC. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
mobilka |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 29.5.2010 Репутация: нет Всего: нет |
а что это и где взять? Добавлено через 4 минуты и 44 секунды вообщем к USB FT SCR 2000 я подключаюсь через этот компонент без проблем. а к Smart Card Reader USB Omnikey CardMan 1021 не могу |
||||
|
|||||
neutrino |
|
|||
Gothic soul Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Заметь, у тебя другая модель. У меня была 5321. Я сам этот враппер написал. Поищу дома если найду кину тебе.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
mobilka |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 29.5.2010 Репутация: нет Всего: нет |
я уже разобрался спасибо. все ридеры в системе убил и начала соединяться. но если кинешь не откажусь
|
|||
|
||||
miheevnik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 18.3.2011 Где: Москва Репутация: нет Всего: нет |
Мне тоже помогли ваши рекомендации. Спасибо за объяснения!
|
|||
|
||||
hokop |
|
||||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 8.4.2011 Где: Иркутск Репутация: нет Всего: нет |
Ты потом отпиши, все узнал? |
||||
|
|||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java Card | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |