001 /* Copyright (c) 2002 Graz University of Technology. All rights reserved. 002 * 003 * Redistribution and use in source and binary forms, with or without 004 * modification, are permitted provided that the following conditions are met: 005 * 006 * 1. Redistributions of source code must retain the above copyright notice, 007 * this list of conditions and the following disclaimer. 008 * 009 * 2. Redistributions in binary form must reproduce the above copyright notice, 010 * this list of conditions and the following disclaimer in the documentation 011 * and/or other materials provided with the distribution. 012 * 013 * 3. The end-user documentation included with the redistribution, if any, must 014 * include the following acknowledgment: 015 * 016 * "This product includes software developed by IAIK of Graz University of 017 * Technology." 018 * 019 * Alternately, this acknowledgment may appear in the software itself, if 020 * and wherever such third-party acknowledgments normally appear. 021 * 022 * 4. The names "Graz University of Technology" and "IAIK of Graz University of 023 * Technology" must not be used to endorse or promote products derived from 024 * this software without prior written permission. 025 * 026 * 5. Products derived from this software may not be called 027 * "IAIK PKCS Wrapper", nor may "IAIK" appear in their name, without prior 028 * written permission of Graz University of Technology. 029 * 030 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED 031 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 032 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 033 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE LICENSOR BE 034 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 035 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 036 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 037 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 038 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 039 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 040 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 041 * POSSIBILITY OF SUCH DAMAGE. 042 */ 043 044 package demo.pkcs.pkcs11; 045 046 import iaik.pkcs.pkcs11.Module; 047 import iaik.pkcs.pkcs11.Notify; 048 import iaik.pkcs.pkcs11.Session; 049 import iaik.pkcs.pkcs11.Slot; 050 import iaik.pkcs.pkcs11.Token; 051 import iaik.pkcs.pkcs11.wrapper.PKCS11Exception; 052 053 054 055 /** 056 * This demo program tries to set a callback Notify handler. 057 * 058 * @author <a href="mailto:Karl.Scheibelhofer@iaik.at"> Karl Scheibelhofer </a> 059 * @version 0.1 060 * @invariants 061 */ 062 public class NotifyTest implements Notify { 063 064 public static void main(String[] args) { 065 if (args.length != 1) { 066 printUsage(); 067 System.exit(1); 068 } 069 070 try { 071 072 Module pkcs11Module = Module.getInstance(args[0]); 073 pkcs11Module.initialize(null); 074 075 Slot[] slots = pkcs11Module.getSlotList(Module.SlotRequirement.TOKEN_PRESENT); 076 077 if (slots.length == 0) { 078 System.out.println("No slot with present token found!"); 079 System.exit(0); 080 } 081 082 Slot selectedSlot = slots[0]; 083 Token token = selectedSlot.getToken(); 084 085 System.out.println("################################################################################"); 086 System.out.print("trying to set Notify callback hanlder... "); 087 088 NotifyTest callback = new NotifyTest(); 089 String applicationData = "Hello Application!"; 090 Session session = 091 token.openSession(Token.SessionType.SERIAL_SESSION, Token.SessionReadWriteBehavior.RO_SESSION, 092 applicationData, callback); 093 094 System.out.println("finished"); 095 System.out.println("################################################################################"); 096 097 // FIXME, insert any code that causes a callback 098 099 session.closeSession(); 100 pkcs11Module.finalize(null); 101 102 } catch (Throwable thr) { 103 thr.printStackTrace(); 104 } 105 } 106 107 public static void printUsage() { 108 System.out.println("Usage: NotifyTest <PKCS#11 module>"); 109 System.out.println(" e.g.: NotifyTest pk2priv.dll"); 110 System.out.println("The given DLL must be in the search path of the system."); 111 } 112 113 public void notify(Session session, boolean surrender, Object application) 114 throws PKCS11Exception 115 { 116 System.out.println("we got a Notify callback !!!"); 117 // we do not throw an exception, this means return value CKR_OK 118 } 119 120 }