< prev index next >

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11Digest.java

Print this page




 126         return digestLength;
 127     }
 128 
 129     private void fetchSession() {
 130         token.ensureValid();
 131         if (state == S_BLANK) {
 132             try {
 133                 session = token.getOpSession();
 134                 state = S_BUFFERED;
 135             } catch (PKCS11Exception e) {
 136                 throw new ProviderException("No more session available", e);
 137             }
 138         }
 139     }
 140 
 141     // see JCA spec
 142     protected void engineReset() {
 143         token.ensureValid();
 144 
 145         if (session != null) {
 146             if (state == S_INIT && token.explicitCancel == true) {

 147                 session = token.killSession(session);
 148             } else {
 149                 session = token.releaseSession(session);
 150             }
 151         }
 152         state = S_BLANK;
 153         bufOfs = 0;
 154     }
 155 
 156     // see JCA spec
 157     protected byte[] engineDigest() {
 158         try {
 159             byte[] digest = new byte[digestLength];
 160             int n = engineDigest(digest, 0, digestLength);
 161             return digest;
 162         } catch (DigestException e) {
 163             throw new ProviderException("internal error", e);
 164         }
 165     }
 166 


 247         if (key instanceof P11Key == false) {
 248             throw new InvalidKeyException("Not a P11Key: " + key);
 249         }
 250         P11Key p11Key = (P11Key)key;
 251         if (p11Key.token != token) {
 252             throw new InvalidKeyException("Not a P11Key of this provider: " +
 253                     key);
 254         }
 255 
 256         fetchSession();
 257         try {
 258             if (state == S_BUFFERED) {
 259                 token.p11.C_DigestInit(session.id(), mechanism);
 260                 state = S_INIT;
 261             }
 262 
 263             if (bufOfs != 0) {
 264                 token.p11.C_DigestUpdate(session.id(), 0, buffer, 0, bufOfs);
 265                 bufOfs = 0;
 266             }


 267             token.p11.C_DigestKey(session.id(), p11Key.keyID);



 268         } catch (PKCS11Exception e) {
 269             engineReset();
 270             throw new ProviderException("update(SecretKey) failed", e);
 271         }
 272     }
 273 
 274     // see JCA spec
 275     protected void engineUpdate(ByteBuffer byteBuffer) {
 276         int len = byteBuffer.remaining();
 277         if (len <= 0) {
 278             return;
 279         }
 280 
 281         if (byteBuffer instanceof DirectBuffer == false) {
 282             super.engineUpdate(byteBuffer);
 283             return;
 284         }
 285 
 286         fetchSession();
 287         long addr = ((DirectBuffer)byteBuffer).address();




 126         return digestLength;
 127     }
 128 
 129     private void fetchSession() {
 130         token.ensureValid();
 131         if (state == S_BLANK) {
 132             try {
 133                 session = token.getOpSession();
 134                 state = S_BUFFERED;
 135             } catch (PKCS11Exception e) {
 136                 throw new ProviderException("No more session available", e);
 137             }
 138         }
 139     }
 140 
 141     // see JCA spec
 142     protected void engineReset() {
 143         token.ensureValid();
 144 
 145         if (session != null) {
 146             if (state == S_INIT && token.explicitCancel == true
 147                     && session.hasObjects() == false) {
 148                 session = token.killSession(session);
 149             } else {
 150                 session = token.releaseSession(session);
 151             }
 152         }
 153         state = S_BLANK;
 154         bufOfs = 0;
 155     }
 156 
 157     // see JCA spec
 158     protected byte[] engineDigest() {
 159         try {
 160             byte[] digest = new byte[digestLength];
 161             int n = engineDigest(digest, 0, digestLength);
 162             return digest;
 163         } catch (DigestException e) {
 164             throw new ProviderException("internal error", e);
 165         }
 166     }
 167 


 248         if (key instanceof P11Key == false) {
 249             throw new InvalidKeyException("Not a P11Key: " + key);
 250         }
 251         P11Key p11Key = (P11Key)key;
 252         if (p11Key.token != token) {
 253             throw new InvalidKeyException("Not a P11Key of this provider: " +
 254                     key);
 255         }
 256 
 257         fetchSession();
 258         try {
 259             if (state == S_BUFFERED) {
 260                 token.p11.C_DigestInit(session.id(), mechanism);
 261                 state = S_INIT;
 262             }
 263 
 264             if (bufOfs != 0) {
 265                 token.p11.C_DigestUpdate(session.id(), 0, buffer, 0, bufOfs);
 266                 bufOfs = 0;
 267             }
 268             p11Key.incNativeKeyRef();
 269             try {
 270                 token.p11.C_DigestKey(session.id(), p11Key.keyID);
 271             } finally {
 272                 p11Key.decNativeKeyRef();
 273             }
 274         } catch (PKCS11Exception e) {
 275             engineReset();
 276             throw new ProviderException("update(SecretKey) failed", e);
 277         }
 278     }
 279 
 280     // see JCA spec
 281     protected void engineUpdate(ByteBuffer byteBuffer) {
 282         int len = byteBuffer.remaining();
 283         if (len <= 0) {
 284             return;
 285         }
 286 
 287         if (byteBuffer instanceof DirectBuffer == false) {
 288             super.engineUpdate(byteBuffer);
 289             return;
 290         }
 291 
 292         fetchSession();
 293         long addr = ((DirectBuffer)byteBuffer).address();


< prev index next >